A2A Agent Card: your agent's card for orchestrators
What an A2A Agent Card (Google A2A Protocol) is, why it matters for agent-to-agent comms, an example, right vs wrong, mistakes, and how to verify.
Updated:
What it is
An A2A Agent Card is a JSON document at /.well-known/agent.json describing your
AI agent’s capabilities in Google’s Agent-to-Agent (A2A) Protocol format. Other
agents and orchestrators use it to discover and invoke your agent without manual
configuration. Where an MCP Server Card describes tools, an A2A Agent Card
describes the agent’s high-level skills.
Why it matters for AI agents
A2A (2025) is a standard for agent-to-agent communication. Without an Agent Card your agent lives “in the dark” — it can only be wired up by hand. With the card, an orchestrator (Claude, Gemini, a third-party agent) finds a specialised agent by its description and folds it into a composite workflow — delegation becomes automatic.
Minimal working example
{
"name": "My Data Agent",
"description": "Provides data analysis and reporting",
"version": "2.0.0",
"url": "https://api.example.com/a2a",
"capabilities": { "streaming": true, "pushNotifications": false },
"skills": [
{
"id": "analyze",
"name": "Analyze Dataset",
"description": "Run statistical analysis on a CSV",
"inputModes": ["file", "text"],
"outputModes": ["text", "json"]
}
]
}
Right vs wrong
| Right | Wrong |
|---|---|
Served at /.well-known/agent.json, application/json | An arbitrary path |
Has name, version, url | Missing required fields |
A skills array with id + name each | Empty/missing skills — nothing to delegate |
url points to a working A2A endpoint | A broken/placeholder URL |
Common mistakes
- Invalid JSON or missing required
name/version. - No
skills— the orchestrator can’t tell what the agent does. - Skills without clear descriptions — task-based agent selection fails.
- Confusing it with
ai-agent.json— different files; A2A uses/.well-known/agent.json.
How to verify
The scanner GETs /.well-known/agent.json and checks the JSON, the
name/version fields, and the skills array (at least one with id + name).
Manually:
curl -s https://example.com/.well-known/agent.json | jq '.name, .version, .skills'