一个灵活且动态的多MCP代理服务器,在连接到多个后端MCP服务器并通过STDIO或SSE进行路由时,充当单一MCP服务器的角色。
STDIO和SSE传输方式STDIO或SSE模式下的MCP服务器要开始本地项目:
# 克隆仓库
git clone https://github.com/kfirtoledo/multi-mcp.git
cd multi-mcp
# 使用uv安装(推荐)
uv venv
uv pip install -r requirements.txt
你可以根据需要在STDIO或SSE模式下本地运行代理:
用于CLI风格的操作(基于管道的通信)。 适用于链式执行本地工具或代理。
uv run main.py --transport stdio
运行一个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,以避免冲突,并允许多个服务器暴露具有相同基本名称的工具。例如,如果名为calculator的MCP服务器提供了一个add工具,它将被引用为calculator::add。
你还可以通过SSE连接到远程MCP服务器:
{
"mcpServers": {
"weather": {
"url": "http://127.0.0.1:9080/sse"
}
}
}
更多示例可以在examples/config/目录中找到。
当在SSE模式下运行时,可以通过HTTP端点在运行时添加/移除/列出MCP服务器:
| 方法 | 端点 | 描述 |
|---|---|---|
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服务器:
# 构建镜像
make docker-build
# 本地运行并暴露端口
make docker-run
你可以使用提供的清单在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兼容客户端连接到它——如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项目的启发,并在此基础上构建: