ProtocolPythonTypeScript

Agent2Agent (A2A)

by GoogleUpdated Jun 15, 2025

Google's open protocol for agent-to-agent communication and interoperability across different frameworks and organizations. A2A enables agents built with different frameworks to discover each other's capabilities, negotiate interaction modes, and collaborate on tasks. It complements MCP (which connects agents to tools) by focusing on agent-to-agent coordination.

Architecture Overview

A2A uses an HTTP-based protocol where each agent exposes an Agent Card (a JSON metadata document at /.well-known/agent.json) describing its capabilities, supported modes, and authentication requirements. Agents communicate through Tasks, which go through states (submitted, working, input-required, completed, failed). Communication happens via JSON-RPC over HTTP, with support for streaming via Server-Sent Events. The protocol supports opaque parts (multimodal content exchange) and push notifications for long-running tasks.

When to Use Agent2Agent (A2A)

  • Cross-framework agent communication and collaboration
  • Agent discovery and capability advertisement
  • Enterprise agent networks with heterogeneous frameworks
  • Multi-organization AI agent coordination
  • Building agent marketplaces and ecosystems

Strengths & Weaknesses

Strengths

  • Google-backed with broad industry support (50+ launch partners)
  • Framework-agnostic design works with any agent implementation
  • Complements MCP for a complete interoperability stack
  • Supports streaming, push notifications, and multimodal content
  • Enterprise-focused with authentication and authorization support

Weaknesses

  • Early stage protocol still under active development
  • Limited real-world production deployments so far
  • Competing mindshare with MCP in the standardization space

Quick Start

python
# A2A Agent Card (/.well-known/agent.json)
# This is the discovery mechanism for A2A agents
agent_card = {
    "name": "Weather Agent",
    "description": "Provides weather information for any city worldwide.",
    "url": "https://weather-agent.example.com",
    "version": "1.0.0",
    "capabilities": {
        "streaming": True,
        "pushNotifications": False,
    },
    "skills": [
        {
            "id": "get-weather",
            "name": "Get Weather",
            "description": "Get current weather for a location",
            "inputModes": ["text/plain"],
            "outputModes": ["text/plain", "application/json"],
        }
    ],
}

# A2A client sending a task to another agent
import httpx

async def send_task_to_agent(agent_url: str, message: str):
    async with httpx.AsyncClient() as client:
        response = await client.post(
            f"{agent_url}/tasks/send",
            json={
                "jsonrpc": "2.0",
                "method": "tasks/send",
                "params": {
                    "id": "task-001",
                    "message": {
                        "role": "user",
                        "parts": [{"type": "text", "text": message}],
                    },
                },
                "id": "req-001",
            },
        )
        return response.json()

Features at a Glance

DeveloperGoogle
LanguagePython, TypeScript
LicenseApache-2.0
GitHub Stars5k+
MCP SupportNo
Multi-AgentYes

Notable Users

GoogleSalesforceSAPAtlassian

Resources

Explore Related Content