Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,9 @@ repository.
unresolved-reference diagnostics.
- [x] Narrow current runtime and package support to RC.2 and RC.3, deprecate
RC.2, and retain retired snapshot artifacts as repository history.
- [x] Adopt RC.4 across validation and supported core operations, advance the
active transition window to RC.3 and RC.4, and record component reference
resolution as unsupported until snapshot provenance is available.
- Add normalization or comparison operations only where multiple consumers
demonstrate the same requirement.

Expand Down
6 changes: 3 additions & 3 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 18 additions & 1 deletion packages/core/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,22 @@ All notable changes to `@mcpdesc/core` are documented in this file.

## [Unreleased]

## [0.10.0] - 2026-09-08

### Added

- Added MCP Description `0.8.0-rc.4` support for projection, merge, declaration
selection, and migration from 0.7.0, including protocol-independent root info
metadata behavior.

### Changed

- Narrowed current core support to RC.3 and RC.4, deprecated RC.3, removed RC.2
from the current API, and pinned `@mcpdesc/validator` `0.11.0`.
- Marked RC.4 component reference resolution intentionally unsupported because
the snapshot resolver does not expose the terminal-target provenance required
by the core operation contract.

## [0.9.1] - 2026-09-07

### Changed
Expand Down Expand Up @@ -188,7 +204,8 @@ tarball verification. The corresponding Git tag has not yet been created.
- Apache-2.0 licensing, provenance, contribution guidance, and repository
instructions for coding assistants.

[Unreleased]: https://github.com/mcpdesc/core/compare/v0.9.1...HEAD
[Unreleased]: https://github.com/mcpdesc/core/compare/v0.10.0...HEAD
[0.10.0]: https://github.com/mcpdesc/core/compare/v0.9.1...v0.10.0
[0.9.1]: https://github.com/mcpdesc/core/compare/v0.9.0...v0.9.1
[0.9.0]: https://github.com/mcpdesc/core/compare/v0.8.1...v0.9.0
[0.8.1]: https://github.com/mcpdesc/core/compare/v0.8.0...v0.8.1
Expand Down
60 changes: 31 additions & 29 deletions packages/core/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ See [CHANGELOG.md](CHANGELOG.md) for package release history.

```ts
import {
migrateMcpDescription07ToRc2,
migrateMcpDescription07ToRc4,
mergeEffectiveProtocolViews,
projectEffectiveProtocolView,
serializeMcpDescriptionMigrationReport,
Expand All @@ -28,7 +28,7 @@ if (!parsed.ok) {
}

const result = projectEffectiveProtocolView(document, {
specification: '0.8.0-rc.2',
specification: '0.8.0-rc.4',
protocolVersion: '2026-07-28',
});

Expand All @@ -39,19 +39,19 @@ if (result.ok) {
}

const merged = mergeEffectiveProtocolViews(protocolViews, {
specification: '0.8.0-rc.2',
specification: '0.8.0-rc.4',
});

const subset = selectMcpDescriptionDeclarations(document, {
specification: '0.8.0-rc.3',
specification: '0.8.0-rc.4',
selections: {
tools: ['search'],
resources: ['docs://index'],
},
});

const migrated = migrateMcpDescription07ToRc2(validatedLegacyDocument, {
specification: '0.8.0-rc.2',
const migrated = migrateMcpDescription07ToRc4(validatedLegacyDocument, {
specification: '0.8.0-rc.4',
defaultProtocolVersion: '2026-07-28',
sourceValidated: true,
});
Expand All @@ -67,50 +67,52 @@ if (resolved.ok) {
console.log(serializeMcpDescriptionMigrationReport(migrated.report));
```

Semantic operations require an exact immutable selector and support `0.8.0-rc.2`
and `0.8.0-rc.3`. RC.2 remains operational but is deprecated; new integrations
should select RC.3. The operations validate their source and result with
Semantic operations require an exact immutable selector and support `0.8.0-rc.3`
and `0.8.0-rc.4`. RC.3 remains operational but is deprecated; new integrations
should select RC.4. The operations validate their source and result with
`@mcpdesc/validator`. Declaration selection uses MCP Description identities:
tool and prompt `name`, resource `uri`, and resource template `uriTemplate`. It
preserves all selected protocol-scoped variants and omits empty declaration
collections.

| Operation | RC.2 | RC.3 |
| ---------------------------------- | --------------------- | --------- |
| Effective Protocol View projection | Supported, deprecated | Supported |
| Effective Protocol View merge | Supported, deprecated | Supported |
| Declaration selection | Supported, deprecated | Supported |
| Migration from 0.7.0 | Supported, deprecated | Supported |
| Component reference resolution | Supported, deprecated | Supported |
| Operation | RC.3 | RC.4 |
| ---------------------------------- | --------------------- | -------------------------------------- |
| Effective Protocol View projection | Supported, deprecated | Supported |
| Effective Protocol View merge | Supported, deprecated | Supported |
| Declaration selection | Supported, deprecated | Supported |
| Migration from 0.7.0 | Supported, deprecated | Supported |
| Component reference resolution | Supported, deprecated | Unsupported: snapshot omits provenance |

| Specification selector | First validator release | First core release |
| ---------------------- | ----------------------- | ------------------ |
| `0.8.0-rc.4` | `0.11.0` | `0.10.0` |
| `0.8.0-rc.3` | `0.10.0` | `0.9.0` |
| `0.8.0-rc.2` | `0.9.0` | `0.8.0` |

Consumers that still require Draft 4 or RC.1 can pin an older immutable core and
validator release. Those runtime snapshots are retained in Git for integrity
history but are not part of the current package API or tarballs.
Consumers that still require Draft 4, RC.1, or RC.2 can pin an older immutable
core and validator release. Those runtime snapshots are retained in Git for
integrity history but are not part of the current package API or tarballs.

RC.2 and RC.3 projection preserve pre-standard server extension maps in every
RC.3 and RC.4 projection preserve pre-standard server extension maps in every
applicable Effective Protocol View. `mergeEffectiveProtocolViews` combines
compatible views, retains semantically equivalent declarations across scopes,
and rejects conflicting views or unscoped metadata without mutating inputs.

Component reference resolution supports RC.2 and RC.3. It validates before
resolving, returns a deep-cloned document with root component registries
retained, and reports deterministic provenance from each authored reference path
to its terminal component path. Intermediate chain hops are not exposed. The
operation uses the resolver exported through `@mcpdesc/validator/standalone`;
this keeps the snapshot-owned traversal authoritative while avoiding the runtime
AJV entry and a dependency cycle.
Component reference resolution supports RC.3. It validates before resolving,
returns a deep-cloned document with root component registries retained, and
reports deterministic provenance from each authored reference path to its
terminal component path. Intermediate chain hops are not exposed. The operation
uses the resolver exported through `@mcpdesc/validator/standalone`; this keeps
the snapshot-owned traversal authoritative while avoiding the runtime AJV entry
and a dependency cycle. RC.4 is intentionally unsupported because its snapshot
resolver does not expose the terminal-target provenance required by this
operation's public contract.

Migration accepts a caller-validated MCP Description 0.7.0 value and validates
the result against the exact target snapshot. It moves the protocol revision to
root scope, wraps server capabilities, omits optional empty arrays, and converts
inline legacy security schemes to deterministic named definitions and
requirements. Generated names and deduplication are reported as warnings for
author review. RC.2 and RC.3 callers may opt into `defaultProtocolVersion` when
author review. RC.3 and RC.4 callers may opt into `defaultProtocolVersion` when
the source omits `info.protocolVersion`; the source value always takes
precedence, and no built-in default is applied. Every migration result includes
a stable, JSON-compatible report that distinguishes success, success with
Expand Down
4 changes: 2 additions & 2 deletions packages/core/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@mcpdesc/core",
"version": "0.9.1",
"version": "0.10.0",
"description": "Pure semantic operations for MCP Description documents",
"type": "module",
"license": "Apache-2.0",
Expand Down Expand Up @@ -51,7 +51,7 @@
"typecheck": "tsc --build --pretty false"
},
"dependencies": {
"@mcpdesc/validator": "0.10.1",
"@mcpdesc/validator": "0.11.0",
"jsonc-parser": "3.3.1",
"yaml": "2.9.0"
}
Expand Down
6 changes: 3 additions & 3 deletions packages/core/scripts/check-browser-bundle.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ const entries = [
path: '../src/index.ts',
allowsValidator: true,
requiredExports: [
'migrateMcpDescription07ToRc2',
'migrateMcpDescription07ToRc3',
'migrateMcpDescription07ToRc4',
'serializeMcpDescriptionMigrationReport',
],
},
Expand Down Expand Up @@ -111,7 +111,7 @@ try {
const fixture = JSON.parse(
readFileSync(
new URL(
'../../validator/test/snapshots/0.8.0-rc.2/fixtures/expected-valid/reusable-components.json',
'../../validator/test/snapshots/0.8.0-rc.3/fixtures/expected-valid/reusable-components.json',
import.meta.url,
),
'utf8',
Expand All @@ -121,7 +121,7 @@ try {
root.resolveMcpDescriptionComponentReferences,
components.resolveMcpDescriptionComponentReferences,
]) {
const result = operation(fixture, { specification: '0.8.0-rc.2' });
const result = operation(fixture, { specification: '0.8.0-rc.3' });
if (!result.ok || result.provenance.length === 0) {
throw new Error('Component resolution failed under strict CSP');
}
Expand Down
Loading
Loading