Protocol Comparison
A side-by-side synthesis of the agent interoperability landscape — MCP, A2A, ACP, AGNTCY, and ANP — comparing purpose, transport, discovery, streaming, auth, and governance, then explaining how a tool protocol and an agent-to-agent protocol compose into one stack.
The protocols in this section answer different questions. MCP answers "how does one agent use a tool?" A2A answers "how does one agent delegate to another agent it does not control?" The remaining entrants — ACP, AGNTCY, and ANP — stake out positions around or between those two poles. This page lines them up against a common set of dimensions, all verified against each project's primary specification, and then explains how the pieces fit together.
A useful first cut is the layer each protocol targets. MCP is a vertical protocol: it connects an agent down to capabilities (see protocols-mcp.html). A2A, ACP, and ANP are horizontal: they connect an agent across to peer agents (see protocols-a2a.html and protocols-acp.html). AGNTCY is broader still — a full infrastructure stack rather than a single wire protocol.
flowchart TB
subgraph Across["Horizontal — agent ↔ agent"]
A2A[A2A]:::p
ACP[ACP]:::p
ANP[ANP]:::p
end
subgraph Stack["Infrastructure stack"]
AGNTCY[AGNTCY: OASF + Directory + SLIM]:::s
end
AgentA["Agent"]:::a
AgentB["Peer Agent"]:::a
Tools["Tools / Data (servers)"]:::t
AgentA <-->|A2A / ACP / ANP| AgentB
AgentA -->|MCP — vertical| Tools
AgentB -->|MCP — vertical| Tools
classDef p fill:#e8f0fe,stroke:#4285f4;
classDef s fill:#fef7e0,stroke:#f9ab00;
classDef a fill:#e6f4ea,stroke:#34a853;
classDef t fill:#fce8e6,stroke:#ea4335;
The comparison matrix
Every cell below is drawn from the named project's own specification or documentation. Where a project deliberately leaves something open (e.g. multiple transport bindings), the cell says so rather than inventing a single answer.
| Dimension | MCP | A2A | ACP (IBM/BeeAI) | AGNTCY | ANP |
|---|---|---|---|---|---|
| Primary purpose | Agent → tools & data (vertical) | Agent → peer agent (horizontal) | Agent → peer agent over plain HTTP | Multi-agent infrastructure (discovery, identity, messaging, observability) | Agent → agent on the open, decentralized web |
| Transport | stdio (local subprocess) and streamable-http | Three equal-status bindings over HTTP(S): JSON-RPC 2.0, gRPC, and HTTP+JSON/REST (agents declare support via preferredTransport/additionalInterfaces) |
REST over HTTP(S) | SLIM (gRPC over HTTP/2, MLS-encrypted secure messaging) plus the Agent Directory | HTTP(S); peer-to-peer, decentralized topology |
| Message format | JSON-RPC 2.0 | JSON-RPC 2.0 (default transport); also gRPC and HTTP+JSON/REST | Plain JSON over REST — explicitly not JSON-RPC | OASF records (data model) over SLIM messaging | JSON / JSON-LD agent descriptions |
| Discovery | tools/list after the initialize handshake |
agent-card at /.well-known/agent-card.json |
Registry / list endpoint, plus offline manifests embedded in packages | Agent Directory of OASF records (CID-addressed, DHT-routed by skill), synced across orgs | /.well-known/agent-descriptions (RFC 8615); JSON-LD descriptions resolved over the web |
| Streaming | Yes — server-to-client streaming over streamable HTTP | Yes — sse for incremental updates; webhooks for async push | Yes — synchronous, asynchronous, and streaming modes | Yes — SLIM supports streaming and pub/sub patterns | Not a core streaming protocol; HTTP request/response oriented |
| Auth model | OAuth 2.1 for HTTP transports (MCP server as OAuth resource server); env credentials for stdio | API key, HTTP Basic/Bearer, OAuth 2.0, OpenID Connect, mutual TLS | HTTP-native (bearer tokens / standard schemes) | Dedicated identity system for cross-vendor agent identity | decentralized-identifier (did:wba); HTTP Message Signatures by default, with a legacy Authorization-header flow |
| Stateful tasks | Stateful session; tool calls themselves are request/response | Yes — first-class Task object with a defined lifecycle |
Supports both stateful and stateless operation | Out of scope (messaging fabric, not a task model) | Per-agent; no central task object |
| Governance / steward | Anthropic-originated open spec (versioned, e.g. 2025-11-25) |
Linux Foundation (donated by Google, June 2025) | Linux Foundation / BeeAI; converging into A2A | Linux Foundation (Cisco/Outshift-originated) | Open community project (agentnetworkprotocol.com) |
| Maturity | Production; broad client/server ecosystem | Early production; large multi-vendor backing | Alpha; development winding down into A2A | Emerging; multi-component, recently donated | Experimental / pre-release |
A few cells deserve a caveat. A2A is often described elsewhere as just "gRPC/REST," but its
specification defines three equal-status transport bindings of the same method set —
JSON-RPC 2.0, gRPC, and HTTP+JSON/REST — none designated as mandatory or primary. Agents
SHOULD implement at least one and declare which they support via the AgentCard's
preferredTransport/additionalInterfaces fields; JSON-RPC 2.0 is merely the default value of
preferredTransport when it is omitted. And note that "ACP" is overloaded: here it
means IBM/BeeAI's Agent Communication Protocol, not AGNTCY's separately-named Agent
Connect Protocol — a genuine source of confusion in the ecosystem.
MCP + A2A: a complementary stack
The two most widely deployed protocols, MCP and A2A, are designed to compose rather than compete, because they operate at different layers of an agentic-system. MCP standardizes the connection from an agent down to its tools and data; A2A standardizes the connection from an agent across to a peer agent it does not control.
In a typical deployment a single agent plays both roles at once. It exposes an agent-card so peers can find and delegate to it over A2A, while internally it satisfies those requests by calling tools over MCP. The trust boundaries differ accordingly: MCP traffic stays within one agent's own control surface (often a local stdio-transport subprocess), whereas A2A deliberately crosses organizational boundaries to a remote party.
sequenceDiagram
participant Client as Client Agent
participant Server as Server Agent
participant Tool as MCP Server (tool)
Client->>Server: A2A — delegate task (message/send)
Note over Server: To do the work, the server agent
uses its own tools…
Server->>Tool: MCP — tools/call
Tool-->>Server: tool result (content / isError)
Server-->>Client: A2A — task result (artifacts)
A note on the wire format above: in MCP a tool is invoked with a JSON-RPC tools/call
request, and the response carries its output in a content field (with an isError flag) —
not in an Anthropic-style tool_use/tool_result content block. Those tool_use and
tool_result block types belong to the model-facing tool-use layer of an LLM API (see
tool use), which the agent translates into an MCP tools/call.
The two live at different layers, and the diagram annotates each with its own vocabulary.
The mental model: A2A is how agents talk to each other; MCP is how each agent gets its work done. One delegation over A2A can fan out into many tool calls over MCP inside the agent that accepted it.
Where the protocols overlap
The horizontal protocols — A2A, ACP, and ANP — overlap in ambition (agent-to-agent interoperability) but diverge in philosophy:
- A2A vs. ACP. Both let independent agents exchange tasks over HTTP. A2A standardizes a
richer object model (
Task,Message,Part,Artifact) and a JSON-RPC method set; ACP bets on plain RESTful JSON usable fromcurlwith no special client. This overlap was resolved organizationally rather than technically: under the Linux Foundation, ACP's effort is converging into A2A, with the ACP team winding down active development. - ANP stakes out the most different position. Instead of assuming agents live behind
known HTTP endpoints owned by an organization, it targets a decentralized web of agents
identified by decentralized-identifiers (the
did:wbamethod) and described in JSON-LD — closer in spirit to a peer-to-peer protocol for the "agentic web" than to an enterprise integration standard. Requests are authenticated by signing them with the keys the DID resolves to; the current default carries that signature in HTTP Message Signatures headers, with the originalDIDWba-schemeAuthorizationheader retained as a compatibility mode. - AGNTCY is not really in the same category. Rather than a single wire protocol, it is a stack of components — the oasf schema for describing agents, an Agent Directory for discovery, the SLIM messaging layer, plus identity and observability. It can therefore sit alongside A2A and MCP (carrying or cataloguing them) rather than replacing either.
Discovery is the dimension where the overlap is sharpest, and the designs cluster into two
camps: a well-known-uri convention (A2A's /.well-known/agent-card.json; ANP's web-hosted
descriptions) versus a synced/registry model (AGNTCY's Agent Directory; ACP's registry plus
offline manifests). MCP sits apart again — it has no network-wide discovery at all; a client
is pointed at a server and then enumerates capabilities with tools/list.
When to use which
A practical decision guide, grounded in each protocol's stated purpose:
- Give one agent access to a tool, file, database, or API. Use MCP. This is its sole job, and it is the most mature option for it. See protocols-mcp.html.
- Let your agent delegate a task to another team's or vendor's agent. Use A2A. Its
Tasklifecycle, sse streaming, and push notifications are built for long-running cross-organizational work. See protocols-a2a.html. - You want the simplest possible agent-to-agent HTTP surface today. ACP's RESTful design is the lightest to stand up — but weigh its convergence into A2A before committing for the long term. See protocols-acp.html.
- You need org-spanning discovery, identity, and observability across many agents and frameworks. Look at AGNTCY as connective infrastructure that wraps the others.
- You are building for an open, decentralized agent web with no central registry. ANP and its DID-based identity are the closest fit, accepting that it is the least mature.
For the overwhelmingly common case — an enterprise agent that uses tools and occasionally delegates to a partner agent — the answer is not "choose one." It is MCP for tools, A2A for peers, with the other three reserved for the specific niches above.