协议桥接网关

连接Model Context Protocol (MCP)和Agent-to-Agent (A2A)协议的网关服务器,使MCP兼容的AI助手(如Claude)能够无缝与A2A代理交互。

  • by yw0nam
  • Python
  • 本地部署
  • 7 星标
  • 更新于
在 GitHub 查看 yw0nam/mcp_a2a_gateway

使用说明

MCP-A2A-网关

一种网关服务器,将模型上下文协议(MCP)与代理到代理(A2A)协议连接起来,使MCP兼容的AI助手(如Claude)能够与A2A代理无缝交互。

概述

该项目作为两个尖端AI代理协议之间的集成层:

  • **模型上下文协议(MCP)**MCP由Anthropic开发,允许AI助手连接到外部工具和数据源。它规范了人工智能应用程序和大型语言模型如何以安全、可组合的方式连接到外部资源。

  • **代理对代理协议(A2A)**A2A由谷歌开发,通过标准化的JSON-RPC接口实现不同AI代理之间的通信和互操作性。

通过桥接这些协议,该服务器允许MCP客户端(如Claude)通过统一的接口发现、注册、通信和管理A2A代理上的任务。

快速开始

🎉 该软件包现在可以在PyPI上使用!

无需安装

# 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-gateway

发展(地方)

# 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-gateway

演示

1、在A2A示例中运行hello world代理

also support cloud deployed Agent

2、使用Claude或github copilot注册代理。

3、使用Claude向hello Agent发送任务并获取结果。

4、使用Claude检索任务结果。

特性

  • 代理管理

    • 在网桥服务器上注册A2A代理
    • 列出所有注册代理人
    • 不再需要时注销代理
  • 沟通

    • 向A2A代理发送消息并接收响应
    • 异步消息发送以获得即时服务器响应。
    • 实时流式传输A2A代理的响应
  • 任务管理

    • 跟踪哪个A2A代理处理哪个任务
    • 使用任务ID检索任务结果
    • 获取所有任务及其状态的列表。
    • 取消正在运行的任务
  • 运输支持

    • 多种传输类型:stdio、可流式传输http、SSE
    • 使用MCP_transport环境变量配置传输类型

先决条件

在开始之前,请确保已安装以下内容:

  • Python 3.11+
  • 紫外线 (用于地方发展)

安装

Option 1: Direct Run with uvx (Recommended)

使用直接运行,无需安装 uvx:

uvx mcp-a2a-gateway
Option 2: Local Development
  1. 克隆存储库:
git clone https://github.com/yw0nam/MCP-A2A-Gateway.git
cd MCP-A2A-Gateway
  1. 使用紫外线运行:
uv run mcp-a2a-gateway
  1. 或者使用带有本地路径的uvx:
uvx --from . mcp-a2a-gateway
Option 3: HTTP (For Web Clients)

使用HTTP传输启动服务器:

# Using uvx
MCP_TRANSPORT=streamable-http MCP_HOST=0.0.0.0 MCP_PORT=10000 uvx mcp-a2a-gateway
Option 4: Server-Sent Events

使用SSE传输启动服务器:

# Using uvx
MCP_TRANSPORT=sse MCP_HOST=0.0.0.0 MCP_PORT=10000 uvx mcp-a2a-gateway

配置

环境变量

可以使用以下环境变量配置服务器:

变量 默认值 描述
MCP_TRANSPORT stdio 运输类型: stdio, streamable-http,或 sse
MCP_HOST 0.0.0.0 HTTP/SSE传输主机
MCP_PORT 8000 HTTP/SSE传输端口
MCP_PATH /mcp HTTP端点路径
MCP_DATA_DIR data 持久数据存储目录
MCP_REQUEST_TIMEOUT 30 请求超时(秒)
MCP_REQUEST_IMMEDIATE_TIMEOUT 2 立即响应超时(秒)
LOG_LEVEL INFO 日志记录级别: DEBUG, INFO, WARNING, ERROR

示例.env文件:

# 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=INFO

运输类型

A2A MCP服务器支持多种传输类型:

  1. 标准 (默认):使用标准输入/输出进行通信

    • 非常适合命令行使用和测试
    • 未启动HTTP服务器
    • Claude Desktop需要
  2. 可流式传输http (建议用于web客户端):支持流媒体的HTTP传输

    • 建议用于生产部署
    • 启动HTTP服务器以处理MCP请求
    • 支持大响应的流式传输
  3. SSE:服务器发送事件传输

    • 提供实时事件流
    • 可用于实时更新

连接github副本

For HTTP/SSE Transport

将以下内容添加到sse或http的VS Code settings.json中:

"mcpServers": {
  "mcp_a2a_gateway": {
    "url": "http://0.0.0.0:10000/mcp"
  }
}
For STDIO Transport - Using uvx (Published Package)
"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/"
    }
  }
}
For STDIO Transport - Using uvx (Local Development)
"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/"
    }
  }
}
For STDIO Transport - Using uv (Local Development)
"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/"
    }
  }
}

连接claude桌面

Using uvx (Published Package)

将此添加到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/"
    }
  }
}
Using uvx (Local Development)

将此添加到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/"
    }
  }
}
Using uv (Local Development)

将此添加到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/"
    }
  }
}

可用的MCP工具

服务器公开了以下MCP工具,用于与Claude等LLM集成:

代理管理

  • 注册代理:在网桥服务器上注册A2A代理

    {
      "name": "register_agent",
      "arguments": {
        "url": "http://localhost:41242"
      }
    }
    
  • 列表_代理:获取所有注册代理人的列表

    {
      "name": "list_agents",
      "arguments": {"dummy": "" }
    }
    
  • 注销代理:从网桥服务器中删除A2A代理

    {
      "name": "unregister_agent",
      "arguments": {
        "url": "http://localhost:41242"
      }
    }
    

消息处理

  • send_message:向代理发送消息并获取响应的task_id

    {
      "name": "send_message",
      "arguments": {
        "agent_url": "http://localhost:41242",
        "message": "What's the exchange rate from USD to EUR?",
        "session_id": "optional-session-id"
      }
    }
    

任务管理

  • get_task_result:使用任务的ID检索任务的结果

    {
      "name": "get_task_result",
      "arguments": {
        "task_id": "b30f3297-e7ab-4dd9-8ff1-877bd7cfb6b1",
      }
    }
    
  • get_task_list:获取所有任务及其状态的列表。

    {
        "name": "get_task_list",
        "arguments": {}
    }
    

路线图和如何做出贡献

我们正在积极开发和改进网关!我们欢迎各种捐助。这是我们目前的发展路线图,重点是首先建立一个坚如磐石的基础。

核心稳定性和开发经验(需要帮助!👍)

这是我们目前的重点。我们的目标是使网关尽可能稳定和易于使用。

  • [ ] 实现流媒体响应:完全支持A2A代理的流式响应。
  • [ ] 加强错误处理:为所有场景提供更清晰的错误消息和正确的HTTP状态代码。
  • [ ] 输入验证:在注册过程中对代理URL进行消毒和验证,以提高安全性。
  • [ ] 添加健康检查终结点:一个简单的 /health 用于监视服务器状态的端点。
  • [ ] 配置验证:启动时检查必要的环境变量。
  • [ ] 综合集成测试:增加测试覆盖率以确保可靠性。
  • [ ] 取消任务:执行任务取消
  • [ ] 实施流媒体更新:实现流任务更新。以便用户检查进度。

社区与分销

  • [x] 简易安装:添加对的支持 uvx
  • [ ] Docker支持:提供Docker Compose设置以便于部署。
  • [ ] 更好的文档:创建一个专门的文档网站或扩展Wiki。

想贡献吗? 查看问题选项卡,或随时打开一个新的选项卡来讨论您的想法!

许可证

此项目根据Apache许可证2.0版获得许可-请参阅 许可证 文件以获取详细信息。

致谢

自动发布和发布

该项目通过GitHub Actions使用自动发布实现无缝发布。

自动发布流程

选项1:使用发布脚本(推荐)

# 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 major

脚本将:

  1. ✅ 检查你是否在主分支上,工作目录是否干净
  2. 📈 自动插入版本 pyproject.toml
  3. 🔨 在本地构建和测试包
  4. 📤 提交版本更改并创建git标签
  5. 🚀 推送到GitHub,触发PyPI自动发布

选项2:手动创建标签

# 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.7

选项3:GitHub发布

  1. 首选https://github.com/yw0nam/MCP-A2A-Gateway/releases
  2. 点击“创建新版本”
  3. 选择或创建标签(例如。, v0.1.7)
  4. 填写发布说明
  5. 发布发布

设置自动发布

若要启用自动发布,请将您的PyPI API令牌添加到GitHub机密:

  1. 获取PyPI API令牌:

    • 首选https://pypi.org/manage/account/token/
    • 创建具有“整个帐户”范围的新令牌
    • 复制令牌(以开头 pypi-)
  2. 添加到GitHub Secrets:

    • 转到您的存储库→ 设置→ 秘密与变量→ 行动
    • 添加新的存储库密钥:
      • 名字: PYPI_API_TOKEN
      • 价值:您的PyPI令牌
  3. 测试工作流:

    • 推送标签或创建发布
    • 检查“操作”选项卡以了解发布状态

手工出版

对于紧急释放或本地测试:

# Build and get manual publish instructions
./publish.sh

# Or publish directly (with credentials configured)
uv build
uv publish