Pack of Cards

Five cards. One map.

Machines find an agent or a server through cards — small files they read. There are several, they overlap, and they ask the same things in different words. Every one of these specs lives in public git, so we read every version and drew them as one map.

First, the one that is not a card

MCP Registry server.json is the MCP Registry entry — how a server is published to a registry, rather than a card a server serves at its own door. It is not on the map, and it is the piece FAF writes today:

faf cards --target registry
  • 32,237 latest-version server entries in the official registry, counted page by page from the live API on 2026-09-15T16:34Z · source
  • The registry repo has 7,251 stars and 36 releases (latest v1.8.1, 2026-08-06), checked 2026-09-15 · source
  • AI Catalog names 'an MCP Registry server.json' as an artifact whose own version a consumer may read (line added 2026-07-23, commit 2b5afb9f263f7a7252bcac0a1ad3b61a6fdea599) · source

modelcontextprotocol/registry · first in git 2025-07-02

Then the cards

Five, in the order the map draws them. No ranking: distance on the map means different, not better.

  • A2A Agent Card
  • MCP Server Card
  • AI Catalog
  • ARD
  • .fafa

The map

West to east, one line per card. The dashed line is the centre: the choices most cards share. A line's distance from it is how many of its choices no other card makes. Stations are spaced by order, not by calendar. Ticks link to the spec at that commit.

  • A2A Agent Card
  • MCP Server Card
  • AI Catalog
  • ARD
  • .fafa
▲ Protocol-bound▼ Envelopecentre05-21202506-0906-3007-3001-21202601-3003-1203-2303-2604-0804-3005-1105-1805-1905-2806-0806-2006-2506-2606-3007-2007-3008-0208-1208-1508-2608-2709-12alone until 2026-01-21: no other card to compare withA2AA2AMCP Server CardMCP Server CardAI CatalogAI CatalogARDARD.fafa.fafaA2A Agent Card · 2025-05-21 · v0.2.0 Baseline: first v0.2.x tag (its GitHub Release entry has no notes). AgentCard defined in specification/json/a2a.json and docs/specification.md §5. No other card yet, so no centre to measure fromA2A Agent Card · 2025-06-09 · v0.2.2 extension changed. Release notes: 'Add protocol support for extensions (#716)' (70f1e2b), which added AgentCapabilities.extensions. Same release: 'spec: Add an optional iconUrl field to the AgentCard (#687)'. v0.2.1 ('Add a new boolean for supporting authenticated extended cards', #618) changed no tracked value. No other card yet, so no centre to measure fromA2A Agent Card · 2025-06-30 · v0.2.5 versioning and required_fields changed. Release notes: BREAKING 'spec: Add a required protocol version to the agent card. (#802)' (90fa642). v0.2.3 (gRPC annotation typo fixes) and v0.2.4 ('feat: Add support for multiple transport announcement in AgentCard') changed no tracked value. No other card yet, so no centre to measure fromA2A Agent Card · 2025-07-30 · v0.3.0 discovery and trust changed. Release notes: BREAKING 'Change Well-Known URI for Agent Card hosting from `agent.json` to `agent-card.json` (#841)' (0858ddb); 'Add `signatures` to the `AgentCard` (#917)' (ef4a305). v0.2.6 ('Type fix and doc clarification', gRPC json names) changed no tracked value. No other card yet, so no centre to measure fromA2A Agent Card · 2026-03-12 · v1.0.0 identity location, versioning and required_fields changed; trust gained a canonicalization rule. Release notes: 'spec: Large refactor of specification to separate application protocol definition from mapping to transports' (b078419: added supported_interfaces, deprecated top-level url/preferred_transport/additional_interfaces); 'spec: Remove deprecated fields from a2a.proto for v1.0 release (#1301)' (60f83c3: removed them, made supported_interfaces REQUIRED); 'spec: Provide ability for SDKs to be backwards compatible (#1401)' (227e249: moved the protocol version into AgentInterface). Observed in the spec text: §14 IANA Considerations and JCS canonicalization for signing are new (neither occurs at v0.3.0). Distance from centre: 6 of 8 choicesA2A Agent Card · 2026-05-28 · v1.0.1 Latest release; no tracked value changed. The AgentCard, AgentCapabilities and AgentCardSignature messages are identical to v1.0.0. Release notes: 'spec: prefer application/a2a+json in HTTP binding (#1753)' (7ff1004), which moves the REST binding (including the extended card response) to application/a2a+json SHOULD; the well-known card still has no stated media type. Distance from centre: 5 of 8 choicesMCP Server Card · 2026-01-21 · Initial draft (serverInfo shape) First public version of SEP-2127 (commit 'SEP-2127: MCP Server Cards - HTTP Server Discovery via .well-known'; Type: Standards Track). Baseline. The card copies the initialization result (serverInfo, protocolVersion, capabilities, transport) and can list primitives or mark them "dynamic". Distance from centre: 6 of 8 choicesMCP Server Card · 2026-01-30 · Rev 1: server.json shape 'Community feedback iteration (rev 1) on SEP-1649 (MCP Server Cards) (#2152)'. The card is rebuilt on the MCP Registry server.json shape: reverse-DNS `name`, top-level `title`/`version`/`description`, `remotes`, `packages`. serverInfo, protocolVersion and transport are gone. The path is renamed, and the AI Card relationship section is added. Changed: naming, identity, discovery, versioning, required_fields. Distance from centre: 6 of 8 choicesMCP Server Card · 2026-03-23 · description required; endpoints simplified 'Align Server Card with server.json and simplify endpoints'. `description` becomes required and `capabilities` optional (required_fields changed). The MCP-resource endpoint (`mcp://server-card.json`) and the registry endpoint are removed, leaving `.well-known` as the only endpoint. The versioning value also includes an earlier change folded in here to stay within 8 checkpoints: 3a61af5 (2026-02-01, 'Prettier', the end of the 'Rev on server.json' series) moved `packages` out of the card into a separate server.json superset. Primitives were removed on 2026-03-02 (308c652), which changed no tracked dimension. Distance from centre: 6 of 8 choicesMCP Server Card · 2026-03-26 · Flat /.well-known/mcp-server-card 'sep: use flat mcp-server-card well-known suffix'. The path changes from `/.well-known/mcp/server-card` to `/.well-known/mcp-server-card`, with `/{server-name}` sub-paths for hosts that serve several servers. The IANA suffix to register becomes `mcp-server-card`. Changed: discovery. Distance from centre: 6 of 8 choicesMCP Server Card · 2026-05-28 · Extension repo: card media type + MCP Catalog Merge of #3 'Add MCP Catalog discovery specification'. The extension repo was set up on 2026-04-27 (7a3ff5d), and its schema.ts copied the SEP's card with no tracked-dimension change. docs/discovery.md now names a card media type, `application/mcp-server+json` (type changed), and adds a domain-level MCP Catalog at `/.well-known/mcp/catalog.json`. The SEP branch still said Content-Type application/json on this date. Distance from centre: 5 of 8 choicesExtension repoMCP Server Card · 2026-06-08 · /server-card via catalog; mcp-server-card+json Merges on the same day: #18 'align Catalog mediaType with AI Catalog spec' (media type becomes `application/mcp-server-card+json`, closes #9); #19 (primitives removed from discovery.md); #22 'Server Cards: recommend `/server-card` over `.well-known`' (resolves #12: a card can live at any unreserved URI, `GET <streamable-http-url>/server-card` is reserved, and the catalog is the entry point; issue #11, about the slash vs dash well-known spelling, was closed by hand 25 seconds later); #24 (DoS section); #25 'require Server Card to be consistent with runtime behavior'. Changed: type, discovery, trust. On the same day the SEP was rewritten onto the Extensions Track (4590aa4, extension identifier `io.modelcontextprotocol/server-card`) and handed the wire format to this repo. That rewrite reached the SEP branch via #2893 on 2026-06-26. Distance from centre: 5 of 8 choicesMCP Server Card · 2026-07-20 · AI Catalog discovery 'Use AI Catalog for Server Card discovery (#42)'. The MCP Catalog (`/.well-known/mcp/catalog.json`) is replaced by the AI Catalog at `/.well-known/ai-catalog.json`. An entry either links to a card (`url`) or embeds it (`data`). Catalog identifiers take the form `urn:air:{publisher}:{namespace}:{name}`. Changed: discovery. Extension-repo changes since the last checkpoint that moved no card dimension: #28 (2026-06-18, card-only: Server/packages types removed, $schema pinned to server-card.schema.json), #31 (2026-06-19, `urn:air:` catalog identifiers), #37 (handshake references dropped), #39 (2026-07-13, catalog `displayName` dropped because the card's `title` is the source of truth), #32 (2026-07-13, catalog `mediaType` renamed to `type`). The SEP was updated the same day to match (608046a). Distance from centre: 4 of 8 choicesAI Catalog discoveryMCP Server Card · 2026-08-12 · Latest (SEP-pinned snapshot 526201bb) Latest state. The most recent extension-repo commit is 'docs: add Server Card roadmap priorities (#47)'. Since the last checkpoint, only #46 (2026-07-24, ETag revalidation) touched discovery.md, and no tracked dimension changed. SEP-2127's latest commit, 5c8483d (2026-08-24), pins this snapshot as the contract under review (SEP L85) and sets 'Status: Final' (SEP L3). PR #2127 is still open with the 'in-review' label (checked 2026-09-15). Distance from centre: 4 of 8 choicesAI Catalog · 2026-04-08 · #27 first spec on main Earliest version of specification/ai-catalog.md on main: PR #27 'AI Catalog Specification proposal' merged 2026-04-08 00:13 UTC. The file was first committed 2026-03-31 on the ai-catalog-spec branch as specification/draft-ai-card.md (0271c148) and renamed the same day (3e414775). This version already has the IANA Considerations section (media type + link relation registrations). Baseline. Distance from centre: 7 of 8 choicesAI Catalog · 2026-04-30 · #33 inline→data, well-known registration PR #33 'spec: Updates based on discussions during last meeting' merged: the entry content member `inline` was renamed `data`, top-level `collections` was removed, a Metadata Extensibility section (reverse-DNS key convention) and a Version Handling section were added, and an IANA Well-Known URI registration for `ai-catalog.json` was added. Distance from centre: 7 of 8 choicesAI Catalog · 2026-06-25 · #37 type + #36 urn:air Two same-day merges. PR #37 (18:04 UTC) 'Spec: Update mediaType to type for catalogEntry and add known types' (ADR-0014) renamed the entry's `mediaType` to open-text `type` with RECOMMENDED known types, and removed `mediaType` from Attestations. PR #36 (21:30 UTC) 'spec: adopt `urn:air:` naming standard for AI artifacts (ADR 0015)'. Ref is the #36 merge, the first main commit containing both. Distance from centre: 0 of 8 choices#37 type + #36 urn:airAI Catalog · 2026-06-26 · #39 displayName optional (prose) PR #39 'spec: make Catalog Entry displayName optional (not required) (ADR 0016)' merged. Branch commit 0798bcc was authored 2026-06-08; ADR-0016 is dated 2026-06-18. It moved `displayName` to the OPTIONAL members, removed it from the Level 1 minimum and added a display-name resolution order. It did not change the CDDL. Distance from centre: 0 of 8 choicesAI Catalog · 2026-06-30 · #56 CDDL displayName optional PR #56 'fix(spec): make displayName optional in CatalogEntry CDDL (align with ADR-0016)' merged (author Wolfe-Jam). One-line change, `displayName: text,` to `? displayName: text,`, so the normative CDDL now agrees with the prose and Level 1. Distance from centre: 0 of 8 choicesAI Catalog · 2026-07-30 · #77 extensions map PR #77 'Resolve #58: Add ADR-0017 and migrate to namespace extensions map' merged. `metadata` (catalog, entry, Trust Manifest) is replaced by `extensions`, a map whose keys are extension namespaces (URL or reverse-DNS). ADR-0017 records that a JSON-LD-style `@context` proposal (Issue #58) was not adopted. PR #60 (entry-field authoritative-source parity for description/version), merged minutes earlier, changed no dimension. Distance from centre: 1 of 8 choices#77 extensions mapAI Catalog · 2026-08-02 · #47 substantive trust manifest PR #47 'feat(spec): Trust Manifest threat modeling review - suggested updates.' merged. It carries commit 58597c3 'require substantive trust manifest' (authored 2026-06-21; ADR-0020 is dated 2026-06-21). A Trust Manifest, when present, MUST hold at least one substantive member. A signed manifest MUST carry `subject` + `issuedAt`. There is now a JWS algorithm allowlist, trust anchoring, and an optional top-level catalog `signature` (detached JWS). The trust vocabulary value is unchanged; the rules behind it changed. Distance from centre: 1 of 8 choicesAI Catalog · 2026-08-27 · latest (#100) Latest state on main (HEAD for this file as of 2026-09-15). Since #47: #93 (2026-08-12) and #99 (2026-08-20) added Agent Plugin known entry types (`application/agent-plugins+zip`, `+gzip`); #100 'Extract mapping appendixes into standalone docs' moved the mapping appendixes out of the file. No dimension value changed after #47. Distance from centre: 3 of 8 choicesARD · 2026-05-19 · v0.4.2 (Agent Finder) Earliest spec version: 9519b49 'Add initial version (v0.4.2) of Agent finder spec' (spec/agentfinder.md). Baseline for every dimension. Distance from centre: 1 of 8 choicesARD · 2026-06-20 · v0.9 (urn:air) 8fff974 'spec: rename URN namespace identifier from <ai> to <air> to satisfy NID length requirements (>2 characters).' Identity changes urn:ai -> urn:air. No other dimension changed between v0.4.2 and this commit (file renamed spec/agentfinder.md -> spec/ard.md on 2026-06-12; v0.5 on 2026-05-29; v0.9 on 2026-06-16). Distance from centre: 1 of 8 choicesARD · 2026-08-26 · v0.91 PR #81 (publish-v0.91) merged as aa3e598: a305a52 'spec: publish v0.91 — promote the draft, single well-known path'; 49c0c4d 'conformance: validate the ARD entry model, resolve ard.json' (also reconciled ard.cddl); c21ac6a 'schemas: drop the projection concept, ArdEntry not ardEntry'. Discovery, encoding, extension, trust and versioning change; ard-entry.schema.json becomes the authoritative schema. Distance from centre: 4 of 8 choicesv0.91ARD · 2026-09-12 · latest (v0.91) Latest main (b76f235). Since v0.91 only b76db39 (author affiliation, merged 2026-09-12 via PR #82), 56e1325 and 596e72c (conformance tooling and an example) landed. No dimension changed. Distance from centre: 4 of 8 choices.fafa · 2026-05-11 · v0.1 draft (earliest public) Earliest public .fafa spec text: v0.1 draft added to the public About repo Wolfe-Jam/faf-agent-public in 'feat: Claude-Code-quality About Repo — real docs, no source'. Baseline. (ref is a faf-agent-public SHA; the canonical repo Wolfe-Jam/faf had no AGENT-FORMAT.md yet.) Distance from centre: 4 of 8 choices.fafa · 2026-05-18 · v1.0 stable (canonical repo) 'feat: add AGENT-FORMAT.md (FAFa v1.0 spec for IANA registration)': first copy in the canonical repo, v1.0 Stable. Discovery moves from silent to explicitly out of scope (not specified → none). Also, outside the dimensions: §15 adds the standard filename `agent.fafa`, §16 inlines the RFC 6838 template (incl. optional parameter `version`), and the rule that implementations MUST validate agent.id against known schemes is gone. Media type still '(proposed)'. Distance from centre: 4 of 8 choices.fafa · 2026-06-26 · IANA registration (per the IANA record) IANA registered application/vnd.fafa+yaml on 2026-06-26. Added at assembly: the spec text kept saying "proposed" until 2026-08-15 (faf@190c338); the registration itself is the IANA fact. Distance from centre: 5 of 8 choicesIANA registration.fafa · 2026-08-15 · v1.0 IANA-registered + DOI (latest) Two commits the same day. 01565967c8fc3a74d1b199770fb797583f620ec5 'fix: Update stale IANA registration status in AGENT-FORMAT.md' flips type from '(proposed)'/'Planned' to 'Registered 2026-06-26 (vendor tree)' (de-facto → iana-registered). 190c3380847c022da3e13a28af57c4dc68b3e02c 'docs: three IANA types + complete paper cohort' adds only the paper DOI (no dimension change). ref = 190c338 = current main (the latest state). The same day, faf-agent-public de8550f ('docs: add Agents paper citation and sync AGENT-FORMAT') synced its copy to be byte-identical. Distance from centre: 5 of 8 choicesInterchange · 2026-01-21 A2A ↔ MCP Server Card now share encoding: jsonInterchange · 2026-04-08 A2A ↔ AI Catalog now share encoding: json MCP Server Card ↔ AI Catalog now share encoding: jsonInterchange · 2026-05-11 A2A ↔ .fafa now share naming: name AI Catalog ↔ .fafa now share extension: metadata-object now share type: de-factoInterchange · 2026-05-19 A2A ↔ ARD now share encoding: json MCP Server Card ↔ ARD now share encoding: json AI Catalog ↔ ARD now share discovery: /.well-known/ai-catalog.json now share encoding: json now share extension: metadata-object now share naming: displayName now share trust: trust-manifest+jws now share versioning: specVersion ARD ↔ .fafa now share extension: metadata-objectInterchange · 2026-05-28 MCP Server Card ↔ AI Catalog now share type: de-facto MCP Server Card ↔ .fafa now share type: de-factoInterchange · 2026-06-25 AI Catalog ↔ ARD now share identity: urn:airInterchange · 2026-06-26 MCP Server Card ↔ .fafa stop sharing type: de-facto AI Catalog ↔ .fafa stop sharing type: de-factoInterchange · 2026-07-20 MCP Server Card ↔ AI Catalog now share discovery: /.well-known/ai-catalog.json MCP Server Card ↔ ARD now share discovery: /.well-known/ai-catalog.jsonInterchange · 2026-07-30 AI Catalog ↔ ARD stop sharing extension: metadata-object AI Catalog ↔ .fafa stop sharing extension: metadata-objectInterchange · 2026-08-26 A2A ↔ ARD stop sharing encoding: json MCP Server Card ↔ ARD stop sharing discovery: /.well-known/ai-catalog.json stop sharing encoding: json AI Catalog ↔ ARD stop sharing discovery: /.well-known/ai-catalog.json stop sharing encoding: json stop sharing trust: trust-manifest+jws stop sharing versioning: specVersion ARD ↔ .fafa stop sharing extension: metadata-object
Positions as of 2026-09-12 (table)
CardDistance (of 8)Choices only it makesRequired fields
A2A Agent Card5identity, discovery, extension, trust, versioning8
MCP Server Card4naming, identity, extension, versioning4
AI Catalog3extension, trust, versioning3
ARD4discovery, encoding, extension, trust4
.fafa6identity, type, encoding, extension, trust, versioning4
How the map is drawn
  • Eight choices every card makes: naming, identity, discovery, type (media type, and whether it is registered), encoding, extension, trust, versioning.
  • Quoted from the specs. Each value is taken from the card's spec at a commit: 30 spec versions, 269 quotes, each checked against the line it cites. Every tick links to the spec at that commit.
  • Centre. On each date, the value most cards share for each choice.
  • Distance. How many of a card's eight choices no other card makes. Leaving a choice open ("none", "not specified") does not count as a choice.
  • A card can move without changing. Distance depends on the other cards: when one spec changes, what counts as shared changes for every card. On 2026-08-26 AI Catalog moved because ARD changed.
  • Above or below. Protocol ↔ Envelope: cards defined by one protocol (A2A, MCP Server Card) sit above; protocol-neutral envelopes (AI Catalog, ARD, .fafa) sit below. Strict ↔ Loose: each card's required-field count against the median of the cards present.
  • Distance means different, not wrong. .fafa sits furthest out partly because it is the only card with an IANA-registered media type, and the only one written in YAML.
  • The choice list is a judgement. A different list would draw a different map. The list and every quote sit behind the map, so anyone can check it or redraw it.

30 spec versions · 269 quotes, each checked against the line it cites.

The eight choices

Every card picks a way to name itself, to identify what it describes, to be found, to declare its type, to encode, to extend, to carry trust, and to version. Where they agree is the centre of the map; where only one card picks a value, that is its distance. Open a cell for the words the spec uses.

Cardnamingidentitydiscoverytypeencodingextensiontrustversioning
A2A Agent Card v1.0.1
name
string name = 1 [(google.api.field_behavior) = REQUIRED];

Unchanged from v1.0.0.

the line it cites every version
url
The URL where this interface is available. Must be a valid absolute HTTPS URL in production.

Unchanged: endpoint in REQUIRED `supportedInterfaces[].url` (L339). Changed nearby: optional AgentInterface.tenant is now described as "An opaque string used for routing requests to a specific agent or tenant when multiple agents are served behind a single A2A endpoint" (L344-L345); the protocol "does not define its format or semantics" (L349).

the line it cites every version
/.well-known/agent-card.json
Accessing `https://{server_domain}/.well-known/agent-card.json`

§14.3 template unchanged (L3328, L3337). IANA's well-known URI registry lists `agent-card.json` as permanent (checked 2026-09-15).

the line it cites every version
none · none
The resource at this URI MUST return an AgentCard object as defined in Section 4.4.1 of the A2A specification.

Still no media type for the card at the well-known URI. Changed here: the REST binding now says "application/a2a+json **SHOULD** be used for requests and responses" (L2750), which covers `GET /extendedAgentCard`; the JSON-RPC binding keeps `application/json` (L2236). `application/a2a+json` is still not in IANA's application registry (checked 2026-09-15).

the line it cites every version
json
A JSON metadata document published by an A2A Server, describing its identity, capabilities, skills, service endpoint, and authentication requirements.

Unchanged: proto is normative; JSON uses camelCase (§5.5, L1204).

the line it cites every version
capabilities.extensions
A list of protocol extensions supported by the agent.

`repeated AgentExtension extensions = 3;` (L417). Unchanged.

the line it cites every version
jws-signature
Agent Cards **MAY** be digitally signed using JSON Web Signature (JWS)

Unchanged: JCS (RFC 8785) canonicalization before signing (L2008); `signatures` optional (proto L395).

the line it cites every version
supportedInterfaces[].protocolVersion
The version of the A2A protocol this interface exposes.

REQUIRED (L354). Unchanged. Appendix A.2.1 still mentions an AgentCard `protocolVersions` field (L3509, L3517).

the line it cites every version
MCP Server Card Latest (SEP-pinned snapshot 526201bb)
title (optional)
Optional human-readable title or display name for the MCP server.

`title?: string` (L81). Clients read `title` from the card, not the catalog entry (docs/discovery.md L54-L55).

the line it cites every version
reverse-dns
Server name in reverse-DNS format. Must contain exactly one forward slash

Pattern `^[a-zA-Z0-9.-]+/[a-zA-Z0-9._-]+$` (L50). The valid example examples/ServerCard/valid/minimal.json uses `example-org/minimal`, with no dot. Catalog-level identifier: `urn:air:{publisher}:{namespace}:{name}` (docs/discovery.md L48).

the line it cites every version
via:/.well-known/ai-catalog.json
Fetch `https://{domain}/.well-known/ai-catalog.json`

Card location: 'MCP Servers MAY host their Server Card at `GET <streamable-http-url>/server-card`, which we reserve for this purpose, though any unreserved URI (on any domain) is valid' (L174-L175). SEP 5c8483d L90: 'Cards can be hosted at any unreserved URI, with `<streamable-http-url>/server-card` reserved as the recommended location.'

the line it cites every version
application/mcp-server-card+json · de-facto
Server Cards use the media type `application/mcp-server-card+json`.

Not in the IANA application media-type registry (checked 2026-09-15); the only 'mcp' matches are unrelated vnd.3gpp.mcptt-* types. Clients SHOULD send `Accept: application/mcp-server-card+json` (L182).

the line it cites every version
json
An **MCP Server Card** is a JSON document that describes a single MCP server
the line it cites every version
_meta
extension metadata, which remains the card's extension point.

The line begins 'Vendors who genuinely need to attach install hints to a Server Card can use namespaced [`_meta`]'. schema.ts L115 and L121 define `_meta?: MetaObject`. SEP 5c8483d L89: '`_meta` is not used to advertise MCP capabilities or negotiated extension support.'

the line it cites every version
none
Clients MUST NOT treat Server Card contents as authoritative for security or

Advisory only. The 'Server Card Accuracy' security note (L229-L238) calls an inaccurate card 'a mild confusion or downgrade vector'. Hosted cards MUST use HTTPS, TLS 1.2 or later, in production (L273). No signature or trust manifest.

the line it cites every version
$schema, version, remotes[].supportedProtocolVersions
Schema URLs are versioned by the `vN` segment rather than by date; a

$schema must equal `https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json` (L35, L40). version = server version, 'Equivalent of `Implementation.version`' (L55-L57). remotes[].supportedProtocolVersions = 'MCP protocol versions actively supported by this remote endpoint' (L199-L202). README.md L63: 'The `v1` shape is still pre-release and card-only'.

the line it cites every version
AI Catalog latest (#100)
displayName (optional)
? displayName: text,

Prose: listed under OPTIONAL (L259, L261). Resolution order (L342): entry displayName, then the artifact's own name, then the identifier's trailing segment.

the line it cites every version
urn:air
the standard `urn:air` naming structure is **HIGHLY RECOMMENDED** and **MUST** be used for open or federated systems.

Open-text field ('any valid URI or URN is accepted', same line). Format `urn:air:{publisher}:{namespace}:{name}` (L209).

the line it cites every version
/.well-known/ai-catalog.json
/.well-known/ai-catalog.json

OPTIONAL; a catalog MAY be served from any URL. Link relation `ai-catalog` (L1256). Registration sections: link relation (L1629), well-known URI (L1645). Neither is in the IANA registries (checked 2026-09-15); IANA lists only RFC 9727 `api-catalog`.

the line it cites every version
application/ai-catalog+json · de-facto
application/ai-catalog+json

Registration section L1582. `curl https://www.iana.org/assignments/media-types/application.csv | grep -i catalog` on 2026-09-15 returns no ai-catalog entry.

the line it cites every version
json
An AI Catalog document is a JSON object that MUST contain the following
the line it cites every version
extensions-map
represent the extension type (namespace), and the corresponding value contains the extension data.

Keys 'MUST be a valid URL or a reverse-DNS string' (L1121-1122). Entry `extensions` L326; catalog top level L151; Trust Manifest L612.

the line it cites every version
trust-manifest+jws
contain at least one *substantive* trust member:

`trustManifest` is OPTIONAL (L553-555). Trust Manifest `signature` is a detached JWS (L604-605); optional top-level catalog `signature` JWS (L156-157). The CDDL still lacks the top-level `signature` (L1670-1675) and TrustManifest `subject`/`issuedAt`/`expiresAt` (L1709-1719).

the line it cites every version
specVersion
`specVersion`

'Major.Minor' format (L104); Version Handling section L1174.

the line it cites every version
ARD latest (v0.91)
displayName
| displayName | MUST | Human-readable name. |

Row of the table introduced by 'An ARD entry MUST carry:' (L86).

the line it cites every version
urn:air
Domain-anchored URN form (`urn:air:<publisher>:<namespace>:<agent-name>`); see Appendix C.

The JSON-LD @id MAY mirror the identifier (L90). ard-entry.schema.json pattern ^urn:air:... (L26).

the line it cites every version
/.well-known/ard.json
Hosting a manifest of entries at `https://{domain}/.well-known/ard.json`.

Link relation: rel="ard" (L199). A consumer MUST fetch /.well-known/ard.json and MUST honour rel="ard"; it MAY also consult the predecessor /.well-known/ai-catalog.json and rel="ai-catalog" (L202). A publisher on the predecessor path SHOULD move to ard.json (L204). In-page JSON-LD markup (L197), Agentmap and DNS (L200) are also listed.

the line it cites every version
none · none
The manifest is a JSON document with an `entries` array of ARD entries (§4)

No media type is defined for the manifest document. Entry `type` is the artifact's IANA media type (L92); registries are found through entries whose type is application/ai-registry+json (L215). The application/ai-catalog+json nested-catalog examples are gone.

the line it cites every version
json-ld
An entry is a JSON-LD node describing an agentic resource.

Per entry. A consumer MUST expand an entry with the ARD base context (L80; spec/schemas/ard.context.jsonld). Carrying @context in the entry is OPTIONAL (L82). The /.well-known/ard.json manifest itself is 'a JSON document' (L196).

the line it cites every version
json-ld-context
Terms from any additional namespace declared in the entry's `@context` MAY also appear

Such terms become filter dimensions with no spec change (L108). `metadata` remains an optional descriptive term (L106). The schema sets additionalProperties: true by design (L530); ard.cddl ard-entry ends with a `* tstr => any` wildcard (L25).

the line it cites every version
trust-manifest
ARD does not define a signing or verification procedure of its own.

trustManifest is optional; ARD requires only trustManifest.identity (L173), whose trust domain MUST align with the URN publisher (L177). Signing, canonicalization and key resolution come from the framework named in trustManifest.trustSchema (L181). ard-entry.schema.json L170 no longer names JWS. The schema's entry property key is `TrustManifest` (L81); the spec, ard.cddl (L45) and the base context use `trustManifest`.

the line it cites every version
not specified
ARD requires only an `entries` array of ARD entries

ArdManifest requires only entries (L106); other top-level members are transport-defined and ignored by ARD. ard.cddl ard-manifest is entries plus a wildcard (L13-L15). specVersion is no longer defined. The base context URL ends /context/v1 (spec L78) and entry `version` is the artifact version; neither is a spec-version field.

the line it cites every version
.fafa v1.0 IANA-registered + DOI (latest)
agent.name
**Required:** `name` (Unicode string, unique within the issuing vendor namespace)

The spec text still has no display-name field. The companion schema schemas/fafa.schema.json documents an optional `agent.displayName` from 9e79b6914b6cb0ef6df299e52de17ccc47657a5e (2026-07-05), and FAFA's published card uses it (agent.fafa L9). See notes.

the line it cites every version
agent-id
`id` (globally unique identifier — DID, URI, or vendor-scoped UUID)

Practice: FAFA's card uses `id: did:web:faf.one:agent`.

the line it cites every version
none
It does not define discovery, transport, authorization, or orchestration.

Spec unchanged. Practice only (not in spec): faf.one serves FAFA's card at /.well-known/fafa with Content-Type application/vnd.fafa+yaml (checked 2026-09-15). The one well-known URI request filed is for /.well-known/faf (protocol-registries/well-known-uris#97, open, labels 'new registration' and 'waiting for stable reference'). No request covers /.well-known/fafa.

the line it cites every version
application/vnd.fafa+yaml · iana-registered
(registered 2026-06-26, last updated 2026-06-26)

Spec at this SHA: L5 '**MIME Type:** `application/vnd.fafa+yaml`', L7 '**IANA Registration:** Registered 2026-06-26 (vendor tree)' (https://github.com/Wolfe-Jam/faf/blob/190c3380847c022da3e13a28af57c4dc68b3e02c/AGENT-FORMAT.md#L7). The IANA record's 'Published specification' is https://github.com/Wolfe-Jam/faf/blob/main/AGENT-FORMAT.md.

the line it cites every version
yaml
A `.fafa` file is a single YAML document:

§13 (L216): YAML 1.2 / RFC 9512.

the line it cites every version
metadata-object
**Optional top-level fields:** `attachment`, `provenance`, `signature`, `metadata` (free-form vendor extensions).

§13 (L219): forward-compat rule for unknown top-level fields and unknown agent/capabilities/endpoints subfields. It does not name `provenance` subfields.

the line it cites every version
other:optional signature object (method, value); signing scheme unspecified
Where present, `signature` carries provenance/integrity material; verification is the consumer's responsibility.

Unchanged. FAFA's published card carries no `signature` block.

the line it cites every version
version
The top-level `version` field declares which version of this specification the document conforms to.

Spec §16 (L252) lists 'Optional parameters: version', but the IANA record says 'Optional parameters: N/A' and 'versioning is handled in-band via the top-level "version" field'.

the line it cites every version

Two lanes

The specs move, and we move with them. Every FAF change below sits in a public repo, so each links to the commit. 54 spec events, 4 FAF surfaces.

45 days

AI Catalog #77 merged 2026-07-30. We answered in 3 days — and used the wrong container.

4d0d914 chore: conform ai-catalog.json to ADR-0017 (metadata→extensions array, remove legacy mediaType)

bf5fb3f fix(ai-catalog): serve extensions as a map, not an array

Working group parsers rejected the document in between. Speed is not currency on its own — the check is.

Every citation we can point at (5)
SpecMergedFAFLagCommit says
AI Catalog ADR-00162026-06-182026-06-3012dfix: align ai-catalog.json with ADR-0016 (#6)
AI Catalog #372026-06-252026-06-261dfix: conform AI Catalog to post-#37 spec
AI Catalog #772026-07-302026-08-023dchore: conform ai-catalog.json to ADR-0017 (metadata→extensions array, remove legacy mediaType)
AI Catalog #772026-07-302026-09-1345dfix(ai-catalog): serve extensions as a map, not an array
ARD v0.912026-08-262026-09-1419dfix: Add displayName to the context-server AI Catalog entry

Also out there

The map draws five. These are the others we looked at, and why each is or is not drawn. The test: a public spec with git history, describing an agent or a server so machines can find it.

Passes the test (8)

  • ANP Agent Description (AD) document (ANP-07) A released (v1.1) agent description document with 17 commits since 2025-01-01, tagged releases, and its own well-known discovery path. It evolves visibly: it began as JSON-LD and dropped the JSON-LD requirement in July 2025.
  • agents.json (Wildcard) Passes both tests literally: a public git spec (README plus JSON Schema, quotable at commits) for a well-known discovery file describing a web service for agents. Edge of (b): it describes an API's call flows more than a server's identity; the history is thin (one schema commit, v0.1.0 only).
  • AGNTCY OASF record (Open Agentic Schema Framework) Public git history since 2025-02 with 35 tagged releases and a single record object whose values can be quoted per commit; it describes agents (and MCP servers via modules) for directory discovery. Its directory draft already projects records into AI Catalog, A2A card and MCP Server Card media types, so it lands on the map as a junction.
  • IBM ACP Agent Manifest (Agent Communication Protocol; schema 'Agent' then 'AgentManifest', docs 'Agent Detail') Passes both tests: a dated OpenAPI schema with 23 commits from 2025-04-23 to 2025-07-01, used for discovery (including a well-known file). It ends in a primary-sourced merge into A2A, which gives the map a junction.
  • MCP Registry server.json Passes both tests: git history since 2025-06-26 with six dated schema versions, and its own spec says it describes MCP servers for registry publishing and client discovery. Server Card Rev 1 was built on its shape, so it is where the Server Card line branched from.
  • ERC-8004 agent registration file (Trustless Agents) Passes both tests, multi-organisation authors, deployed on mainnets, and its git history shows a card branching off the A2A line.
  • Signature Agent Card (Web Bot Auth) An IETF-venue card with 'Agent Card' in its name, git history from 2025-09-05, and Cloudflare and Amazon authors. It describes the agent operator so origins can verify it.
  • UCP profile (Universal Commerce Protocol business and platform profile) Broad multi-company backing, git history since 2026-01-11, and the spec calls the profile a discovery document. It links A2A cards and MCP endpoints for commerce servers and agent platforms.

Borderline (7)

  • Open Resource Discovery (ORD) document: Agent resource Registered well-known, foundation governance and versioned git tags. But ORD is an enterprise resource catalog where Agent is one entity type, marked BETA in the docs. Its role is closer to AI Catalog than to a per-agent card.
  • RFC 9727 api-catalog Not agent-specific, but it is the documented precursor of AI Catalog's catalog role. Consider it as a predecessor station on the AI Catalog line rather than its own card.
  • Eclipse LMOS Agent Description Format Foundation-backed agent description with git history, but the spec pages have had no commits since 2025-04-10. Draw it only if the map shows the WoT branch.
  • AGNTCY Agent Connect Protocol - Agent ACP Descriptor (Cisco-led 'ACP', not IBM's) Passes both tests: 'Describe all the ACP specs of an agent, including schemas and protocol features.' (openapi.json L1903). But it is mostly an invocation-schema descriptor inside an API. It lived three months (Feb to May 2025), and its discovery role passed to the OASF record.
  • NANDA AgentFacts Passes both tests literally, but its git history is one upload commit (2025-06-17) with no later change, so it draws as a single station. Which schema is authoritative is also contested: agentfacts.org names a different repo as official.
  • AID: Agent Identity & Discovery (v1 named Agent Interface Discovery) Git history since 2025-07-05 and an IETF draft under the DAWN name. It is a DNS locator record rather than a full card, so it fits better as a connector than a line.
  • ACP Registry agent entry (Agent Client Protocol, agent.schema.json) Strong adoption (42 agents, JetBrains index) and a pending AAIF proposal. It is a registry-entry and install format, so decide it together with MCP Registry server.json.

Not drawn (16)

  • W3C WoT Thing Description Scoped to IoT Things, not agents. It enters the map only as LMOS's parent.
  • xRegistry A generic registry substrate, not an agent or server description.
  • Microsoft 365 Copilot declarative agent manifest The schema has clean public git history (8 dated versions), but it is packaging and configuration for one product: '...a declarative agent for third party developers to be deployed to Microsoft 365 Copilot' (v1.0 L3). It carries the agent's instructions and is never published for discovery, and Microsoft's own discovery path uses A2A Agent Cards.
  • LangChain Agent Protocol (Agent object) It is a protocol API. The Agent object (openapi.json L1497) exists only as a response from a running server, with no document published for discovery.
  • Letta Agent File (.af) It serializes agent state for transfer and checkpointing, not for discovery.
  • Google ADK AgentConfig (YAML agent config) It is config to create an agent, not a discovery or description document.
  • Oracle Open Agent Specification (Agent Spec) It is a build and configuration language for running agents, not a discovery document.
  • Microsoft AgentSchema It builds agents rather than describing them for discovery: 'AgentSchema is a client facing spec designed to make creating agents easier in a code first YAML file format.' (README L3).
  • Agent Skills (SKILL.md) An instruction file describing a skill, not an agent or server; out under test (b).
  • OpenBindings Interface (OBI) Passes both tests and holds an IANA well-known, but no adoption beyond its own project is visible.
  • AGTP Agent Identity Document Passes both tests, but it is a single-author individual draft whose repo has 10 stars. Note the IANA registration; do not draw a line.
  • Agent Name Service (ANS) registration + DNS records It is an identity, naming and trust layer: registration 'binds to operational metadata (display name, description, endpoints)' (ans-1 L11) and hands the description itself to the A2A card or MCP metadata through metaDataUrl. Worth a map annotation as the connector between A2A and ARD.
  • AgentMug .agent file (application/vnd.agentmug.agent+json) It is an executable agent definition ('A .agent file is a portable, declarative definition of an AI agent.', spec L14), not a discovery document.
  • OpenAI ai-plugin.json (ChatGPT plugin manifest) Fails (a): the manifest was defined on OpenAI docs pages, not in git, and OpenAI's repos hold only example manifests. No field can be quoted from a spec at a commit.
  • AWS Agent Registry record (Amazon Bedrock AgentCore) Docs only, with no git-versioned spec. Agent records reuse the A2A card, so there is no separate AWS card to draw.
  • Claude Code plugin manifest (plugin.json) and marketplace.json No normative spec with public git history was found (a public docs page only), and it describes a plugin bundle, not an agent or server.

Checked

30 spec versions across 5 cards. 269 of 270 values link to the line they were quoted from; each quote is re-checked against that line, so a spec that moves shows up as a failed check rather than a wrong page. As of 2026-09-12.

Every value, every quote, every version →