MCP-A2A-Gateway
Bridges the Model Context Protocol (MCP) with Google's Agent-to-Agent (A2A) protocol, enabling MCP clients to discover, register, communicate with, and manage tasks on A2A agents through agent registration, message sending, task tracking, and result retrieval.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP-A2A-Gateway list all registered A2A agents"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP-A2A-Gateway
A gateway 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.
Overview
This project serves as an integration layer between two cutting-edge AI agent protocols:
Model Context Protocol (MCP): Developed by Anthropic, MCP allows AI assistants to connect to external tools and data sources. It standardizes how AI applications and large language models connect to external resources in a secure, composable way.
Agent-to-Agent Protocol (A2A): Developed by Google, A2A enables communication and interoperability between different AI agents through a standardized JSON-RPC interface.
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.
Related MCP server: Agent Hub MCP
Quick Start
🎉 The package is now available on PyPI!
No Installation Required
# Run with default settings (stdio transport)
uvx mcp-a2a-gateway
# Run with HTTP transport for web clients
MCP_TRANSPORT=streamable-http MCP_PORT=10000 uvx mcp-a2a-gateway
# Run with custom data directory
MCP_DATA_DIR="/Users/your-username/Desktop/a2a_data" uvx mcp-a2a-gateway
# Run with specific version
uvx mcp-a2a-gateway==0.1.6
# Run with multiple environment variables
MCP_TRANSPORT=stdio MCP_DATA_DIR="/custom/path" LOG_LEVEL=DEBUG uvx mcp-a2a-gatewayFor Development (Local)
# Clone and run locally
git clone https://github.com/yw0nam/MCP-A2A-Gateway.git
cd MCP-A2A-Gateway
# Run with uv
uv run mcp-a2a-gateway
# Run with uvx from local directory
uvx --from . mcp-a2a-gateway
# Run with custom environment for development
MCP_TRANSPORT=streamable-http MCP_PORT=8080 uvx --from . mcp-a2a-gatewayDemo
1, Run The hello world Agent in A2A Sample

also support cloud deployed Agent
2, Use Claude or github copilot to register the agent.

3, Use Claude to Send a task to the hello Agent and get the result.

4, Use Claude to retrieve the task result.

Features
Agent Management
Register A2A agents with the bridge server
List all registered agents
Unregister agents when no longer needed
Communication
Send messages to A2A agents and receive responses
Asynchronous message sending for immediate server response.
Stream responses from A2A agents in real-time
Task Management
Track which A2A agent handles which task
Retrieve task results using task IDs
Get a list of all tasks and their statuses.
Cancel running tasks
Transport Support
Multiple transport types: stdio, streamable-http, SSE
Configure transport type using MCP_TRANSPORT environment variable
Prerequisites
Before you begin, ensure you have the following installed:
Python 3.11+
uv (for local development)
Installation
Run directly without installation using uvx:
uvx mcp-a2a-gatewayClone the repository:
git clone https://github.com/yw0nam/MCP-A2A-Gateway.git
cd MCP-A2A-GatewayRun using uv:
uv run mcp-a2a-gatewayOr use uvx with local path:
uvx --from . mcp-a2a-gatewayStart the server with HTTP transport:
# Using uvx
MCP_TRANSPORT=streamable-http MCP_HOST=0.0.0.0 MCP_PORT=10000 uvx mcp-a2a-gatewayStart the server with SSE transport:
# Using uvx
MCP_TRANSPORT=sse MCP_HOST=0.0.0.0 MCP_PORT=10000 uvx mcp-a2a-gatewayConfiguration
Environment Variables
The server can be configured using the following environment variables:
Variable | Default | Description |
|
| Transport type: |
|
| Host for HTTP/SSE transports |
|
| Port for HTTP/SSE transports |
|
| HTTP endpoint path |
|
| Directory for persistent data storage |
|
| Request timeout in seconds |
|
| Immediate response timeout in seconds |
|
| Logging level: |
Example .env file:
# Transport configuration
MCP_TRANSPORT=stdio
MCP_HOST=0.0.0.0
MCP_PORT=10000
MCP_PATH=/mcp
# Data storage
MCP_DATA_DIR=/Users/your-username/Desktop/data/a2a_gateway
# Timeouts
MCP_REQUEST_TIMEOUT=30
MCP_REQUEST_IMMEDIATE_TIMEOUT=2
# Logging
LOG_LEVEL=INFOTransport Types
The A2A MCP Server supports multiple transport types:
stdio (default): Uses standard input/output for communication
Ideal for command-line usage and testing
No HTTP server is started
Required for Claude Desktop
streamable-http (recommended for web clients): HTTP transport with streaming support
Recommended for production deployments
Starts an HTTP server to handle MCP requests
Enables streaming of large responses
sse: Server-Sent Events transport
Provides real-time event streaming
Useful for real-time updates
To connect github copilot
Add below to VS Code settings.json for sse or http:
"mcpServers": {
"mcp_a2a_gateway": {
"url": "http://0.0.0.0:10000/mcp"
}
}"mcpServers": {
"mcp_a2a_gateway": {
"type": "stdio",
"command": "uvx",
"args": ["mcp-a2a-gateway"],
"env": {
"MCP_TRANSPORT": "stdio",
"MCP_DATA_DIR": "/Users/your-username/Desktop/data/Copilot/a2a_gateway/"
}
}
}"mcpServers": {
"mcp_a2a_gateway": {
"type": "stdio",
"command": "uvx",
"args": ["--from", "/path/to/MCP-A2A-Gateway", "mcp-a2a-gateway"],
"env": {
"MCP_TRANSPORT": "stdio",
"MCP_DATA_DIR": "/Users/your-username/Desktop/data/Copilot/a2a_gateway/"
}
}
}"mcpServers": {
"mcp_a2a_gateway": {
"type": "stdio",
"command": "uv",
"args": [
"--directory",
"/path/to/MCP-A2A-Gateway",
"run",
"mcp-a2a-gateway"
],
"env": {
"MCP_TRANSPORT": "stdio",
"MCP_DATA_DIR": "/Users/your-username/Desktop/data/Copilot/a2a_gateway/"
}
}
}To Connect claude desktop
Add this to claude_config.json
"mcpServers": {
"mcp_a2a_gateway": {
"command": "uvx",
"args": ["mcp-a2a-gateway"],
"env": {
"MCP_TRANSPORT": "stdio",
"MCP_DATA_DIR": "/Users/your-username/Desktop/data/Claude/a2a_gateway/"
}
}
}Add this to claude_config.json
"mcpServers": {
"mcp_a2a_gateway": {
"command": "uvx",
"args": ["--from", "/path/to/MCP-A2A-Gateway", "mcp-a2a-gateway"],
"env": {
"MCP_TRANSPORT": "stdio",
"MCP_DATA_DIR": "/Users/your-username/Desktop/data/Claude/a2a_gateway/"
}
}
}Add this to claude_config.json
"mcpServers": {
"mcp_a2a_gateway": {
"command": "uv",
"args": ["--directory", "/path/to/MCP-A2A-Gateway", "run", "mcp-a2a-gateway"],
"env": {
"MCP_TRANSPORT": "stdio",
"MCP_DATA_DIR": "/Users/your-username/Desktop/data/Claude/a2a_gateway/"
}
}
}Available MCP Tools
The server exposes the following MCP tools for integration with LLMs like Claude:
Agent Management
register_agent: Register an A2A agent with the bridge server
{ "name": "register_agent", "arguments": { "url": "http://localhost:41242" } }list_agents: Get a list of all registered agents
{ "name": "list_agents", "arguments": {"dummy": "" } }unregister_agent: Remove an A2A agent from the bridge server
{ "name": "unregister_agent", "arguments": { "url": "http://localhost:41242" } }
Message Processing
send_message: Send a message to an agent and get a task_id for the response
{ "name": "send_message", "arguments": { "agent_url": "http://localhost:41242", "message": "What's the exchange rate from USD to EUR?", "session_id": "optional-session-id" } }
Task Management
get_task_result: Retrieve a task's result using its ID
{ "name": "get_task_result", "arguments": { "task_id": "b30f3297-e7ab-4dd9-8ff1-877bd7cfb6b1", } }get_task_list: Get a list of all tasks and their statuses.
{ "name": "get_task_list", "arguments": {} }
Roadmap & How to Contribute
We are actively developing and improving the gateway! We welcome contributions of all kinds. Here is our current development roadmap, focusing on creating a rock-solid foundation first.
Core Stability & Developer Experience (Help Wanted! 👍)
This is our current focus. Our goal is to make the gateway as stable and easy to use as possible.
Implement Streaming Responses: Full support for streaming responses from A2A agents.
Enhance Error Handling: Provide clearer error messages and proper HTTP status codes for all scenarios.
Input Validation: Sanitize and validate agent URLs during registration for better security.
Add Health Check Endpoint: A simple
/healthendpoint to monitor the server's status.Configuration Validation: Check for necessary environment variables at startup.
Comprehensive Integration Tests: Increase test coverage to ensure reliability.
Cancel Task: Implement task cancellation
Implement Streaming Update: Implement streaming task update. So that user check the progress.
Community & Distribution
Easy Installation: Add support for
uvxDocker Support: Provide a Docker Compose setup for easy deployment.
Better Documentation: Create a dedicated documentation site or expand the Wiki.
Want to contribute? Check out the issues tab or feel free to open a new one to discuss your ideas!
License
This project is licensed under the Apache License, Version 2.0 - see the LICENSE file for details.
Acknowledgments
Anthropic for the Model Context Protocol
Google for the Agent-to-Agent Protocol
Contributors to the FastMCP library
Contributors of A2A-MCP-Server (This project highly inspired from this repo.)
Automated Publishing & Releases
This project uses automated publishing through GitHub Actions for seamless releases.
Automated Release Process
Option 1: Using the Release Script (Recommended)
# Patch release (0.1.6 → 0.1.7)
./release.sh patch
# Minor release (0.1.6 → 0.2.0)
./release.sh minor
# Major release (0.1.6 → 1.0.0)
./release.sh majorThe script will:
✅ Check you're on the main branch with clean working directory
📈 Automatically bump the version in
pyproject.toml🔨 Build and test the package locally
📤 Commit the version change and create a git tag
🚀 Push to GitHub, triggering automated PyPI publishing
Option 2: Manual Tag Creation
# Update version in pyproject.toml manually
# Then create and push a tag
git add pyproject.toml
git commit -m "chore: bump version to 0.1.7"
git tag v0.1.7
git push origin main
git push origin v0.1.7Option 3: GitHub Releases
Click "Create a new release"
Choose or create a tag (e.g.,
v0.1.7)Fill in release notes
Publish the release
Setting Up Automated Publishing
To enable automated publishing, add your PyPI API token to GitHub Secrets:
Get PyPI API Token:
Create a new token with "Entire account" scope
Copy the token (starts with
pypi-)
Add to GitHub Secrets:
Go to your repository → Settings → Secrets and variables → Actions
Add a new repository secret:
Name:
PYPI_API_TOKENValue: Your PyPI token
Test the Workflow:
Push a tag or create a release
Check the Actions tab for publishing status
Manual Publishing
For emergency releases or local testing:
# Build and get manual publish instructions
./publish.sh
# Or publish directly (with credentials configured)
uv build
uv publishAvailable Tools
6 toolsget_task_listB
Retrieves a list of tasks being managed by the server.
Args: status (Literal["all", "completed", "running", "error", "pending", "streaming", "cancelled"]): Filters tasks by their status. Defaults to "all". sort (Literal["Descending", "Ascending"]): Sorts tasks by their last update time. Defaults to "Descending". number (int): The maximum number of tasks to return. Defaults to 10. ctx (Context): The MCP context for logging.
Returns: List[Dict[str, Any]]: A list of tasks, each represented as a dictionary.
Inputs: status, sort, number.
get_task_resultA
Retrieves the result or status of a previously created task.
Using the task_id returned by send_message, this tool fetches the
current state and any results from the corresponding A2A agent.
Args: task_id (str): The unique identifier of the task to retrieve. ctx (Context): The MCP context for logging.
Returns: Dict[str, Any]: A dictionary containing the task's current status, result message, and any associated data or an error if the task ID is not found.
Inputs: task_id (required).
list_agentsA
Lists all A2A agents currently registered with the bridge server.
This resource returns a list of all agents, including their URL and AgentCard information.
Args: dummy (str): A dummy parameter to satisfy the MCP tool signature. Just for compatibility. Just pass the empty string. Returns: List[Dict[str, Any]]: A list of dictionaries, each containing the URL and AgentCard information of a registered agent. Each dictionary has the keys "url" and "card".
Inputs: dummy.
register_agentA
Registers an Agent-to-Agent (A2A) agent with the bridge server.
This tool fetches the agent's information (AgentCard) from the given URL and stores it in the server's list of registered agents, making it available for communication.
Args: url (str): The base URL of the A2A agent to register. This URL should point to where the agent's card can be resolved. ctx (Context): The MCP context, used for logging information back to the client.
Returns: Dict[str, Any]: A dictionary containing the registration status. On success, it includes the status and the registered agent's details. On error, it includes the status and an error message.
Inputs: url (required).
send_messageA
Sends a message to an agent and returns the task status.
This function initiates a task with an agent. It will return quickly.
If the agent responds within 5 seconds, the final result is returned.
Otherwise, a 'pending' status is returned, and the gateway continues to fetch the result in the background. Use the 'get_task_result' tool with the returned 'task_id' to check for completion.
Args: agent_url (str): The URL of the registered A2A agent. message (str): The text message to send. session_id (Optional[str]): An optional identifier for conversation context. ctx (Context): The MCP context for logging.
Returns: Dict[str, Any]: A dictionary representing the task. It will contain the final result if completed quickly, or a pending status if the agent takes longer to respond.
Inputs: agent_url (required), message (required), session_id.
unregister_agentA
Unregisters an A2A agent from the bridge server.
This also removes any tasks associated with the unregistered agent.
Args: url (str): The URL of the agent to unregister. ctx (Context): The MCP context for logging.
Returns: Dict[str, Any]: A dictionary confirming the action, including the name of the unregistered agent and the number of tasks that were removed. Returns an error if the agent was not found.
Inputs: url (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 6 tools
Each tool has a clearly distinct purpose with no ambiguity. get_task_list retrieves task lists, get_task_result fetches specific task results, list_agents shows registered agents, register_agent adds agents, send_message initiates communication, and unregister_agent removes agents. The boundaries between tools are well-defined and non-overlapping.
All tools follow a consistent verb_noun naming pattern throughout: get_task_list, get_task_result, list_agents, register_agent, send_message, and unregister_agent. The naming is perfectly predictable with clear action-object relationships and no deviations in style.
Six tools is an ideal number for this A2A gateway server's purpose. It provides complete coverage for agent management (list/register/unregister) and task handling (send/get/list) without being overwhelming. Each tool earns its place in supporting the core workflow.
The tool set provides complete CRUD/lifecycle coverage for the A2A gateway domain. It covers agent registration (register_agent), management (list_agents, unregister_agent), task initiation (send_message), and task monitoring (get_task_list, get_task_result). There are no obvious gaps or dead ends in the workflow.
Maintenance
Related MCP Connectors
One MCP endpoint for Claude, GPT & Gemini: 100+ tools + no-code connectors + agent workers.
Discover and call AI agents via MCP. Supports A2A agents and platform agents with async tasks.
Task management your AI agents can actually run. One line becomes a context-ready task over MCP.
AI agent registry — search, discover, register, and connect agents via MCP.
Related MCP Servers
- AlicenseAqualityFmaintenanceA bridge server that enables MCP-compatible AI assistants like Claude to seamlessly discover, communicate with, and manage A2A protocol agents.752 PyPI146Apache 2.0
- AlicenseAqualityDmaintenanceEnables multi-agent collaboration across different AI assistants and projects by providing a universal coordination layer for MCP-compatible agents to communicate, share context, and coordinate complex tasks seamlessly.1232 npm33MIT
- AlicenseNot gradedqualityFmaintenanceBridges Agent Communication Protocol (ACP) agents with Model Context Protocol (MCP) applications, allowing MCP clients such as Claude Desktop to discover and invoke ACP agents as tools and resources.36Apache 2.0
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to access hybrid vector, reasoning-based tree retrieval, and agent memory through the Model Context Protocol (MCP), supporting Claude Desktop and other MCP-compatible clients.76 npmApache 2.0