/ ディレクトリ / プレイグラウンド / mcp-proxy
● コミュニティ tbxark ⚡ 即起動

mcp-proxy

作者 tbxark · tbxark/mcp-proxy

複数のMCPサーバーを1つのHTTPエンドポイントに集約 — クライアント設定を20件から1件に削減し、チーム全体でMCPを共有できます。

tbxark製のmcp-proxyは、任意の数のアップストリームMCPサーバー(stdio、SSE、またはストリーマブルHTTP)をフロントに立ち、単一のHTTPエンドポイントとして公開します。チーム全体(または複数のAIクライアント)が1つの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個のMCPをオンボーディングするのにうんざりしているプラットフォーム/DevExエンジニア ⏱ ~30 min intermediate

使うタイミング: チーム全員が使うべきMCPが5つ以上あり、新しいメンバーにstdio設定を毎回説明するのに時間を取られている場合。

前提条件
  • チームメンバー全員がアクセスできるVMまたはコンテナホスト — 小規模なEC2/Fly/Hetznerインスタンスで十分。512MB RAMで足ります
  • そのホストにDockerがインストールされていること — curl -fsSL https://get.docker.com | sh
フロー
  1. チームが必要とする全アップストリームMCPを記載したconfig.jsonを作成する
    github、sentry、postgres(読み取り専用レプリカ)、filesystem(/dataにスコープ)を集約するmcp-proxyのconfig.jsonを作成してください。それぞれにユニークな名前空間を付けてください。✓ コピーしました
    → 名前空間付きサーバーエントリを含む有効な設定ファイル
  2. 共有ホスト上でmcp-proxyをDockerで起動する
    ghcr.io/tbxark/mcp-proxy をポート9090でconfig.jsonをマウントして起動するdocker runコマンドを書いてください。restart=alwaysとヘルスチェック付きで。✓ コピーしました
    → コンテナが稼働を維持し、/healthが200を返す
  3. チームメンバーに各クライアントに貼り付ける1つのURLを共有する
    チームメンバーがClaude Desktopの設定に貼り付けて共有プロキシURLに接続するための5行のオンボーディングスニペットを書いてください。✓ コピーしました
    → どのチームメンバーも1ステップで全アップストリームツールを取得できる

結果: 新しいメンバーが1つのURLを貼り付けるだけで2分でMCPの完全な環境を手に入れられます。アップグレードも一箇所で完結します。

注意点
  • 認証なしでプロキシを公開インターネットに配置する — mcp-proxyには認証レイヤーがないため、手前にリバースプロキシ(Caddy/nginx/Cloudflare)を配置してTLS終端と認証を行ってください
  • アップストリームのツール名が衝突する(2つのサーバーが共にget_issueを公開) — 名前空間を使用して、クライアントにはgithub.get_issue vs gitlab.get_issueとして見えるようにする
組み合わせ: github · sentry · postgres

ローカルのstdio MCPをHTTP経由でリモートIDEに公開する

👤 stdioプロセスを起動できないクラウドIDEを使用している開発者 ⏱ ~15 min beginner

使うタイミング: クライアントがHTTP/SSEしか対応していないが、必要なMCPがstdio専用の場合。

フロー
  1. stdioサーバーをラップするmcp-proxyをローカルで起動する
    npx -y @modelcontextprotocol/server-filesystem /tmp を:9090のSSEエンドポイントとしてラップするmcp-proxy設定を生成してください。✓ コピーしました
    → curl http://localhost:9090 がMCPメタデータを返す
  2. ポートをパブリックURLにトンネルする
    :9090を公開するためのcloudflaredまたはngrokのワンライナーを教えてください。✓ コピーしました
    → パブリックHTTPS URL
  3. リモートIDEをSSE URLに接続する
    これをSSE MCPサーバーとして利用するためのIDE設定エントリを書いてください。✓ コピーしました
    → リモートIDEにツールが表示される

結果: stdio専用のMCPが、HTTP対応の任意のクライアントからアクセス可能になります。

注意点
  • パブリックトンネルは稼働中、誰でもアクセスできる状態になる — cloudflaredのAccessポリシーを使用するか、共有シークレットヘッダーを追加する
組み合わせ: filesystem

クライアント設定に触れずにチーム全体のMCPをアップグレードする

👤 MCPのバージョンアップを展開するチームリーダー ⏱ ~10 min beginner

使うタイミング: アップストリームMCPのセキュリティ修正バージョンがリリースされ、今日中に全員を更新する必要がある場合。

フロー
  1. 中央のmcp-proxy設定でバージョンを更新する
    mcp-proxyの設定でgithub-mcp-serverをv0.4.2に固定してリロードしてください。✓ コピーしました
    → プロキシ上で新バージョンが稼働
  2. ツールが引き続き応答することを確認する
    プロキシのlist_toolsを叩いて、github.*ツールが新しいサーバーバージョンで存在することを確認してください。✓ コピーしました
    → 利用者の視点からツールリストに変更がない

結果: サイレントアップグレード — チームメンバーは次回のツール呼び出し時に自動的に新バージョンを使用し、クライアントの再起動は不要です。

注意点
  • 新バージョンがツール名を変更し、下流のプロンプトが壊れた — 固定する前にアップストリームのチェンジログを確認する。重複期間として旧バージョンも一時的に設定に残しておく

組み合わせ

他のMCPと組み合わせて10倍の力を

proxy-2 + github + sentry

両方を1つのプロキシの背後に配置し、チームメンバーが2つの設定で2つのトークンを管理する手間をなくす

githubとsentryの両MCPサーバーをフロントするmcp-proxyを設定してください。認証情報はホストが読み込む単一の.envファイルから取得するようにしてください。✓ コピーしました
proxy-2 + agent

1mcp-app/agentと比較 — どちらも集約を行うが、トレードオフが異なる(Go vs Node、OAuth vs なし)

同一ホスト上にmcp-proxyと1mcp-app/agentを並べて構築し、それぞれを経由したツール呼び出しのレイテンシをベンチマークしてください。✓ コピーしました

ツール

このMCPが提供する機能

ツール入力呼び出すタイミングコスト
list_tools (none) クライアント側 — MCPハンドシェイク時にプロキシが自動的に処理 free
call_tool name: str (optionally namespaced), args: object 任意のツール呼び出し — プロキシが名前/名前空間でルーティング 1 upstream call

コストと制限

運用コスト

APIクォータ
独自のクォータなし。アップストリームサーバーの制限がそのまま適用されます
呼び出しあたりのトークン
アップストリームのレスポンスに加わるオーバーヘッドはごくわずかです
金額
無料、MITライセンス
ヒント
小さなインスタンスで運用可能 — 512MB RAMで数十のアップストリームを処理できます。実際のコストはアップストリームのAPI料金です。

セキュリティ

権限、シークレット、影響範囲

認証情報の保管: アップストリームの認証情報はホストの環境変数またはconfig.jsonに格納。config.jsonはgitに含めないでください
データ送信先: プロキシは設定されたアップストリームサーバーに転送します。tbxarkへのテレメトリ送信はありません
絶対に付与しない: Exposing the proxy to the public internet without an auth layer in front

トラブルシューティング

よくあるエラーと対処法

Upstream server failed to start

config.jsonのコマンドパスが絶対パスか、コンテナのPATH上にあるか確認してください。docker execでコンテナに入り、手動で実行して検証してください。

確認: docker logs <proxy-container>
Tool call returns 'tool not found' but list_tools shows it

名前空間の不一致 — 名前空間が有効な場合、クライアントはtool_nameではなくserver.tool_nameで呼び出す必要があります。

確認: curl http://proxy:9090/tools | jq
SSE connection drops every 30s

リバースプロキシのアイドルタイムアウトが短すぎます。5分に延長するか、/sseパスのバッファリングを無効にしてください。

確認: nginx/Caddy log shows client timeout
Docker container exits immediately

設定JSONが無効です。起動前にjqで検証してください。

確認: docker logs shows JSON parse error

代替案

mcp-proxy 他との比較

代替案代わりに使う場面トレードオフ
1mcp-app/agentOAuth 2.1とスコープベースの認証を組み込みで使いたい場合フットプリントが大きく、Nodeベース(Go対比)
Hyprmcp Jetski集約に加えてアナリティクスとプロンプトレベルの可視性が必要な場合Kubernetes/PostgreSQLが必要 — 小規模チームにはオーバースペック
Direct client-side configsチームが1〜3人で、サーバー変更がほとんどない場合インフラ不要だが、変更のたびにN回の更新が必要

その他

リソース

📖 GitHub の公式 README を読む

🐙 オープンな issue を見る

🔍 400以上のMCPサーバーとSkillsを見る