Building Multi-Protocol Systems — A2A Protocol & Google ADK
[ ABORT TO HUD ]
SEQ. 1
SEQ. 2
SEQ. 3
SEQ. 4
SEQ. 5
Building Multi-Protocol Systems
MCP + A2A + ADK: The Full Stack
Production agent systems in 2026 use multiple protocols together. Here's how they fit:
The Three-Protocol Architecture
┌─────────────────────────────────────────────────┐
│ YOUR AGENT (built with ADK) │
│ │
│ ┌────────────────┐ ┌─────────────────────┐ │
│ │ MCP Clients │ │ A2A Client │ │
│ │ (Tools/Data) │ │ (Agent Delegation) │ │
│ └───────┬────────┘ └──────────┬──────────┘ │
└──────────┼─────────────────────────┼────────────┘
│ │
┌──────▼──────┐ ┌──────▼──────────┐
│ MCP Servers │ │ Remote A2A │
│ • Database │ │ Agents │
│ • GitHub │ │ • Travel Agent │
│ • Slack │ │ • Legal Agent │
│ • Files │ │ • Finance Agent │
└─────────────┘ └─────────────────┘
When to Use Which
| Need | Protocol | Example |
|---|---|---|
| Read a database | MCP | Query customer records via MCP server |
| Call an API | MCP | Send a Slack message via MCP tool |
| Delegate a complex task | A2A | Ask a travel agent to book a trip |
| Get a second opinion | A2A | Ask a legal agent to review a contract |
| Orchestrate everything | ADK | Build the central agent with sub-agents |
Production Implementation
from google.adk.agents import Agent
from google.adk.agents.remote_a2a_agent import RemoteA2aAgent
from google.adk.tools.mcp_tool import MCPToolset
from google.adk.tools.mcp_tool.mcp_session_manager import StreamableHTTPConnectionParams
# MCP tools for direct data access
db_mcp = MCPToolset(
connection_params=StreamableHTTPConnectionParams(url="https://mcp.internal/postgres"),
tool_filter=["query_customers"],
)
slack_mcp = MCPToolset(
connection_params=StreamableHTTPConnectionParams(url="https://mcp.internal/slack"),
tool_filter=["send_message"],
)
# A2A clients for agent delegation
travel_agent = RemoteA2aAgent(name="travel_agent", agent_card="https://travel.example.com/.well-known/agent-card.json")
legal_agent = RemoteA2aAgent(name="legal_agent", agent_card="https://legal.example.com/.well-known/agent-card.json")
# Build the orchestrator
orchestrator = Agent(
name="executive_assistant",
model="gemini-4-argon",
tools=[db_mcp, slack_mcp],
sub_agents=[travel_agent, legal_agent],
instruction="""You are an executive assistant.
Use MCP tools for data access (database, Slack).
Delegate to the travel agent for booking tasks.
Delegate to the legal agent for contract review."""
)
Integration Checklist
- ☐ Publish your Agent Card at
/.well-known/agent-card.json - ☐ Register MCP servers for all data/tool access
- ☐ Discover and validate remote A2A agents before production
- ☐ Implement
input-requiredstate handling for A2A tasks - ☐ Set up OpenTelemetry for cross-protocol observability
- ☐ Rate-limit A2A calls to prevent cascade failures
- ☐ Authenticate all inter-agent communication (OAuth 2.0)
🌐 The Big Picture: MCP is the agent's hands (tools). A2A is the agent's network (colleagues). ADK is the agent's skeleton (structure). Together, they create agents that can do anything a human knowledge worker can do.
⌨ HANDS-ON LABBridge A2A Agents to MCP Server Tools
⭐ +150 XPDeploy an agent gateway that translates A2A JSON-RPC delegation tasks into downstream Model Context Protocol (MCP) tool calls.
1Test protocol bridging between A2A and MCP.
OBJECTIVE 1 / 1 — type "hint" if stuck
SYNAPSE VERIFICATION
QUERY 1 // 3
When should you use A2A instead of MCP?
For reading files
When you need to delegate a complex task to a specialized agent, not just call a tool
For database queries
For authentication