Overview of Google A2A Protocol
The Agent2Agent Protocol (A2A) is an open standard developed by Google that enables seamless communication and collaboration between AI agents across different platforms and frameworks. A2A addresses the fragmentation in the AI agent ecosystem by providing a unified way for agents to discover capabilities, delegate tasks, and share results.
What is the full form of A2A?
A2A stands for Agent2Agent or Agent-to-Agent Protocol, defining how AI agents communicate with each other securely and efficiently.

A2A Protocol Architecture Overview
Core Capabilities
Capability Discovery
Agents expose their capabilities through standardized Agent Cards (JSON metadata), allowing other agents to discover and utilize their services.
Task Management
Structured task lifecycle with support for synchronous, asynchronous, and streaming interactions between agents.
Multimodal Communication
Support for diverse data types including text, image, audio, and video, enabling rich interactions between agents.
Security & Privacy
Enterprise-grade authentication and authorization mechanisms to ensure secure agent interactions and data privacy.
Relationship with MCP
The Agent2Agent Protocol (A2A) complements Anthropic's Model Context Protocol (MCP), with A2A focusing on communication between AI agents, while MCP specializes in agent-to-tool connections.

Comparison between A2A and MCP protocols
Protocol Specification
The A2A protocol is built on standard web technologies to ensure broad compatibility and easy integration with existing systems. This section covers the technical specifications of the protocol architecture, agent discovery mechanism, task management, and security features.
2.1 Architecture
A2A is implemented as a JSON-RPC 2.0 over HTTP(S) protocol, allowing for synchronous, streaming, and asynchronous communication patterns between agents. This architecture provides flexibility while leveraging established web standards.

A2A Protocol communication workflow
- Transport Layer: HTTPS for secure communication
- Message Format: JSON-RPC 2.0 for structured request-response patterns
- Communication Patterns:
- Synchronous: Standard HTTP request-response
- Streaming: Server-Sent Events (SSE) for real-time updates
- Asynchronous: Polling with task IDs for long-running operations
- Content Types: Support for text, JSON, binary data, and multipart content
2.2 Agent Discovery
A2A uses Agent Cards for capability discovery, allowing agents to expose their functionality in a
standardized format. An Agent Card is a JSON document typically located at
/.well-known/agent.json
that describes an agent's capabilities and endpoints.
Agent Card Example:
{
"name": "Currency Converter Agent",
"description": "Converts between currencies using real-time exchange rates",
"version": "1.0.0",
"contact": "support@example.com",
"endpoints": {
"tasks": "https://api.example.com/a2a/tasks",
"stream": "https://api.example.com/a2a/stream"
},
"auth": {
"type": "api_key",
"in": "header",
"name": "X-API-Key"
},
"capabilities": [
{
"id": "convert_currency",
"name": "Convert Currency",
"description": "Converts an amount from one currency to another",
"parameters": {
"type": "object",
"properties": {
"amount": {
"type": "number",
"description": "The amount to convert"
},
"from": {
"type": "string",
"description": "Source currency code (ISO 4217)"
},
"to": {
"type": "string",
"description": "Target currency code (ISO 4217)"
}
},
"required": ["amount", "from", "to"]
},
"returns": {
"type": "object",
"properties": {
"converted_amount": {
"type": "number"
},
"rate": {
"type": "number"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
}
}
]
}
2.3 Task Management
A2A provides a standardized task lifecycle management system that tracks tasks through various states from creation to completion, supporting both simple and complex multi-step operations.

Task lifecycle in the A2A protocol
Task states in the A2A protocol include:
- Created: Task has been submitted but not yet started
- Working: Agent is actively processing the task
- NeedsInput: Additional information is required from the requester
- Completed: Task has been successfully completed
- Failed: Task encountered an error and could not be completed
- Canceled: Task was canceled by the requester or agent
Tasks are uniquely identified by IDs, allowing for tracking and management across multiple interactions.
2.4 Security
A2A implements enterprise-grade security features to protect agent communications and sensitive data, aligning with industry standards for authentication and authorization.
Authentication Methods
- API Keys
- OAuth 2.0
- JWT (JSON Web Tokens)
- Client Certificates
Security Features
- HTTPS encryption
- Input validation
- Rate limiting
- Audit logging
- Privacy controls
A2A's security model is designed to protect not only the communication between agents but also the internal state and intellectual property of each agent, ensuring that agents can collaborate without exposing sensitive information.
Implementation Guides
This section provides practical guidance for implementing A2A in your applications, with step-by-step tutorials for both Python and JavaScript environments, as well as integration instructions for popular AI frameworks.
3.1 Quick Start
Follow these steps to get started with A2A implementation:
-
Set up development environment
Install the A2A SDK for your preferred language:
# Python pip install google-a2a # JavaScript npm install @google/a2a-sdk
-
Create an Agent Card
Define your agent's capabilities in a JSON file following the A2A specification.
-
Implement API endpoints
Create the necessary endpoints for task submission, status checking, and streaming.
-
Test integration
Use the A2A test suite to verify your implementation.
3.2 Python Implementation
This tutorial demonstrates how to implement a simple currency conversion agent using Python and the A2A SDK:
from google_a2a import A2AServer, AgentCard, Task, TaskStatus
from fastapi import FastAPI, HTTPException
import uvicorn
import requests
app = FastAPI()
a2a_server = A2AServer(app)
# Define agent card
agent_card = AgentCard(
name="Currency Converter",
description="Converts between currencies using real-time exchange rates",
version="1.0.0",
capabilities=[
{
"id": "convert_currency",
"name": "Convert Currency",
"description": "Converts an amount from one currency to another",
"parameters": {
"type": "object",
"properties": {
"amount": {"type": "number"},
"from": {"type": "string"},
"to": {"type": "string"}
},
"required": ["amount", "from", "to"]
}
}
]
)
# Register agent card
a2a_server.register_agent_card(agent_card)
# Implement task handler
@a2a_server.task_handler("convert_currency")
async def convert_currency(task: Task):
params = task.parameters
amount = params.get("amount")
from_currency = params.get("from")
to_currency = params.get("to")
# Update task status to working
await task.update_status(TaskStatus.WORKING)
try:
# Call external API for exchange rates (for example)
response = requests.get(
f"https://api.exchangerate-api.com/v4/latest/{from_currency}"
)
data = response.json()
rate = data["rates"].get(to_currency)
if not rate:
raise ValueError(f"Exchange rate not found for {to_currency}")
converted_amount = amount * rate
# Complete task with result
await task.complete({
"converted_amount": converted_amount,
"rate": rate,
"timestamp": data["time_last_updated"]
})
except Exception as e:
# Handle errors
await task.fail(str(e))
if __name__ == "__main__":
uvicorn.run("app:app", host="0.0.0.0", port=8000)
3.3 JavaScript Implementation
Here's how to implement the same currency conversion agent using Node.js and Express:
const express = require('express');
const { A2AServer, TaskStatus } = require('@google/a2a-sdk');
const axios = require('axios');
const app = express();
const port = 8000;
// Initialize A2A server
const a2aServer = new A2AServer({
name: "Currency Converter",
description: "Converts between currencies using real-time exchange rates",
version: "1.0.0",
capabilities: [
{
id: "convert_currency",
name: "Convert Currency",
description: "Converts an amount from one currency to another",
parameters: {
type: "object",
properties: {
amount: { type: "number" },
from: { type: "string" },
to: { type: "string" }
},
required: ["amount", "from", "to"]
}
}
]
});
// Register the A2A server with Express
a2aServer.registerExpress(app);
// Implement task handler
a2aServer.registerTaskHandler("convert_currency", async (task) => {
const { amount, from, to } = task.parameters;
// Update task status to working
await task.updateStatus(TaskStatus.WORKING);
try {
// Call external API for exchange rates
const response = await axios.get(
\`https://api.exchangerate-api.com/v4/latest/\${from}\`
);
const data = response.data;
const rate = data.rates[to];
if (!rate) {
throw new Error(\`Exchange rate not found for \${to}\`);
}
const convertedAmount = amount * rate;
// Complete task with result
await task.complete({
converted_amount: convertedAmount,
rate: rate,
timestamp: data.time_last_updated
});
} catch (error) {
// Handle errors
await task.fail(error.message);
}
});
// Start the server
app.listen(port, () => {
console.log(\`Currency Converter agent listening on port \${port}\`);
});
3.4 Framework Integration
A2A can be integrated with popular AI agent frameworks to enhance their capabilities with cross-agent communication:
Framework | Integration Method | Features |
---|---|---|
LangGraph |
Native A2A support via langgraph.a2a
module |
Graph-based agent workflows with A2A communication |
CrewAI |
A2A adapter available (crewai-a2a )
|
Multi-agent crews with specialized roles |
Google ADK | Built-in A2A support | Integration with Google AI/ML services |
Semantic Kernel |
Plugin: Microsoft.SemanticKernel.A2A
|
Connect Microsoft's agent framework with A2A |
API Reference
This section provides detailed information about the A2A API endpoints, request/response formats, and error handling.
4.1 Core Methods
A2A defines the following core methods for agent communication:
Purpose: Submit a synchronous task to an agent and wait for completion
HTTP Method: POST
Parameters:
capability_id
: ID of the capability to invokeparameters
: Task-specific parameters as defined in the Agent Cardtimeout
(optional): Maximum wait time in seconds
Returns: Task result or error
Purpose: Submit an asynchronous task and get a task ID for later polling
HTTP Method: POST
Parameters:
capability_id
: ID of the capability to invokeparameters
: Task-specific parameterscallback_url
(optional): URL to receive completion notification
Returns: Task ID and initial status
Purpose: Submit a task and receive streaming updates via Server-Sent Events
HTTP Method: POST
Parameters:
capability_id
: ID of the capability to invokeparameters
: Task-specific parameters
Returns: SSE stream with task updates and final result
Purpose: Check the status of an asynchronous task
HTTP Method: GET
Parameters:
task_id
: ID of the task to check
Returns: Current task status and result if completed
Purpose: Cancel an in-progress task
HTTP Method: POST
Parameters:
task_id
: ID of the task to cancelreason
(optional): Explanation for cancellation
Returns: Confirmation of cancellation
4.2 Request/Response Formats
All A2A requests and responses follow JSON-RPC 2.0 format:
Request Format
{
"jsonrpc": "2.0",
"method": "tasks/send",
"params": {
"capability_id": "convert_currency",
"parameters": {
"amount": 100,
"from": "USD",
"to": "EUR"
}
},
"id": "req-123"
}
Response Format
{
"jsonrpc": "2.0",
"result": {
"converted_amount": 92.45,
"rate": 0.9245,
"timestamp": "2025-05-14T10:15:30Z"
},
"id": "req-123"
}
4.3 Error Handling
A2A defines standard error codes and response formats for error conditions:
Error Response Format
{
"jsonrpc": "2.0",
"error": {
"code": -32602,
"message": "Invalid parameters",
"data": {
"details": "Currency code 'XYZ' is not valid"
}
},
"id": "req-123"
}
Error Code | Message | Description |
---|---|---|
-32600 | Invalid Request | Request is not valid JSON-RPC 2.0 |
-32601 | Method not found | Requested method is not supported |
-32602 | Invalid parameters | Parameters do not match schema definition |
-32603 | Internal error | Internal server error during processing |
-32000 | Task not found | The specified task ID does not exist |
-32001 | Task timeout | Task execution exceeded the timeout period |
-32002 | Authentication failed | Invalid or missing authentication credentials |
Use Cases & Examples
A2A enables a wide range of practical applications across various industries. This section showcases real-world examples of how A2A can be implemented to solve business challenges.

Recruitment Automation
Multiple specialized agents collaborate to screen candidates, schedule interviews, and analyze responses.

Automotive Maintenance
Connected agents manage diagnostic data, parts inventory, and technician scheduling for efficient repairs.

Supply Chain Optimization
Agents coordinate inventory, logistics, and demand forecasting across global supply networks.
Featured Example: Multi-Agent Collaboration

Multi-agent workflow for customer service use case
Implementation Steps
- Deploy specialized agents for different aspects of customer service
- Configure Agent Cards to expose each agent's capabilities
- Implement a coordinator agent that directs customer queries to appropriate specialists
- Use A2A for secure communication between coordinator and specialists
- Aggregate responses and maintain context across the conversation
This approach allows organizations to create specialized agents for different domains while maintaining a seamless customer experience through A2A-enabled collaboration.
Community & Resources
Join the growing A2A community to get support, share your implementations, and contribute to the protocol's development.
Community Channels
How to Contribute
- Report issues and suggest improvements on GitHub
- Submit pull requests for bug fixes and features
- Share your A2A implementations and use cases
- Provide feedback through the A2A feedback form
Partner Ecosystem
Join over 50+ partners contributing to the A2A ecosystem:
Learning Resources
Official Documentation
Complete technical documentation and guides for the A2A protocol.
View documentation →Sample Projects
Repository of working examples and starter templates for A2A integration.
Explore samples →Tutorial Videos
Step-by-step video guides for implementing A2A in your applications.
Watch tutorials →Submit Feedback
Help improve A2A by sharing your experiences, challenges, and suggestions with the development team.
Submit FeedbackFuture Developments
A2A is continuously evolving to address emerging needs and enhance agent interoperability. Here's what's on the horizon for upcoming releases.
Development Roadmap
Q3 2025: Production-Ready Release
- Stable API with backward compatibility guarantees
- Production-grade security and performance optimizations
- Comprehensive documentation and case studies
Q4 2025: Enhanced Authorization
- Formalized authorization schemes
- Fine-grained permission controls
- Integration with enterprise identity providers
Q1 2026: Dynamic Agent Capabilities
- Implementation of QuerySkill() for discovering unsupported capabilities
- Dynamic UX negotiation for richer interactions
- Enhanced multimodal support for AR/VR applications
Planned Enhancements
Technical Improvements
- Streaming reliability enhancements
- Improved error handling and recovery
- Performance optimizations for large payloads
- Extended multimodal content support
- Advanced authentication mechanisms
Ecosystem Enhancements
- Agent directory and discovery service
- Certification program for A2A implementations
- More SDK language support (Go, Java, Ruby)
- Integration with popular LLM frameworks
- Expanded partner ecosystem
Participate in Development
A2A is an open standard, and community contributions are welcome. You can influence its future by:
- Following and contributing to discussions on GitHub Discussions
- Submitting feature requests and bug reports through GitHub Issues
- Participating in community calls and events (announced on the repository)
- Testing pre-release versions and providing feedback
Stay Updated
Subscribe to receive notifications about A2A updates, new features, and community events.
Subscribe to UpdatesNeed additional help?
If you have questions or need personalized assistance with A2A implementation, reach out to our support team or community.