Posted on 30 Apr 2026

Imagine you need to plan a complex trip abroad. You contact a travel agency, and they need to coordinate multiple tasks:
Each of these tasks is complex enough to require specialized expertise. In an ideal world, you’d have dedicated agents handling each responsibility:
But here’s the challenge: how do these agents communicate and coordinate with each other?
This is exactly the problem that A2A (Agent-to-Agent), Google’s new protocol, solves. It provides a standardized way for AI agents to discover, communicate, and collaborate — regardless of how they’re implemented or who built them.
In this article, we’ll explore how A2A works, its architecture, and why it matters for the future of multi-agent systems.
AI agents are proliferating across the industry. Companies are building specialized agents using different frameworks, languages, and approaches. But without a common standard, these agents remain isolated islands — unable to work together on complex problems.
Think of it like the early days of the web, before HTTP became the standard. Every system had its own way of communicating, making integration a nightmare.
A2A aims to be the HTTP for AI agents — a universal protocol that enables:
The protocol is already gaining traction, with major companies committing to support it. This isn’t just another framework — it’s becoming an industry standard.
When you build an A2A-compliant agent, you’re actually implementing three distinct layers. Understanding this separation is crucial.

Let’s break down what happens when one agent needs to communicate with another:
Every A2A agent can function as both client and server, depending on context. This flexibility enables complex orchestration scenarios.
The architecture consists of three layers:
Let’s examine each layer in detail.
The Protocol Layer is responsible for handling all A2A protocol mechanics. You typically don’t write this from scratch — Google provides an SDK that implements it.
Here’s what a basic A2A server looks like:
from a2a.server import Server
server = Server(executor=executor)
await server.start()
That’s it. The SDK handles:
/messages and /.well-known/agent.jsonThe Protocol Layer is completely generic. It knows nothing about your agent’s business logic — that’s by design. This separation ensures that A2A remains framework-agnostic.
The Adapter Layer is where you bridge the gap between the generic A2A protocol and your specific agent implementation.
This is the code you write to integrate your agent with A2A. The executor’s responsibilities include:
Every A2A request creates a task with a unique ID and status:
submitted — Task receivedworking — Agent is processinginput_required — Agent needs more informationcompleted — Task finished successfullyfailed — Task encountered an errorThe executor manages these state transitions.
The executor extracts relevant data from A2A messages and converts them into a format your agent understands.
A2A messages can contain multiple parts:
The executor processes these parts and routes them appropriately.
For long-running tasks, the executor uses an EventQueue to stream progress updates back to the client via Server-Sent Events (SSE).
This allows clients to receive real-time updates like:
Task created: task_123
Status: working
Progress: Analyzing document...
Status: completed
Result: [summary data]
The Adapter Layer is your integration point. It translates between A2A’s standardized protocol and your agent’s specific implementation — whether that’s LangGraph, LangChain, or a custom framework.
This is where your actual agent lives. The Business Layer implements:
The beauty of A2A is that this layer remains completely independent. You can use any framework, any model, any architecture — as long as the Adapter Layer properly translates to and from A2A protocol.
Now that we understand the architecture, let’s explore what A2A enables.

Every A2A agent publishes an agent card — a JSON file served at a well-known URL (similar to robots.txt for web crawlers).
This card acts as the agent’s digital business card, containing:
Other agents can discover and understand what an agent does without knowing its internal implementation.
Agents negotiate the types of content they can exchange:
This ensures compatibility before communication begins.
For every request, the server creates a task object with:
The client can:
tasks.gettask.artifactsThis pattern supports both quick responses and long-running operations.
A2A supports complex multi-agent workflows:
This enables sophisticated orchestration without tight coupling.
Let’s walk through a concrete example of how agents discover and communicate.

Agent A wants to use Agent B’s capabilities. It fetches Agent B’s agent card:
GET https://agent-b.example.com/.well-known/agent.json
The response contains everything Agent A needs to know:
{
"name": "Hotel Booking Agent",
"description": "Books hotels worldwide",
"endpoint": "https://agent-b.example.com/messages",
"capabilities": ["streaming", "multi-modal"],
"authentication": "api-key"
}
Agent A packages its request in JSON-RPC format and sends it via HTTP:
{
"jsonrpc": "2.0",
"method": "messages.create",
"params": {
"message": {
"role": "user",
"parts": [
{
"type": "text",
"content": "Book a hotel in Rome for 3 nights"
}
]
}
}
}
Agent B’s Protocol Layer receives the request and passes it to the Agent Executor. The executor:
task_123 and status submittedThe agent processes the request. If it’s quick, it responds immediately. If it takes time, it updates the task status to working and streams progress:
Event: task.status
Data: {"task_id": "task_123", "status": "working"}
Event: task.progress
Data: {"message": "Searching available hotels..."}
Event: task.progress
Data: {"message": "Found 15 options, analyzing..."}
When complete, the agent updates the task status to completed and includes the result in task.artifacts:
{
"task_id": "task_123",
"status": "completed",
"artifacts": {
"hotel": "Grand Hotel Rome",
"confirmation": "ABC123",
"price": "€450"
}
}
Agent A receives this response and can continue its workflow.
You might have heard of MCP (Model Context Protocol), another protocol that’s gained popularity recently. How does it relate to A2A?
They’re complementary, not competing.

MCP standardizes how an agent connects to its tools, APIs, and resources. It’s about:
Think of MCP as the protocol for an agent’s internal capabilities.
A2A standardizes how independent agents communicate as peers. It’s about:
Think of A2A as the protocol for external collaboration.
In a sophisticated agent system, you’ll often see both:
They solve different problems at different layers of the stack.
Ready to build your first A2A agent? Here’s what you need:
pip install a2a-sdkGoogle recommends this stack (though you can use whatever you prefer):
A2A represents a fundamental shift in how we think about AI agents. Instead of building monolithic systems that try to do everything, we can now build specialized agents that collaborate.
The key insights:
As more companies adopt A2A, we’ll see an ecosystem of interoperable agents emerge — much like the web emerged from HTTP standardization.
The multi-agent future is here. A2A is the protocol that makes it possible.
If you enjoyed this article, don’t forget to give it a clap 👏, share it with your friends 🔗, and follow me for more tips and tutorials on software development 📘. Your support helps me create more content like this — thank you! 🙌