多MCP代理服务器

一个灵活且动态的多MCP代理服务器,作为单个MCP服务器运行,同时通过STDIO或SSE连接和路由多个后端MCP服务器。

  • by kfirtoledo
  • Python
  • 本地部署
  • 111 星标
  • 更新于
在 GitHub 查看 kfirtoledo/multi-mcp

使用说明

多MCP

灵活且充满活力 多MCP 代理服务器,在连接和路由时充当单个MCP服务器 多个后端MCP服务器 STDIO 或 SSE.

🚀 特性

  • ✅ 支持两者 STDIO 和 SSE 运输
  • ✅ 可以连接到在以下任一环境中运行的MCP服务器 STDIO 或 SSE 模式
  • ✅ 将请求代理到多个MCP服务器
  • ✅ 自动初始化连接服务器的功能(工具、提示、资源)
  • ✅ 动态地 添加/删除MCP服务器 运行时(通过HTTP API)
  • ✅ 支持不同服务器上同名的工具(使用命名空间)
  • ✅ 可部署在Kubernetes上,通过代理暴露一个端口来访问所有连接的MCP服务器

📦 安装

要在本地开始此项目:

# Clone the repository
git clone https://github.com/kfirtoledo/multi-mcp.git
cd multi-mcp

# Install using uv (recommended)
uv venv
uv pip install -r requirements.txt

🖥️ 本地运行

您可以在以下任一位置本地运行代理 STDIO 或 SSE 模式取决于您的需求:

1.STDIO模式

用于CLI风格的操作(基于管道的通信)。 用于链接本地执行的工具或代理。

uv run main.py --transport stdio

2.SSE模式

运行一个HTTP SSE服务器,该服务器公开 /sse 终点。 适用于远程访问、浏览器代理和基于网络的工具。

uv run main.py --transport sse

注: 您还可以使用配置主机和端口 --host / --port 论据。

⚙️ 配置

使用JSON配置初始化代理(默认值: ./mcp.json):

{
  "mcpServers": {
    "weather": {
      "command": "python",
      "args": ["./tools/get_weather.py"]
    },
    "calculator": {
      "command": "python",
      "args": ["./tools/calculator.py"]
    }
  }
}

此配置定义了启动时要生成和连接的MCP兼容服务器的初始列表。

注: 工具名称的内部命名空间为 server_name::tool_name 以避免冲突,并允许多个服务器公开具有相同基名的工具。例如,如果MCP服务器名为 calculator 提供一个 add 工具,它将被引用为 calculator::add.

您还可以使用SSE连接到远程MCP服务器:

{
  "mcpServers": {
    "weather": {
      "url": "http://127.0.0.1:9080/sse"
    }
  }
}

更多示例可以在 示例/config/ 目录。

🔄 动态服务器管理(仅限SSE)

在SSE模式下运行时,您可以 在运行时添加/删除/列出MCP服务器 通过HTTP端点:

方法 端点 描述
GET /mcp_servers 列出活动的MCP服务器
POST /mcp_servers 添加新的MCP服务器
DELETE /mcp_servers/{name} 按名称删除MCP服务器
GET /mcp_tools 列出所有可用工具及其服务来源

添加新服务器的示例:

curl -X POST http://localhost:8080/mcp_servers \
  -H "Content-Type: application/json" \
  --data @add_server.json

add_server.json:

{
  "mcpServers": {
    "unit_converter": {
      "command": "python",
      "args": ["./tools/unit_converter.py"]
    }
  }
}

🐳 码头工人

您可以在K8s中容器化并运行SSE服务器:

# Build the image
make docker-build

# Run locally with port exposure
make docker-run

Kubernetes

您可以使用提供的清单在Kubernetes集群中部署代理。

与一起跑步 亲切的

要使用Kind在本地运行代理:

kind create cluster --name multi-mcp-test
kind load docker-image multi-mcp --name multi-mcp-test
kubectl apply -f k8s/multi-mcp.yaml

暴露代理

K8s清单通过NodePort(默认为30080)公开SSE服务器: 然后,您可以从集群外部连接到SSE端点:

http://<kind-node-ip>:30080/sse

连接到MCP客户端

代理运行后,您可以使用任何兼容MCP的客户端(如LangGraph代理或自定义MCP客户端)连接到它。

例如,使用langchain_mcp_adapters客户端,您可以直接与LangGraph集成,以从一个或多个后端mcp服务器访问工具。

看 examples/connect_langgraph_client.py 以工作集成为例。

确保您的环境设置了以下内容:

  • MCP兼容客户端(如LangGraph)

  • .env文件包含:

MODEL_NAME=<your-model-name>
BASE_URL=<https://your-openai-base-url>
OPENAI_API_KEY=<your-api-key>

灵感

该项目受到两个优秀的开源MCP项目的启发,并基于这两个项目的想法: