CiteStat/Wiki/MCP Server Card — /.well-known/ai-catalog.json

MCP Server Card — /.well-known/ai-catalog.json

AI Search & GEO

TL;DR

An MCP Server Card is a small JSON file that tells an MCP client (Claude, an IDE, an agent) where your remote MCP server is and which protocol versions it speaks — before it connects. SEP-2127, final since October 2026, puts the card behind an AI Catalog at /.well-known/ai-catalog.json. The card lists no tools: the client asks the server for those after it connects.

Explain Simply

A building has a directory board in the lobby. The board does not list everything each office does; it says which floor the office is on and which door to use. You go there and ask what they can do for you.

The two files (SEP-2127 + AI Catalog 1.0):

GET /.well-known/ai-catalog.json
Content-Type: application/ai-catalog+json

{"specVersion": "1.0",
 "entries": [
  {"identifier": "urn:air:example.com:mcp:weather",
   "type": "application/mcp-server-card+json",
   "url": "https://example.com/mcp/server-card"}
 ]}

GET https://example.com/mcp/server-card
Accept: application/mcp-server-card+json

{"$schema": "https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json",
 "name": "com.example/weather",
 "version": "1.0.0",
 "description": "Weather forecasts for any city.",
 "remotes": [{"type": "streamable-http", "url": "https://example.com/mcp"}]}

The rules that matter: - Domain discovery goes through the AI Catalog: specVersion and an entries array; an MCP entry has type application/mcp-server-card+json, an identifier, and exactly one of url (the card is elsewhere — any host) or data (the card inline). - The card needs $schema (exactly the /v1/ server-card schema URL), name in namespace/name form with one slash, version (a version, not a range such as ^1.2.0) and description (1-100 characters). - remotes lists the endpoints: type streamable-http or sse, and a url. A card without remotes is valid but tells the client nothing about where to connect. - No tools, resources or prompts: they can differ per user and session, so the client gets them from tools/list after connecting. - The reserved default location for a card is <your MCP URL>/server-card, e.g. https://example.com/mcp/server-card.

Not the final format: /.well-known/mcp.json (SEP-1649, closed) and /.well-known/mcp/server-card.json (an earlier SEP-2127 draft, often with a serverInfo object and a tools list) are pre-final. A client that follows SEP-2127 reads only the AI Catalog.

⚡Why It Matters

Today a user has to copy an MCP URL into each client by hand. With a catalog and a card, a client can be pointed at your domain and set itself up, and registries can index your server. On 24 October 2026 CiteStat checked 7 sites: github.com passed (catalog → card on api.githubcopilot.com); developers.cloudflare.com had the right catalog, but its card description is 355 characters (the limit is 100); blog.cloudflare.com and isitagentready.com used the pre-final path; vercel.com has a catalog with no MCP card. A site without a remote MCP server does not need a card — that is why a missing card is low severity.

🔍How CiteStat Checks

CiteStat fetches /.well-known/ai-catalog.json, picks the entries of type application/mcp-server-card+json, and reads up to 5 cards (inline, or fetched from the entry's url — only public addresses). It passes when one card is valid against the v1 schema and lists at least one remote. A valid card with no remotes, a catalog with no MCP entry, or a JSON file only at /.well-known/mcp/server-card.json or /.well-known/mcp.json is low. A catalog without specVersion/entries or a card that breaks the schema is medium. An HTML page at the path counts as no file.

CiteStat Score Impact

One of the 9 core checks on the Agent Readiness card (score = core checks passed / 9 × 10). It does not change the headline SEO score.

Fix Difficulty

Editor: Hard | Developer: Easy | AI Agent: Easy