
Short answer: MCP (Model Context Protocol) connects an AI agent to tools and data. A2A (Agent2Agent) connects an AI agent to other AI agents. MCP is how an agent reaches a database, an API or a file system. A2A is how one agent hands a task to another agent that it did not build and cannot inspect. They are not competitors, and most multi-agent systems that run in production will end up using both.
This guide covers how each protocol works, what changed in both during 2026, a side-by-side comparison, a simple test for choosing between them, the security exposure each one creates, and the mistakes teams make when they treat the two as rivals. Last verified: 26 October 2026, against MCP specification 2026-07-28 and A2A v1.0.1.
| MCP (Model Context Protocol) | A2A (Agent2Agent) |
|---|---|---|
Connects | An AI application or agent to tools, data and prompts | An AI agent to other AI agents |
The other side is | A server that exposes functions and data with known inputs and outputs | A remote agent that reasons on its own and is treated as opaque |
Unit of work | A request and a response, such as a tool call or a resource read | A task with a lifecycle that can run long, pause and ask questions |
Discovery | Tool, resource and prompt listings from the server | An Agent Card published at /.well-known/agent-card.json |
Created by | Anthropic, introduced in November 2024 | Google, announced in April 2025 |
Governance | Linux Foundation, through the Agentic AI Foundation since December 2025 | Linux Foundation since June 2025 |
Current version | Specification 2026-07-28 | v1.0.1 |
The quickest way to choose between them is the call-or-delegate test. If you could write down the exact inputs and outputs of the thing on the other side, you are calling a capability, and MCP is the right fit. If you would give the other side a goal and let it decide how to reach it, you are delegating to a party, and A2A is the right fit. The decision guide further down applies this test to real situations.
MCP is an open standard that lets AI applications discover and use external tools, data and prompt templates through one common interface, instead of a custom integration for every pairing of application and service. A chat assistant, a code editor or an agent acts as the client. The thing it connects to, such as a CRM, a ticketing system or a document store, is wrapped in an MCP server.
Before MCP, every AI application that wanted to reach a service needed its own integration with that service. Ten applications and ten services meant up to a hundred separate connectors, each with its own authentication, error handling and maintenance. MCP turns that into ten clients and ten servers. A service builds one server, and any compliant client can use it.
An MCP server exposes three kinds of capability:
Tools are functions the model can call. Each has a name, a description and a JSON Schema describing its inputs, for example search_issues or create_invoice.
Resources are context the application loads, such as a file, a record or a document. The application decides what to load, not the model.
Prompts are templates the user can choose.
The flow for a tool call is consistent. The client lists the server's tools and passes the list to the model. The model decides a tool would help and produces arguments that match the tool's input schema. The client sends the call to the server, the server does the work, usually by calling an HTTP API, and the result goes back to the model. The model never talks to the server directly, which is why the client is the right place to enforce approvals and permissions.
The 2026-07-28 revision, released on 28 July 2026, is the largest change to the protocol since it launched. It replaced the 2025-11-25 revision and contains breaking changes. The points that matter most in practice:
The protocol is stateless. The initialize handshake and the session identifier header are gone. Every request carries its own protocol version and client capabilities, so any request can land on any server instance behind an ordinary round-robin load balancer. A server that needs state across calls mints an explicit handle, such as a basket identifier, and the model passes it back as an argument.
Gateways can route on headers. Streamable HTTP requests must now carry the method and tool name in HTTP headers, so a gateway, rate limiter or web application firewall can route, meter and authorise without parsing JSON bodies.
Interactive tools no longer need open streams. Multi Round-Trip Requests replace the older server-initiated requests for sampling, elicitation and roots. A server that needs a confirmation or a missing parameter mid-call returns an input-required result, and the client retries the call with the answers attached.
Tool catalogues are cacheable. List responses carry cache hints and a deterministic order, so clients can cache tool lists and keep prompt caches stable across reconnects.
Authorization was hardened. Clients must validate the issuer parameter defined in RFC 9207 before redeeming an authorization code, client credentials are bound to the issuer that minted them, and Dynamic Client Registration is deprecated in favour of Client ID Metadata Documents.
Extensions are formal. Tasks for long-running work moved out of the core into an official extension, joining MCP Apps and Enterprise Managed Authorization.
Deprecations follow a policy. Roots, Sampling and Logging are deprecated but still work for at least twelve months. The older HTTP plus SSE transport is deprecated with a year-long offramp.
For teams with MCP servers already in production, the practical impact is a migration, mostly for code that depended on session identifiers. The official SDKs for TypeScript, Python, Go and C# support the new revision, and the Rust SDK supports it in beta.
The MCP maintainers reported in July 2026 that the Tier 1 SDKs were seeing close to half a billion downloads a month, with both the TypeScript and Python SDKs past one billion total downloads. Those are download counts, not a count of production deployments, so read them as a sign of developer adoption rather than proof of enterprise rollout. MCP moved to the Linux Foundation's Agentic AI Foundation in December 2025.
A2A is an open protocol for communication and interoperability between independent AI agents, including agents built on different frameworks by different companies and running on separate servers. Google announced it in April 2025 and contributed it to the Linux Foundation in June 2025. Its design treats the remote agent as opaque: a client agent can ask for work and receive results without seeing the remote agent's internal memory, prompts or tools.
An agent is not a function. A vendor's claims agent or a partner's logistics agent decides for itself how to reach a goal, may need to ask a follow-up question halfway through, and may take minutes or days to finish. Treating it as a tool call forces all of that into a request and response shape that was not designed for it. Without a standard, each pair of agents also needs a custom integration, which is the same many-to-many problem MCP solved for tools, one level up.
Four concepts carry most of the protocol:
Agent Card. A JSON document an agent publishes, usually at /.well-known/agent-card.json, describing its identity, skills, capabilities, endpoints and authentication requirements. A client reads it to learn how to call the agent.
Task. The unit of work. A message from a client can create a task, which moves through defined states: submitted, working, input-required, auth-required, completed, failed, canceled and rejected. An input-required task continues when the client sends a follow-up with the same task and context identifiers.
Message, Part and Artifact. Messages carry the conversation, parts carry content such as text or files, and artifacts carry the outputs of a task.
Operations. Send a message, stream a message, get a task, list tasks, cancel a task, subscribe to task updates, and configure push notifications.
Clients can follow a task by polling, by streaming updates, or by receiving push notifications. One data model is carried over three protocol bindings: JSON-RPC 2.0 over HTTP, gRPC, and HTTP with JSON, often called REST. An Agent Card lists each interface it supports along with its binding and protocol version, so a single agent can serve several kinds of client.
A simplified Agent Card looks like this. The full schema is in the specification.
{
"name": "Claims Verification Agent",
"description": "Checks a claim against policy terms and fraud signals.",
"version": "1.0.0",
"supportedInterfaces": [
{
"url": "https://agents.example.com/a2a",
"protocolBinding": "JSONRPC",
"protocolVersion": "1.0"
}
],
"capabilities": { "streaming": true },
"skills": [
{
"id": "verify-claim",
"name": "Verify claim",
"description": "Returns a verification summary and a confidence level."
}
]
}A2A reached version 1.0 in early 2026, and a v1.0.1 patch followed in late May 2026. The changes that affect implementers:
The protocol buffer definition became the single normative source for all three bindings, which gives them equivalent behaviour.
Agent Cards can be signed using JSON Web Signature with JSON canonicalisation, so a caller can verify that a card was issued by the agent it claims to describe.
Multi-tenancy support was added, along with cursor-based pagination for listing tasks.
Wire formats changed almost everywhere. Task states became constants such as TASK_STATE_COMPLETED, parts lost their kind field, operations were renamed, and HTTP paths dropped the version prefix. Code written against the v0.3 line needs migration work, and compatibility layers exist for some SDKs.
The v1.0.1 patch recommends the application/a2a+json media type for the HTTP binding and aligns error mappings with Google's RPC status codes.
The Linux Foundation reported in April 2026, at the protocol's one-year mark, that more than 150 organisations support A2A. Third-party analysis describes adoption as real but concentrated inside large platform vendors, and cross-vendor agent-to-agent traffic in production is still thin compared with how widely MCP is used for tool access. Engineers writing about gateway design also point to gaps teams currently close at the application level, such as per-skill request schemas, token downscoping and standard registries for finding agents. A2A is stable enough to build against. It is not yet a protocol every vendor you deal with will support.
Dimension | MCP | A2A |
|---|---|---|
Purpose | Give an agent access to tools, data and prompts | Let independent agents discover, delegate to and collaborate with each other |
Relationship between parties | A caller and a capability | Peers, one of which delegates a goal to the other |
Visibility of the other side | Transparent: names, descriptions and input schemas are listed | Opaque by design: skills are advertised, internals are not shared |
Interaction model | Request and response | Task lifecycle with messages, artifacts and state |
State | Stateless protocol core as of 2026-07-28. Application state travels in explicit handles | State lives in tasks and contexts, identified across turns |
Discovery | Tool, resource and prompt listings, plus an optional server/discover call | Agent Card at a well-known address, optionally signed |
Transport | Streamable HTTP and local standard input and output | JSON-RPC over HTTP, gRPC, and HTTP with JSON |
Authentication | OAuth-based authorization for remote servers, hardened in 2026-07-28 | Schemes declared in the Agent Card, such as API key, OAuth 2.0, OpenID Connect, mutual TLS and HTTP auth |
Long-running work | Tasks extension with poll-based status and updates | Native: polling, streaming or push notifications |
Asking for more input | Multi Round-Trip Requests inside a single call | Input-required and auth-required task states |
Main failure mode | Poisoned tool definitions, injected tool results, over-broad credentials | Spoofed or unverified agents, unscoped delegation, errors passed between agents |
Where it sits in a system | The tool boundary | The trust boundary |
One parallel is worth noticing. Both protocols now have a native way for the other side to say it needs more from a person. In MCP that signal lives inside one request. In A2A it lives inside a task that can wait for hours. The difference in scope is the difference between the two protocols in miniature.
The A2A documentation explains the relationship with a repair-shop analogy that holds up well. A customer talks to a shop manager, and the shop manager hands the work to specialist mechanics. That handoff is agent to agent, which is A2A. Each mechanic then uses diagnostic equipment, lifts and parts catalogues to do the job. That is agent to tool, which is MCP. The equipment does not negotiate or ask questions. The mechanics do.
Consider a claims workflow split across three teams, each running its own agent and releasing on its own schedule.
Claims intake agent (customer-facing team)
| A2A: delegate "assess claim 8841"
v
Verification agent (fraud team) Settlement agent (finance team)
| MCP | MCP
v v
Policy database, document store, Payments API, ledger,
fraud-score API approvals queueThe intake agent does not know how verification works internally and does not need to. It sends a goal, receives status updates and artifacts, and may be asked for a missing document through an input-required state. Inside each agent, the connections to policy data, documents and payment systems are MCP servers with narrow, typed tools. Replacing the fraud team's model or framework does not break the intake agent, because the contract between them is the Agent Card and the task model.
MCP sits at the tool boundary: the place where an agent touches a capability whose behaviour you can describe completely. A2A sits at the trust boundary: the place where one party hands a goal to another party it does not control. Many teams discover that their architecture has far more tool boundaries than trust boundaries, which is why MCP shows up in almost every agent project and A2A shows up in far fewer.
Ask one question about the thing on the other side of the connection. Could you write its exact inputs and outputs in advance, and would it behave the same way every time you called it? If yes, you are calling a capability. Use MCP. If you would instead give it a goal, accept that it chooses its own steps, and expect it to come back with questions or partial results, you are delegating. Use A2A.
One agent calls your CRM, ticketing system, database or internal APIs.
You control every system the agent touches.
You want your product to be usable from many AI assistants and code editors through one server.
Agents are built and released by different teams or companies, and each needs to change independently.
The callee is a reasoning system, not a function, and may need to ask follow-up questions.
Work runs long enough that status, cancellation and resumption matter.
You want to publish an agent that other organisations' agents can discover and call.
Several agents in one codebase and one deployment do not need a network protocol between them. Handoffs inside a single process are better handled by the orchestration framework, as covered in our guide to agentic AI orchestration. A2A adds value at organisational boundaries. Inside one team's service, it adds latency, a second failure surface and more to test, without a trust boundary to justify them. The same applies to a fixed pipeline with no decisions in it: plain function calls or ordinary automation will be simpler and more reliable.
Situation | Use | Reason |
|---|---|---|
One agent calling your CRM, ticketing and database | MCP | Capabilities with known inputs and outputs |
Several agents in one codebase and one deployment | Neither, use the framework | No trust boundary, so a protocol adds cost without benefit |
An agent delegating to a partner's or vendor's agent | A2A, with MCP inside each agent | Opaque agent across a trust boundary |
Agents owned by separate internal teams with their own release cycles | A2A | A stable contract lets each team change internals freely |
A long job where the callee asks questions partway through | A2A | Task states handle waiting, follow-ups and resumption |
Making your product available to every AI assistant | MCP server | One server serves many clients |
Publishing an agent that other companies' agents can call | A2A with an Agent Card | Discovery, authentication and task handling in a standard form |
If you are still deciding how autonomous an agent should be before choosing protocols, start with the difference between assistants, copilots and agents in our guide to AI agent vs AI assistant vs copilot, and the five autonomy levels in what agentic AI is.
A protocol standardises how two parties talk. It does not make either party trustworthy. Most real-world risk in both protocols comes from how servers, agents and credentials are configured, not from the wire format.
Tool poisoning. A tool's description or schema contains hidden instructions. The model reads tool definitions with full trust, and the user usually never sees them.
Prompt injection through tool results. Data a tool returns, such as an email, a ticket or a web page, contains instructions that the model then follows.
Confused deputy. A proxy server uses its own broad privileges on behalf of a caller who should not have them.
Token passthrough. A server forwards the token it received to another API. The MCP specification prohibits this. A server should accept only tokens issued for itself and use a separate credential upstream.
Over-broad scopes and shadow servers. Tools with standing access to far more than they need, and servers that teams installed without review. OWASP maintains an MCP Top 10 that covers these and related risks.
Controls that address them: pin and review tool definitions, treat tool results as data and not as instructions, issue audience-bound tokens per user, scope permissions per action instead of per server, require approval on state-changing tools, and log every call with the identity behind it. The header-based routing added in 2026-07-28 helps here, because a gateway can now apply policy on the method and tool name without parsing request bodies.
Spoofed or unverified agents. A client that trusts any Agent Card it finds can be pointed at a malicious agent. Signed Agent Cards let a caller verify the card's origin.
Unscoped delegation. A remote agent acting on a user's behalf can hold more authority than the task needs. Token downscoping is one of the gaps practitioners still close themselves.
Data crossing tenants. Tasks and artifacts can carry sensitive content between organisations. Multi-tenancy support in v1.0 helps, but isolation is still a design decision.
Injection between agents. One agent's output becomes another agent's input. If the receiving agent trusts it, one compromised or mistaken agent can steer the rest.
Opaque behaviour. By design, you cannot inspect a remote agent's tools or reasoning, so you need per-agent access grants, logging at the boundary and evaluation of its outputs.
Treat every message that crosses a tool boundary or a trust boundary as untrusted input. Validate it against a schema, limit what it can trigger, and require approval before any action that is costly or hard to undo. Our guide to enterprise AI agent architecture covers the controls in more detail. None of this is a compliance guarantee. Legal and regulatory requirements depend on your sector and jurisdiction and need their own review.
Find out which of your servers or clients depend on session identifiers, the initialize handshake, or the deprecated features: Roots, Sampling, Logging, the HTTP plus SSE transport and Dynamic Client Registration. The twelve-month deprecation window gives time to plan, but code built on sessions needs real changes. A dual-era approach, where a server speaks both the legacy and the 2026-07-28 revisions during the transition, keeps existing clients working. Move stateful behaviour into explicit handles, and review authorization against the issuer validation and client metadata changes.
Build to v1.0 and pin the protocol version your Agent Card advertises. Use the examples and enum values from the current specification, because many tutorials still show the older shapes with kind fields and lowercase state names. Verify signed Agent Cards for any agent you do not own. Decide up front how you will handle the gaps teams currently close in their own code: per-skill input schemas, token downscoping and how agents find each other.
Put a gateway in front of both. For MCP, apply policy on the method and tool headers, per-user identity and rate limits. For A2A, apply per-agent access grants and log every task with its identifiers. Trace a single request across hops, from the user to the first agent, across the A2A boundary, and into each MCP tool call, so you can reconstruct what happened after an incident. Build an evaluation set from your own data for every agent, and test the migration paths between protocol versions before you need them.
Treating the two as rivals. They solve different problems and are designed to be used together.
Using A2A inside one codebase. If there is no trust boundary, a framework handoff is simpler and easier to test.
Exposing every internal function as an agent. A deterministic function belongs behind MCP. Wrapping it as an agent adds a reasoning step with no benefit.
Giving MCP servers broad credentials. Standing, wide access is what turns an injected instruction into a confused-deputy incident.
Building to an outdated specification. Both protocols changed shape in 2026. Check the version before copying a tutorial.
Assuming the protocol provides security. Authentication standards help. Scoping, validation, approval and logging remain your work.
Skipping cross-hop tracing. Without it, a failure that starts in one agent and surfaces in another cannot be diagnosed.
Neither is better, because they do different jobs. MCP connects an agent to tools and data. A2A connects an agent to other agents. Most production systems that use several agents end up with MCP inside each agent and A2A between agents that sit across a trust boundary. Single-agent systems often need only MCP.
Not necessarily. If your agent mainly calls well-defined tools, MCP may be all you need. Add A2A when independent agents, built or released by different teams or companies, must discover and delegate work to each other. If your agents are really fixed functions exposed through MCP, A2A adds a layer you may not need.
No. The A2A documentation describes the two protocols as complementary. A2A handles delegation between agents, and MCP handles each agent's own access to tools and resources. Replacing one with the other would mean losing either the task lifecycle and agent discovery, or the tool, resource and prompt interface.
Anthropic created MCP and introduced it in November 2024. Google announced A2A in April 2025. A2A has been hosted by the Linux Foundation since June 2025, and MCP moved to the Linux Foundation's Agentic AI Foundation in December 2025. Both are open protocols with public specifications and community governance, so neither depends on a single vendor.
An Agent Card is a JSON document an A2A agent publishes, usually at /.well-known/agent-card.json. It describes the agent's identity, skills, capabilities, supported interfaces and authentication requirements. Clients read it to learn how to call the agent. Since v1.0, cards can be cryptographically signed so a caller can verify who issued them.
For simple cases, yes: you can wrap an agent as an MCP tool and call it. That works for short, request-and-response delegation. A2A's task model adds what that approach lacks, including long-running work with status, mid-task questions, cancellation and discovery across organisations. MCP's Tasks extension covers long-running tool calls but is still shaped like a tool.
The 2026-07-28 specification made MCP stateless. It removed the initialize handshake and session identifiers, added header-based routing, introduced Multi Round-Trip Requests for interactive tools, made list results cacheable, hardened authorization, and moved Tasks into an official extension. Roots, Sampling, Logging and the HTTP plus SSE transport were deprecated with a twelve-month window.
The v1.0 core data model and protocol bindings are stable, and a v1.0.1 patch followed in May 2026. The ecosystem is younger than MCP's, and teams still handle some gaps themselves, including per-skill schemas, token downscoping and agent registries. It is suitable for bounded pilots and for agents you control on both sides.
Treat every inter-agent and tool message as untrusted input. For MCP, review tool definitions, scope permissions per action, use audience-bound tokens and avoid token passthrough. For A2A, verify signed Agent Cards, grant access per agent and log every task. Add approval on consequential actions and trace requests across hops.
At Akoode we start with the workflow, not the protocol. We map which actions an agent takes, who is accountable for each one, and where one team's responsibility ends and another's begins. That map usually shows many tool boundaries and very few trust boundaries, so most of the first build is a well-designed set of narrow, typed tools with per-user permissions, which we treat as an API product in its own right. We bring in agent-to-agent delegation only where independent teams or companies need to evolve their agents separately.
The work spans AI agent development, enterprise AI integration with ERP, CRM and legacy systems, and knowledge retrieval through our RAG application development. Our engineers are in-house, and we design, build and test everything ourselves. Our leadership team brings more than ten years in AI consulting and technology development. For the wider practice, see our artificial intelligence development services, and for the build and cost side, our guides to enterprise AI agent architecture and AI agent development cost.
Akoode is based in Gurugram (Spaze iTech Park, Sector 49) with a US office in Jenks, Oklahoma. We have delivered 180+ projects across 15+ industries and hold a 4.9 rating from 126 reviews on Google and a 5.0 rating on GoodFirms. If you are deciding how your agents should connect to your systems and to each other, bring the workflow and we will tell you which pieces need a protocol and which do not.
Book a call with an AI engineer
Specification details were checked against primary documentation on 26 October 2026. Where third-party write-ups disagreed, for example on the exact month A2A v1.0 shipped or whether the MCP discovery call is mandatory for servers, this article states only what the primary sources support.
Subscribe to the Akoode newsletter for carefully curated insights on AI, digital intelligence, and real-world innovation. Just perspectives that help you think, plan, and build better.