Contents

The Agent Protocol Stack: Why MCP + A2A + A2UI Is the TCP/IP Moment for Agentic AI

Browser text-to-speech • Quality varies by device
Progress 0%

When I wrote the MCP Maturity Model two months ago, I treated MCP as the primary protocol layer for agent architectures. That was already incomplete by the time I published it. Google had shipped A2A v0.2. Anthropic’s A2UI had just been announced. And the Linux Foundation was suddenly hosting both MCP and A2A under the same governance roof.

What we’re watching isn’t just protocol proliferation - it’s the formation of a genuine protocol stack for agentic systems. And if you squint hard enough, the parallels to early internet protocol development are uncomfortable in how close they track. Including the part where security was an afterthought.

This post maps the stack as it exists in January 2026, identifies where the layers compose cleanly and where they don’t, and walks through the security surface that most teams are pretending doesn’t exist.

Three Protocols, Three Problems

Let’s get the taxonomy right first, because the confusion I see in Slack channels and LinkedIn threads is remarkable. People use “MCP” and “A2A” interchangeably. They’re not interchangeable. They solve fundamentally different problems.

graph TB
    subgraph "The Agent Protocol Stack (January 2026)"
        direction TB
        A2UI["<b>A2UI</b><br/>Agent → Interface<br/><i>How agents render UI</i><br/>Declarative components, cross-platform"]
        A2A["<b>A2A</b><br/>Agent → Agent<br/><i>How agents collaborate</i><br/>Task delegation, capability discovery"]
        MCP["<b>MCP</b><br/>Agent → Tool/Data<br/><i>How agents access resources</i><br/>Context, tools, prompts"]
    end

    User["Human / Client App"] --> A2UI
    A2UI --> A2A
    A2A --> MCP
    MCP --> Resources["Tools, APIs, Databases, Files"]

    style A2UI fill:#e8eaf6,stroke:#3f51b5
    style A2A fill:#e8f5e9,stroke:#4caf50
    style MCP fill:#fff3e0,stroke:#ff9800

MCP (Model Context Protocol) - Anthropic, November 2024. Now under Linux Foundation governance. Solves: how does an agent access tools, data sources, and context? Think of it as the agent’s hands and eyes. It reaches into databases, calls APIs, reads files. The primitives are resources, prompts, and tools.

A2A (Agent2Agent Protocol) - Google, April 2025. Donated to Linux Foundation June 2025. Currently at v0.3. Solves: how do agents from different vendors, frameworks, and organizations talk to each other as peers? Not as tools - as collaborators. The primitives are AgentCards (capability discovery), Tasks (units of work), and Messages (communication).

A2UI (Agent to UI Protocol) - Google, December 2025. Still early (v0.8 stable). Solves: how does an agent generate rich, interactive user interfaces without executing arbitrary code on the client? The primitives are declarative UI components that render natively across platforms.

The critical distinction most people miss: MCP treats external systems as tools for agents to use. A2A treats other agents as peers to collaborate with. An agent using MCP to query a database is fundamentally different from an agent using A2A to delegate a sub-task to a specialist agent. The trust models are different. The failure modes are different. The security boundaries are different.

How the Layers Compose

Here’s where it gets interesting. These protocols aren’t just parallel standards - they’re designed to stack.

sequenceDiagram
    participant User as User / Client
    participant UI as A2UI Layer
    participant Orchestrator as Orchestrator Agent
    participant Specialist as Specialist Agent
    participant Tool as MCP Server (DB, API)

    User->>UI: "Find me flights under $500 to Tokyo next month"
    UI->>Orchestrator: Parse intent, create task

    Note over Orchestrator: Discovers specialist via A2A AgentCard

    Orchestrator->>Specialist: A2A: Delegate flight search task
    Specialist->>Tool: MCP: Query flight API
    Tool-->>Specialist: Flight data (structured)
    Specialist->>Tool: MCP: Query price history
    Tool-->>Specialist: Historical pricing

    Specialist-->>Orchestrator: A2A: Task result with 12 options

    Note over Orchestrator: Decides UI rendering strategy

    Orchestrator->>UI: A2UI: Render flight comparison cards
    UI-->>User: Interactive flight cards with filters

    User->>UI: Selects flight, clicks "Book"
    UI->>Orchestrator: Booking intent
    Orchestrator->>Specialist: A2A: Delegate booking task
    Specialist->>Tool: MCP: Execute booking API
    Tool-->>Specialist: Confirmation
    Specialist-->>Orchestrator: A2A: Booking confirmed
    Orchestrator->>UI: A2UI: Render confirmation with itinerary
    UI-->>User: Booking confirmation

A real request flows through all three layers:

  1. A2UI captures user intent and renders responses as interactive components (not just text)
  2. A2A handles delegation - the orchestrator discovers specialist agents via AgentCards and delegates sub-tasks
  3. MCP handles the actual work - specialist agents use MCP to query databases, call APIs, execute tools

The IBM explainer on A2A puts it well: a retail inventory agent uses MCP to check stock levels, then uses A2A to notify a supplier agent when stock is low. The protocols aren’t competing - they’re complementary at different layers.

Where the Stack Composes Cleanly

The composition works elegantly when responsibilities are clear:

Layer Responsibility Trust Boundary Failure Mode
A2UI Rendering, user interaction Client-side sandboxing Bad UI, not data loss
A2A Task delegation, capability discovery Cross-organization auth Task failure, retry needed
MCP Data access, tool execution Server-side permissions Data corruption, privilege escalation

AgentMaster (July 2025) was the first framework to use A2A and MCP together in production. Google’s ADK (Agent Development Kit) now has first-class support for both. LangGraph v0.2 (shipped January 15, 2026) added A2A and MCP as first-class protocol targets.

The pattern that’s emerging: A2A for the network layer, MCP for the resource layer. It’s clean. It makes sense. And it’s exactly what we said about HTTP and FTP in 1995, right before we discovered all the ways they could be abused together.

Where the Stack Breaks

Now for the part nobody wants to talk about. I see three structural gaps:

Gap 1: No Unified Identity Model

MCP has its own auth model (recently upgraded to OAuth 2.1, but still messy in practice). A2A has its own auth scheme (parity with OpenAPI’s authentication at launch). A2UI handles client-side trust differently. There’s no unified identity that flows across all three layers.

In practice, this means: an agent authenticated via A2A to delegate a task has no guaranteed way to pass that identity context through to the MCP layer where the actual tool execution happens. The specialist agent re-authenticates independently. Credential management becomes a per-layer problem.

Gap 2: Observability Doesn’t Cross Layers

You can trace an MCP request. You can trace an A2A task. But tracing a user request that flows through A2UI → A2A → MCP → back requires stitching together three different observability systems. Nobody has solved distributed tracing across this stack cleanly.

Gap 3: Error Propagation Is Undefined

What happens when an MCP tool call fails inside an A2A-delegated task? The A2A spec supports long-running tasks and status updates, but the semantics of “my MCP server is down” translating to an A2A task failure and then to an A2UI error state are… undefined. Each layer has its own error model. Reconciling them is left as an exercise for the developer.

graph LR
    subgraph "Gap: No Unified Identity"
        direction LR
        UA["User Auth<br/>(A2UI)"] -.->|"???"| AA["Agent Auth<br/>(A2A)"]
        AA -.->|"???"| TA["Tool Auth<br/>(MCP)"]
    end

    subgraph "Gap: Observability"
        direction LR
        T1["A2UI Trace"] -.->|"Manual stitching"| T2["A2A Trace"]
        T2 -.->|"Manual stitching"| T3["MCP Trace"]
    end

    subgraph "Gap: Error Propagation"
        direction LR
        E1["MCP Failure"] -.->|"Undefined"| E2["A2A Task State"]
        E2 -.->|"Undefined"| E3["A2UI Error Display"]
    end

    style UA fill:#ffcdd2
    style AA fill:#ffcdd2
    style TA fill:#ffcdd2
    style T1 fill:#fff9c4
    style T2 fill:#fff9c4
    style T3 fill:#fff9c4
    style E1 fill:#ffccbc
    style E2 fill:#ffccbc
    style E3 fill:#ffccbc

The Security Surface That Should Keep You Up at Night

I’m going to spend more time here than on anything else in this post because the security situation is genuinely alarming.

Adversa AI published a taxonomy of 25 MCP vulnerability categories. VentureBeat reported on Pynt’s research showing that deploying just ten MCP plugins creates a 92% probability of exploitation. OWASP published an MCP-specific Top 10. And a supply chain worm called Shai-Hulud 2.0 re-emerged in November specifically targeting developer pipelines that use MCP.

Let’s walk through the attack surfaces layer by layer.

MCP: The Tool Layer’s Open Wounds

The MCP security model was designed for interoperability, not containment. Nancy Wang, SVP of Engineering at 1Password, put it bluntly: “any agent that speaks MCP can plug into your company’s systems, fetch data, and perform actions. That flexibility is powerful, but it also assumes a level of trust that doesn’t exist in enterprise environments.”

The critical vulnerabilities:

Tool Poisoning - An MCP tool’s description is consumed by the LLM to decide when and how to use the tool. A malicious tool description can contain hidden instructions that manipulate agent behavior. The tool description says “Calculator for math” to the human reviewer, but contains invisible Unicode characters that tell the LLM to exfiltrate data. Detection is nearly impossible without specialized scanning.

Supply Chain Attacks - Most developers install MCP packages from npm or Docker Hub without auditing. One poisoned update can compromise every agent system that depends on it. The mcp-remote package (widely used for OAuth support) had a critical RCE vulnerability (CVE-2025-6514). Hundreds of MCP servers were found bound to 0.0.0.0 - exposed to the entire network.

Rug Pulls - An MCP server is approved initially, then silently updated with new tool definitions. The agent gains capabilities that were never authorized. Datadog documented this pattern: an MCP server adds tool definitions that delete resources, and the host application is never notified.

Config Injection - Attackers place malicious .mcp/config.json files in repositories. When developers clone and open the project, their IDE automatically connects to attacker-controlled servers. No user interaction required beyond opening the project. VSCode and Cursor are both vulnerable.

A2A: The Collaboration Layer’s Trust Problem

A2A introduces a different class of risk: what happens when you trust another agent that shouldn’t be trusted?

The AgentCard mechanism (how agents advertise capabilities) is essentially self-reported. An agent says “I’m a billing specialist with access to payment processing” and other agents take that at face value. There’s no built-in mechanism for verifying capability claims.

A2A v0.3 added gRPC support and the ability to sign security cards, which helps. But the fundamental problem remains: agent identity and capability verification in a decentralized system is an unsolved problem. It’s the same challenge federated identity systems have struggled with for decades, now applied to autonomous software agents that make decisions.

A2UI: The Client Layer’s Sandboxing Challenge

A2UI is designed to be safe by construction - agents generate declarative UI components, not executable code. The client renders these components from a trusted catalog. This is actually a reasonable security model.

The risk shifts to the catalog itself: if an attacker can register a malicious component in the client’s trusted catalog, every agent-generated UI becomes a potential attack vector. The extensibility that makes A2UI useful (custom components for enterprise needs) is the same extensibility that creates supply chain risk.

Cross-Layer Attack Scenarios

The scariest attacks aren’t within a single layer - they chain across the stack:

graph TD
    A["1. Attacker publishes<br/>poisoned MCP tool<br/>to npm registry"] --> B["2. Tool contains hidden<br/>instructions in description<br/>(invisible Unicode)"]
    B --> C["3. Developer installs<br/>MCP server, adds to<br/>agent system"]
    C --> D["4. Agent uses poisoned tool,<br/>hidden instructions cause<br/>data exfiltration via A2A"]
    D --> E["5. Exfiltrated data sent to<br/>attacker's A2A endpoint<br/>disguised as legitimate agent"]
    E --> F["6. A2UI renders fake<br/>confirmation to user<br/>while attack continues"]

    style A fill:#ffcdd2
    style B fill:#ffcdd2
    style C fill:#fff9c4
    style D fill:#ffccbc
    style E fill:#ffccbc
    style F fill:#ffcdd2

A poisoned MCP tool manipulates an agent into delegating data exfiltration via A2A to a malicious external agent, which then renders a fake success confirmation via A2UI. The user sees “task completed successfully” while their data is being siphoned.

This isn’t theoretical. Every component of this attack chain has been demonstrated independently. Nobody has chained them in the wild yet - that we know of. But the ingredients are all sitting on the kitchen counter.

What Mature Teams Are Doing Right Now

After talking with teams running multi-agent systems in production and observing the patterns emerging across the ecosystem, here’s what separates the teams that will survive from the teams that will end up in a breach disclosure.

1. Defense in Depth Across the Stack

Don’t rely on any single layer for security. Assume each layer will be compromised independently.

Layer Control Implementation
MCP Tool vetting + sandboxing Internal registry of audited MCP servers. No direct npm installs. OWASP MCP Top 10 as checklist.
MCP Input validation Sanitize all inputs before they reach LLM agents. Block injection patterns, encoded payloads.
MCP Least privilege Each MCP server gets minimal permissions. No shared credentials across servers.
A2A AgentCard verification Don’t trust self-reported capabilities. Verify through challenge-response or reputation systems.
A2A Task boundaries Constrain what delegated tasks can do. No open-ended “do anything” delegations.
A2UI Component catalog control Locked registry of approved UI components. Code-review process for additions.
Cross-layer Distributed tracing Correlation IDs that flow through A2UI → A2A → MCP. Log everything.

2. Treat MCP Servers Like Dependencies, Not Plugins

The mental model shift: MCP servers aren’t plugins you install and forget. They’re dependencies in your supply chain. Apply the same rigor you’d apply to any third-party library:

  • Pin versions. Don’t auto-update.
  • Audit tool descriptions for hidden content (invisible Unicode, RTL markers, homoglyphs).
  • Run in sandboxed environments with restricted network access.
  • Monitor for unexpected tool definition changes (rug pull detection).

3. Build the Identity Bridge Yourself

Since the stack doesn’t provide unified identity, build it. Pass authentication context explicitly through each layer transition:

  • A2UI authenticates the user.
  • A2UI passes a signed token to the orchestrator agent.
  • Orchestrator includes the token in A2A task metadata when delegating.
  • Specialist agent presents the token to MCP servers for authorization.

It’s manual. It’s annoying. It’s necessary until the protocols provide a standard mechanism. The A2A Secure Passport Extension (announced in late 2025) is a step toward this - it lets agents share structured context securely - but it’s not yet widely implemented.

4. Don’t Ship A2A Until You Need It

This is my most controversial take: most teams adopting A2A in January 2026 don’t need it yet.

If your agents are all within the same organization, running in the same infrastructure, and you control the entire pipeline - you don’t need a cross-organization agent communication protocol. Use simpler orchestration (LangGraph, CrewAI, direct function calls). The overhead and attack surface of A2A aren’t justified.

A2A becomes essential when:

  • Agents from different organizations need to collaborate
  • You’re building a marketplace of agent capabilities
  • You need formal task lifecycle management across trust boundaries
  • Agents run on different platforms and can’t share memory or tools

If none of those apply, you’re adding complexity for complexity’s sake.

The TCP/IP Parallel (And Its Limits)

I’ve been using the TCP/IP analogy deliberately, so let me be explicit about where it holds and where it breaks.

Where it holds:

  • Layered architecture with clear responsibilities per layer
  • Each layer can evolve independently
  • Interoperability is the primary design goal
  • Open governance (Linux Foundation for both MCP and A2A)
  • Security was bolted on after initial adoption

Where it breaks:

  • TCP/IP moved bits. These protocols move intent. The semantic gap is enormous.
  • TCP/IP had decades to mature before the internet became critical infrastructure. The agent protocol stack is being deployed into production systems now, with enterprise data, while the specs are still at v0.3.
  • TCP/IP’s layering was clean from early on. The agent stack’s layering is still messy - is context delivery (MCP) really the same layer as tool execution (also MCP)? Should AgentCard discovery be a separate protocol?

The parallel is useful for framing but dangerous for prediction. We shouldn’t assume this stack will converge the way internet protocols did. It might fragment. It might get replaced by something we haven’t seen yet.

What’s Missing from the Stack

Three things I expect to emerge in the next 12 months:

Agent Identity Protocol - A dedicated layer for agent identity, capability attestation, and reputation. Neither MCP nor A2A handles this well. The closest thing is A2A’s AgentCard, but it’s self-reported and unsigned (until v0.3’s security card signing, which is still nascent). We need something like X.509 for agents.

Context Provenance Protocol - How do you trace where a piece of context came from, how it was transformed, and who touched it? Critical for debugging, compliance, and trust. MCP doesn’t track provenance. A2A doesn’t track it. Nobody tracks it.

Agent Governance Protocol - Governance agents that monitor other agents for policy violations. Machine Learning Mastery’s analysis of 2026 trends highlights this as an emerging pattern. You’ll need a protocol for the governance layer to observe and intervene across MCP and A2A interactions without breaking the stack.

Connecting Back to the Maturity Model

If you’ve read my MCP Maturity Model, here’s where the protocol stack maps to maturity levels:

Maturity Level Protocol Stack Usage
Level 0-1 None needed. String assembly and structured objects.
Level 2 MCP for standardized tool/data access.
Level 3 MCP with optimization. A2A becomes relevant if you have cross-boundary agent coordination.
Level 4 Full MCP + A2A. Adaptive systems benefit from A2A’s capability discovery. A2UI if you’re building user-facing agent experiences.
Level 5 All three protocols with custom extensions. This is where the missing protocols (identity, provenance, governance) become critical.

Most teams should be at Level 2-3, using MCP competently, with A2A on the roadmap for when they genuinely need cross-agent collaboration across trust boundaries. If you’re jumping to full-stack deployment without solid MCP foundations, you’re building on sand.

Where We Go From Here

The agent protocol stack is real. It’s messy. It’s being deployed into production faster than the security model can keep up. This is exactly what happened with web technologies in the late 1990s, and we spent the next two decades patching the gaps.

We have a narrow window to get the security fundamentals right before the stack becomes too entrenched to fix. The OWASP MCP Top 10 is a start. A2A’s security card signing is a start. But we need the community to treat agent protocol security with the same urgency we treat API security - not as an afterthought, but as a first-class design constraint.

The organizations that will thrive in the agentic era aren’t the ones deploying the most agents. They’re the ones deploying agents with the best understanding of what these protocols actually guarantee - and what they don’t.


This is Part 1 of a three-part series on the cutting edge of LLM and agent research in January 2026. Part 2 covers RLVR beyond math and code - the training technique powering reasoning models and the open question of whether it actually makes models smarter. Part 3 explores mechanistic interpretability and circuit tracing - what it means to watch an LLM think, and why it matters for production safety.

Find me on LinkedIn or drop a comment below.

Citation

If you found this article useful, please cite it using one of the formats below:

APA Format

Mitra, Subhadip. (2026, January). The Agent Protocol Stack: Why MCP + A2A + A2UI Is the TCP/IP Moment for Agentic AI. Retrieved from https://subhadipmitra.com/blog/2026/agent-protocol-stack/

BibTeX Entry

@article{mitra2026the-agent-protocol-stack-why-mcp-a2a-a2ui-is-the-tcp-ip-moment-for-agentic-ai,
  title   = {The Agent Protocol Stack: Why MCP + A2A + A2UI Is the TCP/IP Moment for Agentic AI},
  author  = {Mitra, Subhadip},
  year    = {2026},
  month   = {Jan},
  url     = {https://subhadipmitra.com/blog/2026/agent-protocol-stack/}
}


Join the Discussion

Share your thoughts, ask questions, or provide feedback on this article