About Google A2A Agent Example
A Python and Flask example of Google's A2A protocol, with a server that accepts agent tasks and a client that discovers and calls it. The server uses OpenAI's GPT-4o-mini and Brave Search through MCP when web search is needed.
Key features
- 01Implements core A2A endpoints
- 02Discovers agents through Agent Card
- 03Accepts tasks over HTTP
- 04Uses GPT-4o-mini for responses
- 05Uses Brave Search for web queries
Use cases
- 01Exploring agent-to-agent task exchange
- 02Testing agent discovery and task submission
- 03Adding web search to an A2A agent
MCP support
The server uses a Brave Search MCP server through `MCPServerStdio` when web search is needed. MCP provides the connection to external search tools.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
We haven’t collected a package or remote endpoint for this server. Follow the instructions in the project README.
Tools
Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.
Details
From the project READMEGoogle 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/sendendpoint. - 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-ailibrary, 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
.envfile: Create a file named.envin 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_keyandyour_brave_api_keywith your actual keys) -
Install dependencies:
pip install -r requirements.txt -
Run the server: Open a terminal, activate the virtual environment, and run:
python server.pyThe server will start, typically on
http://localhost:5000. -
Run the client: Open a separate terminal, activate the virtual environment, and run:
python client.pyThe 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).
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.