Skip to main content
A2A

Agent2Agent Protocol

Active

Open 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.

AI AgentsGoogleLinux FoundationJSON-RPC 2.02025
Task LifecycleAgent Card

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

FieldSizeDescription
Agent CardJSONPublished at /.well-known/agent-card.json – declares agent name, capabilities, skills, auth, and endpoint URL
tasks/sendRequestSend a task to an agent. Returns task object with id and initial state.
tasks/getRequestPoll the current state and result of a task by ID.
tasks/cancelRequestRequest cancellation of an in-progress task.
tasks/sendSubscribeRequestSend task and subscribe to SSE stream for real-time state updates.
Task states6 statessubmitted, working, input-required, completed, failed, canceled
Part types3 typesTextPart (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

Request
http
// 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"}]}}}
Response
http
// 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..."}]}]}

Implementations

linuxsince Python and TypeScript SDKs from Googleavailable
macossince Python and TypeScript SDKsavailable
windowssince Python and TypeScript SDKsavailable
iossince Via HTTPS transportavailable
androidsince Via HTTPS transportavailable