{
  "slug": "a2a-protocol",
  "title": "A2A Protocol (Agent2Agent): Agent Card, Operations, Task States, Bindings",
  "description": "Wire-level reference for the A2A (Agent2Agent) protocol v1.0: the Agent Card at /.well-known/agent-card.json, the 11 operations, the 8 task states, three protocol bindings, security schemes, version negotiation, and what changed from v0.3.",
  "category": "Guide",
  "tags": [
    "a2a",
    "agent2agent",
    "protocols",
    "agent-card",
    "interoperability",
    "agents",
    "multi-agent"
  ],
  "updated": "2026-10-09",
  "premium": false,
  "rights": {
    "access": "free",
    "license": "https://changegamer.ai/license.xml",
    "pricing": "https://changegamer.ai/api/pricing.json",
    "payment": "https://changegamer.ai/api/payment.json"
  },
  "canonical": "https://changegamer.ai/resources/a2a-protocol",
  "markdown": "https://changegamer.ai/resources/a2a-protocol.md",
  "outline": [
    {
      "depth": 2,
      "text": "Key facts",
      "anchor": "key-facts"
    },
    {
      "depth": 2,
      "text": "What are the A2A operations?",
      "anchor": "what-are-the-a2a-operations"
    },
    {
      "depth": 2,
      "text": "What are the A2A task states?",
      "anchor": "what-are-the-a2a-task-states"
    },
    {
      "depth": 2,
      "text": "What is in an Agent Card?",
      "anchor": "what-is-in-an-agent-card"
    },
    {
      "depth": 2,
      "text": "Messages and parts",
      "anchor": "messages-and-parts"
    },
    {
      "depth": 2,
      "text": "Security note (inference)",
      "anchor": "security-note-inference"
    },
    {
      "depth": 2,
      "text": "Verified sources",
      "anchor": "verified-sources"
    }
  ],
  "related": [
    {
      "slug": "mcp-vs-a2a",
      "title": "MCP vs A2A: Two Protocols, Two Roles",
      "description": "Compact comparison of the Model Context Protocol (agent↔tool) and the Agent2Agent Protocol (agent↔agent): purpose, topology, transport, discovery, auth, governance, and when to use each.",
      "url": "https://changegamer.ai/resources/mcp-vs-a2a"
    },
    {
      "slug": "a2ui-protocol",
      "title": "A2UI: Google's Declarative Agent-to-UI Protocol (vs AG-UI, MCP Apps)",
      "description": "What A2UI is: the open, Apache-2.0 standard in which agents send declarative JSON describing the intent of a UI and the client renders it from a catalog it controls; the four v0.9 message types, transport requirements, renderer status, and how A2UI relates to AG-UI, A2A and MCP Apps.",
      "url": "https://changegamer.ai/resources/a2ui-protocol"
    },
    {
      "slug": "agent-client-protocol",
      "title": "Agent Client Protocol (ACP): How Editors Talk to Coding Agents",
      "description": "Reference for the Agent Client Protocol (ACP), the open protocol that connects code editors and IDEs to coding agents over JSON-RPC: session lifecycle, MCP server hand-off, transports, tool calls, permissions, and how ACP differs from MCP and A2A.",
      "url": "https://changegamer.ai/resources/agent-client-protocol"
    },
    {
      "slug": "building-mcp-servers",
      "title": "Building an MCP Server",
      "description": "Implementation guide for MCP servers: architecture roles, the three server primitives, stdio vs Streamable HTTP transports, official SDKs, server lifecycle, remote-server concerns, testing with MCP Inspector, and publishing to the official registry.",
      "url": "https://changegamer.ai/resources/building-mcp-servers"
    }
  ],
  "furtherReading": [
    {
      "slug": "multi-agent-trace-propagation",
      "title": "Distributed Tracing for Multi-Agent AI Systems",
      "description": "How trace ID propagation actually works across a multi-agent handoff, why handoff and delegation need different trace shapes, and why an orchestrator-level trace can hide a failed leg of a fan-out.",
      "url": "https://changegamer.ai/articles/multi-agent-trace-propagation"
    },
    {
      "slug": "mcp-oauth-implementation",
      "title": "How to Implement OAuth 2.1 for an MCP Server",
      "description": "A wire-level implementation walkthrough for OAuth 2.1 on a remote MCP server: what the discovery documents actually contain, CIMD vs. Dynamic Client Registration in your server code, per-SEP detail from the 2026-07-28 hardening set, and token-validation mechanics.",
      "url": "https://changegamer.ai/articles/mcp-oauth-implementation"
    }
  ],
  "body": "A2A (Agent2Agent) is an open protocol for communication between opaque agentic applications: agents built on different frameworks discover each other through an Agent Card, exchange messages, and track work as tasks. This entry is the wire-level reference; for the MCP-vs-A2A decision see /resources/mcp-vs-a2a.\n\n## Key facts\n\n- Released versions per the project releases page: v1.0.0 (2026-03-12), v1.0.1 (2026-05-28, bug fixes, prefers `application/a2a+json` in the HTTP binding), earlier v0.3.0 (2025-07-30).\n- Licence Apache 2.0; an open source project under the Linux Foundation, contributed by Google. SDKs listed in the README: Python, Go, JavaScript, Java, .NET, Rust.\n- Discovery: an agent MUST publish an Agent Card at `https://{server_domain}/.well-known/agent-card.json` (v0.3.0 renamed this from `agent.json`).\n- Three bindings: JSON-RPC 2.0, gRPC, HTTP+JSON/REST (custom bindings are also allowed).\n- Clients send an `A2A-Version` header (format `Major.Minor`, or the same name as a request parameter); servers answer with `VersionNotSupportedError` for versions they do not support. Patch numbers are not part of negotiation. An empty header value is interpreted as `0.3`, so a v1.0 client that sends an empty header gets v0.3 semantics.\n- The a2a-protocol.org specification page labels 1.0.0 as the latest released version; the GitHub releases page also lists the v1.0.1 patch.\n\n## What are the A2A operations?\n\nThe specification defines eleven operations: Send Message, Send Streaming Message, Get Task, List Tasks, Cancel Task, Subscribe to Task, Create / Get / List / Delete Push Notification Config, and Get Extended Agent Card. `List Tasks` (filtering and pagination) arrived with v1.0.0.\n\n| Binding | Spelling (spec main branch, at time of fetch) |\n|---|---|\n| JSON-RPC | PascalCase: `SendMessage`, `SendStreamingMessage`, `GetTask`, `ListTasks`, `CancelTask`, `SubscribeToTask`, `GetExtendedAgentCard` |\n| HTTP+JSON | `POST /message:send`, `POST /message:stream`, `GET /tasks/{id}`, `GET /tasks`, `POST /tasks/{id}:cancel`, `POST /tasks/{id}:subscribe`, `GET /extendedAgentCard` |\n| gRPC | normative `A2AService`, Protocol Buffers v3 over HTTP/2 with TLS |\n\nOlder docs and posts show `message/send` and `message/stream`; those are the v0.3-era JSON-RPC spellings, so check the `A2A-Version` you target. HTTP+JSON bodies use `application/a2a+json`.\n\n## What are the A2A task states?\n\nEight `TaskState` values: `TASK_STATE_SUBMITTED`, `TASK_STATE_WORKING`, `TASK_STATE_COMPLETED`, `TASK_STATE_FAILED`, `TASK_STATE_CANCELED`, `TASK_STATE_REJECTED`, `TASK_STATE_INPUT_REQUIRED`, `TASK_STATE_AUTH_REQUIRED`. Terminal: completed, failed, canceled, rejected; Subscribe to Task on a terminal task returns `UnsupportedOperationError`. The two `*_REQUIRED` states pause the task for the client. Spelling is American (\"canceled\") as of v1.0.\n\n## What is in an Agent Card?\n\n- Identity: `name`, `description`, `provider`, `version`, `documentationUrl`, `iconUrl`.\n- `supportedInterfaces`: which protocol bindings and endpoints the agent serves.\n- `capabilities`: `streaming`, `pushNotifications`, `extensions`, `extendedAgentCard`.\n- `skills`: array describing what the agent can do.\n- `securitySchemes` plus security requirements: API key, HTTP auth, OAuth 2.0, OpenID Connect, mutual TLS. v1.0.0 modernised OAuth 2.0 flows (device code, PKCE).\n- Signing: a card MAY be signed with JSON Web Signature (RFC 7515) using RFC 8785 canonicalisation. Signing is optional, so an unsigned card proves nothing about who published it.\n- If `extendedAgentCard` is true, an authenticated client can fetch fuller details; it SHOULD replace its cached public card.\n\n## Messages and parts\n\nA message carries `Part` objects: text, file, or structured data. In v1.0+ parts are discriminated by member name (`{\"text\": \"...\"}`) instead of an explicit `kind` field, a breaking change for v0.3 clients.\n\n## Security note (inference)\n\nInference, not spec text: an Agent Card is self-published, so treat its skill descriptions as untrusted input to your model, the same way as MCP tool descriptions (see /resources/mcp-tool-poisoning), and prefer verifying a signed card before delegating.\n\nSee also: /resources/mcp-vs-a2a, /resources/agent-delegation-chains, /resources/multi-agent-orchestration-patterns, /resources/agent-identity-authentication, /resources/a2ui-protocol\n\n## Verified sources\n\nFetched directly 2026-10-07 and re-verified 2026-10-09:\n\n- A2A specification (rendered, v1.0): https://a2a-protocol.org/latest/specification/\n- A2A specification (docs/specification.md, main branch, which may be ahead of v1.0.1): https://raw.githubusercontent.com/a2aproject/A2A/main/docs/specification.md\n- A2A README: https://raw.githubusercontent.com/a2aproject/A2A/main/README.md\n- A2A releases (versions and dates): https://github.com/a2aproject/A2A/releases\n\nRe-verified 2026-10-09 against the rendered specification: method names, the eight task states, terminal vs interrupted states, and the `A2A-Version` rules above match it.",
  "sources": [
    "https://a2a-protocol.org/latest/specification/",
    "https://raw.githubusercontent.com/a2aproject/A2A/main/docs/specification.md",
    "https://raw.githubusercontent.com/a2aproject/A2A/main/README.md",
    "https://github.com/a2aproject/A2A/releases"
  ]
}