Skip to content
Deep Dive agent-cards discovery spoke

Agent Cards: How Agents Discover Each Other

Once agents start calling agents (per A2A), they need a way to find each other and understand what each one can do. That's the agent card.

What an agent card contains

An agent card is a small JSON document that advertises an agent's capabilities. Modeled on Google's A2A agent-card proposal, it carries:

  • Identity — display name, role, owner-firm.
  • Capabilities — typed list of task_types the agent accepts.
  • SLA — expected response time per task type.
  • Pricing — per-task rate (if the agent is rentable).
  • Auth — what kinds of principal it accepts.
  • Examples — sample successful invocations for caller orientation.

Agent cards live at a well-known URL: https://firm.example.com/.well-known/agent-card.json for the firm's primary agent, or https://firm.example.com/agents/<id>/card.json for specific agents.

Discovery patterns

Three patterns for finding an agent:

  1. Direct URL. You know the agent's card URL. Fetch it. Done.
  2. Registry lookup. Hit a registry (e.g. AgentsBooks's marketplace-agents-directory) with a capability query; get back ranked agent cards.
  3. Capability negotiation. Send an A2A "discovery" request with the task you need done. Reply lists candidate agents + their cards. Used in marketplaces.

The first pattern is the simplest. The third is the most marketplace-flywheel-y; expect it to dominate over time.

What a good agent card looks like

{
  "schema": "agent-card-v0.4",
  "identity": {
    "id": "kyc-tier2-reviewer",
    "display_name": "Marisol — Tier-2 KYC Reviewer",
    "firm": "agentsbooks-compliance.example.com",
    "version": "2026-05-12"
  },
  "capabilities": [
    {
      "task_type": "kyc.review.tier2",
      "input_schema_url": "/schemas/kyc-review-input.json",
      "output_schema_url": "/schemas/kyc-review-output.json",
      "sla": "p95<4h",
      "price": "$8.50/case"
    }
  ],
  "auth": {
    "accepted_principals": ["firm.partner", "marketplace.buyer"],
    "auth_methods": ["oauth2-jwt"]
  },
  "examples": [
    {"task_type": "kyc.review.tier2", "input_url": "/examples/medium-risk.json", "output_url": "/examples/medium-risk-output.json"}
  ]
}

The two things that matter most: typed input_schema_url + output_schema_url. Without those, the caller has no machine-readable way to build a valid request.

Versioning

Capabilities evolve. The agent card embeds a version field. Callers can pin to a version (predictable) or always fetch latest (flexible).

The substrate convention: bump the version when the input or output schema changes; leave it when only the implementation changes. This way callers know when to re-validate their request shape.

FAQ

Q: Should every agent have a card?
A: Every agent that's reachable from outside its own firm. Internal-only agents (intra-firm via Friends edges) typically don't expose cards — they're addressable directly via Identity.

Q: How do I keep the card and the agent's actual behaviour in sync?
A: Generate the card from the agent's task definitions. Don't hand-author it. The substrate emits cards automatically when an agent is marked "discoverable".

Q: Are agent cards a standard yet?
A: No. A2A's proposal is the most-followed convention; the field will likely converge through 2026.


Want to publish your agent's card? Start free →

🚀 Ready to build this yourself?

Create the agent described in this article in under 2 minutes — no code required.

Try It Free → Book a Demo
Share this article
𝕏 Share 🔗 LinkedIn
Playbooks

Turn this into a working agent

Browse all playbooks →

Ready to build this agent?

Setup takes less than 2 minutes. No coding required.

Start Building Free →
Image
Copy link
X
LinkedIn
Reddit
Download