AI EngineeringZero to ProductionHome·About·Contact
Interoperability & Agent Ops · Chapter I3

Agent Interoperability — ACP & ANP

A2A isn't the only agent-interop protocol. ACP (Agent Communication Protocol) and ANP (Agent Network Protocol) tackle nearby-but-different problems. This chapter maps the wider landscape so you can tell the protocols apart, understand what each optimizes for, and reason clearly in a space that is still consolidating.

⏱️ ~40 min🗺️ Landscape🎯 Intermediate

Learning objectives

  • Explain what ACP optimizes for and how it differs from A2A.
  • Explain ANP's decentralized, open-network ambition and why identity is central.
  • Place MCP, A2A, ACP, and ANP on one map by what they connect and at what scope.
  • Reason about an emerging, unconsolidated standards space without over-committing.
  • Extract the durable principles that outlast any single protocol.
This is a moving frontier — learn the map, not the memoAgent-interop protocols are new (mostly 2025), overlapping, and consolidating fast: names get merged, governance shifts, some fade. Memorizing today's field notes is low-value. What lasts is the conceptual map — the axes along which these protocols differ — and the ability to slot a new one into it. That's what this chapter builds. Verify any specific protocol's status against its current docs.

Why several protocols? intermediate

"Let agents interoperate" isn't one problem — it's several, and different groups attacked different slices. Understanding the slice each targets is the whole game. Three axes separate them:

AxisThe question it answers
What connects?Agent↔tools (MCP) vs agent↔agent (A2A/ACP/ANP)
What scope?Within a system · across organizations · across an open public network
What's centered?Task delegation · message passing · decentralized identity & discovery
Don't ask "which wins?" — ask "which slice?"These protocols are often framed as competitors, but they mostly target different slices of the interop problem. The useful question is never "which protocol wins" — it's "for this connection, at this scope, which fits?" A mature agent system may speak several.

ACP — Agent Communication Protocol intermediate

ACP focuses on a standard message/communication layer between agents, with an emphasis on a RESTful, framework-neutral way for agents to exchange messages — including local and offline-friendly scenarios, not only cross-cloud calls. Where A2A centers on delegating a task to a remote peer, ACP centers on the communication substrate agents use to talk, aiming to be simple to adopt from any stack.

Overlap is real — and being reconciledACP and A2A clearly overlap (both are "agents talking to agents"), which is exactly why the space is consolidating — efforts have moved under shared/open governance and some are converging. Don't over-index on today's precise boundary between them; hold the shape — ACP leans "communication substrate," A2A leans "task delegation with discovery" — and check current status when you actually need to pick.
ACP emphasisContrast with A2A (I2)
A general message layer between agentsA2A centers the task lifecycle (submitted→working→done)
REST-style, framework-neutral, easy adoptionA2A centers discovery via the Agent Card
Works for local/edge/offline tooA2A is oriented to remote, cross-org calls

ANP — Agent Network Protocol intermediate

ANP aims higher and wider: an open, decentralized network of agents — think "an internet for agents" — where any agent can discover and interact with any other, across owners, without a central broker. Because there's no central authority in that vision, ANP puts decentralized identity (e.g. DID-style identifiers) and verifiable descriptions at the center — an agent must be able to prove who it is to strangers on an open network.

A2A / ACP: point-to-point agent agent known peer, across a boundary ANP: open mesh any agent discovers any agent · identity-first Point-to-point vs open mesh. A2A/ACP mostly connect known peers across a boundary you arranged. ANP imagines an open network where agents discover and transact with strangers — which is why verifiable identity is its foundation: without a central broker, "prove who you are" replaces "I trust this endpoint."
🗺️ How to read this diagram

This picture contrasts two shapes of agent-to-agent connection. The left side is how A2A and ACP normally work; the right side is the bigger, more open world ANP imagines. Read it left-to-right as a jump in scale.

  • On the left ("A2A / ACP: point-to-point") you see two labelled agent boxes with a single arrow between them. That arrow is one connection to one agent you already know about — a known peer you deliberately arranged to talk to, sitting on the other side of a boundary (a different team, company, or network).
  • On the right ("ANP: open mesh") the small circles are many agents and the lines criss-crossing between them are connections that form on the fly. No single agent is the hub — any agent can reach any other. That web-of-lines shape is what "open network" means.
  • The captions under each side are the takeaway: left = known peer, across a boundary (you set it up in advance); right = any agent discovers any agent, identity-first (agents meet as strangers).
  • Why "identity-first" on the right? With no central broker vouching for anyone, each agent must prove who it is before others trust it — hence verifiable identity is the foundation of the open-mesh vision.

In short: Point-to-point is like phoning a contact you already saved; the open mesh is like anyone on the internet being able to call anyone — which only works if callers can prove who they are.

Identity is the hard part of "open"The moment agents interact with strangers on an open network, the questions become: who is this agent really, who operates it, and can I verify that cryptographically? That's why ANP-style visions lean on decentralized identifiers. It's the same reason the web needed TLS/certificates — open networks require verifiable identity, or trust collapses.

The unified map advanced

Put all four protocols from this module on one picture. Read it by what connects and at what scope — that's how you place any new protocol you meet.

what connects (rows) × scope (columns) withincross-orgopen network MCP — agent ↔ tools / data A2A / ACP — agent ↔ agent ANP — open mesh ↑ tools↑ known peers↑ strangers One map, four protocols. MCP connects an agent to tools/data (often within your control). A2A/ACP connect agent to known peer agent, typically across an org boundary. ANP aims at an open network of agents that don't know each other in advance. Scope widens left→right; trust/identity requirements grow with it.
🗺️ How to read this diagram

This is a 2-axis map that places all four protocols from the chapter in one picture. It answers two questions at once: what does each protocol connect (the rows, going down) and how far does it reach (the columns, going right). Read a box by where it sits in the grid.

  • The columns are scope, widening left→right: within (inside your own system) → cross-org (between organizations) → open network (out among strangers). The two vertical lines just separate these three zones.
  • The rows, top→bottom, are what connects: the top band is agent↔tools, the middle is agent↔agent, the bottom is the open agent network.
  • MCP sits top-left — it connects an agent to tools and data, usually within your control. A2A / ACP sit in the middle at cross-org scope — agent talking to a known peer agent, typically across a company boundary.
  • ANP sits at the bottom-right — the widest reach, an open mesh of agents that don't know each other yet. The little ↑ tools / ↑ known peers / ↑ strangers labels underneath name who each column is really about.
  • The important pattern: as you move right (wider scope), the trust and identity you need grows — connecting to your own tool is easy, connecting to a stranger safely is hard.

In short: Position on the grid tells you the trade-off: further right means more reach but more identity/trust work. That's the whole map — place any new protocol by asking "what does it connect, and how far does it reach?"

ProtocolConnectsCentered onYou'd reach for it when…
MCP (T3/I1)Agent ↔ tools/dataCapabilities & resourcesYour agent needs a tool or data source
A2A (I2)Agent ↔ known peerTask delegation + discoveryDelegate a task to a specific external agent
ACPAgent ↔ agentMessage substrate, framework-neutralA simple, REST-y comms layer (incl. local)
ANPAgent ↔ any agentDecentralized identity & discoveryAn open, broker-less network of agents (emerging)

The durable principles advanced

Protocols will merge and rename. These underlying ideas won't — and they're what actually matter for building:

PrincipleShows up as…
DiscoverySome machine-readable descriptor of "what can you do & how do I reach you" — MCP tool lists, A2A Agent Cards, ANP identity docs
A shared message contractAgreed shapes for requests/results so heterogeneous systems interoperate (echoes structured output, Ch 2)
Identity & trustKnowing who you're talking to — trivial within your walls, hard across an open network
Long-running interactionTasks that stream, pause, and resume — not just request/response (L5, I2)
Untrusted-input disciplineAnything from another agent is untrusted & must be validated (T1) — protocol-independent
The security principle is protocol-agnostic — and non-negotiableWhatever the wire format — A2A, ACP, ANP, or the next acronym — the rule is identical: another agent's output is untrusted input. It can be wrong, adversarial, or injection-laden (T1). Authenticate the peer, scope what you share, validate what returns, and keep your own safety gate (L5) in front of any action. Interop widens who can reach your agent; it never widens who you should trust by default.

A practical stance on emerging standards advanced

How to act sensibly while the field consolidates:

Emerging-standards stance do understand the map (this chapter) so you can place any protocol do build on what's stable & adopted for real needs today (MCP is furthest along) do keep interop behind an abstraction so you can swap protocols later avoid betting the architecture on a single unproven protocol avoid ignoring the space — cross-agent interop is clearly coming
Ship on the stable layer, watch the frontierMCP is the most adopted and production-ready of these (which is why it got three chapters: T3, C4, I1). A2A has real momentum for cross-org delegation. ACP/ANP are earlier and more speculative. Build today on the mature layer, keep your agent-comms behind a thin abstraction, and track the frontier so you're ready — not surprised — when it consolidates.

Common pitfalls expert

PitfallFix
Treating the protocols as direct competitorsPlace each by what it connects & at what scope
Memorizing today's exact boundariesLearn the map; verify specifics when you must choose
Betting your architecture on one new protocolBuild on the stable layer; abstract the interop
Underestimating identity on open networksOpen discovery needs verifiable identity — plan for it
Trusting another agent's output by protocolUntrusted input regardless of wire format (T1)
Ignoring interop entirelyCross-agent collaboration is coming — stay literate

Exercises expert

Exercise I3.1 — Place them on the map

Context: The one artifact that outlives every spec revision is a mental map of what each protocol connects and when to reach for it.

Your task: From memory, redraw the unified map and place MCP, A2A, ACP, and ANP by what they connect and at what scope, with a one-line "reach for it when…" trigger for each.

Requirements:

  • Place all four by what they connect (tools vs agents) and their scope
  • Give each a single "reach for it when…" trigger sentence
  • Do it from memory — recall, not lookup, is the skill being built
  • The result should stay correct even as the individual specs change

💡 Hint: If you can place a protocol on the two axes (what connects / what scope), the trigger sentence usually writes itself.

Exercise I3.2 — Slot a new protocol

Context: The durable test of the map is whether it can absorb something it has never seen — a protocol invented after you learned it.

Your task: Invent or find a hypothetical new agent protocol, place it on the three axes, and predict which existing protocol it most overlaps.

Requirements:

  • Use only the three axes: what connects / what scope / what it centers on
  • Locate the newcomer on all three
  • Name its nearest existing neighbor and justify the overlap from the axes
  • The reasoning, not the specific protocol, is the deliverable

💡 Hint: Answer the three axis questions in order — the answers both place it and reveal its closest existing relative.

Show the method

Ask: does it connect agents to tools or to other agents? Within a system, across orgs, or across an open network? Is it centered on delegation, messaging, or identity? Those three answers locate it — and reveal its nearest neighbor.

Exercise I3.3 — The trust checklist

Context: Whatever wire an external agent speaks, the trust decision is the same: you must authenticate, scope, validate, and gate before you act on its output.

Your task: Write a protocol-agnostic checklist for safely accepting work or output from any external agent, and confirm it reads identically across A2A, ACP, and ANP.

Requirements:

  • Cover authenticate, scope/authorize, validate, and gate as distinct steps
  • Keep every item independent of the wire protocol
  • Verify the same checklist applies whether the transport is A2A, ACP, or ANP
  • That protocol-independence is the point — call it out explicitly

💡 Hint: Write each item as a property of the interaction (who, what scope, valid shape, which action needs approval), never as a property of the transport.

🪜 Practice ladder beginner → industry

Six graded exercises, easy to real-world. Try each before opening its solution.

Exercise 1 · One-line summary of each protocolBeginner

Context: Agent-interop protocols churn fast, but their shape is durable. The single most useful artifact is a one-line summary of what each protocol actually connects.

Your task: Write a lookup that returns a durable one-line summary for each of MCP, A2A, ACP, and ANP, keyed by protocol name.

Requirements:

  • Store the four summaries in a dict keyed by protocol name (upper-cased)
  • MCP is agent→tools/data; A2A is agent→peer task delegation; ACP is a general agent↔agent message substrate; ANP is an open, identity-centered network
  • A lookup function returns the summary (and a sane fallback for unknowns)
  • Print all four so the map is legible at a glance

💡 Hint: Capture what each protocol connects, not today's exact spec — the connection is what survives the churn.

Show solution

The map is worth more than any memo. Runnable:

SUMMARY = {
    "MCP": "agent -> tools/data it uses (down)",
    "A2A": "agent -> peer agent: delegate a task, with discovery",
    "ACP": "agent <-> agent: a general REST-style message substrate",
    "ANP": "open, decentralized network of agents; identity-centered",
}
def describe(p):
    return SUMMARY.get(p.upper(), "unknown protocol")

for p in ["mcp", "a2a", "acp", "anp"]:
    print(p.upper(), "::", describe(p))

Protocols move fast; the shape lasts. Learn what each connects, not today's exact spec.

Exercise 2 · Place a protocol on the three axesIntermediate

Context: "Which protocol wins?" is the wrong question; "for this connection, at this scope, which fits?" is the right one. Three axes make that answerable.

Your task: Tag each of the four protocols on three axes — what connects, what scope, and what it centers on — and print the grid.

Requirements:

  • Axis 1: what connects (agent↔tools vs agent↔agent)
  • Axis 2: scope (in-system / cross-org / open-network)
  • Axis 3: what it centers on (capability-invocation / task-delegation / message-passing / decentralized-identity)
  • Model the axes as structured fields per protocol and print an aligned table

💡 Hint: Model each protocol as a small record of three fields; the value is in the columns lining up, not in any one label.

Show solution

Model the axes as fields and print the grid. Runnable:

AXES = {
    "MCP": ("agent<->tools", "in-system",    "capability-invocation"),
    "A2A": ("agent<->agent", "cross-org",    "task-delegation"),
    "ACP": ("agent<->agent", "in-system+",   "message-passing"),
    "ANP": ("agent<->agent", "open-network", "decentralized-identity"),
}
print(f"{'proto':5} {'connects':14} {'scope':13} centered-on")
for p, (conn, scope, center) in AXES.items():
    print(f"{p:5} {conn:14} {scope:13} {center}")

"Which wins?" is the wrong question. "For this connection, at this scope, which fits?" is the right one.

Exercise 3 · ACP vs A2A: which slice?Advanced

Context: ACP and A2A overlap on purpose (both are agents talking to agents), so choosing between them is about the slice of the problem, not the hype.

Your task: Write a selector that recommends ACP or A2A from the need: discovery, cross-org reach, wanting a REST-style substrate, or local/offline operation.

Requirements:

  • ACP is favored for a general REST-style substrate or local/offline use
  • A2A is favored when you need discovery and cross-org delegation
  • Take the deciding factors as parameters (booleans) rather than free text
  • Acknowledge the overlap case where either could serve — don't force a false winner

💡 Hint: Lead with the strongest single signal (a REST substrate or offline need points to ACP); note that the space is consolidating, so verify status when it's close.

Show solution

Pick by the slice, not by hype. Runnable:

def pick(need_discovery, cross_org, want_rest_substrate, local_offline):
    if want_rest_substrate or local_offline:
        return "ACP -- general message substrate, easy adoption, local-friendly"
    if need_discovery and cross_org:
        return "A2A -- task delegation with Agent Card discovery across orgs"
    return "either overlaps here -- check current governance/status before picking"

print(pick(need_discovery=True,  cross_org=True,  want_rest_substrate=False, local_offline=False))
print(pick(need_discovery=False, cross_org=False, want_rest_substrate=True,  local_offline=True))

They overlap on purpose (both are agents talking to agents) — which is why the space is consolidating. Hold the lean, verify status when you must choose.

Exercise 4 · ANP needs decentralized identity — model a DID checkExpert

Context: ANP's open network has no central broker, so an agent must prove who it is to strangers — decentralized identity has to be built in, not delegated to an authority.

Your task: Model a DID-style identity check offline with a toy signature: an agent presents an id plus a signature you verify against its published key material.

Requirements:

  • Use only the standard library (e.g. hashlib) — a hash stands in for real signing
  • A public directory maps a DID to a digest of its key material
  • verify() rejects an unknown DID and rejects a mismatched key
  • A valid signature over a message verifies True; a forged/other identity verifies False
  • Demonstrate both the accept and the reject path

💡 Hint: Compose the signature from the DID, its secret, and the message; verification re-derives it and also checks the presented key against what the directory published.

Show solution

No central authority means identity must be verifiable point-to-point. Model it offline with a toy signature (a hash), stdlib only:

import hashlib

def sign(did, secret, message):
    return hashlib.sha256(f"{did}|{secret}|{message}".encode()).hexdigest()

# public directory maps a DID to the digest of its secret (its "key material")
def register(did, secret):
    return {did: hashlib.sha256(secret.encode()).hexdigest()}

def verify(directory, did, secret_claim, message, signature):
    if did not in directory:
        return False   # unknown identity on the open network
    if directory[did] != hashlib.sha256(secret_claim.encode()).hexdigest():
        return False   # key material does not match the published DID
    return sign(did, secret_claim, message) == signature

dir_ = register("did:agent:alice", "s3cr3t")
msg, sig = "hello", sign("did:agent:alice", "s3cr3t", "hello")
print(verify(dir_, "did:agent:alice", "s3cr3t", msg, sig))     # True
print(verify(dir_, "did:agent:mallory", "x", msg, sig))         # False

Real ANP uses proper DIDs and public-key crypto (needs the spec/SDK). The durable point: on an open network, identity and verifiable descriptions must be built in — you can't lean on a broker.

Exercise 5 · A mature system speaks several protocolsProfessional

Context: A mature system doesn't bet on one protocol — it speaks several, one per kind of connection: MCP for its tools, A2A for cross-org sub-tasks, ACP as an internal bus.

Your task: Write a dispatcher that, given an edge described by its kind and scope, routes it to the right protocol.

Requirements:

  • A tool edge → MCP
  • An agent edge that is cross-org → A2A; internal → ACP; open-network → ANP
  • Route by the edge's nature (kind + scope), not by a hard-coded name
  • Run it over a small list of mixed edges and print each routing decision

💡 Hint: The protocols are complementary layers; branch on (kind, scope) and give the common case a sensible default.

Show solution

A real system layers them. Route each edge by its nature. Runnable:

def dispatch(edge):
    kind, scope = edge["kind"], edge["scope"]
    if kind == "tool":
        return "MCP"
    if kind == "agent" and scope == "cross-org":
        return "A2A"
    if kind == "agent" and scope == "internal":
        return "ACP"
    if kind == "agent" and scope == "open-network":
        return "ANP"
    return "MCP"

edges = [
    {"name": "vector-db",        "kind": "tool",  "scope": "internal"},
    {"name": "partner-pricing",  "kind": "agent", "scope": "cross-org"},
    {"name": "sibling-worker",   "kind": "agent", "scope": "internal"},
]
for e in edges:
    print(f"{e['name']:16} -> {dispatch(e)}")

The protocols are complementary layers. The engineering skill is slotting each connection onto the right one, not betting on a single winner.

Exercise 6 · Slot a brand-new protocol into the mapIndustry scenario

Context: The whole point of the axes map is to place newcomers fast. A new interop protocol will appear next quarter, and you shouldn't need to memorize its memo to react.

Your task: Write a triage that classifies a new protocol on the three axes and emits a posture: adopt-now / watch / ignore.

Requirements:

  • Take the protocol's connects/scope/maturity and whether it overlaps existing protocols
  • Stable + fills a real gap → adopt-now
  • Promising but overlapping (or only shared-governance maturity) → watch
  • Draft-stage → ignore for now (likely to churn or merge)
  • Return both the placement (axes) and the stance

💡 Hint: Placement comes first (the axes locate it); maturity plus overlap then decide the posture. Names merge and governance shifts — the axes let you reason without over-committing.

Show solution

The whole point of the map is to place newcomers fast. Runnable:

def triage(proto):
    connects = proto["connects"]        # 'tools' | 'agents'
    scope    = proto["scope"]           # 'in-system'|'cross-org'|'open-network'
    maturity = proto["maturity"]        # 'draft'|'shared-governance'|'stable'
    overlaps = proto["overlaps_existing"]

    # place it, then decide a posture
    slot = f"connects={connects}, scope={scope}"
    if maturity == "stable" and not overlaps:
        stance = "ADOPT-NOW -- fills a real gap and is stable"
    elif maturity in ("shared-governance", "stable"):
        stance = "WATCH -- promising but overlaps; wait for consolidation"
    else:
        stance = "IGNORE for now -- draft-stage, likely to churn or merge"
    return slot, stance

new = {"connects": "agents", "scope": "cross-org",
       "maturity": "draft", "overlaps_existing": True}
slot, stance = triage(new)
print(slot)
print(stance)

This is a moving frontier: names merge, governance shifts, some fade. Learning the axes lets you reason about anything new without over-committing to today's field notes.

✓ Checkpoint — you can move on when you can…

  • Explain what ACP emphasizes vs A2A.
  • Explain ANP's open-network ambition and why identity is central.
  • Place MCP, A2A, ACP, ANP on one map by what/scope.
  • State the durable principles that outlast any single protocol.
  • Take a sensible build-vs-watch stance on emerging standards.
🏗️ Toward the capstoneThe AI DevOps Engineer speaks MCP for its tools today because that's the mature layer. If it later needed to collaborate with other teams' agents, it would reach for A2A — and if the industry ever builds an open agent network, ANP-style identity would matter. Keeping its agent-comms behind a thin abstraction (and every external output behind its safety gate) is what lets it adopt whichever standard wins without a rewrite. Next: see what your agents are actually doing →

Knowledge check check yourself

✓ Knowledge check

What does ACP emphasize compared with A2A, and why does ANP make decentralized identity its foundation?

Show answer
ACP centers a general, REST-style, framework-neutral message/communication substrate between agents (including local/edge/offline), whereas A2A centers task delegation with Agent-Card discovery, oriented to remote cross-org calls. ANP aims for an open, broker-less mesh where any agent can meet any other; with no central authority to vouch for anyone, each agent must cryptographically prove who it is, so verifiable/decentralized identity (DID-style) is foundational — like TLS/certificates for the web.
✓ Knowledge check

Using the two axes 'what connects' and 'what scope', place MCP, A2A/ACP, and ANP on the map.

Show answer
MCP connects an agent to tools/data, usually within your own control. A2A/ACP connect an agent to a known peer agent, typically across an organizational boundary. ANP connects an agent to any agent on an open public network of strangers. Scope widens within → cross-org → open network, and the trust/identity requirements grow as scope widens.
© 2026 studybydoing.in · AI Engineering: Zero to Production · All rights reserved. · About · Privacy Policy · Terms · Contact
Educational content, provided as-is and without warranty. Code samples are examples — review, test, and adapt them before using in production. See the Terms of Use & Disclaimer. Use at your own risk.
© studybydoing.in