A2A Protocol Overview
The Agent-to-Agent (A2A) protocol enables AI agents to communicate and collaborate across different systems and vendors.
Core Concepts
Agents
An agent is any service that implements the A2A protocol. Agents can:
- Receive and process messages
- Return responses with results or artifacts
- Manage long-running tasks
- Stream partial results
AgentCard
Every A2A agent must expose an AgentCard — a JSON document describing the agent's identity and capabilities. The AgentCard is served at:
{agent-base-url}/.well-known/agent-card.json
Messages
Communication happens through messages. Each message contains:
- A unique
messageId(UUID) - A
role(user or agent) - One or more
parts(text, files, or data)
Tasks
Long-running operations are tracked as tasks. Tasks have:
- A unique
id - A
state(submitted, working, completed, failed, etc.) - Optional
artifactswith results
Protocol Flow
1. Discovery → Client fetches /.well-known/agent-card.json
2. Message Send → Client sends via message/send or message/stream
3. Processing → Agent processes and updates task state
4. Response → Agent returns result or streams updates
JSON-RPC 2.0
All A2A communication uses JSON-RPC 2.0 over HTTP. The standard envelope:
{
"jsonrpc": "2.0",
"method": "message/send",
"id": "1",
"params": { ... }
}
Version support matrix
Agent Explorer speaks both protocol generations with spec-correct wire dialects, selected per session in the chat:
| Capability | A2A 0.3 | A2A 1.0 |
|---|---|---|
| JSON-RPC binding | ✅ message/send, tasks/get, tasks/resubscribe, … | ✅ SendMessage, GetTask, SubscribeToTask, … |
| HTTP+JSON (REST) binding | — (not in 0.3) | ✅ fallback when no JSONRPC interface is declared |
| Wire enums / parts | lowercase states, kind-discriminated parts | ProtoJSON (TASK_STATE_*, ROLE_*), kind-less parts |
| Streaming (SSE) | ✅ incl. required final flag | ✅ StreamResponse frames, initial Task object |
tasks/list | — (not in 0.3) | ✅ |
| Push notification CRUD | ✅ nested config, schemes[] auth | ✅ flat config, singular scheme |
| Error codes | -32001…-32006 | -32001…-32009 (spec §5.4) incl. version-switch banner on -32009 |
| gRPC binding | — | not supported |