Google's A2A Protocol: What It Actually Does (and What It Doesn't)

Google's Agent-to-Agent (A2A) protocol defines how AI agents discover, authenticate, and collaborate across vendors. How it works, how it compares to MCP and ACP, who supports it, and where the gaps are.

April 5, 2026 · 1 min read

Google released the A2A protocol in April 2025 to solve a specific problem: AI agents from different vendors cannot talk to each other. Every integration is custom. A2A proposes a standard. This page covers the protocol mechanics, how it compares to MCP and ACP, who backs it, and the open questions that will determine whether it matters.

The Problem: Agent Isolation

Enterprise software runs on dozens of specialized systems. CRM, ERP, HRIS, ticketing, billing. Each is getting its own AI agent. Salesforce has Agentforce. SAP has Joule. ServiceNow has Now Assist. These agents are good at operating within their own system. They are bad at working together.

Every pair of systems that need to communicate requires a custom integration. With N systems, that is N*(N-1)/2 integrations. HTTP solved this problem for documents. SMTP solved it for email. A2A attempts to solve it for agent communication.

50+
Launch partners at release
HTTP
Transport protocol
JSON-RPC
Message format
April 2025
Initial release

How A2A Works

A2A defines four primitives. Everything in the protocol is built from these.

Agent Cards

JSON files hosted at /.well-known/agent.json. Describe the agent's name, capabilities, supported input/output types, authentication requirements, and endpoint URL. This is how agents discover each other.

Tasks

The unit of work. Stateful objects with a lifecycle: submitted, working, input-required, completed, failed, canceled. A client agent creates a task, the remote agent processes it, and status updates flow back. Tasks support streaming via Server-Sent Events.

Messages and Parts

Structured communication within tasks. A message contains one or more Parts: text (plain or markdown), files (inline bytes or URI references), or structured data (JSON). Messages have roles (user or agent) and are append-only within a task.

Push Notifications

Webhook-based server-to-client updates. When a task changes state, the server POSTs an update to the client's registered webhook URL. This avoids polling for long-running tasks.

The flow: client fetches a remote Agent Card, checks capabilities, creates a task via JSON-RPC. The remote agent processes it, optionally streaming results via SSE. If it needs more input, it enters input-required and waits.

Agent Cards: Machine-Readable Discovery

Agent Cards are the entry point to A2A. Before two agents can collaborate, they need to know about each other. An Agent Card is a JSON file that an agent publishes at a well-known URL, similar to how robots.txt works for web crawlers or how /.well-known/openid-configuration works for OAuth.

Example Agent Card (/.well-known/agent.json)

{
  "name": "Order Management Agent",
  "description": "Handles order lookups, status checks, and modifications",
  "url": "https://orders.example.com/a2a",
  "version": "1.0.0",
  "capabilities": {
    "streaming": true,
    "pushNotifications": true
  },
  "authentication": {
    "schemes": ["OAuth2"],
    "credentials": "https://auth.example.com/.well-known/oauth-authorization-server"
  },
  "defaultInputModes": ["text/plain", "application/json"],
  "defaultOutputModes": ["text/plain", "application/json"],
  "skills": [
    {
      "id": "order-lookup",
      "name": "Order Lookup",
      "description": "Look up order details by ID or customer email",
      "tags": ["orders", "lookup", "status"]
    },
    {
      "id": "order-modify",
      "name": "Order Modification",
      "description": "Cancel, update shipping, or change quantities",
      "tags": ["orders", "modify", "cancel"]
    }
  ]
}

The skills array is what makes discovery useful. A client scanning for "order status" capability matches against descriptions and tags. Without skills, the client guesses from the agent name alone.

Agent Cards vs. MCP tool definitions

MCP exposes individual tools (functions with input schemas). An Agent Card exposes an entire agent with high-level skills. MCP is function-level. A2A is service-level.

Tasks and Lifecycle

A Task is the unit of work in A2A. Unlike a simple request-response call, a Task is stateful: ID, current status, message history, and metadata. Statefulness matters because agent work is often asynchronous and multi-turn.

StateMeaningTransitions To
submittedTask created by client, not yet picked upworking, failed, canceled
workingAgent is actively processing the taskcompleted, failed, canceled, input-required
input-requiredAgent needs more information from the client to continueworking, failed, canceled
completedTask finished successfully with results in artifactsTerminal state
failedTask encountered an unrecoverable errorTerminal state
canceledTask was canceled by the clientTerminal state

The input-required state is what separates A2A from fire-and-forget RPC. An agent can pause, ask for clarification, and resume. This models real collaboration where agents negotiate rather than completing everything in one pass.

Creating a task (JSON-RPC)

POST /a2a HTTP/1.1
Content-Type: application/json
Authorization: Bearer <token>

{
  "jsonrpc": "2.0",
  "method": "tasks/send",
  "id": "req-001",
  "params": {
    "id": "task-abc-123",
    "message": {
      "role": "user",
      "parts": [{ "type": "text", "text": "Status of order #ORD-2025-7891?" }]
    }
  }
}

For long-running tasks, tasks/sendSubscribe streams Server-Sent Events as the task progresses. No polling needed.

A2A vs MCP: Different Layers, Different Problems

This is the most common point of confusion. A2A and MCP are not competitors. They operate at different layers of the agent stack.

A2AMCP
What it connectsAgent to agentAgent to tool/data source
DirectionHorizontal (peer-to-peer)Vertical (agent calls down to tool)
DiscoveryAgent Cards at /.well-known/agent.jsonTool definitions in server manifest
GranularityService-level (agent skills)Function-level (tool parameters)
StateStateful tasks with lifecycleStateless function calls (mostly)
CommunicationMulti-turn, supports input-requiredSingle request-response per tool call
TransportHTTP + JSON-RPCstdio or HTTP + SSE
Primary use caseCross-vendor agent collaborationGiving agents access to tools and data

The mental model: MCP answers "what can I use?" A2A answers "who can I work with?" In practice, a well-architected agent system uses both. MCP for local tools. A2A for collaboration with other agents. The same agent can participate in both protocols simultaneously.

A2A vs ACP: Enterprise Orchestration vs Developer Workflow

ACP (Agent Communication Protocol) targets a different surface. A2A is about agents collaborating across organizational and vendor boundaries over HTTP. ACP is about agents operating within a developer's IDE via local protocols (stdio, IPC).

A2AACP
Primary axisAgent-to-agentAgent-to-editor
EnvironmentCloud, enterprise, cross-vendorIDE, local
TransportHTTP + JSON-RPCstdio, IPC
Typical participantsCRM, ERP, support agentsCoding, test, review agents in IDE

A2A: how does Salesforce's agent talk to SAP's agent? ACP: how does a coding agent interact with the editor? Different problems, different protocols.

Who Supports A2A

50+ launch partners spanning cloud providers, SaaS vendors, system integrators, and agent frameworks.

Cloud and AI Platforms

Google (Vertex AI, ADK), Salesforce (Agentforce), SAP (Joule), Intuit, Workday, ServiceNow

Agent Frameworks

LangChain, CrewAI, Cohere, LlamaIndex, Genkit. Build A2A-compatible agents without implementing the protocol from scratch.

Enterprise and Consulting

Deloitte, Accenture, KPMG, Wipro, TCS, Infosys, Cognizant, BCG. System integrators signal enterprise deployment demand.

Who is NOT on the list

Anthropic (maintains MCP), OpenAI (Agents SDK), and Microsoft (Copilot Studio) are absent. Whether A2A becomes universal or stays Google-ecosystem depends on whether these three adopt it.

Getting Started with A2A

Google provides a Python SDK (google-a2a) and reference implementations.

Install the A2A SDK

pip install google-a2a

Define an Agent Card

from a2a.types import AgentCard, AgentSkill, AgentCapabilities

card = AgentCard(
    name="Code Review Agent",
    description="Reviews PRs for security and performance issues",
    url="https://review-agent.example.com/a2a",
    version="1.0.0",
    capabilities=AgentCapabilities(streaming=True, push_notifications=False),
    skills=[
        AgentSkill(
            id="security-review",
            name="Security Review",
            description="Scan code changes for common vulnerabilities",
            tags=["security", "code-review"],
        ),
        AgentSkill(
            id="perf-review",
            name="Performance Review",
            description="Identify N+1 queries, memory leaks, bundle size",
            tags=["performance", "code-review"],
        ),
    ],
    default_input_modes=["text/plain"],
    default_output_modes=["text/plain", "application/json"],
)

Handle incoming tasks

from a2a.server import A2AServer, TaskHandler
from a2a.types import Task, TaskState, Message, TextPart

class ReviewHandler(TaskHandler):
    async def on_task_send(self, task: Task) -> Task:
        diff_text = task.messages[-1].parts[0].text
        findings = await run_security_review(diff_text)

        task.state = TaskState.COMPLETED
        task.messages.append(
            Message(role="agent", parts=[TextPart(text=findings)])
        )
        return task

server = A2AServer(card=card, handler=ReviewHandler())
# Run with: uvicorn server:server.app

The SDK handles Agent Card serving, task lifecycle, and JSON-RPC routing. You implement the task handler.

Client: calling a remote A2A agent

from a2a.client import A2AClient

client = A2AClient(url="https://review-agent.example.com/a2a")

# Discover capabilities
card = await client.get_agent_card()

# Send a task
task = await client.send_task(
    task_id="review-001",
    message=Message(
        role="user",
        parts=[TextPart(text="Review this diff:\n" + diff)],
    ),
)

print(f"Status: {task.state}")
print(f"Result: {task.messages[-1].parts[0].text}")

Limitations and Open Questions

A2A solves a real problem, but the protocol has constraints and unanswered questions that will shape its adoption trajectory.

Authentication Complexity

Supports did_auth, API keys, and OAuth2. If two agents use different auth schemes, they cannot communicate without an intermediary. Enterprises must standardize per deployment.

No Offline Support

HTTP-only. No local-first or offline mode. Works for cloud-native enterprise deployments. Limits adoption in developer tooling, edge computing, and air-gapped environments.

Enterprise Focus, Developer Gap

Partners are mostly enterprise vendors and SIs. The protocol design leans cloud-to-cloud. CLI-first and local-first developer tools may find A2A heavyweight.

Missing Key Players

Anthropic, OpenAI, and Microsoft are not launch partners. A communication protocol's value scales with adoption. Half the ecosystem missing means half the value.

Additional gaps: the protocol does not define distributed tracing or correlation IDs across agent boundaries, so debugging multi-agent workflows requires layering on OpenTelemetry or custom trace propagation. Authorization policies (what one agent can ask another to do) are left to implementations. And version negotiation between agents running different A2A spec versions is undefined in the current spec.

Frequently Asked Questions

What is the A2A protocol?

An open protocol from Google (April 2025) for agent-to-agent communication. HTTP + JSON-RPC transport. Agents publish Agent Cards describing capabilities and communicate through stateful Tasks.

What is the difference between A2A and MCP?

Different layers. MCP connects agents to tools and data (vertical, "what can I use?"). A2A connects agents to each other (horizontal, "who can I work with?"). They are complementary.

Who supports A2A?

50+ launch partners: Google, Salesforce, SAP, MongoDB, LangChain, CrewAI, Cohere, Intuit, Workday, Deloitte, Accenture. Anthropic, OpenAI, and Microsoft are not launch partners.

How does agent discovery work?

Agents host an Agent Card (JSON) at /.well-known/agent.json. The card lists capabilities, auth requirements, and endpoint URL. Client agents fetch the card before sending tasks.

Does A2A work offline?

No. HTTP-only. No local-first or offline mode. Designed for cloud-based enterprise deployments.

What is the difference between A2A and ACP?

A2A is agent-to-agent (cross-vendor enterprise orchestration). ACP is agent-to-editor (IDE and developer workflow integration).

What authentication does A2A support?

Three methods: did_auth, API keys, and OAuth2. Deployments choose one. The flexibility is intentional but requires per-deployment standardization.

Is A2A production-ready?

Published spec with Python and TypeScript SDKs, reference implementations, and 50+ partners. Core protocol is stable. Tooling and deployment patterns are still maturing. The missing Anthropic/OpenAI/Microsoft support is the biggest open question.

Building Multi-Agent Systems That Ship Code

Agent protocols define how agents communicate. But the code those agents produce still needs to merge cleanly into your codebase. Morph's Fast Apply model handles LLM-generated edits at 10,500+ tokens per second with deterministic merge behavior. The reliability layer between your agents and your repository.