/ 目录 / 演练场 / mcp-proxy
● 社区 tbxark ⚡ 即开即用

mcp-proxy

作者 tbxark · tbxark/mcp-proxy

将众多 MCP server 聚合到单个 HTTP 端点背后——把客户端配置从 20 条减到 1 条,让整个团队共享 MCP。

mcp-proxy by tbxark 可以代理任意数量的上游 MCP server(stdio、SSE 或可流式 HTTP),并通过单个 HTTP 端点暴露它们。当你希望整个团队(或多个 AI 客户端)指向一个 URL,而不是在每台机器上重新配置每个 server 时,这就很有用。

为什么要用

核心特性

实时演示

实际使用效果

proxy-2.replay ▶ 就绪
0/0

安装

选择你的客户端

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "proxy-2": {
      "command": "TODO",
      "args": [
        "See README: https://github.com/tbxark/mcp-proxy"
      ],
      "_inferred": true
    }
  }
}

打开 Claude Desktop → Settings → Developer → Edit Config。保存后重启应用。

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "proxy-2": {
      "command": "TODO",
      "args": [
        "See README: https://github.com/tbxark/mcp-proxy"
      ],
      "_inferred": true
    }
  }
}

Cursor 使用与 Claude Desktop 相同的 mcpServers 格式。项目级配置优先于全局。

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "proxy-2": {
      "command": "TODO",
      "args": [
        "See README: https://github.com/tbxark/mcp-proxy"
      ],
      "_inferred": true
    }
  }
}

点击 Cline 侧栏中的 MCP Servers 图标,然后选 "Edit Configuration"。

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "proxy-2": {
      "command": "TODO",
      "args": [
        "See README: https://github.com/tbxark/mcp-proxy"
      ],
      "_inferred": true
    }
  }
}

格式与 Claude Desktop 相同。重启 Windsurf 生效。

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "proxy-2",
      "command": "TODO",
      "args": [
        "See README: https://github.com/tbxark/mcp-proxy"
      ]
    }
  ]
}

Continue 使用服务器对象数组,而非映射。

~/.config/zed/settings.json
{
  "context_servers": {
    "proxy-2": {
      "command": {
        "path": "TODO",
        "args": [
          "See README: https://github.com/tbxark/mcp-proxy"
        ]
      }
    }
  }
}

加入 context_servers。Zed 保存后热重载。

claude mcp add proxy-2 -- TODO 'See README: https://github.com/tbxark/mcp-proxy'

一行命令搞定。用 claude mcp list 验证,claude mcp remove 卸载。

使用场景

实战用法: mcp-proxy

如何为你的团队运行共享 MCP 网关

👤 厌倦了为每个新同事配置 10 个 MCP 的平台/DevEx 工程师 ⏱ ~30 min intermediate

何时使用: 你发现了 5 个以上的 MCP 应该被团队中的每个人使用,而每次为新员工解释 stdio 配置已经占用了你整周的时间。

前置条件
  • 团队每个成员都能访问的 VM 或容器主机 — 任何小型 EC2/Fly/Hetzner 主机;512MB RAM 就足够了
  • 在该主机上安装 Docker — curl -fsSL https://get.docker.com | sh
步骤
  1. 编写 config.json 列出团队需要的所有上游 MCP
    草拟一个 mcp-proxy config.json,聚合 github、sentry、postgres(只读副本)和 filesystem(作用域限于 /data)。为每个都指定唯一的命名空间。✓ 已复制
    → 有效的配置包含命名空间的 server 条目
  2. 在共享主机上用 Docker 运行 mcp-proxy
    编写 docker run 命令来启动 ghcr.io/tbxark/mcp-proxy,绑定到 9090 端口、挂载 config.json、设置 restart=always 和健康检查。✓ 已复制
    → 容器保持运行;/health 返回 200
  3. 给团队成员一个 URL,让他们粘贴到每个客户端
    编写一个 5 行的入门代码片段,团队成员粘贴到 Claude Desktop 的配置中指向我们的共享 proxy URL。✓ 已复制
    → 任何团队成员可以通过一步获得所有上游工具

结果: 新员工通过粘贴一个 URL 在 2 分钟内达到完整的 MCP 配置;升级只需在一个地方进行。

注意事项
  • 在没有认证的情况下将 proxy 放在公网上 — 在前面的反向代理(Caddy/nginx/Cloudflare)处终止 TLS 和认证——mcp-proxy 没有认证层
  • 上游工具名称冲突(两个 server 都暴露 get_issue) — 使用命名空间,这样客户端会看到 github.get_issue 与 gitlab.get_issue
搭配使用: github · sentry · postgres

通过 HTTP 将本地 stdio MCP 暴露给远程 IDE

👤 使用无法生成 stdio 进程的云 IDE 的开发者 ⏱ ~15 min beginner

何时使用: 你的客户端只支持 HTTP/SSE,但你需要的 MCP 仅支持 stdio。

步骤
  1. 本地运行 mcp-proxy 包装 stdio server
    生成一个 mcp-proxy 配置,将 npx -y @modelcontextprotocol/server-filesystem /tmp 包装成 :9090 上的 SSE 端点。✓ 已复制
    → curl http://localhost:9090 返回 MCP 元数据
  2. 将端口隧道化到公共 URL
    给我一个用 cloudflared 或 ngrok 暴露 :9090 的单行命令。✓ 已复制
    → 公共 HTTPS URL
  3. 将远程 IDE 指向 SSE URL
    编写 IDE 配置条目来使用这个作为 SSE MCP server。✓ 已复制
    → 工具在远程 IDE 中出现

结果: 仅 stdio 的 MCP 可从任何支持 HTTP 的客户端访问。

注意事项
  • 公开隧道在运行时对全世界开放 — 使用带有 Access 策略的 cloudflared 或添加共享密钥头
搭配使用: filesystem

为整个团队升级 MCP 而无需修改客户端配置

👤 推出 MCP 版本更新的团队领导 ⏱ ~10 min beginner

何时使用: 上游 MCP 的安全修复版本发布了,你需要今天让所有人都使用它。

步骤
  1. 在中央 mcp-proxy 配置中提升版本
    更新我的 mcp-proxy 配置,将 github-mcp-server 固定为 v0.4.2 并重新加载。✓ 已复制
    → 新版本在 proxy 上生效
  2. 验证工具仍然有效
    调用 proxy 的 list_tools,确认 github.* 工具与新的 server 版本一起存在。✓ 已复制
    → 从消费者的角度来看,工具列表保持不变

结果: 静默升级——团队成员在下一次工具调用时获得新版本,无需重启客户端。

注意事项
  • 新版本重命名了工具并破坏了下游 prompt — 在固定之前读取上游变更日志;保持先前版本短时间配置以支持过渡

组合

与其他 MCP 搭配,撬动十倍杠杆

proxy-2 + github + sentry

将两者放在一个 proxy 背后,这样团队成员就不用在两个配置中处理两个令牌

配置 mcp-proxy 代理 github 和 sentry MCP server,从主机读取的单个 .env 文件加载凭据。✓ 已复制
proxy-2 + agent

与 1mcp-app/agent 进行比较——两者都聚合,但有不同的权衡(Go vs Node、OAuth vs 无认证)

在同一主机上配置 mcp-proxy 和 1mcp-app/agent,并对每个的工具调用延迟进行基准测试。✓ 已复制

工具

此 MCP 暴露的能力

工具输入参数何时调用成本
list_tools (none) 客户端——proxy 在 MCP 握手时自动处理 free
call_tool name: str (optionally namespaced), args: object 任何工具调用——proxy 按名称/命名空间路由 1 upstream call

成本与限制

运行它的成本

API 配额
没有自己的配额;通过上游 server 限制
每次调用 Token 数
除上游响应外的可忽略不计的开销
费用
免费,MIT 许可证
提示
在小型主机上运行——512MB RAM 可处理数十个上游。实际成本是上游 API 费用。

安全

权限、密钥、影响范围

凭据存储: 上游凭据存储在主机环境变量或 config.json 中;将 config.json 保留在 git 之外
数据出站: Proxy 转发到你配置的任何上游 server;不向 tbxark 发送遥测数据
切勿授予: 在没有认证层的情况下将 proxy 暴露到公网上

故障排查

常见错误与修复

上游 server 启动失败

检查 config.json 中的命令路径是绝对路径或在容器 PATH 上。使用 docker exec 进入并手动运行。

验证: docker logs <proxy-container>
工具调用返回 'tool not found' 但 list_tools 显示了该工具

命名空间不匹配——启用命名空间时,客户端必须调用 server.tool_name,而不是 tool_name。

验证: curl http://proxy:9090/tools | jq
SSE 连接每 30s 断开

反向代理空闲超时太短。将其提高到 5 分钟或为 /sse 路径禁用缓冲。

验证: nginx/Caddy log shows client timeout
Docker 容器立即退出

配置 JSON 无效。启动前使用 jq 验证。

验证: docker logs shows JSON parse error

替代方案

mcp-proxy 对比其他方案

替代方案何时用它替代权衡
1mcp-app/agent你想要内置 OAuth 2.1 和基于作用域的认证较重的占用空间、基于 Node 而不是 Go
Hyprmcp Jetski你需要在聚合基础上有分析和 prompt 级别的可见性需要 Kubernetes/PostgreSQL——对于小团队来说过度设计
直接客户端配置团队 1-3 人,且你很少改变 server零基础设施,但每次改变都需要 N 个更新

更多

资源

📖 阅读 GitHub 上的官方 README

🐙 查看未解决的 issue

🔍 浏览全部 400+ MCP 服务器和 Skills