Production agent systems in 2026 use multiple protocols together. Here's how they fit:
┌─────────────────────────────────────────────────┐
│ 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 │
└─────────────┘ └─────────────────┘
| 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 |
from google.adk import Agent, MCPTool, A2AClient
# MCP tools for direct data access
db_tool = MCPTool(server="postgres-mcp", tool="query_customers")
slack_tool = MCPTool(server="slack-mcp", tool="send_message")
# A2A clients for agent delegation
travel_agent = A2AClient("https://travel.example.com")
legal_agent = A2AClient("https://legal.example.com")
# Build the orchestrator
orchestrator = Agent(
name="executive_assistant",
model="gemini-2.5-pro",
tools=[db_tool, slack_tool],
a2a_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."""
)
/.well-known/agent-card.json