# A2A (Agent2Agent) Protocol > The Agent2Agent (A2A) protocol is an open standard, originated by Google and donated to the Linux Foundation, that lets AI agents built on different frameworks (LangGraph, CrewAI, Google ADK, Genkit, and more) discover each other's capabilities, negotiate interaction modes, and collaborate on tasks securely without exposing internal state. ## Links - [Documentation home](https://a2a-protocol.org/latest/): Start here — overview, key features, and how A2A relates to MCP. - [What is A2A?](https://a2a-protocol.org/latest/topics/what-is-a2a/): Conceptual introduction to the protocol. - [Protocol specification](https://a2a-protocol.org/latest/specification/): The human-readable, normative protocol specification (v1.0.0). - [Normative Protobuf definition](https://github.com/a2aproject/A2A/blob/main/specification/a2a.proto): Source of truth for the wire protocol. - [JSON Schema](https://a2a-protocol.org/latest/spec/a2a.json): Non-normative JSON Schema generated from the proto. - [Quickstart tutorial (Python)](https://a2a-protocol.org/latest/tutorials/python/1-introduction/): Step-by-step guide to building an A2A-compliant agent. - [SDKs](https://a2a-protocol.org/latest/sdk/): Official SDK overview and Python API reference. - [GitHub organization](https://github.com/a2aproject): Source for the spec, SDKs, CLI, and samples. - [a2a-cli](https://github.com/a2aproject/a2a-cli): Official command-line client for discovering, messaging, and managing A2A agents. - [Full consolidated docs](https://a2a-protocol.org/llms-full.txt): Every doc, topic, and the spec concatenated into one file. This project defines the **Agent2Agent (A2A) protocol**, an open standard initiated by Google and donated to the Linux Foundation, designed to enable communication and interoperability between disparate AI agent systems. It allows agents built on different frameworks (e.g., LangGraph, CrewAI, Google ADK, Genkit) to discover each other's capabilities, negotiate interaction modes, and collaborate on tasks securely without exposing internal state. The repository contains: 1. **Formal Specification:** The normative Protobuf definition (`specification/a2a.proto`). A non-normative JSON Schema (`a2a.json`, JSON Schema 2020-12) is generated from it at build time and published at `docs/spec/a2a.json`. 2. **Core Concepts Documentation:** Conceptual guides in `docs/topics/` (What is A2A, A2A & MCP, Core Concepts, Life of a Task, Agent Discovery, Enterprise Features, Streaming & Async, Multi-Tenancy, and the Extensions group). 3. **SDKs:** Production-ready SDKs for Python, JS/TS, Java, Go, .NET, and Rust. 4. **Sample Implementations:** Real-world examples integrated with various agent frameworks. 5. **CLI:** [a2a-cli](https://github.com/a2aproject/a2a-cli) (`a2a`), the official command-line client for discovering, messaging, and managing A2A agents from a terminal or script — see `docs/blog/posts/introducing-a2a-cli.md`. - Bindings: JSON-RPC 2.0 over HTTP (with Server-Sent Events), gRPC, and HTTP/REST. - Core objects: Agent Card (discovery), Task (stateful unit of work), Message, Part, Artifact. - Official SDKs: Python, JS/TS, Java, Go, .NET, and Rust. - A2A covers agent-to-agent communication; MCP covers agent-to-tool communication. They are complementary. ## Start here - [What is A2A?](https://a2a-protocol.org/latest/topics/what-is-a2a/): The problems A2A solves and why wrapping an agent as a tool is not enough. - [Protocol specification](https://a2a-protocol.org/latest/specification/): Full technical specification, including data objects, RPC methods, error codes, and worked examples. - [Python quickstart](https://a2a-protocol.org/latest/tutorials/python/1-introduction/): Eight-step tutorial that builds a working A2A agent from scratch. - [Protocol quick reference](https://a2a-protocol.org/llms-reference.txt): Condensed, agent-readable summary of every core object, RPC method, and task state. ## Specification - [Protocol definition](https://a2a-protocol.org/latest/definitions/): Reference page embedding the normative proto and the generated JSON Schema. - [a2a.proto](https://a2a-protocol.org/latest/spec/a2a.proto): The normative Protobuf definition of the protocol. - [a2a.json](https://a2a-protocol.org/latest/spec/a2a.json): Non-normative JSON Schema (2020-12), generated from the proto at build time. - [What's new in v1.0](https://a2a-protocol.org/latest/whats-new-v1/): Changes from v0.3.0 to v1.0. ## Core topics - [Core concepts](https://a2a-protocol.org/latest/topics/key-concepts/): Actors, Agent Card, Task, Message, Part, Artifact, and the three interaction mechanisms. - [A2A and MCP](https://a2a-protocol.org/latest/topics/a2a-and-mcp/): How A2A and the Model Context Protocol fit together. - [Life of a task](https://a2a-protocol.org/latest/topics/life-of-a-task/): Task lifecycle, states, and terminal versus interrupted outcomes. - [Agent discovery](https://a2a-protocol.org/latest/topics/agent-discovery/): How clients find Agent Cards, including the `/.well-known/agent-card.json` location. - [Streaming and asynchronous operations](https://a2a-protocol.org/latest/topics/streaming-and-async/): Server-Sent Events streaming and webhook push notifications. - [Enterprise features](https://a2a-protocol.org/latest/topics/enterprise-ready/): Authentication, authorization, transport security, tracing, and monitoring. - [Multi-tenancy](https://a2a-protocol.org/latest/topics/multi-tenancy/): Serving multiple tenants from one agent deployment. ## Extensions - [Extensions overview](https://a2a-protocol.org/latest/topics/extensions/): Adding capabilities without changing the core protocol. - [Custom protocol bindings](https://a2a-protocol.org/latest/topics/custom-protocol-bindings/): Carrying A2A over transports beyond the three standard bindings. - [Extension and binding governance](https://a2a-protocol.org/latest/topics/extension-and-binding-governance/): The tiered promotion process that keeps the core stable. ## Build an agent - [Tutorials overview](https://a2a-protocol.org/latest/tutorials/): Index of available tutorials and courses. - [SDKs](https://a2a-protocol.org/latest/sdk/): Install instructions and repository links for all six official SDKs. - [Python API reference](https://a2a-protocol.org/latest/sdk/python/api/): Generated reference for the `a2a-sdk` Python package. - [Code samples](https://github.com/a2aproject/a2a-samples): Sample clients, servers, and agent framework integrations. - [A2A CLI](https://github.com/a2aproject/a2a-cli): Provides Client interfaces to connect with A2A Agents. It comes with Agent Skill and Agent Plugin. ## Optional | Method | Request | Response | Description | | :--- | :--- | :--- | :--- | | `SendMessage` | `SendMessageRequest` | `SendMessageResponse` | Initiates or continues a task. | | `SendStreamingMessage` | `SendMessageRequest` | `stream StreamResponse` | Sends message and receives real-time SSE updates. | | `GetTask` | `GetTaskRequest` | `Task` | Retrieves current task state. | | `ListTasks` | `ListTasksRequest` | `ListTasksResponse` | Filter and paginate tasks. | | `CancelTask` | `CancelTaskRequest` | `Task` | Requests cancellation of a task. | | `SubscribeToTask` | `SubscribeToTaskRequest` | `stream StreamResponse` | Subscribes to updates for an existing task. | | `GetExtendedAgentCard` | `GetExtendedAgentCardRequest` | `AgentCard` | Fetches detailed metadata after authentication. | | `CreateTaskPushNotificationConfig` | `TaskPushNotificationConfig` | `TaskPushNotificationConfig` | Registers a push notification (webhook) config for a task. | | `GetTaskPushNotificationConfig` | `GetTaskPushNotificationConfigRequest` | `TaskPushNotificationConfig` | Retrieves a task's push notification config. | | `ListTaskPushNotificationConfigs` | `ListTaskPushNotificationConfigsRequest` | `ListTaskPushNotificationConfigsResponse` | Lists push notification configs for a task. | | `DeleteTaskPushNotificationConfig` | `DeleteTaskPushNotificationConfigRequest` | `Empty` | Deletes a task's push notification config. | ### 3.1 Streaming Events (`StreamResponse`) Streams return a payload containing one of: - `task`: Full task state. - `message`: A discrete message part. - `status_update`: `TaskStatusUpdateEvent` (taskId, contextId, status). - `artifact_update`: `TaskArtifactUpdateEvent` (taskId, artifact, append, last_chunk). ## 4. Security & Authentication - **Transport:** HTTPS/TLS required for production. - **Authentication:** Declared in `AgentCard` via OpenAPI-style security schemes. - **Push Notifications:** Webhooks secured via authentication tokens/schemes configured per task. ## 5. Implementation Status - **Official SDKs:** Python (`a2a-sdk`), JS/TS (`@a2a-js/sdk`), Java, Go, C#/.NET (`A2A`), and Rust (`a2a-rs`). - **Official CLI:** [a2a-cli](https://github.com/a2aproject/a2a-cli) (`a2a`) — command-line client for discovery, messaging, and task management; built on the A2A Go SDK. - **Integrations:** LangGraph, CrewAI, Google ADK, Genkit, AG2, BeeAI, PydanticAI, and more. ## 6. Key Documents - [Full documentation in one file](https://a2a-protocol.org/llms-full.txt): Every doc page, the proto, and the Python SDK reference concatenated for ingestion. - [Roadmap](https://a2a-protocol.org/latest/roadmap/): Planned & Ongoing protocol work. - [Community](https://a2a-protocol.org/latest/community/): Discord, meetings, and contribution paths. - [Blog](https://a2a-protocol.org/latest/blog/): Release announcements, project news & other stories. - [Partners](https://a2a-protocol.org/latest/partners/): Organizations supporting A2A.