Skip to content

MCP Catalog mediaType (application/mcp-server+json) diverges from AI Catalog's application/mcp-server-card+json #9

@tadasant

Description

@tadasant

🤖 Drafted by Claude Code (an AI coding agent) on behalf of @tadasant. The substance was reviewed by a human before filing.

Summary

docs/discovery.md mandates that every MCP Catalog entry set mediaType to application/mcp-server+json, and states that Server Cards themselves use that media type. The AI Catalog spec — which discovery.md explicitly cites as the standard MCP Catalog entries are a subset of — consistently uses application/mcp-server-card+json (with -card).

Evidence

MCP side — discovery.md uses application/mcp-server+json (no -card):

Catalog Entry table (discovery.md#L52-L59):

| Member        | Type   | Required | Description                                                                      |
| :------------ | :----- | :------- | :------------------------------------------------------------------------------- |
| `identifier`  | string | Yes      | A URN identifying this server (e.g., `urn:mcp:server:com.example/weather`)       |
| `displayName` | string | Yes      | A human-readable name for the server                                             |
| `mediaType`   | string | Yes      | The media type of the referenced artifact. MUST be `application/mcp-server+json` |
| `url`         | string | Yes      | URL where the full Server Card can be retrieved                                  |

And the "MCP Server Cards" section (discovery.md#L135-L137):

An **MCP Server Card** is a JSON document that describes a single MCP server — its
identity, capabilities, and connection details. Server Cards use the media type
`application/mcp-server+json`.

AI Catalog side — uses application/mcp-server-card+json (with -card):

The registered media-type values list (ai-catalog.md#L204-L210):

  - `application/ai-catalog+json` — a nested AI Catalog
  - `application/a2a-agent-card+json` — an A2A Agent Card
  - `application/mcp-server-card+json` — an MCP Server Card

…and every MCP example uses the same string, e.g. (ai-catalog.md#L124-L129):

    {
      "identifier": "urn:example:mcp:weather",
      "displayName": "Weather Service",
      "mediaType": "application/mcp-server-card+json",
      "url": "https://api.example.com/.well-known/mcp/server-card.json"
    },

Why it matters

discovery.md's headline promise is that MCP Catalog entries are a drop-in subset of AI Catalog (discovery.md#L20-L23 and #L161-L162):

The MCP Catalog format is a minimal, MCP-scoped subset of the
[AI Catalog](https://github.com/Agent-Card/ai-catalog) specification. This alignment
ensures that MCP Catalog entries can be used as-is within a full AI Catalog document…
2. MCP Catalog entries can be included directly in an AI Catalog document without
   modification

But AI Catalog consumers route on mediaType without parsing the artifact — its design goal #2, "Media Type Identification" (ai-catalog.md#L65-L67):

2. **Media Type Identification**: Each catalog entry MUST declare its
   artifact type using a media type, enabling clients to select,
   filter, and route entries without parsing artifact content.

An entry tagged application/mcp-server+json will not be recognized by a client expecting application/mcp-server-card+json — so the "without modification" claim does not actually hold against the current AI Catalog text. This is the single field the subset-compatibility story depends on most.

Two related sub-points:

  1. No media type is formally registered on the MCP side. SEP-2127 registers the .well-known URI suffix mcp-server-card, but does not register a content media type. discovery.md is currently the only place in the MCP ecosystem that defines one — and it disagrees with the AI Catalog, which is the consumer.

  2. -card vs no-card also hints at a shape question. In schema.ts#L12-L26, the slim discovery document is ServerCard, while Server is the superset that adds locally-runnable packages (the server.json shape):

    * The companion {@link Server} shape is a strict superset that adds local
    * package metadata for use cases like the MCP Registry's `server.json`.

    A type literally named application/mcp-server+json reads like the Server superset, whereas application/mcp-server-card+json reads like ServerCard. We should pin down which shape a catalog url resolves to and tag it accordingly.

Proposed resolution

Settle one canonical media-type string and use it in both specs — either change discovery.md to application/mcp-server-card+json to match the AI Catalog, or align the AI Catalog to application/mcp-server+json. Whichever wins, document whether the catalog url points at the ServerCard or Server shape, and consider registering the media type alongside the SEP.

cc the Server Card WG — this likely wants a quick confirmation against the Server Card WG discussion (#2563) to decide the canonical direction.

Metadata

Metadata

Labels

sep-2127-blockersMust be resolved before SEP-2127 can be ratified/advanced

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions