Skip to content
Open StandardsIntermediate

Google’s A2A Protocol: The Complete Guide for 2026

TG
Tijo Gaucher

April 30, 2026·20 min read

A2A (Agent-to-Agent) is an open protocol — built by Google in April 2025, now governed by the Linux Foundation — that lets AI agents from any framework discover each other and exchange tasks. On April 9, 2026 the Linux Foundation announced A2A had crossed 150+ production organisations, 22,000+ GitHub stars, and SDKs in five production languages (Python, JavaScript, Java, Go, .NET). April 2026 also brought v1.0 stable, signed Agent Cards, the new Agent Payments Protocol (AP2), and GA support inside Microsoft Copilot Studio, Azure AI Foundry, and Amazon Bedrock AgentCore. This guide covers what A2A is, the April 2026 update set in full, how it differs from MCP, the architecture, a working Python implementation, and how Rapid Claw hosts A2A-compatible agents.

Google's A2A Protocol — the complete guide for 2026, with one-year adoption stats and architecture overview

Quick Answer (April 2026)

  • What is A2A? An open protocol (Google, April 2025; Linux Foundation, mid-2025) for AI agents on different frameworks to exchange tasks over JSON-RPC + SSE.
  • Latest A2A update (April 9, 2026): v1.0 stable, signed Agent Cards, 150+ production orgs, 22K+ GitHub stars, SDKs in 5 languages, AP2 payments protocol launched.
  • Where does A2A run? Microsoft Copilot Studio (GA April 2026), Azure AI Foundry, Amazon Bedrock AgentCore Runtime, Google ADK, plus 6 framework SDKs.
  • A2A vs MCP? MCP = agent-to-tool. A2A = agent-to-agent. Both governed by the Linux Foundation Agentic AI Foundation. Use both.

TL;DR

A2A is to agents what HTTP is to web services: a thin, framework-agnostic protocol so an agent built on any framework can delegate work to an agent built on any other framework. It complements MCP — MCP connects agents to tools, A2A connects agents to agents. At the April 2026 one-year mark, v1.0 is stable with signed Agent Cards, 150+ orgs run it in production (Microsoft, AWS, Google, IBM, Salesforce, SAP, ServiceNow, Deutsche Bank), the GitHub repo passed 22K stars, and the new Agent Payments Protocol (AP2) launched alongside with 60+ payment-industry partners. Native support ships in Google ADK, LangGraph, CrewAI, LlamaIndex, Semantic Kernel, AutoGen, and Microsoft Agent Framework for .NET. Rapid Claw deploys every hosted agent with A2A enabled by default.

Want A2A endpoints on every agent from day one?

Try Rapid Claw — 5 msgs free, then $29/m

What Is the A2A Protocol?

The A2A (Agent-to-Agent) protocol is an open specification, originally published by Google in April 2025, that standardises how one AI agent asks another AI agent to do work on its behalf. It defines three things: a way for agents to advertise what they can do, a shape for the tasks they exchange, and a transport for sending those tasks over the wire.

That is deliberately a small surface area. A2A does not tell you which LLM to use, which agent framework to build on, which vector database to query, or how to authenticate your users. Those are left to you. The only thing A2A cares about is the contract between agent A and agent B — so that a LangGraph agent in your finance team can delegate a compliance check to a CrewAI agent in the legal team without a bespoke integration.

The analogy most people reach for is HTTP. HTTP does not care whether your backend is Rails, Django, or Go — it just defines the shape of requests and responses. A2A plays the same role for agents. You get cross-framework interoperability without having to normalise every team onto the same stack.

The three primitives

  • Agent Card — a JSON document served at /.well-known/agent.json describing skills, inputs, outputs, auth, and SLAs.
  • Task — the unit of work. Contains a goal, a thread of messages, and typed artifacts produced by the responding agent.
  • Transport — JSON-RPC 2.0 over HTTPS with Server-Sent Events for streaming updates.
A2A Agent Card — skills, modalities, auth schemes, and streaming support published at /.well-known/agent.json

Latest A2A Protocol Updates (April 2026)

The April 9, 2026 one-year anniversary brought five concrete shipping updates from the Linux Foundation’s Agentic AI Foundation. Every one of them is in production today. If you read only one section of this guide, read this one.

1

A2A v1.0 stable specification

First production-grade release. Adds multi-protocol support, enterprise-grade multi-tenancy, modernised security flows, and a defined deprecation/migration policy. v1.2 followed in late March 2026 and is the current stable release.

2

Signed Agent Cards (cryptographic domain verification)

Agent Cards now ship with a cryptographic signature tied to the publisher’s domain. Callers verify the card before trusting capabilities or auth schemes. This is the change that unblocked enterprise procurement — no more "can we trust this Agent Card came from where it claims to?"

3

Agent Payments Protocol (AP2)

A sister protocol to A2A defining how agents authorise, settle, and reconcile payments. Adds verifiable mandates, deterministic settlement receipts, and per-task spend caps. 60+ payments and financial-services organisations are partners at launch.

4

SDK ecosystem expansion to five languages

A2A now has production-ready SDKs in Python, JavaScript/TypeScript, Java, Go, and .NET — up from a single Python implementation a year ago. The Quarkus team shipped the A2A Java SDK 1.0.0.Beta1; Microsoft Agent Framework for .NET ships A2A v1 native.

5

Cloud-platform GA: Microsoft, AWS, Google

Microsoft Copilot Studio multi-agent orchestration with A2A went GA in April 2026 alongside autonomous Word/Excel/PowerPoint actions. A2A landed in Azure AI Foundry and Amazon Bedrock AgentCore Runtime as native runtimes. Google ADK has had native A2A support since launch.

The headline number from the April 9 press release: 22,000+ GitHub stars on a2aproject/A2A, 150+ production organisations (up from 50 launch partners a year earlier), and a complete cloud-platform sweep across the three major hyperscalers. The protocol has cleared the gap from spec to standard.

One Year In: Adoption and Production Footprint

When Google announced A2A at Cloud Next 2025 it had roughly 50 launch partners. That number has now tripled. The most cited figure in the April 2026 Agentic AI Foundation status report is 150+ organisations with A2A in production — not in pilot, not on a roadmap, but routing real tasks between agents today.

Concrete examples:

Salesforce

Agentforce exposes every custom agent as an A2A endpoint; partner agents can be invoked directly from Flow.

SAP

Joule orchestrator delegates subtasks (legal review, finance checks) to partner A2A agents across S/4HANA.

ServiceNow

Now Assist registers A2A agents as skills; incident triage fans out to specialised agents.

Deutsche Bank

Internal platform of 40+ A2A agents for trade reconciliation, KYC, and regulatory reporting.

Box

Box AI publishes a document-analysis A2A agent used by Google ADK and LangGraph clients.

Accenture

Client-facing agents call internal tax, audit, and supply-chain A2A agents via a unified gateway.

Governance moved under the Linux Foundation’s Agentic AI Foundation in mid-2025, alongside MCP. That transition mattered: it signalled to large enterprises that A2A was not a Google-only spec they could be locked into, and removed the last procurement objection for conservative buyers. Spec changes now go through a public RFC process, and v1.2 (landed in March 2026) is the current stable release.

Framework support is equally broad. Native A2A is in Google ADK, LangGraph, CrewAI, LlamaIndex Agents, Semantic Kernel, AutoGen, and Microsoft Agent Framework for .NET. The SDK ecosystem now spans five production languages — Python, JavaScript/TypeScript, Java (Quarkus shipped 1.0.0.Beta1 in Q1 2026), Go, and .NET — up from a single Python implementation a year ago. For a broader landscape view, see our framework comparison and the Google ADK vs LangChain vs CrewAI breakdown.

A2A vs MCP: Two Layers, Not Two Choices

Almost every question I get about A2A is some version of “do I use A2A or MCP?” The answer is both, because they solve different problems at different layers.

QuestionMCPA2A
Who talks to whom?Agent → tool / data sourceAgent → agent
Unit of workTool call / resource readTask (multi-turn, streaming)
DiscoveryTool list from MCP serverAgent Card
Transportstdio / HTTP+SSE / WebSocketHTTP+SSE (JSON-RPC 2.0)
StateUsually stateless per callStateful tasks with history
GovernanceAgentic AI FoundationAgentic AI Foundation

A realistic production agent is both at once. It is an MCP client when it reaches for Postgres, GitHub, or a bespoke internal API. It is an A2A server when another agent calls it with a task. It is an A2A client when it delegates a sub-task to a specialist agent. Mentally separating these two axes is the fastest way to stop the framework-vs-framework debates.

A useful rule of thumb

If the thing on the other end is deterministic and takes <1 second to answer, reach for MCP. If it involves reasoning, may take seconds to minutes, and streams partial output, reach for A2A.

A2A vs MCP: two layers, not two choices — A2A connects agents to agents, MCP connects agents to tools

Architecture Deep Dive

A2A architecture — Agent Card, Task, Transport: the three primitives of the protocol

The Agent Card

An Agent Card is a JSON document that lives at a well-known URL. A client fetches it once, caches it, and uses it to decide whether this agent can help with the task at hand. Here is a trimmed real example:

/.well-known/agent.json
{
  "name": "contract-reviewer",
  "description": "Reviews commercial contracts, flags risky clauses, suggests redlines.",
  "version": "1.4.2",
  "url": "https://agents.rapidclaw.dev/contract-reviewer",
  "provider": { "organization": "Acme Legal", "url": "https://acme.example" },
  "authentication": {
    "schemes": ["bearer", "mtls"],
    "scopes": ["contracts:read", "contracts:write"]
  },
  "skills": [
    {
      "id": "review-msa",
      "name": "Review a Master Service Agreement",
      "description": "Flag risky clauses and propose redlines for an MSA.",
      "inputModes":  ["text/plain", "application/pdf"],
      "outputModes": ["text/markdown", "application/json"],
      "examples": ["Review the attached MSA for an SMB vendor."]
    }
  ],
  "defaultModalities": {
    "input":  ["text/plain", "application/pdf"],
    "output": ["text/markdown"]
  },
  "supportsStreaming": true,
  "supportsPushNotifications": true
}

A good Agent Card is the most important document you’ll write. It is what other teams read to decide whether to integrate with you. Treat it like an OpenAPI spec: version it, publish it, and do not break existing callers without a deprecation window.

Tasks and the task lifecycle

A Task is the unit of work. It has an ID, a state machine (submittedworkinginput-requiredcompleted/failed/canceled), a message history, and a list of typed artifacts produced by the server.

Two things to keep in mind about tasks:

  • They can be long-running. An A2A agent might take minutes to come back. Clients should use SSE for streaming updates or register a push-notification URL for fire-and-forget flows.
  • They can be multi-turn. The agent can return input-required to ask for clarification. This is how human-in-the-loop patterns survive the hand-off between agents.
A2A Task lifecycle — submitted, working, input-required, completed — stateful streaming with JSON-RPC over HTTP + SSE

Transport: JSON-RPC over HTTP + SSE

The transport is intentionally boring. Requests are JSON-RPC 2.0. The server responds with either a single JSON envelope or an text/event-stream for streaming tasks. The methods you care about 90% of the time are:

  • tasks/send — create a task (non-streaming)
  • tasks/sendSubscribe — create a task and stream events
  • tasks/get — poll task state
  • tasks/cancel — cancel a running task

Because the transport is HTTP, every existing piece of infrastructure — load balancers, WAFs, mTLS, OIDC, OpenTelemetry — works without modification. This is a large part of why A2A landed in the enterprise so fast.

Building an A2A Agent in Python

Let’s build a minimal A2A server using the reference Python SDK. The agent exposes a single skill — summarising a chunk of text — and supports streaming responses.

summariser_agent.py
from a2a.server import A2AServer, AgentCard, Skill, TaskContext
from a2a.types import Message, TextPart, TaskState
from anthropic import Anthropic

card = AgentCard(
    name="summariser",
    description="Summarises long documents into short briefs.",
    version="1.0.0",
    url="https://agents.example.com/summariser",
    skills=[
        Skill(
            id="summarise",
            name="Summarise a document",
            description="Produce a 5-bullet brief from any text input.",
            input_modes=["text/plain"],
            output_modes=["text/markdown"],
            examples=["Summarise this article: ..."],
        )
    ],
    supports_streaming=True,
    authentication={"schemes": ["bearer"]},
)

client = Anthropic()

async def handle_task(ctx: TaskContext):
    user_text = ctx.latest_user_text()

    # Tell the client we're working
    await ctx.update_status(TaskState.WORKING)

    # Stream tokens from the model back to the A2A client
    with client.messages.stream(
        model="claude-opus-4-7",
        max_tokens=1024,
        system="You produce tight, 5-bullet briefs. Markdown only.",
        messages=[{"role": "user", "content": user_text}],
    ) as stream:
        for chunk in stream.text_stream:
            await ctx.stream_message(
                Message(role="agent", parts=[TextPart(text=chunk)])
            )

    await ctx.complete()

server = A2AServer(agent_card=card, task_handler=handle_task)

if __name__ == "__main__":
    server.run(host="0.0.0.0", port=8080)

That’s a complete A2A agent in under 40 lines. The SDK handles the JSON-RPC envelopes, SSE framing, and the task state machine. You plug in whatever reasoning you want — a Claude call, a LangGraph graph, a CrewAI crew — behind handle_task.

Calling an A2A agent from a client

From the other side, a client agent fetches the Agent Card, decides the remote agent is a good fit, and submits a task:

caller.py
import asyncio
from a2a.client import A2AClient

async def main():
    client = A2AClient.from_url(
        "https://agents.example.com/summariser",
        auth={"bearer": "$SUMMARISER_TOKEN"},
    )

    # Fetch and inspect the Agent Card
    card = await client.get_agent_card()
    assert any(s.id == "summarise" for s in card.skills)

    # Send a task and stream the response
    async for event in client.send_task_streaming(
        skill_id="summarise",
        message="Summarise this quarterly report: ...",
    ):
        if event.type == "message":
            print(event.text, end="", flush=True)
        elif event.type == "task_status":
            print(f"\n[status] {event.state}")

asyncio.run(main())

Notice there is zero coupling to the remote agent’s framework. The caller does not know (or care) whether the summariser is Claude, GPT-5, a LangGraph state machine, or a hand-rolled finite-state agent. That is the point.

Production Concerns

Authentication and authorisation

A2A declares auth schemes in the Agent Card but delegates enforcement to you. In practice: mTLS between agents inside the same trust boundary, OAuth 2.1 with scoped tokens across boundaries. Never share a root key — scope credentials per caller per skill.

Network isolation and firewalls

Treat A2A endpoints like any other HTTP service: default-deny egress, allowlist specific peer agents, and rate-limit per caller. The four-layer approach from our AI agent firewall guide works unchanged for A2A.

Observability

A2A tasks have stable IDs and a clear state machine — perfect for tracing. Propagate a W3C traceparent header across the HTTP hop and you get end-to-end spans that cross framework boundaries.

Cost control

Delegating to another agent means handing off token spend. Set per-skill budgets in the Agent Card, enforce them on the server side, and log token usage on every task. Otherwise a chatty caller can quietly drain your LLM budget.

For deeper treatments of each of these, see our posts on AI agent firewalls, AI agent observability, runaway token costs, and testing agents in production.

How Rapid Claw Hosts A2A-Compatible Agents

Rapid Claw is managed hosting for AI agents — OpenClaw, Hermes, Google ADK, and custom Python agents. Every agent you deploy on Rapid Claw is A2A-compatible the moment it boots. You do not write the JSON-RPC wiring, the SSE handler, or the Agent Card — we generate those from your agent definition.

What you get out of the box:

Auto-generated Agent Card

Skills, modalities, auth schemes, and streaming support populated from your agent config and published at /.well-known/agent.json.

Per-tenant agent directory

A private A2A registry so agents in the same tenant can discover each other without leaking to the public internet.

mTLS between agents

Intra-tenant traffic uses automatically rotated certificates — no manual PKI, no shared bearer tokens.

Streaming by default

tasks/sendSubscribe works on every agent with no extra setup. Backpressure and heartbeat handling included.

Scoped OAuth for external callers

Issue per-caller, per-skill tokens with budget limits. Revoke instantly from the dashboard.

One-click A2A gateways

Expose a curated subset of your internal agents to partners via a signed-card gateway with its own rate limits.

If you are already running agents on your own infrastructure and just want the A2A layer, that works too — Rapid Claw can front existing agents as a protocol gateway without requiring a full migration. For the background on managed hosting tradeoffs, see our AI agent hosting complete guide and the enterprise deployment guide.

The boring advantage of A2A

Every hour your team spends gluing LangGraph to CrewAI to your homegrown agent is an hour not spent on the actual product. A2A makes that glue disappear. The teams that adopt it early stop having framework debates and start having capability debates — which is the conversation that actually moves the business.

Common Pitfalls (and How to Avoid Them)

1. Treating A2A like a REST API

The temptation is to write request/response handlers and call it done. But A2A tasks are stateful and potentially long-running. If your agent returns a single JSON blob and exits, you lose the streaming and human-in-the-loop patterns that make A2A worth adopting. Use the task state machine — emit working updates, stream partial artifacts, and ask for clarification with input-required.

2. Vague Agent Cards

A skill description of “does data stuff” is useless to another agent. Write descriptions a planning agent can route on: what it does, what it does not do, typical latency, and which modalities it accepts. The Agent Card is the API contract — invest in it.

3. Forgetting budgets

The first time a caller fan-outs 200 tasks per minute into your agent, you will wish you had set a per-caller budget. Do it up-front. Related reading: why AI agents fail in production.

4. Running A2A without observability

Debugging a chain of three agents across three frameworks without distributed tracing is miserable. Propagate traceparent, log task IDs everywhere, and keep a dead-letter store for failed tasks. If this is new territory, start with our step-by-step debugging guide.

Frequently Asked Questions

Ship A2A-compatible agents in minutes

Rapid Claw deploys your agent with an auto-generated Agent Card, streaming tasks, mTLS between agents, and scoped OAuth for external callers — no JSON-RPC plumbing required.

Deploy with A2A enabled