/ 目錄 / 演練場 / mcp-proxy
● 社群 tbxark ⚡ 即開即用

mcp-proxy

作者 tbxark · tbxark/mcp-proxy

在一個 HTTP 端點後方聚合多個 MCP 伺服器 — 將用戶端設定從 20 筆減少到 1 筆,在你的團隊中共享 MCPs。

mcp-proxy by tbxark 在任意數量的上游 MCP 伺服器(stdio、SSE 或可串流 HTTP)前方運作,並通過單一 HTTP 端點公開它們。當你希望整個團隊(或多個 AI 用戶端)都能指向一個 URL,而不是在每台機器上重新設定每個伺服器時很有用。

為什麼要用

核心特性

即時演示

實際使用效果

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 個 MCPs 的平台/DevEx 工程師 ⏱ ~30 min intermediate

何時使用: 你找到了 5 個以上的 MCPs,團隊中的每個人都應該使用,而為每個新員工重新解釋 stdio 設定佔用你一週的時間。

前置條件
  • 可由每個團隊成員存取的虛擬機或容器主機 — 任何小型 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)。為每個指定唯一的命名空間。✓ 已複製
    → 具有命名空間伺服器項目的有效設定
  2. 在共享主機上以 Docker 執行 mcp-proxy
    編寫 docker run 命令在連接埠 9090 上啟動 ghcr.io/tbxark/mcp-proxy,掛載 config.json,具有 restart=always 和健康檢查。✓ 已複製
    → 容器保持運行;/health 返回 200
  3. 提供給隊友一個 URL 貼到每個用戶端中
    編寫一個 5 行的上手程式碼片段,讓隊友貼到 Claude Desktop 的設定中以指向我們共享的 proxy URL。✓ 已複製
    → 任何隊友在一個步驟中獲得所有上游工具

結果: 新員工通過貼上一個 URL,在 2 分鐘內即可擁有完整的 MCP 配置;更新只需在一個地方進行。

注意事項
  • 在沒有驗證的情況下將 proxy 放在公開網路上 — 在前方的反向 proxy(Caddy/nginx/Cloudflare)上終止 TLS 和驗證 — mcp-proxy 沒有驗證層
  • 上游工具名稱衝突(兩個伺服器都公開 get_issue) — 使用命名空間,讓用戶端區分 github.get_issue 和 gitlab.get_issue
搭配使用: github · sentry · postgres

通過 HTTP 向遠端 IDE 公開本地 stdio MCP

👤 使用無法生成 stdio 程序的雲端 IDE 的開發者 ⏱ ~15 min beginner

何時使用: 你的用戶端只支援 HTTP/SSE,但你需要的 MCP 是 stdio 專用的。

步驟
  1. 在本地執行 mcp-proxy 包裝 stdio 伺服器
    生成一個 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 伺服器使用。✓ 已複製
    → 工具出現在遠端 IDE 中

結果: 一個從任何支援 HTTP 的用戶端都可以連線到的 stdio 專用 MCP。

注意事項
  • 公開隧道在運行時對全世界開放 — 使用 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.* 工具存在新的伺服器版本。✓ 已複製
    → 從消費者角度來看,工具清單沒有變化

結果: 靜默升級 — 隊友在下一次工具呼叫時獲取新版本,無需重新啟動用戶端。

注意事項
  • 新版本重新命名了工具並破壞了下游 prompts — 在選定版本前讀取上游變更日誌;暫時並行新舊版本配置以確保平滑過渡

組合

與其他 MCP 搭配,撬動十倍槓桿

proxy-2 + github + sentry

將兩者都放在一個 proxy 後面,讓隊友不用在兩個設定中操作兩個 tokens

設定 mcp-proxy 來前置 github 和 sentry MCP 伺服器,從主機讀取的單一 .env 檔案載入憑據。✓ 已複製
proxy-2 + agent

對比 1mcp-app/agent — 兩者都聚合,不同的權衡(Go 對 Node,OAuth 對無)

在同一主機上並排設定 mcp-proxy 和 1mcp-app/agent,並基準測試各自的工具呼叫延遲。✓ 已複製

工具

此 MCP 暴露的能力

工具輸入參數何時呼叫成本
list_tools (無) 用戶端側 — proxy 在 MCP 握手時自動處理 免費
call_tool name: str(可選命名空間),args: object 任何工具呼叫 — proxy 按名稱/命名空間路由 1 個上游呼叫

成本與限制

運行它的成本

API 配額
沒有自己的配額;通過上游伺服器限制
每次呼叫 Token 數
超過上游回應的可忽略開銷
費用
免費,MIT 授權
提示
在小型機器上執行 — 512MB 的 RAM 可處理數十個上游。真實成本是上游 API 費用。

安全

權限、密鑰、影響範圍

憑證儲存: 主機環境變數或 config.json 中的上游憑據;將 config.json 保持在 git 之外
資料出站: Proxy 轉發給你設定的任何上游伺服器;沒有回 tbxark 的遙測
切勿授予: 在沒有驗證層的情況下將 proxy 公開到網際網路

故障排查

常見錯誤與修復

上游伺服器啟動失敗

檢查 config.json 中的命令路徑是否為絕對路徑或在容器 PATH 上。docker exec 進去並手動執行。

驗證: docker logs <proxy-container>
工具呼叫返回「找不到工具」但 list_tools 顯示它

命名空間不匹配 — 啟用命名空間時,用戶端必須呼叫 server.tool_name,而不是 tool_name。

驗證: curl http://proxy:9090/tools | jq
SSE 連線每 30 秒斷開

反向 proxy 閒置逾時過短。調整為 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 人且你很少變更伺服器零基礎設施,但每個變更都是 N 個更新

更多

資源

📖 閱讀 GitHub 上的官方 README

🐙 查看未解決的 issue

🔍 瀏覽全部 400+ MCP 伺服器和 Skills