…14) (#32)
## What
Adapts the **MCP Catalog Entry** in `docs/discovery.md` to [AI Catalog
PR #37](Agent-Card/ai-catalog#37) / ADR 0014,
which renames the `CatalogEntry.mediaType` member to **`type`** and
reframes its description as an open-text *type identifier* rather than a
strict IANA media type.
Changes (docs-only, `docs/discovery.md`):
- Renames the `mediaType` member to `type` in the Catalog Entry table.
- Updates the member description to mirror ADR 0014: "An identifier
specifying the type of the referenced artifact."
- Updates the `type` key in all four example catalog entries.
- Updates the client-validation prose (`type` set to … / "ignore entries
with unrecognized types").
## Rebase / conflict resolution
This branch was rebased onto the current `main` to resolve a merge
conflict in `docs/discovery.md`. The conflict came from changes that
landed on `main` after this branch was cut:
- **#31** — `urn:air:` identifier adaptation (ADR 0015). **Preserved.**
- **#39 / #14** — removal of the `displayName` field from MCP Catalog
entries. **Preserved** — this PR does **not** reintroduce `displayName`;
it only renames the field `mediaType` → `type` on top of main's current
structure.
The resolved diff is exactly the `mediaType` → `type` rename (table row,
four examples, validation prose) applied on top of main — nothing from
either side's intent was dropped.
## Scope decision — value deliberately kept as
`application/mcp-server-card+json`
This PR renames the **field only**. The value stays
`application/mcp-server-card+json` and is **not** changed to ADR 0014's
known-type `application/mcp-server+json`. Rationale:
- ADR 0014 explicitly makes `type` an **open-text** format ("any string
value is accepted"); `application/mcp-server+json` is a non-binding
"known type," and ecosystem types are "governed externally" (i.e., by
MCP). So keeping a more precise MCP-governed value is compatible with
ADR 0014, not a contradiction.
- This repo **deliberately** chose `application/mcp-server-card+json`
over `application/mcp-server+json` (issue #9 / PR #18) to avoid
colliding with the MCP Registry's `server.json` concept — a distinction
the README documents in "Relationship to the MCP Registry."
**Flag for maintainers:** AI Catalog's ADR 0014 known-types list uses
`application/mcp-server+json` for MCP. Whether this repo should also
adopt that value (reversing issue #9 / PR #18 and re-introducing the
`server.json` naming collision) is a separate, more consequential
decision and is intentionally **out of scope** here. Happy to file a
cross-repo issue if maintainers want to pursue it.
## What is intentionally NOT changed
- The **Server Card document's own HTTP media type** (`Accept` /
`Content-Type` negotiation, the reserved `/server-card` location prose).
That is a genuine IANA media type, not the renamed catalog field, and
ADR 0014 does not touch it.
- `schema.ts` / `schema.json` — the Server Card schema has no
`mediaType`/`type` member; this convention lives only in the discovery
doc.
## Verification
- [x] Rebased onto latest `main`; merge conflict in `docs/discovery.md`
resolved, preserving both #31 (`urn:air:`) and #39 (`displayName`
removal). PR now reports `MERGEABLE`.
- [x] `npm run check` — `schema.json` up to date, `tsc --noEmit` clean
- [x] `npm run validate` — all 7 examples pass
- [x] `npm run format:check` — `docs/discovery.md` clean, including
markdown table re-alignment
- [x] Verified zero `mediaType` field tokens remain (`git grep
mediaType` → no matches)
- [x] Verified the Server Card HTTP media-type prose was left intact (no
over-reach)
- [x] **CI green** — `build`, `Analyze (actions)`, and `CodeQL` all pass
on the rebased head
([run](https://github.com/modelcontextprotocol/experimental-ext-server-card/actions/runs/29278815978))
- [x] Independent fresh-eyes subagent review: **APPROVE** (rename
complete & correct; no `displayName` reintroduced; value unchanged;
Server Card media-type prose intact; no stray `mediaType`; no conflict
markers)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: tadasant <bob@tadasant.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Summary
MCP is moving to stateless-by-default via SEP-2575 ("Make MCP Stateless", modelcontextprotocol/modelcontextprotocol#2575), which removes the mandatory initialization handshake and replaces it with stateless alternatives (per-request protocol version, server/discover, per-request client capabilities, messages/listen).
Since the initialization handshake is going away, the Server Card docs/schema should stop describing themselves in terms of it. This PR is purely wording / schema-comment cleanup — it reword the handshake-dependent phrasing and changes no schema fields or semantics.
Changes
A fresh grep for initiali, handshake, and lifecycle across the tracked repo confirms no remaining handshake-dependent references.
Verification
Proof — npm run validate
Proof — generated schema.json diff
"supportedProtocolVersions": { - "description": "MCP protocol versions actively supported by this remote endpoint. Allows\nclients to negotiate a compatible protocol version before initialization.", + "description": "MCP protocol versions actively supported by this remote endpoint. Allows\nclients to select a compatible protocol version before connecting.",Notes for reviewers
🤖 Generated with Claude Code