Skip to main content
Multi-Agent Systems

A2A Protocol: Google's Agent-to-Agent Standard Explained

A2A Protocol is Google's open standard for agent-to-agent communication — the missing layer that lets agents from different frameworks, vendors, and runtimes collaborate. Here is how A2A works, how it differs from MCP, and the enterprise adoption pattern we recommend.

Inductivee Team· AI EngineeringApril 20, 202615 min read
TL;DR

TL;DR — A2A (Agent2Agent) Protocol is an open standard, originally introduced by Google in April 2025 and donated to the Linux Foundation later that year, that lets autonomous agents discover each other, exchange structured tasks, stream intermediate updates, and return artifacts — across vendor boundaries, frameworks, and runtimes. A2A is to multi-agent systems what HTTP is to web services: a transport-level agreement that turns proprietary agents into composable building blocks. It is not a replacement for the Model Context Protocol (MCP) — the two are complementary. MCP standardises how a single agent talks to its tools; A2A standardises how agents talk to each other. Enterprises that ignored MCP for two years and ended up with sprawling, ungoverned tool integrations are about to make the same mistake with agent-to-agent traffic. The window to adopt A2A intentionally is now.

What the A2A Protocol Actually Is

A2A Protocol — short for Agent2Agent Protocol — is an open specification for inter-agent communication. It was unveiled by Google Cloud at Google Cloud Next in April 2025 with more than fifty launch partners including Atlassian, Box, Cohere, Intuit, LangChain, MongoDB, PayPal, Salesforce, SAP, ServiceNow, and Workday. In mid-2025 Google donated the specification and reference implementations to the Linux Foundation, where it now sits alongside other neutral-governance standards.

The protocol is intentionally narrow. It defines five things and stops. First, an Agent Card — a JSON document, typically served at `/.well-known/agent.json`, that describes an agent's identity, capabilities, supported skills, authentication requirements, and endpoint URLs. Second, a Task object — the unit of work an agent accepts, with a unique ID, an input message, optional metadata, and a state machine that progresses through `submitted → working → input-required → completed | failed | canceled`. Third, Messages — the conversational turns exchanged within a task, each containing one or more Parts (text, file references, structured data). Fourth, Artifacts — the typed outputs an agent produces during a task (a generated report, a data file, a structured payload). Fifth, a small set of JSON-RPC 2.0 methods over HTTP — `tasks/send`, `tasks/sendSubscribe`, `tasks/get`, `tasks/cancel`, `tasks/pushNotification/set` — that move tasks through their lifecycle.

Everything else — the model behind the agent, the framework it uses internally, the language it is written in, the cloud it runs on — is opaque to the protocol. An A2A-compliant agent built on LangGraph can hand a task to an A2A-compliant agent built on CrewAI, which can in turn delegate to an agent built on Vertex AI's Agent Development Kit, and none of them need to know anything about the others' internals. That opacity is the entire point.

Why Agent-to-Agent Communication Needs a Protocol At All

By 2026, most large enterprises run more than one agent framework in production. Marketing might be on a no-code platform like Microsoft Copilot Studio. Engineering ships internal tools on LangGraph. The data team has standardised on Vertex AI Agent Builder. Customer support is using a vendor SaaS whose agents are a black box. Each of these populations has been deployed independently, by different teams, on different timelines, with different governance.

The second-order question — how do these agents collaborate when a workflow crosses team boundaries — has historically been answered with point-to-point integrations. Team A exposes a REST API, Team B writes a custom client, both teams pin to a schema, and any change requires coordinated releases. This works for two or three integrations. It collapses at twenty. The combinatorial cost of N agents needing to talk to N other agents is the same problem that drove the adoption of HTTP, GraphQL, and gRPC in earlier eras of distributed systems.

A2A is the engineering answer. A single, well-specified protocol that any agent can implement, any client can speak, and any gateway can mediate. The economic case is identical to the case for MCP at the tool layer: the cost of N×M custom integrations is replaced with the cost of N+M standard adapters. The governance case is stronger: a single A2A gateway becomes the place where authentication, audit logging, rate limiting, content filtering, and policy enforcement happen for inter-agent traffic — the same way an API gateway became the chokepoint for external API traffic a decade ago.

A2A's Five Core Concepts in Engineering Detail

Agent Card — The Discovery Document

An Agent Card is a public JSON descriptor — usually at `https://your-agent.example.com/.well-known/agent.json` — that announces what an agent is and how to talk to it. It includes the agent's name, description, version, supported authentication schemes (bearer tokens, API keys, OAuth2, mTLS), the URL of its A2A JSON-RPC endpoint, the capabilities it exposes (streaming, push notifications, multi-modal input), and an array of AgentSkills — named, machine-readable descriptions of the things this agent knows how to do. The Agent Card is what makes agents discoverable across organisational boundaries: a calling agent fetches the Card, parses the skills, decides whether the target agent is the right delegate, and proceeds. In enterprise deployments, an internal Agent Registry typically aggregates Cards from all approved agents the way a service mesh's control plane aggregates service definitions.

Task — The Unit of Work With a Lifecycle

A Task is the fundamental object the protocol moves around. When agent A wants agent B to do something, it creates a Task containing an initial Message and posts it to B's endpoint. The Task carries an ID, a session ID for grouping related work, a state, and an accumulating history of messages and artifacts. The state machine is small but expressive: `submitted` (received but not started), `working` (in progress), `input-required` (paused waiting for human or upstream input), `completed`, `failed`, and `canceled`. Crucially, the Task is durable from the protocol's perspective — long-running operations that take minutes, hours, or days are first-class. The calling agent can poll, subscribe via Server-Sent Events, or register a webhook for push notifications; the protocol does not assume the caller is connected continuously. This is where A2A diverges sharply from naive HTTP request-response designs.

Message and Part — Multi-Modal Conversation

Messages are the conversational atoms inside a Task. Each Message has a role (`user` or `agent`) and one or more Parts. A Part is a typed payload: a TextPart (plain or markdown), a FilePart (a reference to or inline binary), or a DataPart (structured JSON). This three-part design is deliberate — it lets agents exchange not just text but tabular data, generated files, screenshots, audio, or any structured output without inventing a side-channel. For multi-modal agents, this means an A2A request can include a PDF as input and receive an HTML report and a CSV as output, with all of it tracked inside the same Task history.

Artifact — Typed, Addressable Output

Where Messages capture conversation, Artifacts capture deliverables. An Artifact is a named, indexed output an agent produces during a Task — for example, `customer_report.pdf`, `risk_score.json`, or `revised_contract.docx`. Artifacts have an explicit lifecycle and can be streamed in chunks for long generations. Treating outputs as first-class objects (rather than embedded in a final message) is what makes A2A genuinely useful in enterprise pipelines: the upstream system can hand an Artifact to a downstream system without parsing free text, and the audit trail makes it explicit what each agent contributed.

Streaming and Push Notifications

Real enterprise agents do not return instantly. A research agent might run for ninety seconds; a procurement agent might wait three days for a supplier response. A2A handles both with two transport modes: Server-Sent Events for synchronous streaming (the caller stays connected and receives intermediate Messages and Artifacts as the Task progresses) and push notifications for asynchronous resumption (the caller registers a webhook URL and disconnects; the agent posts updates back when state changes). Together these let agents collaborate over the full latency spectrum without forcing a one-size-fits-all execution model — a property that becomes essential the moment your agent population includes anything more complex than synchronous chatbots.

A2A vs MCP: When To Use Which

DimensionMCP (Model Context Protocol)A2A (Agent-to-Agent Protocol)
Primary purposeConnect a single agent to tools, resources, and promptsConnect agents to each other for delegated work
Communication directionVertical: agent → toolHorizontal: agent ↔ agent
OriginAnthropic, November 2024Google, April 2025; donated to Linux Foundation in 2025
Core abstractionsTools, Resources, PromptsAgent Card, Task, Message, Artifact, AgentSkill
Task lifecycleSynchronous tool calls (stateless per call)Stateful tasks with submitted → working → completed lifecycle
Long-running operationsNot the focus; tool calls are typically shortFirst-class via SSE streaming and webhook push notifications
DiscoveryClient connects to known servers; capabilities negotiated at handshakePublic Agent Card at /.well-known/agent.json; central registries common in enterprise
Typical callerAn agent's runtimeAnother agent (often itself an MCP client to its own tools)
ReplacesBespoke per-framework tool adaptersBespoke point-to-point agent integrations
Use both whenAn agent needs tools (almost always)Multiple specialised agents must collaborate across teams or vendors

The Most Common Misconception: A2A Does Not Replace MCP

The single most common question we field about A2A is whether it makes MCP obsolete. It does not. The two protocols solve different problems and are designed to compose.

A single agent's runtime almost always needs both. Internally, the agent uses MCP to discover and invoke its tools — query a database, post to Slack, read a Drive folder, call an internal API. Externally, the same agent exposes an A2A endpoint so that other agents can delegate work to it. From the outside, the agent is an A2A service. From the inside, it is an MCP client. The two protocols meet at the agent's process boundary and never overlap.

A useful mental model: MCP is the agent's nervous system — sensors and effectors that let it perceive and act on its immediate environment. A2A is the agent's social protocol — how it negotiates work with other agents in its network. An enterprise that has invested heavily in MCP servers has built up a strong tool layer; layering A2A on top lets those same tool-equipped agents collaborate. An enterprise that only has A2A endpoints but no MCP integration ends up with agents that can talk to each other but cannot actually do anything. Both layers are required for a complete agentic stack.

A Minimal A2A Server and Client in Python

python
# ─── A MINIMAL A2A AGENT SERVER ──────────────────────────────────────
# Exposes an Agent Card at /.well-known/agent.json and a JSON-RPC
# endpoint at /a2a. Real implementations use the official SDK
# (python-a2a or @a2a-protocol/sdk for TypeScript) — this hand-rolled
# version is illustrative.

from fastapi import FastAPI, Request
from uuid import uuid4
from datetime import datetime, timezone

app = FastAPI()
TASKS: dict[str, dict] = {}

AGENT_CARD = {
    "name": "Risk Scoring Agent",
    "description": "Scores enterprise customer accounts on credit and churn risk.",
    "version": "1.2.0",
    "url": "https://risk-agent.example.com/a2a",
    "authentication": {"schemes": ["bearer"]},
    "capabilities": {"streaming": True, "pushNotifications": True},
    "skills": [
        {
            "id": "score_account",
            "name": "Score a customer account",
            "description": "Returns a 0–100 risk score plus rationale.",
            "inputModes": ["text", "data"],
            "outputModes": ["data"],
        }
    ],
}

@app.get("/.well-known/agent.json")
def agent_card():
    return AGENT_CARD

@app.post("/a2a")
async def a2a_endpoint(request: Request):
    body = await request.json()
    method = body["method"]
    params = body.get("params", {})

    if method == "tasks/send":
        task_id = params.get("id") or str(uuid4())
        message = params["message"]
        # Real agent would invoke its scoring model here.
        score = run_risk_model(message)
        TASKS[task_id] = {
            "id": task_id,
            "status": {"state": "completed",
                       "timestamp": datetime.now(timezone.utc).isoformat()},
            "artifacts": [{
                "name": "risk_score.json",
                "parts": [{"type": "data", "data": score}],
            }],
            "history": [message],
        }
        return {"jsonrpc": "2.0", "id": body.get("id"), "result": TASKS[task_id]}

    if method == "tasks/get":
        return {"jsonrpc": "2.0", "id": body.get("id"),
                "result": TASKS[params["id"]]}

    return {"jsonrpc": "2.0", "id": body.get("id"),
            "error": {"code": -32601, "message": "Method not found"}}


# ─── A MINIMAL A2A CLIENT ────────────────────────────────────────────
# A different agent — say, a customer-onboarding orchestrator — calls
# the risk agent to delegate scoring as part of a longer workflow.

import httpx

async def delegate_risk_scoring(customer_id: str) -> dict:
    async with httpx.AsyncClient(timeout=30) as client:
        # Discover capabilities (in production: cached or via registry)
        card = (await client.get(
            "https://risk-agent.example.com/.well-known/agent.json"
        )).json()

        # Send the task
        resp = await client.post(
            card["url"],
            headers={"Authorization": f"Bearer {RISK_AGENT_TOKEN}"},
            json={
                "jsonrpc": "2.0",
                "id": "req-1",
                "method": "tasks/send",
                "params": {
                    "message": {
                        "role": "user",
                        "parts": [{"type": "data",
                                   "data": {"customer_id": customer_id}}],
                    }
                },
            },
        )
        task = resp.json()["result"]
        # Pull the typed artifact, not free-text parsing
        return task["artifacts"][0]["parts"][0]["data"]

The orchestrator calls the risk agent without knowing what model, framework, or runtime is behind it. The Agent Card is the only contract.

Where A2A Genuinely Earns Its Place in the Enterprise Stack

Cross-Vendor Agent Collaboration

The most cited use case at A2A's launch was agent collaboration across vendor boundaries. A Workday HR agent surfaces a hiring requisition. A Salesforce account agent identifies the candidate's prior interactions. A custom internal compliance agent verifies background-check status. In a pre-A2A world, this workflow would require three custom integrations, three sets of credentials, and three brittle schema contracts. With A2A, it is three Agent Cards, one orchestrator, and a shared task graph. The win is not just lower integration cost — it is that the orchestrator can be swapped, the vendors can be swapped, and the workflow keeps running.

Specialist Agent Marketplaces

A2A unlocks the same composability that REST and OpenAPI unlocked for SaaS APIs a decade ago. Vertical-specialist agents — clinical-coding agents in healthcare, KYC agents in financial services, freight-customs agents in logistics — can be published as A2A endpoints and consumed by any compliant orchestrator. We expect this to be the dominant commercialisation pattern for specialist agentic capability over 2026–2027, in the same way that Stripe, Twilio, and Plaid became consumable building blocks via standard APIs.

Long-Running Workflow Coordination

Most enterprise workflows are not synchronous. Procurement cycles last days. Insurance claims process over weeks. A2A's first-class support for long-running tasks — via push notifications and the `input-required` state — makes it well-suited to coordinating these workflows in a way that REST APIs never were. The coordinating agent submits a task, registers a webhook, and resumes when the downstream agent has progress. This is a much better fit for real business processes than fire-and-poll request-response.

Human-in-the-Loop at Protocol Level

The `input-required` state is a small but consequential design choice. It gives the protocol an explicit way to pause for human input mid-task — an approval, a clarification, a missing document — without requiring the caller to invent its own out-of-band signalling. For regulated workflows where every irreversible action needs sign-off, this hooks neatly into existing approval systems and keeps the audit trail inside the Task history.

Centralised Governance Through an A2A Gateway

The same architectural pattern that turned API gateways into the de-facto chokepoint for service-to-service traffic applies here. An internal A2A gateway sits in front of every enterprise agent, validates the calling agent's identity, applies rate limits and quotas, redacts sensitive data from messages, and writes structured audit logs to the security data lake. Every cross-agent call passes through the gateway. This is the only realistic way to keep agentic sprawl under control once an enterprise has more than a handful of agents in production — and it is much harder to retrofit than to design in from the start.

Warning

The biggest A2A pitfall in enterprise adoption is treating the protocol as a substitute for governance. A2A standardises the wire format, not the policy. Authentication, authorisation, content filtering, PII redaction, rate limiting, and audit logging are all your responsibility. If you publish an A2A endpoint on the open internet without any of these, you have built a remote-code-execution machine that can be invoked over JSON-RPC. Treat A2A endpoints with the same operational rigour as any other internet-facing API — and prefer to expose them via an A2A gateway rather than directly.

How to Adopt A2A Without Breaking What You Already Have

The right A2A adoption pattern in 2026 is incremental. There is no value in rewriting your existing agent integrations on day one — and there is significant risk in doing so before your team has internalised the protocol's idioms.

The approach we use across Inductivee's enterprise engagements is a four-phase rollout. Phase one is wrapping — pick the two agents that already need to talk to each other most painfully and put thin A2A facades in front of both. Both agents continue to do exactly what they did; the facade just translates their existing inputs and outputs into Tasks, Messages, and Artifacts. Phase two is one new integration — the next time a workflow requires a third agent, build it A2A-native rather than as a custom point-to-point integration. Phase three is the gateway — introduce a central A2A gateway as soon as you have three or more agents talking, before the topology becomes a mesh. Phase four is the registry — publish all internal Agent Cards to a discoverable registry so new agents and new workflows can find existing capabilities without tribal knowledge.

The key discipline across all four phases is to keep MCP and A2A separate in your team's vocabulary. Tool integration is MCP. Agent integration is A2A. Conflating them — or building one when you needed the other — is how teams end up with the worst of both protocols and the benefits of neither.

Five Decisions Every Enterprise A2A Adopter Has to Make Early

These are the design decisions that have the longest blast radius if you get them wrong. Make them deliberately, not by default:

  • **Agent identity model.** How do agents authenticate to each other? Bearer tokens scoped per skill, mTLS with a private CA, or OAuth2 with a workforce identity provider? Each has tradeoffs around rotation, revocation, and observability. We default to mTLS for internal traffic and OAuth2 for partner-facing endpoints.
  • **Gateway-first or peer-to-peer.** Will all A2A traffic flow through a central gateway, or will agents call each other directly? Gateway-first is more governable but adds latency and a single point of failure. Peer-to-peer is faster and simpler but harder to audit. For most enterprises, gateway-first wins by a wide margin once the agent population exceeds three.
  • **Task durability.** Where do Tasks live? In the agent's memory? A shared Postgres? A durable workflow engine like Temporal? The choice determines whether your agents survive restarts, scale horizontally, and resume long-running work after outages. We treat durable Task storage as non-negotiable for production deployments — see our note on agent memory architecture for why.
  • **Schema discipline for Artifacts.** Free-text Artifacts are a trap. They look easy on day one and become impossible to evolve on day ninety. Define typed schemas (JSON Schema, Pydantic, or protobuf) for every Artifact your agents produce, version them explicitly, and reject Artifacts that fail validation at the gateway. This is the single highest-leverage decision in the whole adoption.
  • **Cross-agent observability.** Standard logs are not enough. You need distributed tracing across agent boundaries — every Task carries a correlation ID that propagates into the called agent's traces, so a failure in step seven of a twelve-step delegation chain is debuggable. OpenTelemetry semantic conventions for A2A are emerging; adopt them now rather than rebuilding later.

Where A2A Fits in Inductivee's 2026 Engineering Practice

Across our agentic engagements, the pattern over the past nine months has been consistent: enterprises that started multi-agent work in 2024–2025 hit the integration wall around the time their agent count crossed five. A2A is the protocol layer that lets them break through that wall without throwing away the agents they already shipped.

For new engagements we now propose A2A from the first design conversation. The cost of designing agents to be A2A-native from day one is marginal — the SDKs are mature enough that exposing an Agent Card and JSON-RPC endpoint is a matter of hours, not weeks. The cost of retrofitting A2A onto an existing population of point-to-point integrations is much higher, both in engineering time and in the political cost of touching production systems that work.

We expect 2026 to be the year A2A crosses from "interesting standard" to "default assumption" in enterprise agent architecture, in roughly the same way MCP crossed that line in 2025. Teams that adopt early will accumulate optionality — the freedom to swap frameworks, add specialist agents, and integrate vendor capabilities with a configuration change rather than a sprint. Teams that wait will spend 2027 doing the same migration work, under more pressure, with more legacy to unwind.

If this matches a problem you are working on now, our team can help scope it — we have shipped A2A and MCP-based architectures across financial services, healthcare, and logistics engagements over the past year and the playbook is well-tested.

Frequently Asked Questions

What is the A2A protocol?

A2A (Agent2Agent) Protocol is an open specification originally introduced by Google in April 2025 and later donated to the Linux Foundation. It standardises how autonomous AI agents discover each other, exchange structured tasks, stream intermediate updates, and return typed outputs (Artifacts). It uses JSON-RPC 2.0 over HTTP, supports Server-Sent Events for streaming and webhooks for push notifications, and is intentionally framework-agnostic — agents built on LangGraph, CrewAI, Vertex AI, Semantic Kernel, or any custom runtime can interoperate as long as they implement the protocol.

What is the difference between A2A and MCP?

MCP (Model Context Protocol, from Anthropic) standardises how a single agent talks to its tools and data sources — it is vertical, agent-to-tool. A2A (Agent2Agent Protocol, from Google) standardises how agents talk to each other — it is horizontal, agent-to-agent. The two protocols are complementary, not competitive. A typical production agent is both: an A2A server (other agents call it) and an MCP client (it calls its own tools). Enterprises building serious multi-agent systems in 2026 typically adopt both protocols together.

Who created the A2A protocol and is it really open?

Google Cloud unveiled A2A at Google Cloud Next in April 2025 with more than fifty launch partners including Atlassian, Box, Cohere, Intuit, LangChain, MongoDB, PayPal, Salesforce, SAP, ServiceNow, and Workday. Later in 2025 Google donated the specification, the reference implementations, and the trademark to the Linux Foundation, which now stewards the standard under neutral governance. The specification, SDKs, and reference servers are open source. Adoption is not gated to Google Cloud or any specific platform.

Do I need A2A if I am already using LangGraph or CrewAI?

Within a single agent system that lives entirely inside one framework, no. LangGraph and CrewAI both have native ways for their internal agents to coordinate, and adding A2A on top adds protocol overhead with no benefit. A2A becomes valuable the moment you need to coordinate agents across framework boundaries, across team boundaries, or with external vendor agents. The classic trigger is a workflow that needs to pull in an agent your team did not build — a vendor agent, a partner-organisation agent, or an internal agent owned by a different team on a different framework.

How does A2A handle long-running tasks?

A2A treats long-running tasks as first-class. The Task object has an explicit state machine — submitted, working, input-required, completed, failed, canceled — that does not assume the caller stays connected. Callers can subscribe via Server-Sent Events for streamed updates, register a webhook for push notifications when state changes, or simply poll periodically with the tasks/get method. This makes the protocol well-suited to enterprise workflows that legitimately take minutes, hours, or days, rather than forcing them into a synchronous request-response shape that they do not naturally fit.

What are the security risks of exposing an A2A endpoint?

An A2A endpoint is functionally a remote-procedure-call interface to an autonomous agent. Without strong controls it can be abused to invoke tools, exfiltrate data, or exhaust budgets. Mandatory mitigations: authenticated transport (mTLS for internal, OAuth2 or signed bearer tokens for partner-facing), per-skill authorisation scoping, rate limits and quotas at a gateway, content filtering on inbound Messages to defend against prompt injection, schema validation on outbound Artifacts, structured audit logging of every Task, and circuit breakers that prevent runaway execution. Treat any A2A endpoint with the same operational rigour as a public API — and prefer to expose it via an A2A gateway rather than directly.

Should I adopt A2A now or wait for it to mature?

Adopt now if you have three or more agents already collaborating, or if you anticipate cross-vendor agent integration in the next twelve months. The reference implementations and major-framework SDKs are mature enough for production. The cost of designing new agents A2A-native is marginal; the cost of retrofitting A2A onto an existing mesh of point-to-point integrations is significant. The protocol itself is stable under Linux Foundation governance, so the lock-in risk is low. The teams that wait are not avoiding migration work — they are deferring it to a moment when they will have more legacy and less time.

Written By

Inductivee Team — AI Engineering at Inductivee

Inductivee Team

Author

Agentic AI Engineering Team

The Inductivee engineering team — a remote-first group of multi-agent orchestration specialists, RAG pipeline architects, and data liquidity engineers who have shipped 40+ agentic deployments across 25+ enterprises since 2012. Our writing is grounded in what we actually build, break, and operate in production.

Agentic AI ArchitectureMulti-Agent OrchestrationLangChainLangGraphCrewAIMicrosoft AutoGen
LinkedIn profile

Inductivee is a remote-first agentic AI engineering firm with 40+ production deployments across 25+ enterprises since 2012. Our engineering content is written by active practitioners and technically reviewed before publication. Compliance: SOC2 Type II, HIPAA, GDPR, ISO 27001.

Ready to Build This Into Your Enterprise?

Inductivee engineers agentic systems, RAG pipelines, and enterprise data liquidity solutions. Let's scope your project.

Start a Project