多mcp
一个生产就绪的MCP代理服务器,将多个后端MCP服务器聚合到一个端点中——具有延迟加载、按工具过滤和兼作实时控制平面的统一YAML配置。
All your AI tools → multi-mcp → github, obsidian, exa, tavily, context7, ...______________________________________________________________________
为什么
大多数MCP设置都需要在每个工具(Claude Code、Codex、Cursor等)中单独配置每个服务器。每台服务器在启动时都会急切地启动。您没有简单的方法从您想要的服务器禁用特定工具。
多mcp 解决所有三个问题:
- 一个端点 --配置一次,每个工具都连接到多mcp
- 延迟加载 --服务器仅在实际调用工具时连接
- 工具控制 --翻转
enabled: false在YAML文件中的任何单个工具上
______________________________________________________________________
特性
- 统一的YAML配置 --单个文件用作缓存、配置和控制平面
- 启动发现 --首次运行时短暂连接到每台服务器,缓存工具列表,断开懒惰服务器的连接
- 延迟加载 --懒惰服务器在第一次工具调用时重新连接,空闲超时后自动断开连接
- 始终在服务器上 --保持永久连接,如果断开连接,会自动重新连接
- 每个工具启用/禁用 --从每个服务器中精确地公开您想要的工具
- 智能刷新 --在不覆盖设置的情况下重新发现工具
- 陈旧工具清理 --从服务器上消失并被禁用的工具会自动修剪
- 支持所有传输 --stdio、SSE和流式HTTP(2025规范)
- 工具名称间距 —
server::tool_name防止服务器之间的冲突 - 运行时HTTP API --添加/删除服务器而不重新启动(SSE模式)
- 审核日志记录 --每次工具调用的JSONL日志
- API密钥验证 --SSE模式的可选承载令牌
______________________________________________________________________
快速开始
要求: Python 3.10+, 紫外线
git clone https://github.com/itstanner5216/multi-mcp
cd multi-mcp
uv sync首次运行 --自动发现所有服务器并写入 ~/.config/multi-mcp/servers.yaml:
uv run python main.py start或手动刷新 要重新发现工具并更新YAML:
uv run python main.py refresh______________________________________________________________________
配置
第一次运行时,multi-mcp创建 ~/.config/multi-mcp/servers.yaml 通过连接到您配置的每台服务器,获取其工具列表,然后断开连接。生成的文件看起来像:
servers:
github:
command: /path/to/run-github.sh
always_on: true # stays connected at all times
idle_timeout_minutes: 5
tools:
search_repositories:
enabled: true
delete_repository:
enabled: false # hidden from all AI tools
create_gist:
enabled: false
exa:
url: https://mcp.exa.ai/mcp?tools=web_search_exa,get_code_context_exa
always_on: false # lazy: connects only when called
idle_timeout_minutes: 5
tools:
web_search_exa:
enabled: true
linkedin_search_exa:
enabled: false # don't need this
obsidian:
command: /path/to/run-obsidian.sh
always_on: true
tools: {} # auto-populated on first run刀具控制规则:
| 状态 | 行为 |
|---|---|
enabled: true | 暴露于AI |
enabled: false | 隐藏--刷新永远不会覆盖设置 |
| 工具从服务器上消失 | 已标记 stale: true,您的设置保留 |
stale: true + enabled: false | 下次刷新时已清理 |
没有 tools key | 所有工具都通过(默认) |
要禁用工具,只需设置 enabled: false 并保存。下一次生效 multi-mcp start.
______________________________________________________________________
命令行界面
# Start the proxy (stdio mode — used by Claude Code, Codex, etc.)
uv run python main.py start
# Start in SSE mode (network accessible)
uv run python main.py start --transport sse --port 8085
# Re-discover tools from all servers, smart-merge into YAML
uv run python main.py refresh
# Re-discover tools from one server only
uv run python main.py refresh github
# Show server status and tool counts
uv run python main.py status
# List all tools with enabled/disabled status
uv run python main.py list
# Filter to one server
uv run python main.py list --server github
# Show only disabled tools
uv run python main.py list --disabled______________________________________________________________________
连接您的AI工具
运行multi-mcp后,将工具配置中的所有单独服务器条目替换为单个条目:
Claude代码/光标/任何基于JSON的配置:
{
"mcpServers": {
"multi-mcp": {
"type": "stdio",
"command": "uv",
"args": ["run", "--project", "/path/to/multi-mcp", "python", "main.py", "start"]
}
}
}SSE模式(如果作为后台服务运行):
{
"mcpServers": {
"multi-mcp": {
"type": "sse",
"url": "http://localhost:8085/sse"
}
}
}______________________________________________________________________
运输支持
multi-mcp通过任何传输连接到后端服务器:
| 传输 | 后端配置 | 注意事项 |
|---|---|---|
| 标准 | command: /path/to/server | 本地子流程 |
| 流式HTTP | url: https://... | 当前MCP规范(POST) |
| 上海证券交易所 | url: https://... | 传统SSE(GET),自动回退 |
对于 url-基于服务器,multi-mcp首先尝试Streamable HTTP,然后自动回退到传统的SSE。
______________________________________________________________________
运行时API(SSE模式)
跑步时 --transport sse,提供管理API:
# List active servers
GET /mcp_servers
# Add a server at runtime
POST /mcp_servers
{"name": "new-server", "command": "/path/to/server"}
# Remove a server
DELETE /mcp_servers/{name}
# List all tools by server
GET /mcp_tools
# Health check
GET /health通过以下方式进行身份验证 Authorization: Bearer (套 MULTI_MCP_API_KEY env-var启用)。
______________________________________________________________________
建筑
┌──────────────────────────────────────────────────┐
│ Claude Code / Codex / Cursor / any MCP client │
└─────────────────────┬────────────────────────────┘
│ stdio or SSE
┌───────▼────────┐
│ multi-mcp │
│ │
│ • YAML config │
│ • namespacing │
│ • tool filter │
│ • lazy loading │
│ • audit log │
└──┬──────┬──────┘
│ │
┌────────────┘ └──────────────┐
│ │
┌───▼──────────┐ ┌────────▼──────┐
│ always_on │ │ lazy │
│ │ │ │
│ github │ │ exa (SSE) │
│ obsidian │ │ tavily │
│ │ │ context7 │
│ (connected │ │ seq-thinking │
│ always) │ │ │
└──────────────┘ │ (connects on │
│ first call, │
│ disconnects │
│ after idle) │
└───────────────┘______________________________________________________________________
发展
# Run tests
uv run python -m pytest
# Run specific test file
uv run python -m pytest tests/test_cache_manager.py -v
# Check what's configured
uv run python main.py status
uv run python main.py list测试覆盖范围: 在YAML配置、合并逻辑、启动发现、空闲超时、启动流程、CLI和重新连接行为方面进行了30次测试。
______________________________________________________________________
环境变量
| 变量 | 描述 |
|---|---|
MULTI_MCP_API_KEY | SSE API身份验证的承载令牌 |
MULTI_MCP_HOST | SSE绑定主机(默认值: 127.0.0.1) |
MULTI_MCP_PORT | SSE绑定端口(默认值: 8085) |
MULTI_MCP_LOG_LEVEL | 日志级别:调试、信息、警告、错误 |
______________________________________________________________________
许可证
麻省理工学院
