Google A2A Agent
by system32miro
This repository provides an example implementation of Google's Agent-to-Agent (A2A) communication protocol. It showcases how AI agents can communicate with each other through a standardized API.
Last updated: N/A
Google A2A Agent Example
This repository implements a simple Agent-to-Agent (A2A) communication example based on Google's A2A protocol. A2A is Google's proposed standard for enabling AI agents to communicate with each other through a standardized API.
Overview
The implementation consists of two main components:
-
Server (
server.py
): A Flask-based server acting as an AI agent. It implements the core A2A protocol endpoints:/.well-known/agent.json
: Provides the agent's metadata (Agent Card), describing its capabilities and URL./tasks/send
: Accepts tasks from other agents (or clients likeclient.py
), processes them using an AI model (OpenAI's GPT-4o-mini) and external tools (Brave Search via MCP), and returns the result.
-
Client (
client.py
): A simple Python script demonstrating how to interact with the A2A server:- Discovers the agent by fetching its Agent Card.
- Sends a task (a user query) to the agent's
/tasks/send
endpoint. - Receives and prints the agent's response.
Architecture
The interaction flow can be visualized as follows:
sequenceDiagram
participant C as Client (client.py)
participant S as A2A Server (server.py)
participant MCP as Brave MCP Server
participant OAI as OpenAI API
C->>S: GET /.well-known/agent.json (Discover Agent)
S-->>C: Agent Card JSON
C->>S: POST /tasks/send (Task Request with User Query)
S->>OAI: Process Query (Initial processing)
Note right of S: Agent decides to use Brave Search
S->>MCP: Search Request
MCP-->>S: Search Results
S->>OAI: Process Query + Search Results
OAI-->>S: Final Response Text
S-->>C: Task Response (with Agent's Final Message)
- The Client initiates communication by discovering the A2A Server.
- The Client sends a task (e.g., "What is Google A2A?") to the Server.
- The Server uses the
pydantic-ai
library, which coordinates with:- The OpenAI API to understand the request and generate responses.
- A Brave Search MCP Server (managed via
MCPServerStdio
) when web search is needed. MCP (Model Context Protocol) standardizes how AI models interact with external tools/data sources.
- The Server sends the final response back to the Client.
Setup
-
Clone the repository:
git clone <repository_url> cd <repository_directory>
-
Create and activate a virtual environment:
- Windows:
python -m venv venv .\venv\Scripts\activate
- macOS/Linux:
python3 -m venv venv source venv/bin/activate
- Windows:
-
Create a
.env
file: Create a file named.env
in the root directory and add your API keys:OPENAI_API_KEY=your_openai_api_key BRAVE_API_KEY=your_brave_api_key
(Replace
your_openai_api_key
andyour_brave_api_key
with your actual keys) -
Install dependencies:
pip install -r requirements.txt
-
Run the server: Open a terminal, activate the virtual environment, and run:
python server.py
The server will start, typically on
http://localhost:5000
. -
Run the client: Open a separate terminal, activate the virtual environment, and run:
python client.py
The client will discover the server, send a predefined question, and print the agent's response.
A2A Protocol Details
Google's A2A protocol defines a standard way for agents to communicate via HTTP. Key concepts include:
- Agent Card (
/.well-known/agent.json
): A standard JSON document describing an agent's identity, capabilities (e.g., streaming support), and API endpoints. - Task API (
/tasks/send
,/tasks/receive
, etc.): Endpoints for exchanging tasks and messages. This example only implements the essential/tasks/send
. - Standardized Message Format: A consistent JSON structure for messages exchanged between agents, typically including roles (
user
,agent
) and content parts.
For more in-depth information, refer to the official Google A2A protocol documentation (link if available).