The short answer

MCP and A2A solve two different problems. They are not the same problem in different clothes. MCP connects one agent to its own tools and data. That connection runs vertically, from the agent down to the tools. A2A connects one agent to another agent instead. That connection runs horizontally, peer to peer. Both, however, use JSON-RPC 2.0 messages. But the payloads differ sharply. An MCP request calls a tool. An A2A request hands over a task with its own lifecycle instead. Because the two protocols sit on separate axes, a real agent system typically uses both together. So asking which one wins is the wrong question.

MCP and A2A show up in the same sentence constantly. Most explanations blur the two together. Both are protocols, and both were built for AI agents. Instead, they solve two separate problems.

This guide sticks to spec-accurate mechanics, not marketing language. So it walks through what each protocol actually defines: message formats, discovery steps, and the exact shape of a request. Every claim traces back to the official specification, not a summary of one.

The short version: MCP and A2A sit on different axes of one system. MCP reaches down, from an agent into its tools. A2A reaches sideways, from one agent to another. That direction alone explains most of what follows.

Diagram showing an agent box connected downward through MCP to a row of tool boxes and sideways through A2A to a second agent box
MCP reaches down to tools. A2A reaches sideways to another agent.

Why Agent Protocols Exist At All

Before MCP or A2A, every AI application wrote its own tool integrations. An app needing a calendar, a database, and a search tool wrote three separate pieces of glue code. Add a second application, though, and none of that code carries over.

This is the classic N×M problem. N applications, each needing M tools, add up to N×M integrations. So nothing standard sits between them. So every new tool means new code in every application. Likewise, every new application means rebuilding every integration from scratch.

The same multiplication happens between agents, not only between an agent and its tools. Suppose one team’s agent needs to delegate to another team’s agent, built on a different framework. Someone still has to write custom translation code for that one pairing. Multiply that across many independently built agents, and glue code becomes the real bottleneck.

MCP and A2A each remove one side of that multiplication. MCP gives an application one client that reaches any compliant tool server. So the N×M tool problem collapses to N+M. A2A gives an agent one client that reaches any compliant peer agent, regardless of vendor or framework. This mirrors how networking solved a similar problem decades earlier; see OSI model vs TCP/IP model for how layered protocols replaced one-off wiring between systems.

What MCP Does

MCP stands for Model Context Protocol. Anthropic built it and open-sourced it in November 2024. Its job is narrow: connect one AI application to the external tools and data it needs.

The architecture has three roles: host, client, and server. A host is the application itself, such as an IDE. The host runs one or more clients. Each client holds a single connection to one server. A server exposes context and capabilities over that connection, and it can run locally or sit somewhere remote.

Servers offer three primitives to the client. Tools are functions the model can invoke, such as a search call. Resources are contextual data for the model to read, instead of code the model runs. Prompts are templated messages a user can select directly.

Messages travel as JSON-RPC 2.0. Local servers typically use stdio. The client launches the server as a subprocess. Then it exchanges messages over standard input and output. Remote servers use Streamable HTTP instead. They post JSON-RPC requests to one endpoint, and the response can stream back. Coding agents such as the ones compared in Claude Code vs GitHub Copilot already lean on this exact mechanism. It lets them reach editor and filesystem tools.

Discovery happens at runtime, not at build time. A client sends a tools/list request. It gets back the exact tools a server currently offers, with a schema for each tool’s inputs. It then calls a chosen tool with tools/call. None of this requires the client to know a server’s tools in advance. So a server can add or remove tools without breaking any client that talks to it.

What A2A Does

A2A stands for Agent2Agent. Google introduced it in April 2025. Google later donated it to the Linux Foundation. Where MCP connects an agent to its tools, A2A connects one agent to another agent instead.

Discovery starts with the Agent Card. A remote agent publishes this as a JSON document. It sits at a fixed, well-known location: /.well-known/agent-card.json on the agent’s domain. The card lists the agent’s identity, its service endpoint, and the skills it offers. It also lists declared capabilities, such as streaming, and the authentication schemes a caller must use.

Once a client agent reads that card, it sends work as a task. A task is the basic unit of work in A2A. Each task carries its own id. It moves through defined states, such as submitted, working, input-required, and completed. Because the task keeps a persistent identity across the exchange, both sides can check its status later. So neither side needs to hold one long connection open.

Requests carry messages, and messages carry parts. A part can be plain text, a file, or structured data. So a single message can mix a question with an attachment. When a task finishes, the output comes back as one or more artifacts. So each artifact is built from the same kind of parts.

Transport is JSON-RPC 2.0 over HTTPS. Streaming is available over server-sent events. It requires the Agent Card to declare that support. Since reaching version 1.0 in March 2026, the spec also defines gRPC and REST bindings. Both still sit over the same underlying data model. Even so, JSON-RPC remains the most common choice in practice.

A defining principle runs through all of this: opacity. Instead, agents collaborate through declared capabilities and exchanged messages only. Neither side has to expose its internal reasoning, its memory, or the tools it uses behind the scenes.

Infographic comparing MCP and A2A on what each connects, its direction, what it discovers, and its unit of work
MCP vs A2A at a glance: what each connects, its direction, and its unit of work.

MCP vs A2A: Comparison Table

AspectMCPA2A
What it connectsAn agent to its own tools and dataOne agent to another agent
DirectionVertical: agent down to toolsHorizontal: agent across to agent
Originating organisationAnthropicGoogle
Current governanceDonated to the Agentic AI Foundation, hosted at the Linux FoundationDonated directly to the Linux Foundation
What gets discoveredA server’s tools, resources, and prompts, listed at runtimeA remote agent’s Agent Card, at a well-known URL
Unit of workA single tool callA task, with its own lifecycle
Core abstractionsTools, resources, promptsAgent Card, task, message, artifact
Transport and formatJSON-RPC 2.0 over stdio or Streamable HTTPJSON-RPC 2.0 over HTTPS, plus gRPC and REST bindings
Streaming supportYes, over the Streamable HTTP endpointYes, when the Agent Card declares streaming support
State and lifecycleEach request is self-contained at the protocol levelExplicit task states, from submitted through to completed
Internal state exposedThe host keeps full context; a server sees only what it is sentDeliberately opaque; no shared memory or tooling between agents
Authentication approachHandled by the host, per server connectionSchemes declared directly in the Agent Card
Typical deployment shapeOne application, many tool serversMany independent agents, connected as peers
What breaks without itEvery application needs custom code per toolEvery agent pairing needs custom glue code
Relationship to the other protocolOften runs inside an A2A agent, to reach its own toolsOften wraps an MCP-using agent as one peer among several

How They Work Together

Consider a travel-planning agent. A user asks it to book a flight. The agent does not know how to talk to any specific airline. Instead, it delegates that part of the job to a specialist agent, run by someone else entirely.

The travel agent acts as an A2A client here. To begin with, it fetches the flight-booking agent’s Agent Card from its well-known URL. It then confirms the agent supports the skill it needs. Then it sends a task describing the trip: origin, destination, and dates. The remote agent accepts the task and moves it into a working state.

Internally, the flight-booking agent is also an MCP host. To search real fares, it opens an MCP client connection to an airline’s MCP server. It calls a search tool over tools/call. The MCP server queries the airline’s real booking API. It then returns structured results back through the same connection.

So the flight-booking agent turns that result into a task artifact. It marks the task completed. The travel agent receives the artifact over A2A. It folds the result into the itinerary shown to the user. Notice what stayed private. The travel agent never learned which MCP server the specialist used, nor which tool, nor how the search worked internally. Only the declared skill and the final result crossed the A2A boundary. That is the opacity principle in action.

The two protocols also differ in how they hold state across that exchange. It helps to be precise here, rather than waving at state in general; see stateless vs stateful protocols for the broader distinction this maps onto. The A2A task persists with its own id and status for as long as the booking takes. The MCP call underneath it, in contrast, is self-contained at the protocol level. It carries no session for the airline server to maintain between calls.

Diagram of a client agent connected via A2A to a remote agent, which connects via MCP to an MCP server and then to an API
A2A hands the work to a remote agent. That agent then uses MCP to reach its own tools.

What the Messages Look Like

Seeing the two message shapes side by side makes the difference concrete. Here is a trimmed MCP tool call. It travels as JSON-RPC over Streamable HTTP or stdio:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search_flights",
    "arguments": {
      "origin": "JFK",
      "destination": "LHR",
      "date": "2026-09-10"
    }
  }
}

The server replies with a plain tool result, scoped to that one call:

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "resultType": "complete",
    "content": [
      { "type": "text", "text": "3 fares found, from $412." }
    ],
    "isError": false
  }
}

Both examples above drop the _meta block for brevity. Every real MCP request must carry it, because that is where the protocol version and client capabilities travel.

Now compare an A2A message. A client agent sends a task with message/send:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "message/send",
  "params": {
    "message": {
      "role": "user",
      "parts": [
        { "kind": "text", "text": "Book the cheapest JFK-LHR flight on 2026-09-10." }
      ],
      "messageId": "9229e770-767c-417b-a0b0-f0741243c589"
    }
  }
}

The remote agent responds with a task object, not a bare result:

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "id": "363422be-b0f9-4692-a24d-278670e7c7f1",
    "contextId": "c295ea44-7543-4f78-b524-7a38915ad6e4",
    "status": { "state": "completed" },
    "artifacts": [
      {
        "artifactId": "9b6934dd-37e3-4eb1-8766-962efaab63a1",
        "name": "booking-confirmation",
        "parts": [
          { "kind": "text", "text": "Booked: JFK-LHR, 2026-09-10, $412." }
        ]
      }
    ]
  }
}

Look at the shape difference, not just the field names. The MCP response answers one call, and nothing more. The A2A response, in contrast, carries an id, a status, and an array of artifacts. That is because a task is a tracked object, not a single reply.

When You Need Which

Reach for MCP when an agent needs a new capability. That could be a database, a search index, or an internal API. Frameworks such as those compared in LangChain vs LlamaIndex still need a protocol like MCP to reach the outside world. In short, neither framework replaces that layer on its own.

Reach for A2A when the work needs delegating to a separate agent. This matters most for an agent built by another team or vendor. It matters even more once agents start making real decisions, not just following a script; see AI agents vs traditional automation for why that shift changes what an integration must preserve.

Most nontrivial systems need both protocols at once. An agent typically talks sideways to peers over A2A. At the same time, it reaches down into its own tools over MCP. That is exactly what the travel-booking example above shows. Treating this as a choice between the two protocols misses how they actually get used.

Interview Questions

MCP connects one application to its own tools, resources, and prompts. That connection runs vertically, from the agent down into its systems. A2A connects one agent to a separate agent instead. That connection runs horizontally, peer to peer. Because they sit on different axes, a real system often uses both at once.

Opacity means an agent never has to reveal its internal reasoning or memory. It also never has to reveal its tool implementations to a peer. So only the Agent Card’s declared capabilities, and the messages exchanged, cross that boundary. This lets agents from different frameworks work together safely, since neither needs to know how the other operates.

Yes, and this is the common pattern in practice. An agent that receives work over A2A still needs its own tools. So MCP exists exactly for that job. The remote agent simply acts as an MCP host internally. It runs its own MCP clients against whichever servers it needs. None of that is visible to the A2A caller.

No, and treating it that way misreads what each protocol is for. A2A governs delegation between agents. Meanwhile, MCP governs how any single agent reaches its own tools. Neither one substitutes for the other. A realistic deployment keeps both layers running side by side, since removing either one leaves a real gap unfilled.

Frequently Asked Questions

No, the two solve different problems. MCP standardises how an agent reaches its own tools and data. A2A standardises how one agent delegates work to another. Most real deployments run both together, since dropping either one removes a capability the other cannot replace.

Anthropic created MCP and open-sourced it in November 2024. Google introduced A2A in April 2025. Both protocols later moved to vendor-neutral governance. Anthropic donated MCP to the Agentic AI Foundation, hosted at the Linux Foundation. Google, meanwhile, donated A2A directly to the Linux Foundation.

No, that is a common mix-up. MCP messages are JSON-RPC 2.0, not REST. Local servers carry them over stdio. Remote servers carry them over Streamable HTTP instead. This matters because JSON-RPC lets a client call a named tool with typed arguments. A plain REST endpoint cannot express that as cleanly.

An Agent Card is a JSON document a remote agent publishes. It sits at a fixed, well-known URL. The card lists the agent’s identity, its skills, and its service endpoint. It also lists the authentication the caller needs. A client agent reads this card first, before sending any task. So it always knows what the remote agent can actually do.

Yes, and this is the normal shape beyond a toy example. An agent can act as an A2A server toward its peers. At the same time, it can act as an MCP host toward its own tools. Neither role interferes with the other. They sit on different sides of the same agent.

Start with MCP first, if you are building a single agent that needs tools. That is the smaller, more contained problem. Then move to A2A once that agent needs to talk to other agents. Learning MCP first also makes A2A easier to grasp. That is because the remote agent on the other end is usually an MCP host underneath.

Wrapping Up

MCP and A2A answer two separate questions, not the same one twice. MCP gives an agent a standard way to reach its own tools, data, and prompts. A2A, meanwhile, gives an agent a standard way to hand work to another agent. It does that without exposing what happens on either side.

Remember the essentials for real systems, not just for an exam. Direction is the fastest way to tell them apart: MCP runs vertically, A2A runs horizontally. Because most working deployments need both layers, the honest framing is never MCP versus A2A. It is MCP and A2A, doing two different jobs in the same system.

Related reading on DiffStudy:


Whatsapp-color Created with Sketch.

By Arun Kumar

Full Stack Developer with a BE in Computer Science, working with React, Next.js, Node.js, MongoDB, and AI/ML tools. Founder of DiffStudy — built to help CS students ace GATE and university exams, and keep developers up to date across AI, cloud, system design, web development, and every field of computer science. Every article is written from real hands-on experience, not just theory.

Leave a Reply

Your email address will not be published. Required fields are marked *


You cannot copy content of this page