API / Auth / MCP Hard

MCP Server Card: how agents discover your MCP server

What an MCP Server Card is, why agents need MCP server auto-discovery, a minimal example, right vs wrong, mistakes, and how to verify.

Updated:

What it is

An MCP Server Card is a JSON manifest at /.well-known/mcp/server-card.json describing your MCP server: name, version, transport, capabilities. MCP (Model Context Protocol) is an open protocol for connecting AI agents to tools and data. The card is the server’s “sign” — agents find it automatically.

Why it matters for AI agents

Without discovery, every MCP integration is manual: a developer hardcodes the URL and tools. That doesn’t scale. The Server Card enables federated tool discovery: an agent reads the card by domain and immediately sees the available tools/resources/prompts, the protocol version, and auth requirements. Especially useful for SaaS, DevTools, and corporate knowledge bases built for agents.

Minimal working example

{
  "serverInfo": { "name": "My Service MCP", "version": "1.0.0" },
  "transport": { "type": "http", "endpoint": "https://api.example.com/mcp" },
  "capabilities": { "tools": true, "resources": false, "prompts": false }
}

For an authenticated server add an authentication block (oauth2/api-key) — see the OAuth Protected Resource guide.

Right vs wrong

RightWrong
Served at /.well-known/mcp/server-card.json, application/jsonAn arbitrary path
Has serverInfo.name + serverInfo.versionMissing required fields
Has transport.type + transport.endpointNo transport — the agent can’t connect
Has a capabilities objectNo capabilities — unclear what the server does

Common mistakes

  • Invalid JSON — the card is discarded.
  • No transport.endpoint — discovery is useless.
  • The endpoint isn’t a working MCP — the agent connects and fails.
  • No CORS (Access-Control-Allow-Origin) — browser clients can’t read it.

How to verify

The scanner tries three paths in order: /.well-known/mcp/server-card.json, /.well-known/mcp/server-cards.json, /.well-known/mcp.json — and checks the JSON plus required fields (serverInfo.name/version, transport, capabilities). Manually:

curl -s https://example.com/.well-known/mcp/server-card.json | jq .

Sources