@mcpdesc/validator 0.10.1 → 0.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -8,6 +8,31 @@ Dates for published releases are the UTC publication dates recorded by npm.
8
8
 
9
9
  ## [Unreleased]
10
10
 
11
+ ## [0.11.1] - 2026-09-08
12
+
13
+ ### Fixed
14
+
15
+ - Added terminal-target provenance to RC.4 component reference resolution and
16
+ enabled RC.4 through the public resolver. This is an approved additive
17
+ tooling-metadata correction; schemas, conformance results, diagnostics, and
18
+ frozen fixtures are unchanged.
19
+
20
+ ## [0.11.0] - 2026-09-08
21
+
22
+ ### Added
23
+
24
+ - Added the immutable `0.8.0-rc.4` selector, including protocol-independent
25
+ root info metadata behavior and its frozen conformance fixture corpus.
26
+
27
+ ### Changed
28
+
29
+ - Narrowed active runtime support to RC.3 and RC.4, deprecated RC.3, and removed
30
+ RC.2 from current registries, declarations, generated bundles, and package
31
+ contents while retaining its immutable source and fixtures in Git.
32
+ - Kept component reference resolution on RC.3 because RC.4's snapshot resolver
33
+ does not expose the terminal-target provenance required by the public result
34
+ contract.
35
+
11
36
  ## [0.10.1] - 2026-09-07
12
37
 
13
38
  ### Changed
@@ -139,7 +164,9 @@ Dates for published releases are the UTC publication dates recorded by npm.
139
164
  - Added synchronous structural and semantic validation for parsed JavaScript values with deterministic diagnostics and exact selector dispatch.
140
165
  - Added ESM browser support, TypeScript declarations, embedded schema provenance, frozen fixtures, and package-content checks.
141
166
 
142
- [Unreleased]: https://github.com/mcpdesc/core/compare/validator-v0.10.1...HEAD
167
+ [Unreleased]: https://github.com/mcpdesc/core/compare/validator-v0.11.1...HEAD
168
+ [0.11.1]: https://github.com/mcpdesc/core/compare/validator-v0.11.0...validator-v0.11.1
169
+ [0.11.0]: https://github.com/mcpdesc/core/compare/validator-v0.10.1...validator-v0.11.0
143
170
  [0.10.1]: https://github.com/mcpdesc/core/compare/validator-v0.10.0...validator-v0.10.1
144
171
  [0.10.0]: https://github.com/mcpdesc/core/compare/validator-v0.9.0...validator-v0.10.0
145
172
  [0.9.0]: https://github.com/mcpdesc/core/compare/validator-v0.8.0...validator-v0.9.0
package/README.md CHANGED
@@ -25,7 +25,7 @@ npm install @mcpdesc/validator
25
25
  import { validateMcpDescription } from '@mcpdesc/validator';
26
26
 
27
27
  const result = validateMcpDescription(parsedDocument, {
28
- specification: '0.8.0-rc.2',
28
+ specification: '0.8.0-rc.4',
29
29
  });
30
30
 
31
31
  for (const diagnostic of result.diagnostics) {
@@ -48,15 +48,18 @@ The package supports these immutable selectors, newest first:
48
48
 
49
49
  | Selector | First validator release | Embedded schema SHA-256 |
50
50
  |---|---|---|
51
- | `0.8.0-rc.3` | `0.10.0` | `a9c3ff77ba37c72362909f538f6e957d055e6fdb372f8b3d529e3651af3fecf4` |
52
- | `0.8.0-rc.2` (deprecated) | `0.9.0` | `40f6775dde052224114e91d6aa484d826eecf56b77f7ac87b4cf707ffbcb6ce8` |
51
+ | `0.8.0-rc.4` | `0.11.0` | `d38e54db859813b63be2a5c91dde91250035f18bcb5910208cf71fa6875d6eef` |
52
+ | `0.8.0-rc.3` (deprecated) | `0.10.0` | `a9c3ff77ba37c72362909f538f6e957d055e6fdb372f8b3d529e3651af3fecf4` |
53
53
 
54
54
  The validator package embeds the schema and executable behavior for each
55
- selector. RC.2 remains available for migration compatibility; new integrations
56
- should select RC.3. Earlier selectors remain available by pinning an older
55
+ selector. RC.3 remains available for migration compatibility; new integrations
56
+ should select RC.4. Earlier selectors remain available by pinning an older
57
57
  immutable validator release. npm integrity and trusted-publishing provenance identify released
58
58
  package bytes; specification repository tags and commits are informational.
59
59
 
60
+ Component reference resolution is available for RC.3 and RC.4 with
61
+ terminal-target provenance for each authored reference.
62
+
60
63
  ## Usage
61
64
 
62
65
  The `options` argument and exact `specification` selector are required. The unqualified selector `0.8.0` is intentionally unsupported because draft and release-candidate iterations are immutable compatibility contracts.
@@ -127,20 +130,19 @@ Structural paths start with AJV's instance path. A `required` error appends its
127
130
 
128
131
  ## Support metadata
129
132
 
130
- The package exports frozen `supportedSpecifications`, `deprecatedSpecifications`, `supportedProtocolVersions`, and `specificationProvenance` values. Provenance records include the snapshot tag, recorded schema URI, and embedded schema SHA-256 digest. Public validation dispatches through a registry keyed by exact specification selectors. The active selector set is `0.8.0-rc.2` and `0.8.0-rc.3`; `deprecatedSpecifications` contains RC.2. The protocol-version export is the deduplicated union supported by active snapshots.
133
+ The package exports frozen `supportedSpecifications`, `deprecatedSpecifications`, `supportedProtocolVersions`, and `specificationProvenance` values. Provenance records include the snapshot tag, recorded schema URI, and embedded schema SHA-256 digest. Public validation dispatches through a registry keyed by exact specification selectors. The active selector set is `0.8.0-rc.3` and `0.8.0-rc.4`; `deprecatedSpecifications` contains RC.3. The protocol-version export is the deduplicated union supported by active snapshots.
131
134
 
132
- RC.2 and RC.3 also export the frozen `mcpExtensionCatalogue` and
133
- `mcpExtensionMaturity` classifier. The catalogue pins its authoritative source,
134
- effective date, and official or experimental identifier assignments. Catalogue
135
- recognition establishes authority and maturity only; it does not validate
136
- extension-specific settings.
135
+ The package also exports the frozen `mcpExtensionCatalogue` and
136
+ `mcpExtensionMaturity` classifier pinned by the RC.3 snapshot. The catalogue
137
+ records its authoritative source, effective date, and official or experimental
138
+ identifier assignments. Catalogue recognition establishes authority and
139
+ maturity only; it does not validate extension-specific settings.
137
140
 
138
141
  npm package SemVer tracks implementation releases independently from specification snapshot identity. Adding a later snapshot is additive: it must use a sibling implementation and selector rather than changing an existing snapshot's schema, semantics, metadata, fixtures, or results.
139
142
 
140
- The RC.2 and RC.3 component resolvers report authored and terminal target
141
- paths for successful substitutions. The additive tooling corrections do not
142
- change snapshot schemas, validation results, diagnostics, or fixtures and are
143
- recorded in the integrity manifest.
143
+ The RC.3 and RC.4 component resolvers report authored and terminal target paths
144
+ for successful substitutions. Additive tooling corrections that provide this
145
+ metadata are recorded explicitly in the integrity manifest.
144
146
 
145
147
  The runtime bundles its schema, performs no network fetches for external schema references, and imports no Node.js built-ins. Unresolved external Tool-schema references produce incomplete-validation warnings and are preserved. All three ESM entry points support Node.js 20 or later and browser bundlers.
146
148
 
package/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export type McpDescriptionSpecification = '0.8.0-rc.2' | '0.8.0-rc.3';
1
+ export type McpDescriptionSpecification = '0.8.0-rc.3' | '0.8.0-rc.4';
2
2
 
3
3
  export type SupportedProtocolVersion =
4
4
  | '2024-11-05'
@@ -38,7 +38,7 @@ export interface McpDescriptionComponentResolutionResult {
38
38
  }
39
39
 
40
40
  export interface ResolveMcpDescriptionComponentReferencesOptions {
41
- readonly specification: '0.8.0-rc.2' | '0.8.0-rc.3';
41
+ readonly specification: '0.8.0-rc.3' | '0.8.0-rc.4';
42
42
  }
43
43
 
44
44
  export type McpExtensionMaturity = 'official' | 'experimental' | 'uncatalogued';
@@ -56,16 +56,16 @@ export interface McpExtensionCatalogue {
56
56
  }
57
57
 
58
58
  export interface SpecificationProvenance {
59
- readonly '0.8.0-rc.2': {
60
- readonly snapshotTag: 'v0.8.0-rc.2';
61
- readonly schemaUri: 'https://mcpdesc.org/schema/mcp-description/0.8.0-rc.2.json';
62
- readonly schemaSha256: '40f6775dde052224114e91d6aa484d826eecf56b77f7ac87b4cf707ffbcb6ce8';
63
- };
64
59
  readonly '0.8.0-rc.3': {
65
60
  readonly snapshotTag: 'v0.8.0-rc.3';
66
61
  readonly schemaUri: 'https://mcpdesc.org/schema/mcp-description/0.8.0-rc.3.json';
67
62
  readonly schemaSha256: 'a9c3ff77ba37c72362909f538f6e957d055e6fdb372f8b3d529e3651af3fecf4';
68
63
  };
64
+ readonly '0.8.0-rc.4': {
65
+ readonly snapshotTag: 'v0.8.0-rc.4';
66
+ readonly schemaUri: 'https://mcpdesc.org/schema/mcp-description/0.8.0-rc.4.json';
67
+ readonly schemaSha256: 'd38e54db859813b63be2a5c91dde91250035f18bcb5910208cf71fa6875d6eef';
68
+ };
69
69
  }
70
70
 
71
71
  export interface ResolveMcpDescriptionSpecificationOptions {
@@ -89,8 +89,8 @@ export type McpDescriptionSpecificationResolution =
89
89
  | ResolvedMcpDescriptionSpecification
90
90
  | UnresolvedMcpDescriptionSpecification;
91
91
 
92
- export declare const supportedSpecifications: readonly ['0.8.0-rc.2', '0.8.0-rc.3'];
93
- export declare const deprecatedSpecifications: readonly ['0.8.0-rc.2'];
92
+ export declare const supportedSpecifications: readonly ['0.8.0-rc.3', '0.8.0-rc.4'];
93
+ export declare const deprecatedSpecifications: readonly ['0.8.0-rc.3'];
94
94
 
95
95
  export declare const supportedProtocolVersions: readonly [
96
96
  '2024-11-05',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mcpdesc/validator",
3
- "version": "0.10.1",
3
+ "version": "0.11.1",
4
4
  "description": "Structural and semantic validation for MCP Description snapshots",
5
5
  "type": "module",
6
6
  "types": "./index.d.ts",
@@ -31,8 +31,8 @@
31
31
  },
32
32
  "files": [
33
33
  "src/index.js",
34
- "src/snapshots/0.8.0-rc.2",
35
34
  "src/snapshots/0.8.0-rc.3",
35
+ "src/snapshots/0.8.0-rc.4",
36
36
  "standalone.js",
37
37
  "index.d.ts",
38
38
  "CHANGELOG.md",
package/src/index.js CHANGED
@@ -1,31 +1,31 @@
1
- import * as rc2 from './snapshots/0.8.0-rc.2/index.js';
2
1
  import * as rc3 from './snapshots/0.8.0-rc.3/index.js';
3
- import { resolveComponentReferences as resolveRc2ComponentReferences } from './snapshots/0.8.0-rc.2/semantic.js';
2
+ import * as rc4 from './snapshots/0.8.0-rc.4/index.js';
4
3
  import { resolveComponentReferences as resolveRc3ComponentReferences } from './snapshots/0.8.0-rc.3/semantic.js';
4
+ import { resolveComponentReferences as resolveRc4ComponentReferences } from './snapshots/0.8.0-rc.4/semantic.js';
5
5
  import {
6
6
  mcpExtensionCatalogue,
7
7
  mcpExtensionMaturity
8
- } from './snapshots/0.8.0-rc.2/semantic.js';
8
+ } from './snapshots/0.8.0-rc.3/semantic.js';
9
9
 
10
10
  export { mcpExtensionCatalogue, mcpExtensionMaturity };
11
11
 
12
12
  const snapshots = Object.freeze({
13
- [rc2.specification]: rc2,
14
- [rc3.specification]: rc3
13
+ [rc3.specification]: rc3,
14
+ [rc4.specification]: rc4
15
15
  });
16
16
 
17
17
  const componentResolvers = Object.freeze({
18
- '0.8.0-rc.2': resolveRc2ComponentReferences,
19
- '0.8.0-rc.3': resolveRc3ComponentReferences
18
+ '0.8.0-rc.3': resolveRc3ComponentReferences,
19
+ '0.8.0-rc.4': resolveRc4ComponentReferences
20
20
  });
21
21
 
22
22
  const schemaUris = Object.freeze({
23
- '0.8.0-rc.2': 'https://mcpdesc.org/schema/mcp-description/0.8.0-rc.2.json',
24
- '0.8.0-rc.3': 'https://mcpdesc.org/schema/mcp-description/0.8.0-rc.3.json'
23
+ '0.8.0-rc.3': 'https://mcpdesc.org/schema/mcp-description/0.8.0-rc.3.json',
24
+ '0.8.0-rc.4': 'https://mcpdesc.org/schema/mcp-description/0.8.0-rc.4.json'
25
25
  });
26
26
 
27
27
  export const supportedSpecifications = Object.freeze(Object.keys(snapshots));
28
- export const deprecatedSpecifications = Object.freeze(['0.8.0-rc.2']);
28
+ export const deprecatedSpecifications = Object.freeze(['0.8.0-rc.3']);
29
29
  export const supportedProtocolVersions = Object.freeze([
30
30
  ...new Set(Object.values(snapshots).flatMap((snapshot) => snapshot.supportedProtocolVersions))
31
31
  ]);
@@ -691,11 +691,6 @@ function validateVersionSpecificSemantics(document, rel, diagnostics) {
691
691
  }
692
692
  }
693
693
 
694
- checkMinimumVersion('info', ['info'], document.info ?? {}, 'title', '2025-06-18', rootScope);
695
- checkMinimumVersion('info', ['info'], document.info ?? {}, 'description', '2025-11-25', rootScope);
696
- checkMinimumVersion('info', ['info'], document.info ?? {}, 'icons', '2025-11-25', rootScope);
697
- checkMinimumVersion('info', ['info'], document.info ?? {}, 'websiteUrl', '2025-11-25', rootScope);
698
-
699
694
  (document.transports ?? []).forEach((transport, index) => {
700
695
  const scope = effectiveScope(document, transport, rootScope);
701
696
  if (transport.type === 'streamable-http') {
@@ -3,9 +3,9 @@ import {
3
3
  validateMcpdesc08Document
4
4
  } from './semantic.js';
5
5
 
6
- export const specification = '0.8.0-rc.2';
7
- export const snapshotTag = 'v0.8.0-rc.2';
8
- export const schemaSha256 = '40f6775dde052224114e91d6aa484d826eecf56b77f7ac87b4cf707ffbcb6ce8';
6
+ export const specification = '0.8.0-rc.4';
7
+ export const snapshotTag = 'v0.8.0-rc.4';
8
+ export const schemaSha256 = 'd38e54db859813b63be2a5c91dde91250035f18bcb5910208cf71fa6875d6eef';
9
9
  export { supportedProtocolVersions };
10
10
 
11
11
  export function validate(document) {
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://mcpdesc.org/schema/mcp-description/0.8.0-rc.2.json",
4
- "title": "MCP Description",
5
- "description": "MCP Description 0.8.0 Release Candidate 2 (v0.8.0-rc.2; prerelease).",
3
+ "$id": "https://mcpdesc.org/schema/mcp-description/0.8.0-rc.4.json",
4
+ "title": "MCP Server Description (mcpdesc format)",
5
+ "description": "A static, curated description of what an MCP server offers. Uses MCP-native terminology, an OpenAPI-aligned info and security structure, and support for multiple transports, protocol revisions, and specification extensions. Supports MCP protocol revisions 2024-11-05, 2025-03-26, 2025-06-18, 2025-11-25, and 2026-07-28.",
6
6
  "type": "object",
7
7
  "required": [
8
8
  "mcpdesc",
@@ -1,4 +1,4 @@
1
- // Validate the immutable 0.8.0-rc.2 snapshot using only snapshot-local artifacts.
1
+ // Validate the immutable 0.8.0-rc.4 snapshot using only snapshot-local artifacts.
2
2
 
3
3
  import Ajv from 'ajv';
4
4
  import Ajv2020 from 'ajv/dist/2020.js';