返回市场
多实例MCP

多实例MCP

作者:kfirtoledo96 星标更新:2025-07-21

项目介绍

多MCP

一个灵活且动态的多MCP代理服务器,在连接到多个后端MCP服务器并通过STDIOSSE进行路由时,充当单一MCP服务器的角色。

<p align="center"> <img src="assets/multi-mcp-diagram.png" alt="多MCP服务器架构" width="300"/> </p>

🚀 特性

  • ✅ 支持STDIOSSE传输方式
  • ✅ 可以连接到运行在STDIOSSE模式下的MCP服务器
  • ✅ 将请求代理到多个MCP服务器
  • ✅ 自动从已连接的服务器初始化能力(工具、提示、资源)
  • ✅ 在运行时动态添加/移除MCP服务器(通过HTTP API)
  • ✅ 支持不同服务器上具有相同名称的工具(使用命名空间)
  • ✅ 可部署在Kubernetes上,通过代理暴露单个端口来访问所有已连接的MCP服务器

📦 安装

要开始本地项目:

# 克隆仓库
git clone https://github.com/kfirtoledo/multi-mcp.git
cd multi-mcp

# 使用uv安装(推荐)
uv venv
uv pip install -r requirements.txt

🖥️ 本地运行

你可以根据需要在STDIOSSE模式下本地运行代理:

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,以避免冲突,并允许多个服务器暴露具有相同基本名称的工具。例如,如果名为calculator的MCP服务器提供了一个add工具,它将被引用为calculator::add

你还可以通过SSE连接到远程MCP服务器:

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

更多示例可以在examples/config/目录中找到。

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

当在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"]
    }
  }
}

🐳 Docker

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

# 构建镜像
make docker-build

# 本地运行并暴露端口
make docker-run

Kubernetes

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

使用Kind运行

要在本地使用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项目的启发,并在此基础上构建: