TL;DR: faf cards projects .faf + .fafa onto A2A, MCP, registry, and catalog — one context block, every door. Why we built it.

npx --yes faf-cli@7.8.0 cards --help npx --yes faf-cli@7.8.0 cards --check

What's New

Author .faf (context) and .fafa (identity, skills, endpoints). faf cards writes the host cards. Complementary — it does not replace A2A or MCP.

  • A2A Agent Card — /.well-known/agent-card.json. Extension URI is https://faf.one/context.
  • MCP Server Card — the same block under _meta["one.faf/context"].
  • Registry server.json — same block under publisher-provided.
  • AI Catalog — upserts rows. Leaves host showcase entries alone.

--door-url supplies a door when .fafa has no A2A endpoint. Authored endpoints still win. No door and no flag: it refuses. It will not invent a door or an agent.

faf server-card still exists. It now wraps the same projector’s registry target.

Try It

npm install -g faf-cli@7.8.0 faf cards --target a2a --check

Same version on the short name: bunx faf@7.8.0

claude-faf-mcp 5.22.0 pins this floor — the A2A mapper uses faf cards instead of copying raw provenance.

Bounds

  • Does: project one fafContextBlock() onto every door you already have.
  • Does not: invent a door · invent an agent · replace A2A or MCP · bake a score into the card.

The Numbers

  • v7.8.0 — August 18, 2026
  • 1340/1340 tests
  • ✪ 100% Trophy

If this saves a drifted card, a star helps the next project find it.

Star faf-cli