Agent2Agent Protocol
ActiveOpen standard for communication and task delegation between independent AI agents across different frameworks and vendors. Agents discover each other via Agent Cards, delegate tasks over JSON-RPC 2.0, and track task state through a defined lifecycle.
In one line
A2A (Agent2Agent Protocol) is an open standard released by Google in April 2025 and donated to the Linux Foundation in June 2025. It defines how AI agents discover each other via Agent Cards at /.well-known/agent-card.json, delegate tasks via JSON-RPC 2.0, and stream results via SSE. Unlike MCP which connects agents to tools, A2A connects agents to other agents.
Quick Reference
| Field | Size | Description |
|---|---|---|
| Agent Card | JSON | Published at /.well-known/agent-card.json – declares agent name, capabilities, skills, auth, and endpoint URL |
| tasks/send | Request | Send a task to an agent. Returns task object with id and initial state. |
| tasks/get | Request | Poll the current state and result of a task by ID. |
| tasks/cancel | Request | Request cancellation of an in-progress task. |
| tasks/sendSubscribe | Request | Send task and subscribe to SSE stream for real-time state updates. |
| Task states | 6 states | submitted, working, input-required, completed, failed, canceled |
| Part types | 3 types | TextPart (text/plain), FilePart (file bytes or URL), DataPart (structured JSON) |
Key Characteristics
Agent-to-agent
A client agent delegates a task to a remote agent. Both are AI agents. Neither needs to know the other's internal implementation.
Opaque agents
Remote agents are treated as black boxes. The protocol defines the interface, not the internal reasoning.
SSE streaming
Long-running tasks stream progress updates via Server-Sent Events. Client subscribes once and receives state transitions.
Agent Card discovery
Any agent can be discovered by fetching /.well-known/agent-card.json from its domain. No central registry required.
Message Format
// Agent Card (/.well-known/agent-card.json)
{
"name": "ResearchAgent",
"description": "Searches the web and summarizes findings",
"url": "https://agent.example.com/a2a",
"version": "1.0.0",
"capabilities": {"streaming": true, "pushNotifications": false},
"skills": [{"id": "web-search", "name": "Web Search", "description": "Search and summarize web content", "inputModes": ["text"], "outputModes": ["text"]}]
}
// tasks/send request
{"jsonrpc":"2.0","id":1,"method":"tasks/send","params":{"id":"task-abc-123","message":{"role":"user","parts":[{"type":"text","text":"Research the latest MCP specification changes"}]}}}// Task response (initial state)
{"jsonrpc":"2.0","id":1,"result":{"id":"task-abc-123","status":{"state":"submitted","timestamp":"2026-01-15T10:00:00Z"},"messages":[]}}
// SSE stream event (task working)
data: {"id":"task-abc-123","status":{"state":"working","timestamp":"2026-01-15T10:00:01Z"}}
// SSE stream event (task completed)
data: {"id":"task-abc-123","status":{"state":"completed","timestamp":"2026-01-15T10:00:08Z"},"artifacts":[{"name":"summary","parts":[{"type":"text","text":"MCP 2025-06-18 added hardened OAuth 2.1..."}]}]}