For the past decade, we've built AI systems around a simple model: send a request to a central orchestrator, which routes it to specialized services. A user query goes to a dispatcher, which decides whether to call a search agent, a coding agent, or a database query agent. Clean. Synchronous. Centralized.
That architecture is breaking at scale.
As enterprise deployments demand more sophistication — routing decisions across dozens of specialized agents, handling long-running workflows, enabling agents to discover and negotiate with peers on the fly — the centralized orchestrator becomes a bottleneck, a single point of failure, and a coordination nightmare. What if agents could talk directly to each other, discover capabilities dynamically, and collaborate without waiting for a central authority?
Three protocols are leading this shift: Google's Agent-to-Agent (A2A), Anthropic's Model Context Protocol (MCP), and Amazon's Agent Client Protocol (ACP). Each takes a different architectural approach to the same problem: how can autonomous systems exchange information, negotiate tasks, and compose capabilities in real-time?
In this article — drawing from Building Agentic AI Systems and hands-on implementation experience — I'll dissect these three protocols, explain their topology and trade-offs, and show you how emerging collaboration patterns are reshaping enterprise architecture.
The Problem with Centralized Orchestration
Before diving into the protocols, let's be clear about why we need them. Consider a typical enterprise agentic system circa 2024:
- User request arrives → A master orchestrator receives the query
- Routing decision → The orchestrator analyzes the request and decides which agents to invoke
- Sequential or parallel execution → Agents execute in an orchestrator-managed workflow
- Result aggregation → The orchestrator collects results and returns a response
This works for simple pipelines. But as systems grow, several problems emerge:
Single point of routing failure: If the orchestrator can't decide which agent handles a query, the entire request stalls. No direct agent-to-agent discovery: Agents can't learn about each other's capabilities without the orchestrator's explicit permission. Latency accumulation: Every request bounces through the orchestrator, adding round-trip overhead. State coordination: The orchestrator must maintain shared state across all agents, which doesn't scale beyond a few dozen services.
What happens when Agent A completes its work and discovers that Agent B (which it's never heard of) has exactly the capability it needs next? In a centralized model, Agent A can't call Agent B directly — it must return control to the orchestrator, wait for permission, and then invoke Agent B. In a decentralized model, agents negotiate peer-to-peer.
Google's Agent-to-Agent (A2A) Protocol
Google's A2A protocol (announced as part of their broader GenAI stack) takes a direct peer-to-peer approach. Rather than funneling all communication through a central authority, agents publish their capabilities and communicate directly when needed.
Architecture and Topology
A2A operates as a flat topology with capability discovery via a shared registry:
- Capability Registry: Each agent registers its skills, inputs, outputs, and constraints in a discoverable service
- Direct Connections: Once Agent A discovers Agent B's capabilities, they communicate directly via authenticated channels
- Self-Description: Agents advertise their own capabilities using a standardized schema (inspired by OpenAPI-style specifications)
- Choreography: Instead of orchestration, agents negotiate workflows by exchanging capability information and proposing task sequences
Here's a conceptual example: Imagine a financial analysis system with three agents:
# Agent Registry (shared, discoverable)
{
"agents": [
{
"id": "market-data-agent",
"capabilities": ["fetch_stock_price", "fetch_market_indices"],
"endpoint": "https://agents.corp.com/market-data",
"requires_auth": true
},
{
"id": "analysis-agent",
"capabilities": ["compute_correlation", "regression_analysis"],
"endpoint": "https://agents.corp.com/analysis",
"requires_auth": true
},
{
"id": "reporting-agent",
"capabilities": ["generate_pdf_report", "send_to_stakeholder"],
"endpoint": "https://agents.corp.com/reporting",
"requires_auth": true
}
]
}
When a user asks "Correlate Apple stock with the Nasdaq index and send me a report," the system doesn't invoke a central orchestrator. Instead:
- Analysis agent queries the registry, finds the market-data-agent
- Analysis agent calls market-data-agent directly, requesting stock and index prices
- Analysis agent computes correlation and queries registry for reporting capabilities
- Analysis agent calls reporting-agent directly with the analysis results
- Reporting agent generates the PDF and sends it
Strengths of A2A
- Low latency: Direct agent-to-agent calls eliminate round-trip overhead through an orchestrator
- Scalable discovery: New agents can register themselves and be immediately discoverable
- Reduced coupling: Agents don't hardcode knowledge of other agents; they query a registry
- Parallel execution: Multiple agent chains can execute in parallel without orchestrator bottlenecks
Limitations
- Distributed consistency: No global view of agent state — difficult to ensure transactional semantics across agent boundaries
- Failure recovery: If Agent A calls Agent B and Agent B fails mid-request, Agent A must implement retry logic
- Security at scale: Direct peer-to-peer requires authentication and authorization between every pair of agents
Anthropic's Model Context Protocol (MCP)
Anthropic's MCP takes a fundamentally different approach. Rather than agent-to-agent communication, MCP defines how LLMs (or other reasoning engines) interact with external tools and data sources. It's less about horizontal agent-agent networking and more about vertical capability exposure.
Architecture and Topology
MCP operates as a client-server model where the "client" is typically an LLM application and the "server" is a data source, tool provider, or external system:
- MCP Server: Exposes resources (files, databases, APIs, etc.) and tools via standardized JSON-RPC
- MCP Client: Requests context and tools from servers; integrates responses into LLM prompts
- Resource Context: Instead of tool calls, MCP emphasizes providing rich context that LLMs can reason over
- Request-Response: Synchronous request-response for each interaction; no persistent agent state
Think of MCP as a protocol for "teaching an LLM about your organization's data and systems." Instead of embedding tool-calling logic in the LLM itself, you provide an MCP server that the LLM can query:
# MCP Server advertises resources and tools
{
"resources": [
{
"uri": "notion://database/projects",
"name": "Current Projects",
"description": "Live project database from Notion"
},
{
"uri": "slack://channels",
"name": "Slack Channels",
"description": "Indexed Slack messages and channels"
}
],
"tools": [
{
"name": "search_documents",
"description": "Search across all company documents",
"input_schema": {
"type": "object",
"properties": {
"query": {"type": "string"},
"limit": {"type": "integer", "default": 10}
}
}
}
]
}
When an LLM needs to answer a question, it can query the MCP server for relevant resources, incorporate them into its context window, and reason over them. For example:
- LLM receives query: "What are our current blockers in the Q4 roadmap?"
- LLM calls MCP client: "Fetch resources from notion://database/projects"
- MCP client queries MCP server: Server returns current project data from Notion
- MCP server returns resources: Project status, blockers, team assignments
- LLM reasons over context: Integrates project data into its reasoning and generates an answer
Strengths of MCP
- Context-first design: Emphasizes giving LLMs access to rich, real-time data rather than tool calls
- Standardized integration: Any organization can wrap their data systems (Notion, Slack, Salesforce, etc.) as MCP servers
- Reduced hallucination: LLMs reason over actual data, not imagined tool responses
- Ecosystem composability: Multiple MCP servers can be exposed to a single LLM application
Limitations
- Synchronous-only: Request-response pattern doesn't support long-running workflows or event-driven architectures
- LLM-centric: Designed for LLM as the reasoning engine; doesn't facilitate non-LLM agent-to-agent communication
- Stateless by default: No built-in support for persistent agent state or multi-turn negotiations
- Context window constraints: Providing rich context works until the amount of data exceeds the LLM's context window
Amazon's Agent Client Protocol (ACP)
Amazon's ACP (integrated into Bedrock and other AWS services) aims to bridge the gap between orchestration and decentralization. It defines how agents and supervisory systems coordinate task delegation — with support for both synchronous and asynchronous workflows.
Architecture and Topology
ACP operates as a hierarchical but flexible topology:
- Agent Roles: Agents can be supervisors (coordinators), workers (task executors), or hybrid
- Capability Contracts: Agents publish detailed capability contracts (inputs, outputs, SLA, dependencies)
- Bidirectional Communication: Agents can invoke other agents synchronously or asynchronously; supervisors can delegate with feedback loops
- State Management: Built-in support for maintaining execution state across multi-step workflows
- Error Recovery: Standardized retry policies, circuit breakers, and fallback chains
Here's how ACP orchestrates a customer support workflow:
# Agent publishes capability contract
{
"agent_id": "sentiment-classifier",
"version": "1.0",
"capabilities": [
{
"name": "classify_sentiment",
"input": {
"text": "string",
"language": "string"
},
"output": {
"sentiment": "positive|negative|neutral",
"confidence": "number",
"key_entities": "[string]"
},
"sla": {
"max_duration_ms": 500,
"availability": 0.999
}
}
]
}
# Supervisor invokes worker agent with callback
POST /agents/invoke
{
"target_agent": "sentiment-classifier",
"capability": "classify_sentiment",
"input": {"text": "Your service is terrible", "language": "en"},
"callback_url": "https://supervisor.corp/agent-callback"
}
# Worker responds asynchronously
POST https://supervisor.corp/agent-callback
{
"request_id": "req-123",
"sentiment": "negative",
"confidence": 0.97,
"key_entities": ["service", "terrible"]
}
Strengths of ACP
- Flexible orchestration: Supports both choreography (peer delegation) and orchestration (supervisor-directed)
- Asynchronous support: Callbacks and event streams enable long-running workflows without blocking
- Built-in reliability: Retry policies, circuit breakers, and timeout handling are protocol-level concerns
- Capability transparency: Detailed contracts allow supervisors to make intelligent routing decisions
- Tightly integrated: Native support in AWS Bedrock agents, making it accessible to cloud-native deployments
Limitations
- AWS ecosystem lock-in: Strongest support within Bedrock; third-party agent frameworks need custom adapters
- Complexity overhead: Asynchronous patterns, callback management, and state consistency require careful implementation
- Standardization nascent: As a younger protocol, community tooling and best practices are still evolving
Protocol Comparison: A2A vs. MCP vs. ACP
| Aspect | A2A (Google) | MCP (Anthropic) | ACP (Amazon) |
|---|---|---|---|
| Primary Use Case | Agent-to-agent peer communication | LLM context provisioning | Supervisor-worker task delegation |
| Topology | Flat, peer-to-peer via registry | Client-server (LLM as client) | Hierarchical with peer options |
| Discovery | Shared capability registry | Explicit server configuration | Contract-based advertisement |
| State Management | Distributed; agents own their state | Stateless (LLM context-driven) | Centralized for supervisor workflows |
| Synchrony Model | Primarily synchronous | Synchronous request-response | Both sync and async with callbacks |
| Security Model | Per-agent authentication | Client-server mutual auth | IAM-based with fine-grained permissions |
| Fault Tolerance | Agent-level retry logic | LLM-driven error handling | Protocol-level retries & fallbacks |
| Industry Maturity | Early; under active development | Stable; community adoption growing | Production-ready in AWS; nascent elsewhere |
Emergent Collaboration Patterns
As these protocols mature, new collaboration patterns are emerging that go beyond simple request-response:
Task Delegation and Negotiation
Rather than a supervisor assigning work, agents can propose and negotiate task boundaries. Agent A might offer a service, Agent B might counter-offer a modified version, and they settle on a contract:
# Agent A proposes: "I can process orders up to $10K in 100ms"
# Agent B responds: "I can process orders up to $50K but need 500ms"
# Result: They establish a contract:
# - A handles small orders (< $10K)
# - B handles large orders ($10K - $50K)
# - Both agree on retry policies and fallback chains
Voting and Consensus
Multiple specialized agents can vote on ambiguous decisions. For example, three sentiment analysis agents might disagree on a customer feedback score. A supervisor can collect their votes and use the consensus to guide downstream actions:
- Agent 1 (rule-based): Sentiment = negative (confidence: 0.6)
- Agent 2 (ML-based): Sentiment = neutral (confidence: 0.7)
- Agent 3 (LLM-based): Sentiment = negative (confidence: 0.85)
- Consensus decision: Route to human (tie-break needed)
Dynamic Service Composition
Agents discover each other's capabilities at runtime and compose new services. If a user asks for something that requires three capabilities your system wasn't explicitly built for, agents can chain together in real-time:
- Query the registry: "Who can extract tables from PDFs?"
- Discover: "PDF-Parser can do that"
- Query the registry: "Who can analyze financial data?"
- Discover: "FinanceAnalyzer can do that"
- Compose: "PDF-Parser → FinanceAnalyzer → ReportGenerator"
- Execute: The chain runs automatically with data flowing through each stage
These protocols are laying the foundation for a "multi-agent internet" where specialized AI services run autonomously, discover each other on demand, and compose into increasingly sophisticated systems. Think of it as microservices for AI: modular, scalable, and inherently decentralized.
Interoperability Challenges
Despite the promise, bringing these protocols together poses significant challenges:
Semantic Incompatibility
Each protocol has a different model of what "capability" means:
- A2A: Capabilities are functions with inputs and outputs
- MCP: Capabilities are data resources and tools for LLM reasoning
- ACP: Capabilities are stateful services with SLA and error policies
Bridging these requires translation layers. An A2A agent's "compute_score(input)" might map to an MCP tool, but the semantics (what does the score mean? what are the SLAs?) don't translate automatically.
Negotiation and Versioning
When an Agent A expects input format V2 but Agent B only publishes V1, how do they communicate? Each protocol handles versioning differently, and there's no universal agreement on backward compatibility.
Trust and Authorization
In a fully decentralized multi-agent internet, how do you prevent a rogue agent from spoofing another's identity or accessing privileged resources? Each protocol assumes different trust models (mutual TLS, OAuth, IAM), and mixing them requires careful security architecture.
How These Protocols Change Enterprise Architecture
If you're building agentic systems at scale, these protocols reshape your architecture in three ways:
1. From Monolithic Orchestrators to Distributed Choreography
Instead of a single master orchestrator deciding the workflow, agents negotiate directly. This reduces latency, improves fault isolation, and allows independent scaling of agent services.
2. From Tool Integration to Context Integration
Rather than coding tool-calling logic into agents, you expose your data and systems as MCP servers or capability contracts. This decouples the reasoning engine from operational details.
3. From Synchronous Pipelines to Asynchronous Event Networks
Protocols like ACP enable truly asynchronous, long-running workflows where agents can queue work, receive callbacks, and react to events — rather than blocking on every request.
Security and Trust Between Agents
Decentralization introduces trust challenges. How do you ensure that:
- Agent authentication: Agent B is actually Agent B and not an imposter
- Authorization: Agent A has permission to invoke Agent B
- Data integrity: Messages between agents aren't tampered with
- Audit trail: All inter-agent calls are logged for compliance
Best practices emerging from production deployments:
- Mutual TLS: All agent-to-agent communication encrypted with certificate-based identity
- Capability-based authorization: Agents are granted specific capabilities (e.g., "invoke sentiment-classifier with these inputs"), not blanket access
- Request signing: Agents cryptographically sign requests; recipients verify before execution
- Audit logging: Every inter-agent call logged with timestamp, caller, callee, inputs, and results
- Rate limiting: Prevent resource exhaustion and cascading failures by enforcing per-agent call quotas
Key Takeaways
The move from centralized orchestration to protocol-driven agent networking is reshaping how we build AI systems at scale:
- A2A (Google): If you need low-latency, peer-to-peer agent communication with dynamic discovery, A2A's flat topology and capability registry are compelling. Best for systems with homogeneous agents that need to negotiate at runtime.
- MCP (Anthropic): If your challenge is giving LLMs access to organizational data and tools without building tool-calling logic into the model, MCP's context-first approach is powerful. Best for knowledge workers using LLM assistants.
- ACP (Amazon): If you need reliable, asynchronous task delegation with built-in fault tolerance and are already in the AWS ecosystem, ACP's supervisor-worker model with async callbacks is production-ready. Best for enterprise workflows with strong consistency requirements.
- Hybrid architectures: Most large systems will combine elements of all three. Use ACP for orchestration, MCP for LLM context, and A2A patterns for agent peer negotiation.
- Interoperability is hard but necessary: The future isn't winner-take-all — it's heterogeneous networks of agents speaking multiple protocols. Invest in translation layers and agreed-upon semantic standards.
- Security is first-class: Decentralization trades the single-point-of-failure risk of central orchestrators for the distributed trust problem of peer networks. Encryption, authentication, and audit logging must be built in from day one.
These protocols are in the earliest stages of production adoption, and the multi-agent internet is still being written. But the trajectory is clear: the next era of agentic AI isn't about better LLMs in isolation — it's about intelligent systems that discover each other, negotiate capabilities, and compose into emergent solutions. The protocols enabling this shift are A2A, MCP, and ACP. Understanding their trade-offs and when to apply each is now table stakes for building enterprise agentic systems.
For deeper technical dives, implementations, and case studies, see Building Agentic AI Systems (Chapters 7-9, which cover distributed coordination, capability contracts, and multi-agent composition).