Delx
Agents / MCP vs A2A Deep Dive

MCP vs A2A Deep Dive

MCP and A2A aren't competitors -- they're different layers of the same stack. MCP is the tool execution layer: an agent discovers and calls tools on a server. A2A is the agent communication layer: agents delegate tasks to other agents. Understanding where each layer starts and stops is the key to building production agent systems.

Comparison

DimensionOption AOption B
Abstraction LayerTool execution (agent-to-server)Task delegation (agent-to-agent)
Primary InteractionCall a specific tool with typed inputsDelegate a task described in natural language
Discovery Mechanismtools/list returns tool schemasAgent Cards at /.well-known/agent.json
State ModelPersistent client-server sessionTask lifecycle (submitted/working/completed/failed)
Transportstdio, SSE, or HTTP (JSON-RPC)HTTP (JSON-RPC) with SSE streaming
Latency (tool call vs task)~15-35ms protocol overhead per tool call~30-60ms per task submission + async execution
Payload FlexibilityStructured JSON inputs validated against schemaFree-form messages with optional structured parts
Error HandlingJSON-RPC error codes with structured detailsTask status=failed with error artifacts
Multi-Step WorkflowsSequential tool calls within a sessionTask delegation with sub-task spawning
Specification MaturityAnthropic-led, 2024 launch, rapid adoptionGoogle-led, 2025 launch, growing ecosystem

When to Use Each

Use Protocol A when:

Use Protocol B when:

Two Layers, One Stack

Think of it like TCP and HTTP. MCP is the lower layer -- it defines how an agent calls a specific tool on a specific server. A2A is the higher layer -- it defines how agents delegate work to each other. An A2A agent might internally use MCP to execute tools on its own MCP servers. The protocols don't overlap; they compose. Delx runs both: MCP at /mcp for tool execution, A2A at /a2a for agent-to-agent task delegation, sharing the same backend handlers.

Architecture in Production

In Delx's production deployment, a request flows like this: an external agent sends an A2A message/send with a task description. The A2A handler parses the task, routes it to the appropriate internal logic, which may call one or more MCP tools. Results flow back as A2A task artifacts. The MCP layer handles tool discovery (tools/list), input validation, and execution. The A2A layer handles task lifecycle, session persistence, and inter-agent communication. Neither layer knows about the other's internals.

Performance: Synchronous vs Asynchronous

MCP tool calls are synchronous by default -- call a tool, get a result. Protocol overhead is 15-35ms. A2A tasks are inherently asynchronous -- submit a task, get a task ID, poll or stream for updates. This adds 30-60ms overhead but enables tasks that run for seconds, minutes, or hours. For quick operations (fetch data, validate input, format text), MCP's synchronous model is faster. For complex workflows (generate report, analyze dataset, coordinate with other agents), A2A's async model is correct.

Discovery: Tools vs Agents

MCP's tools/list returns a flat list of available tools with JSON Schema inputs. It answers: what can this server do? A2A's Agent Cards answer a different question: what can this agent do, and how should I talk to it? Agent Cards include capabilities, supported content types, authentication requirements, and natural-language descriptions of expertise. Tools are specific and deterministic; agent capabilities are broad and compositional. You discover tools to call them directly. You discover agents to delegate tasks to them.

Session and State Management

MCP sessions are persistent connections -- the client and server maintain shared state across multiple tool calls. Context accumulates: previous results, user preferences, and conversation history persist in the session. A2A tracks state differently: each task has its own lifecycle, and session continuity is maintained via session IDs across multiple tasks. MCP's model is tighter (single connection, shared memory), while A2A's is more distributed (tasks can be routed to different workers). Delx bridges both with a shared SessionStore.

Real Deployment: The Delx Pattern

Delx's CompositeApp routes /mcp to the MCP handler and everything else to the Starlette app (which includes A2A at /a2a and REST at /api/v1/*). Both protocols share the same TherapyEngine, SessionStore, and tool handlers. An A2A task like 'analyze my mood' triggers the same logic as an MCP call to the analyze_mood tool -- but A2A adds task tracking, session persistence, and structured artifacts. This shared-backend pattern avoids code duplication and keeps both protocols in sync.

Choosing Your Architecture

If you're building a single agent that needs to call tools on servers, start with MCP. If you're building a multi-agent system where agents delegate work to each other, add A2A. If you're building both (and most production systems eventually do), implement them as separate layers sharing a common backend. Don't try to use MCP for agent-to-agent communication -- it's not designed for task delegation. Don't try to use A2A for direct tool execution -- that's what MCP does.

Migration Notes

You don't migrate between MCP and A2A -- you layer them. If you have MCP tools, add an A2A endpoint that wraps tool execution in task lifecycle management. If you have A2A agents, give each agent its own MCP server for tool discovery. The migration path is always additive. Delx added A2A on top of existing MCP in 2 days by wrapping MCP tool calls in A2A task responses and adding session persistence via contextId.

FAQ

Are MCP and A2A competing protocols?

No. MCP handles agent-to-server tool execution. A2A handles agent-to-agent task delegation. They operate at different layers and compose naturally. Most production systems will use both.

Can an A2A agent work without MCP?

Yes. An A2A agent can execute tasks using any internal mechanism -- REST calls, database queries, custom code. MCP just happens to be the best protocol for structured tool execution within an agent.

Which protocol should I implement first?

Start with MCP if you're building tools for agents to consume. Start with A2A if you're building agents that collaborate with other agents. Most teams start with MCP because tool execution is the more immediate need.

How does Delx route between MCP and A2A?

Delx uses a CompositeApp that routes /mcp to the MCP server and /a2a (plus all other paths) to a Starlette app. Both share the same TherapyEngine and SessionStore, so state is consistent across protocols.

What's the performance cost of running both?

Negligible. Both protocols share the same backend handlers. The only overhead is the protocol parsing layer -- ~15ms for MCP, ~30ms for A2A. Handler execution time (50-500ms typically) dominates in both cases.

Can I use MCP tools/list to discover A2A agents?

No. MCP tools/list discovers tools on a single server. A2A Agent Cards discover agents across the network. They're different discovery mechanisms for different purposes. You'd use Agent Cards to find agents, then those agents might internally use MCP tools.

Do both protocols support streaming?

Yes, but differently. MCP uses SSE for progress notifications during tool execution. A2A uses SSE for task status updates. Both are server-to-client; neither supports bidirectional streaming natively.