docs: add server.json as a first-class catalog type (application/mcp-server+json)#54
Draft
tadasant wants to merge 1 commit into
Draft
docs: add server.json as a first-class catalog type (application/mcp-server+json)#54tadasant wants to merge 1 commit into
tadasant wants to merge 1 commit into
Conversation
Contributor
|
Preview: https://ai-catalog.io/pr/54/ This comment is updated automatically while the pull request preview is available. |
tadasant
pushed a commit
that referenced
this pull request
Jul 2, 2026
…ift fields A remote MCP server serves exactly one Server Card, so a catalog never lists multiple versions of it — the multi-version carve-out doesn't apply on the Server Card side. Drop it and treat `version` like the other drift-prone fields (stays in the card, omitted from the entry). The multi-version distinction remains on the server.json side (PR #54), where a registry genuinely can serve multiple versions.
ceab926 to
e9a979f
Compare
tadasant
pushed a commit
that referenced
this pull request
Jul 2, 2026
…ift fields A remote MCP server serves exactly one Server Card, so a catalog never lists multiple versions of it — the multi-version carve-out doesn't apply on the Server Card side. Drop it and treat `version` like the other drift-prone fields (stays in the card, omitted from the entry). The multi-version distinction remains on the server.json side (PR #54), where a registry genuinely can serve multiple versions.
b48e87d to
cbf3046
Compare
cbf3046 to
71f1481
Compare
…p-server+json) Stacked on #53. Reintroduces the MCP Registry server.json mapping that #53 removed, as a first-class cataloged artifact type with its own known media type application/mcp-server+json (registered in ADR 0014 and the spec's known-types list). Adds the 'Mapping to MCP Registry server.json' appendix: conceptual mapping table (same drift-avoidance omissions as the Server Card side, but retaining the multi-version version carve-out since a registry can serve multiple versions), an entry example and an 'MCP Registry as AI Catalog' example using real registry API URLs, and a 'Relationship to MCP Server Cards' two-types section. Purely additive over #53 (no shared-prose edits).
71f1481 to
c6d72e4
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #53
This PR is stacked on top of #53 (
docs/update-server-json-mapping). Its base branch isdocs/update-server-json-mapping, notmain— review/merge #53 first. The diff against its base is just theserver.json-as-first-class change below.What this does
Reintroduces the MCP Registry
server.jsonmapping that #53 removed, but as a first-class cataloged artifact type rather than an experimental footnote.Key changes
New known media type
application/mcp-server+jsonfor an MCP Registryserver.jsondocument, registered in both the spec's known-types list and ADR 0014 (under "Integrated Ecosystem & Third-Party Types").New appendix
Mapping to MCP Registry server.jsondescribing the first-class mapping: a Catalog Entry whoseurlpoints to theserver.jsondocument withtypeapplication/mcp-server+json. Includes a conceptual mapping table, an entry example, an "MCP Registry as AI Catalog" example, and a "Relationship to MCP Server Cards" section.Two-types framing. The appendix is explicit that the MCP ecosystem has two distinct server artifacts, each with its own
type:application/mcp-server-card+json(static discovery / connection details)server.json→application/mcp-server+json(installable package descriptor)A catalog entry references whichever fits; a domain MAY list both.
Examples use real MCP Registry URLs. Every
server.jsonexampleurluses the actual registry API formhttps://registry.modelcontextprotocol.io/v0/servers/{url-encoded-name}/versions/{version}(the/in the reverse-DNS name encoded as%2F), with verified-real servers/versions (com.pulsemcp/remote-filesystem0.1.5,com.pulsemcp.servers/pulse-fetch0.2.14). The appendix also explains how a registry name maps to theurn:air:{publisher}:{namespace}:{name}identifier per ADR 0015.Omitted duplicative
version/descriptionfrom the example entries. Mirrors the same change in docs: refactor MCP mapping appendix to Server Cards + align with MCP spec #53's Server Card examples: these restate values theserver.jsondocument already carries (the drift argument that keepsdisplayNameout of an entry). The example entries dropversion/description; the conceptual mapping table keeps documenting them but itsdescription/versionrows justify the omission, parallel to thetitlerow. Forserver.json, the entry's version-pinnedurlalready identifies which version it points at.Applied the same drift-avoidance treatment to
repository.server.jsoncarries its ownrepository, so mapping it into entrymetadata.repositoryduplicated a drift-prone value. The example already demonstrated the redundancy — the repo URL also appears intrustManifest.provenance[].sourceId— so themetadata.repositoryblock is dropped from the example and the table row now justifies the omission (source/provenance links belong in the Trust Manifest). This mirrors the Server Cardrepositoryfix inherited from docs: refactor MCP mapping appendix to Server Cards + align with MCP spec #53.Dropped
updatedAtfrom the entry example (registry-timestamp drift). The single-entry example carried"updatedAt": "2026-03-15T10:00:00Z", but the MCP Registry response already exposes its ownpublishedAt/updatedAtunder_meta(verified live:registry.modelcontextprotocol.ioreturns_meta["io.modelcontextprotocol.registry/official"].updatedAt), so the entry field duplicated a value the source carries — and the hardcoded date had already drifted from the real one. Removed it from the example (bringing it to structural parity with docs: refactor MCP mapping appendix to Server Cards + align with MCP spec #53's Server Card entry example, which carries noupdatedAt) and extended the_metamapping-table row to record that the registry timestamps stay in the artifact.versionkeeps its multi-version carve-out here (deliberate divergence from the Server Card side). docs: refactor MCP mapping appendix to Server Cards + align with MCP spec #53 dropped the multi-version carve-out from the Server Cardversionrow because a remote MCP server serves exactly one card. On the Registryserver.jsonside that case is real — a registry genuinely serves multiple versions of a name — so this appendix'sversionrow retains the "omitted unless the catalog lists multiple versions of one identifier" language, plus the note that the version-pinnedurlalready identifies which version an entry points at.Note on the naming distinction (issue #9 / PR #18)
ext-server-card issue #9 / PR #18 deliberately chose
application/mcp-server-card+jsonfor the Server Card so it would not collide with the Registryserver.jsonconcept. This PR is the other half of that decision: it allocates the unqualifiedapplication/mcp-server+jsonto the Registryserver.jsondocument itself. The two types are complementary, not competing.Verification
python tools/build_spec.py), exit 0,dist/index.htmlproduced.application/mcp-server+jsonappears in the spec known-types list and ADR 0014 (verified the HTML renders it; 11 occurrences in built output across the new appendix + lists).#mapping-to-mcp-serversmatches the generated headingid(verified in built HTML).idaudit shows the only unresolved anchors (metadata-extensibility,resolving-an-artifacts-display-name,version-handling) are pre-existing onmain; none are introduced or referenced by this change.type: "application/mcp-server+json"withurn:air:identifiers.server.jsonexample entry carriesversion/description/metadata.repository/updatedAt(grep confirmed the appendix's only remainingupdatedAtis the explanatory_metatable row, not an example value); version remains recoverable from the version-pinnedurl, the repo fromtrustManifest.provenance, and the timestamps from the registry_meta; the mapping table keeps documentingversion/description/repository/_meta, each with its omission rationale. All 19 JSON examples still parse.curlofregistry.modelcontextprotocol.io/v0/servers/com.pulsemcp%2Fremote-filesystem/versions/0.1.5returns_meta["io.modelcontextprotocol.registry/official"]withpublishedAt/updatedAt(2026-06-26…), confirming the removed entryupdatedAtwas both duplicative and stale against the source.com.pulsemcp%2Fremote-filesystem/versions/0.1.5,com.pulsemcp.servers%2Fpulse-fetch/versions/0.2.14) return HTTP 200 fromregistry.modelcontextprotocol.io, with responseserver.name/version/repositorymatching the example values; the prose's/v0/servers/{name}/versions/{version}+server/_metaenvelope description was confirmed against that response.Status
Draft — do not merge. Stacked on #53; awaiting Tadas's review and rewrite.