A2A Mcp Server — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited A2A Mcp Server (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.

A mcp server that bridges the Model Context Protocol (MCP) with the Agent-to-Agent (A2A) protocol, enabling MCP-compatible AI assistants (like Claude) to seamlessly interact with A2A agents.
This project serves as an integration layer between two cutting-edge AI agent protocols:
By bridging these protocols, this server allows MCP clients (like Claude) to discover, register, communicate with, and manage tasks on A2A agents through a unified interface.
#### 1, Run The Currency Agent in A2A Sample
agent
also support cloud deployed Agent
#### 2, Use Claude to Register the Currency Agent
register
#### 3, Use Claude to Send a task to the Currency Agent and get the result
task
To install A2A Bridge Server for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @GongRzhe/A2A-MCP-Server --client claudepip install a2a-mcp-server git clone https://github.com/GongRzhe/A2A-MCP-Server.git
cd A2A-MCP-Server python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate pip install -r requirements.txtConfigure how the MCP server runs using these environment variables:
# Transport type: stdio, streamable-http, or sse
export MCP_TRANSPORT="streamable-http"
# Host for the MCP server
export MCP_HOST="0.0.0.0"
# Port for the MCP server (when using HTTP transports)
export MCP_PORT="8000"
# Path for the MCP server endpoint (when using HTTP transports)
export MCP_PATH="/mcp"
# Path for SSE endpoint (when using SSE transport)
export MCP_SSE_PATH="/sse"
# Enable debug logging
export MCP_DEBUG="true"The A2A MCP Server supports multiple transport types:
To specify the transport type:
# Using environment variable
export MCP_TRANSPORT="streamable-http"
uvx a2a-mcp-server
# Or directly in the command
MCP_TRANSPORT=streamable-http uvx a2a-mcp-server# Using default settings (stdio transport)
uvx a2a-mcp-server
# Using HTTP transport on specific host and port
MCP_TRANSPORT=streamable-http MCP_HOST=127.0.0.1 MCP_PORT=8080 uvx a2a-mcp-serverClaude Desktop allows you to configure MCP servers in the claude_desktop_config.json file. This file is typically located at:
%APPDATA%\Claude\claude_desktop_config.json~/Library/Application Support/Claude/claude_desktop_config.json~/.config/Claude/claude_desktop_config.jsonAdd the following to the mcpServers section of your claude_desktop_config.json:
"a2a": {
"command": "uvx",
"args": [
"a2a-mcp-server"
]
}Note that for Claude Desktop, you must use "MCP_TRANSPORT": "stdio" since Claude requires stdio communication with MCP servers.
If you've cloned the repository and want to run the server from your local installation:
"a2a": {
"command": "C:\\path\\to\\python.exe",
"args": [
"C:\\path\\to\\A2A-MCP-Server\\a2a_mcp_server.py"
],
"env": {
"MCP_TRANSPORT": "stdio",
"PYTHONPATH": "C:\\path\\to\\A2A-MCP-Server"
}
}Replace C:\\path\\to\\ with the actual paths on your system.
This repository includes a config_creator.py script to help you generate the configuration:
# If using local installation
python config_creator.pyThe script will:
Here's an example of a complete claude_desktop_config.json file with the A2A-MCP-Server configured:
{
"mcpServers": {
"a2a": {
"command": "uvx",
"args": [
"a2a-mcp-server"
]
}
}
}Claude can use A2A agents through the MCP tools provided by this server. Here's how to set it up:
MCP_TRANSPORT=streamable-http MCP_HOST=127.0.0.1 MCP_PORT=8000 uvx a2a-mcp-serverhttp://127.0.0.1:8000/mcpclaude_desktop_config.json file as described above. The easiest way is to use the provided config_creator.py script which will automatically detect paths and create the proper configuration.Register an A2A agent:
I need to register a new agent. Can you help me with that?
(Agent URL: http://localhost:41242)Send message to an agent:
Ask the agent at http://localhost:41242 what it can do.Retrieve task results:
Can you get the results for task ID: 550e8400-e29b-41d4-a716-446655440000?Cursor IDE can connect to MCP servers to add tools to its AI assistant:
MCP_TRANSPORT=streamable-http MCP_HOST=127.0.0.1 MCP_PORT=8000 uvx a2a-mcp-serverhttp://127.0.0.1:8000/mcpWindsurf is a browser with built-in MCP support:
MCP_TRANSPORT=streamable-http MCP_HOST=127.0.0.1 MCP_PORT=8000 uvx a2a-mcp-serverhttp://127.0.0.1:8000/mcpThe server exposes the following MCP tools for integration with LLMs like Claude:
{
"name": "register_agent",
"arguments": {
"url": "http://localhost:41242"
}
} {
"name": "list_agents",
"arguments": {}
} {
"name": "unregister_agent",
"arguments": {
"url": "http://localhost:41242"
}
} {
"name": "send_message",
"arguments": {
"agent_url": "http://localhost:41242",
"message": "What's the exchange rate from USD to EUR?",
"session_id": "optional-session-id"
}
} {
"name": "send_message_stream",
"arguments": {
"agent_url": "http://localhost:41242",
"message": "Tell me a story about AI agents.",
"session_id": "optional-session-id"
}
} {
"name": "get_task_result",
"arguments": {
"task_id": "b30f3297-e7ab-4dd9-8ff1-877bd7cfb6b1",
"history_length": null
}
} {
"name": "cancel_task",
"arguments": {
"task_id": "b30f3297-e7ab-4dd9-8ff1-877bd7cfb6b1"
}
}1. Client registers an A2A agent
↓
2. Client sends a message to the agent (gets task_id)
↓
3. Client retrieves the task result using task_idUser: Register an agent at http://localhost:41242
Claude uses: register_agent(url="http://localhost:41242")
Claude: Successfully registered agent: ReimbursementAgent
User: Ask the agent what it can do
Claude uses: send_message(agent_url="http://localhost:41242", message="What can you do?")
Claude: I've sent your message. Here's the task_id: b30f3297-e7ab-4dd9-8ff1-877bd7cfb6b1
User: Get the answer to my question
Claude uses: get_task_result(task_id="b30f3297-e7ab-4dd9-8ff1-877bd7cfb6b1")
Claude: The agent replied: "I can help you process reimbursement requests. Just tell me what you need to be reimbursed for, including the date, amount, and purpose."The A2A MCP server consists of several key components:
MCP Client → FastMCP Server → A2A Client → A2A Agent
↑ ↓
└──── Response ──┘When sending a message to an A2A agent, the server:
task_idtask_agent_mapping dictionarytask_id to the MCP clientThe server provides detailed error messages for common issues:
If an agent can't be registered:
/.well-known/agent.jsonIf messages aren't being delivered:
list_agents)If you can't retrieve a task result:
If you have issues with a specific transport type:
If Claude Desktop isn't starting your A2A-MCP-Server:
claude_desktop_config.json are correct"command": "python"MCP_TRANSPORT is set to "stdio" in the env sectionconfig_creator.py script for automatic path detection and configurationTo add new capabilities to the server, add methods decorated with @mcp.tool() in the a2a_mcp_server.py file.
The server uses a custom A2AServerTaskManager class that extends InMemoryTaskManager. You can customize its behavior by modifying this class.
a2a-mcp-server/
├── a2a_mcp_server.py # Main server implementation
├── common/ # A2A protocol code (from google/A2A)
│ ├── client/ # A2A client implementation
│ ├── server/ # A2A server implementation
│ ├── types.py # Common type definitions
│ └── utils/ # Utility functions
├── config_creator.py # Script to help create Claude Desktop configuration
├── .gitignore # Git ignore file
├── pyproject.toml # Project metadata and dependencies
├── README.md # This file
└── requirements.txt # Project dependenciesThis project is licensed under the Apache License, Version 2.0 - see the LICENSE file for details.
The code in the common/ directory is from the Google A2A project and is also licensed under the Apache License, Version 2.0.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.