Skip to main content

A bridge server that connects Model Context Protocol (MCP) with Agent-to-Agent (A2A) protocol

Project description

MCP-A2A-Gateway

License

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.

Quick Start

⚠️ Note: The package needs to be published to PyPI first before using uvx run.

For Development (Local)

# Clone and run locally
git clone https://github.com/yw0nam/MCP-A2A-Gateway.git
cd MCP-A2A-Gateway
uv run mcp-a2a-gateway

# Or use uvx with local path
uvx --from . mcp-a2a-gateway

After Publishing to PyPI

# Run the latest version directly
uvx run mcp-a2a-gateway

# Run with custom environment variables
MCP_TRANSPORT=stdio uvx run mcp-a2a-gateway

# Run with specific version
uvx run mcp-a2a-gateway==0.1.5

Demo

1, Run The hello world Agent in A2A Sample

agent

also support cloud deployed Agent

cloudAgent

2, Use Claude or github copilot to register the agent.

register_claude register_copilot

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

send_message

4, Use Claude to retrieve the task result.

retrieve_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

Option 1: Direct Run with uvx (After PyPI Publishing)

Run directly without installation using uvx:

uvx run mcp-a2a-gateway

This will automatically download and run the latest version from PyPI.

Option 2: Local Development

  1. Clone the repository:
git clone https://github.com/yw0nam/MCP-A2A-Gateway.git
cd MCP-A2A-Gateway
  1. Run using uv:
uv run mcp-a2a-gateway
  1. Or use uvx with local path:
uvx --from . mcp-a2a-gateway

Option 3: Install from PyPI (After Publishing)

# Using uv
uv add mcp-a2a-gateway
uv run mcp-a2a-gateway

# Using pip
pip install mcp-a2a-gateway
mcp-a2a-gateway

# Run as Python module (after installation)
python -m mcp_a2a_gateway

Configuration

Environment Variables

Modify.env.example file in the root of the project to '.env'

Transport Types

The A2A MCP Server supports multiple transport types:

  1. stdio (default): Uses standard input/output for communication

    • Ideal for command-line usage and testing
    • No HTTP server is started
    • Required for Claude Desktop
  2. 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
  3. sse: Server-Sent Events transport

    • Provides real-time event streaming
    • Useful for real-time updates

TO connect github copilot

Add below setting.json for sse or http

"mcp_a2a_gateway": {
    "url": "http://0.0.0.0:10000/mcp"
}

For stdio (local development):

"mcp_a2a_gateway": {
    "type": "stdio",
    "command": "uv",
    "args": [
        "--directory",
        "$INSTALLED_DIR",
        "run",
        "mcp-a2a-gateway"
    ]
}

For stdio (using uvx - after PyPI publishing):

"mcpServers": {
  "mcp_a2a_gateway": {
    "type": "stdio",
    "command": "uvx",
    "args": ["mcp-a2a-gateway"]
  }
}

For stdio (using uvx - local development):

"mcpServers": {
  "mcp_a2a_gateway": {
    "type": "stdio",
    "command": "uvx",
    "args": ["--from", "/path/to/MCP-A2A-Gateway", "mcp-a2a-gateway"]
  }
}

To Connect claude desktop

Using local development version:

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"
    }
  }
}

Using uvx (after PyPI publishing):

Add this to claude_config.json

"mcpServers": {
  "mcp_a2a_gateway": {
    "command": "uvx",
    "args": ["mcp-a2a-gateway"],
    "env": {
      "MCP_TRANSPORT": "stdio"
    }
  }
}

Using uvx (local development):

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"
    }
  }
}

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 /health endpoint 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 npx
  • Docker 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

Publishing to PyPI

To make the package available for uvx run, you need to publish it to PyPI:

Prerequisites

  • PyPI account and API token
  • uv or build + twine installed

Publishing Steps

  1. Build the package:
# Using uv (recommended)
uv build

# Or using build
python -m build
  1. Upload to PyPI:
# Using uv (if supported)
uv publish

# Or using twine
twine upload dist/*
  1. Test the published package:
# Wait a few minutes for PyPI to process, then test
uvx run mcp-a2a-gateway

Version Management

Update the version in pyproject.toml before each release:

version = "0.1.6"  # Increment as needed

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mcp_a2a_gateway-0.1.6.tar.gz (716.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mcp_a2a_gateway-0.1.6-py3-none-any.whl (20.9 kB view details)

Uploaded Python 3

File details

Details for the file mcp_a2a_gateway-0.1.6.tar.gz.

File metadata

  • Download URL: mcp_a2a_gateway-0.1.6.tar.gz
  • Upload date:
  • Size: 716.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.3

File hashes

Hashes for mcp_a2a_gateway-0.1.6.tar.gz
Algorithm Hash digest
SHA256 8f48f2a3768ba161bb36c33f11e5856ab7e2a98a38d6596c13dc63216c1dbe5a
MD5 4245bc2b9a66e5566e39fcdaa707f0cd
BLAKE2b-256 d801dd676b2f74717e0060c99546cfb715557ccf0075a875836cf92a33b50643

See more details on using hashes here.

File details

Details for the file mcp_a2a_gateway-0.1.6-py3-none-any.whl.

File metadata

File hashes

Hashes for mcp_a2a_gateway-0.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 937cf94cc2f5a4f1a2836efcb0b5426afecf5ebfc04c2115aa584f799a0b6838
MD5 7d8f34d048e8d8ddfc4d020313cdeb40
BLAKE2b-256 f7c424253247a9e79e350a52076b0c29c934f2f3476f1c03c00bff612d4a7824

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page