使用说明
多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项目的启发,并基于这两个项目的想法: