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

mcphub

作者 samanhappy · samanhappy/mcphub

複数の MCP サーバーを 1 つのエンドポイント配下で運用 — グループ化、ベクトル検索による smart ルーティング、設定ホットスワップ(ダウンタイムなし)。

MCPHub は TypeScript で実装したハブで、複数の MCP サーバーを 1 つの HTTP エンドポイント配下にマウントし、グループ、サーバー、またはベクトル検索による 'smart' ルーターでルーティングします。OAuth、ソーシャルログイン、本番環境向けの PostgreSQL モードに対応。Docker でのデプロイが推奨されます。

なぜ使うのか

主な機能

ライブデモ

実際の動作

mcphub.replay ▶ 準備完了
0/0

インストール

クライアントを選択

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "mcphub": {
      "command": "npx",
      "args": [
        "-y",
        "mcphub"
      ],
      "_inferred": true
    }
  }
}

Claude Desktop → Settings → Developer → Edit Config を開く。保存後、アプリを再起動。

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "mcphub": {
      "command": "npx",
      "args": [
        "-y",
        "mcphub"
      ],
      "_inferred": true
    }
  }
}

Cursor は Claude Desktop と同じ mcpServers スキーマを使用。プロジェクト設定はグローバルより優先。

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "mcphub": {
      "command": "npx",
      "args": [
        "-y",
        "mcphub"
      ],
      "_inferred": true
    }
  }
}

Cline サイドバーの MCP Servers アイコンをクリックし、"Edit Configuration" を選択。

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "mcphub": {
      "command": "npx",
      "args": [
        "-y",
        "mcphub"
      ],
      "_inferred": true
    }
  }
}

Claude Desktop と同じ形式。Windsurf を再起動して反映。

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "mcphub",
      "command": "npx",
      "args": [
        "-y",
        "mcphub"
      ]
    }
  ]
}

Continue はマップではなくサーバーオブジェクトの配列を使用。

~/.config/zed/settings.json
{
  "context_servers": {
    "mcphub": {
      "command": {
        "path": "npx",
        "args": [
          "-y",
          "mcphub"
        ]
      }
    }
  }
}

context_servers に追加。保存時に Zed がホットリロード。

claude mcp add mcphub -- npx -y mcphub

ワンライナー。claude mcp list で確認、claude mcp remove で削除。

ユースケース

実用的な使い方: mcphub

チームむけ:20 個の MCP サーバーを 1 つの URL で公開する方法

👤 プラットフォームエンジニア、チームリード ⏱ ~30 min intermediate

使うタイミング: エンジニアが何度もローカル設定をコピペして互いのセットアップを壊してしまう状況

前提条件
  • Docker と DNS 名を持つサーバー — 安価な VPS であればどれでも使用可能;TLS には Caddy または nginx を使用
  • サーバー一覧を記載した mcp_settings.json — MCPHub サンプルから始め、MCP ごとに 1 エントリ追加
フロー
  1. ハブのデプロイ
    実行:docker run -p 3000:3000 -v $PWD/mcp_settings.json:/app/mcp_settings.json samanhappy/mcphub✓ コピーしました
    → ログに管理者ログイン URL と生成されたパスワードが表示される
  2. グループの作成
    管理者 UI でグループ「dev」(github、filesystem、postgres)と「data」(postgres、bigquery)を作成✓ コピーしました
    → /mcp/dev および /mcp/data でグループが表示される
  3. URL の配布
    https://mcp.yourco.internal/mcp/dev をチームと共有し、クライアントで単一の HTTP MCP として追加✓ コピーしました
    → チームメンバーが 1 行の設定で接続可能

結果: 単一の運用可能なエンドポイントが 20 個のマシン単位セットアップに替わる

注意点
  • Docker ログから管理者パスワードが漏洩する — ADMIN_PASSWORD 環境変数を明示的に設定;初回ログイン時にローテーション
  • ハブをパブリックインターネットに公開する — VPN の背後に配置するか、ユーザーごとにベアラートークンを要求

$smart にプロンプトに応じて自動的に適切な MCP を選択させる方法

👤 単一コンテキストに収まらないほど多くのツールを実行しているチーム ⏱ ~15 min advanced

使うタイミング: 複数の MCP 全体で 200+ のツールがあり、モデルのツール予算を超える場合

フロー
  1. $smart エンドポイントの有効化
    クライアントを特定サーバーではなく https://hub.example.com/mcp/$smart に指定✓ コピーしました
    → インテントに基づいてルーティングする単一のメタツールが公開される
  2. 自然言語でプロンプト入力
    github.com/org/repo の自分の確認待ちの PR を検索し、カレンダーに 30 分のレビュースロットとして登録✓ コピーしました
    → ハブが背後で github + google-calendar ツールを選択

結果: コンテキスト内のツール数が減少、同じ機能を維持

注意点
  • 曖昧なプロンプトで Smart ルーターが誤った MCP を選択する — グループ単位のエンドポイントをフォールバックとして保持

ダウンタイムなしでハブに新しい MCP サーバーを追加する方法

👤 オペレータ ⏱ ~5 min beginner

使うタイミング: 新しい MCP がリリースされ、すべてのユーザーをキックオフせずに本日中にライブにしたい場合

フロー
  1. UI 経由で mcp_settings.json を編集
    MCPHub ダッシュボードで新しいサーバーエントリを追加して保存✓ コピーしました
    → ホットリロード通知、新しいツール表示
  2. グループに割り当て
    新しいサーバーを「data」グループに追加✓ コピーしました
    → /mcp/data に新しいツールが含まれる

結果: 1 分以内に新しい MCP がオンライン、クライアント再接続不要

組み合わせ

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

mcphub + toolhive

ToolHive で個別の MCP をコンテナ化、MCPHub でルーティング

ToolHive で実行する github MCP を MCPHub の「dev」グループに登録✓ コピーしました
mcphub + proxy

stdio 専用 MCP を HTTP 経由でハブに公開

mcp-proxy でローカル stdio MCP を HTTP に接続し、MCPHub がマウント可能にする✓ コピーしました

ツール

このMCPが提供する機能

ツール入力呼び出すタイミングコスト
(meta) route-by-group HTTP path /mcp/{group} 通常の使用 — 影響範囲を狭める free
(meta) route-by-server /mcp/{server} 特定の 1 つのサーバーの機能のみが必要な場合 free
(meta) $smart semantic router /mcp/$smart コンテキストに収まらないほど多くのツールがある場合 1 vector search per call

コストと制限

運用コスト

APIクォータ
ハブは制限なし;下流の MCP は独自のクォータを保持
呼び出しあたりのトークン
ツール メタデータオーバーヘッドとして約 50 トークン追加
金額
無料(オープンソース、Apache 2.0)
ヒント
決定論的な動作と追加のベクトル検索コスト なしのため、$smart ではなくグループルートを使用

セキュリティ

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

最小スコープ: ユーザーごとのベアラートークン 信頼できるクライアントへのネットワークレベルの制限
認証情報の保管: ADMIN_PASSWORD 環境変数;下流の MCP シークレットは mcp_settings.json またはシークレットマネージャー経由
データ送信先: ハブはプロキシのみ — データは各下流 MCP の送信先に流れる
絶対に付与しない: 認証なしのパブリック公開 オープンインターネット上の管理者 UI

トラブルシューティング

よくあるエラーと対処法

ログインできない / パスワードが不明

初回ブート時のコンテナログで生成されたパスワードを確認するか、ADMIN_PASSWORD を設定

確認: docker logs mcphub | grep -i password
新しい MCP が表示されるがツールがない

下流の MCP が起動に失敗している可能性があります。サーバーカードの「ログ」をクリック

Smart ルーターが「一致するツールなし」を返す

設定 > ツールインデックスからベクトルストアを再インデックス化

OAuth リダイレクト不一致

OAuth プロバイダーに正確なコールバック URL を登録(ハブの公開 URL と一致する必要があります)

代替案

mcphub 他との比較

代替案代わりに使う場面トレードオフ
Unla (MCP Gateway)YAML ドリブン REST-to-MCP 変換 + マルチテナント対応が必要な場合Go ベース、異なるオペレータモデル
ToolHiveMCP ごとのコンテナレベルの分離が必要な場合MCP の実行に重点、ルーティング/集約は限定的
mcp-proxyマルチサーバー集約ではなく、トランスポート ブリッジングのみが必要な場合シングルサーバー;UI なし

その他

リソース

📖 GitHub の公式 README を読む

🐙 オープンな issue を見る

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