Skip to main content
Glama

MCP Hub — オールインワン MCP サーバー & コネクタエコシステム

AI クライアント向けに MCP (Model Context Protocol) コネクタを単一のエンドポイントに集約するセルフホスト型ハブ — App Store 風の Web UI、ワンクリックインストール、ライブログとヘルスモニタリングを備えています。

Claude Desktop / Cursor ──Bearer key──▶  ┌─────────────────────┐
                                        │   MCP Hub (:3000)    │──▶ github (npx)
                                        │  /mcp   /api  Web UI │──▶ postgres (npx)
Web browser ──session cookie──▶         └─────────┬───────────┘──▶ slack (npx) …
                                                  ▼
                                            PostgreSQL 16

クイックスタート

A. ローカル / 通常の Docker

cp .env.example .env
# edit .env — set POSTGRES_PASSWORD (and optionally MASTER_ENCRYPTION_KEY / SESSION_SECRET)
docker compose up -d --build

B. Portainer (Web エディタ)

  1. Stacks → Add stack → Web editor で portainer-stack.yml を貼り付けます。

  2. デプロイ前に (Environment variables で) 環境変数 POSTGRES_PASSWORD を追加します。

  3. デプロイ — イメージは Docker Hub (xeniak10/mcp-hub:latest) からプルされるため、ビルドは不要です。

http://:3000 を開くと、初回アクセス時に管理者アカウントの作成 (ブートストラップ) を求められます。その後:

  1. Marketplace に移動し、例: GitHub をインストールしてトークンを貼り付けると、コネクタの子プロセスがバックグラウンドで起動します。

  2. Settings に移動し、API キーを作成します。

  3. AI クライアントをハブに向けます:

{
  "mcpServers": {
    "hub": {
      "url": "http://localhost:3000/mcp",
      "headers": { "Authorization": "Bearer mcp_YOUR_KEY" }
    }
  }
}

すべてのコネクタツールは github__create_issue、postgres__query、… のように名前空間付きで表示されます。

Related MCP server: open-connector-pro

得られるもの

  • Marketplace — 開発者向けの組み込みコネクタ 71 個 (GitHub、GitLab、Postgres、Kubernetes、Sentry…) および ビジネスチーム向け — CRM (Salesforce、HubSpot、Pipedrive)、ERP/会計 (Odoo、QuickBooks、Xero)、ヘルプデスク (Zendesk、Freshdesk、ServiceNow)、コミュニケーション (Microsoft 365、Email IMAP/SMTP、Twilio、Slack、Teams files)、生産性 (Google Sheets、Notion、Airtable)、可観測性 (Dynatrace)。ワンクリックインストール、スキーマ駆動の設定フォーム、ハブコンテナ内での npx/uvx によるバックグラウンド依存関係起動。検索、カテゴリフィルター、並べ替え (公式優先 / インストール数順 / 名前順)。

  • コミュニティコネクタリポジトリ — Marketplace の「Community repos」セクションに公開 GitHub リポジトリの URL を貼り付けると、その中の有効なコネクタマニフェストがすべて取得・検証され、カタログに統合されます (community:owner/repo/<id> 名前空間、データボリュームにオフラインキャッシュ)。リポジトリルートの index.json でファイルを明示的にリストできます。それ以外の場合はルートレベルの *.json が探索されます。新しいエントリはハブ再起動後に表示されます。

  • カスタムコネクタ — JSON マニフェストを ./connectors/ (または connectors ボリューム) に置くと、再起動後にマーケットプレイスに表示されます。connectors/example.json.example を参照してください。

  • ダッシュボード — ライブステータスバッジ (実行中 / 起動中 / エラー / 停止)、統計タイル、インスタンス検索、確認付き一括 Restart all / Stop all。

  • コネクタ詳細 — インラインでのインスタンス名変更、ビジュアル設定エディター、ライブツールプレビュー (実行中プロセス経由の tools/list)、クリックでコピーできるツール名、リアルタイムログビューアー (WebSocket テール)、レベル/テキストフィルター、フォローモード、ログダウンロード。

  • ライト & ダークテーマ — サイドバーで切り替え。ブラウザごとに保存されます。

  • キーボードショートカット — / で検索にフォーカス · g d ダッシュボード · g m マーケットプレイス · g s 設定 · Esc ダイアログを閉じる/検索をクリア。

  • PWA 対応 — インストール可能なマニフェスト + SVG ファビコン。

  • バックアップ & リストア — インストール済みのすべてのコネクタと設定を JSON ファイルにワンクリックエクスポート。インポートで新しいインスタンスに復元 (Settings ページ)。

  • アカウント管理 — パスワード変更 (他のすべてのデバイスをサインアウト)、アクティブセッションの一覧表示 (IP/ユーザーエージェント付き)、任意のセッションを取り消し。

  • 障害アラート — ERROR_WEBHOOK_URL を設定すると、コネクタがエラー状態になるたびにハブが JSON アラートを POST します (Slack、Discord、Teams、汎用レシーバーに対応。コネクタごとに 5 分間のクールダウン)。

  • ウォッチドッグ — クラッシュしたプロセスは指数バックオフで再起動。30 秒ごとのヘルスピング。起動時リカバリで再起動前に有効だったものをすべて復元。

  • アップデート — Settings に現在のバージョンが表示され、6 時間ごと (または Check now で) GitHub リリース / Docker Hub タグをチェックします。新しいバージョンが公開されると、デプロイタイプに応じた正確なアップグレードコマンドをワンクリックでコピーできます。

  • オプションの自動更新 — docker compose --profile autoupdate up -d で Watchtower サイドカーを有効化: 毎時新しい xeniak10/mcp-hub イメージをプルし、アプリコンテナのみを再作成します (ラベルでスコープされているため、データベースには触れません)。

  • 監視 & 運用 — 稼働確認用の認証なし GET /healthz。GET /api/meta はバージョン + git コミットを報告 (Settings フッターに表示)。/mcp の API キートラフィックはキーごとに毎分 120 リクエストにレート制限。

  • セキュリティ — 保存時の AES-256-GCM 暗号化設定、argon2id パスワード、クッキーセッション、ハッシュ化 API キー、ログインのレート制限、監査ログ。

設定

変数

必須

説明

POSTGRES_PASSWORD

✅

同梱の PostgreSQL 用パスワード

MASTER_ENCRYPTION_KEY

–

openssl rand -hex 32。空の場合は /app/data/master.key に自動生成

SESSION_SECRET

–

空 = 起動ごとにランダム (再起動時にユーザーはログアウトされます)

APP_PORT

–

ホストポート (デフォルト 3000)

LOG_RETENTION_LINES

–

コネクタごとのリングバッファサイズ (デフォルト 5000)

LOG_RETENTION_DAYS

–

ログの保持期間 (デフォルト 7)

ERROR_WEBHOOK_URL

–

コネクタがエラー状態になったときに JSON アラートを POST する URL

ボリューム: pgdata (データベース)、app-data (マスターキー + 状態)、npx-cache (コネクタ依存関係キャッシュ — 再起動を高速化)。

アップデート

ハブは自身のコンテナを置き換えることはできないため、アップデートはホスト上の 1 行で行います:

docker compose pull app && docker compose up -d --no-deps --force-recreate app

(Settings → Updates で、新しいバージョンが利用可能なときにこれをコピーできます。Portainer では Stack → Pull and redeploy を使用します。) 完全に手間いらずにしたいですか?

docker compose --profile autoupdate up -d

これでハブの隣に Watchtower が起動します。毎時 Docker Hub をチェックし、新しいイメージが存在する場合にアプリコンテナを再作成します (--cleanup は古いイメージを削除)。データはボリュームにあるため、アップデートは損失なしです。

開発

npm install
npm run dev        # server (watch) + web (vite dev server on :5173, proxied /api + /mcp)
npm run typecheck  # all workspaces
npm run build      # shared → server → web

スタック: npm workspaces · Fastify 5 · @modelcontextprotocol/sdk · PostgreSQL 16 · Vite + React 18 + Tailwind CSS v4 + TanStack Query。

レイアウト

packages/
  shared/   types shared by server & web (manifests, API DTOs, WS events)
  server/   Fastify app: auth, registry (connector manifests), ConnectorManager,
            unified /mcp proxy, log pipeline, SQL migrations
  web/      React SPA served statically by the server in production

コネクタの追加

再ビルドなし (推奨): connectors/example.json.example を connectors/<your-id>.json にコピーし、マニフェストを記入して ({env.NAME} プレースホルダー付きのコマンド argv + JSON スキーマ設定フォーム)、ハブを再起動します。無効なファイルはログに警告を出してスキップされます。組み込みと衝突するカスタム ID は無視されます。

GitHub リポジトリから: Marketplace → Community repos → owner/repo (または完全な github.com URL) を貼り付けます。ハブはリポジトリルートから index.json (ファイルパスの配列) を取得するか、ルートレベルの *.json ファイルにフォールバックし、それぞれをボリュームマニフェストと同じスキーマで検証し、community:owner/repo/<id> ID でキャッシュします — そのため組み込みをシャドウすることはなく、最初の取得後はオフラインでも動作し続けます。同じセクションでリポジトリを管理/削除できます。変更は次回再起動時に適用されます。

組み込み: packages/server/src/registry/connectors/<id>.ts を作成し、ConnectorManifest をエクスポートして src/registry/index.ts に登録します。再ビルド後すぐにマーケットプレイスに表示されます。

REST API 概要

エンドポイント

認証

説明

GET /healthz

–

生存確認プローブ (DB ピンのみ、詳細なし)

POST /api/auth/bootstrap · login · logout

–/セッション

初回実行アカウント、サインイン/アウト

GET /api/meta

セッション

実行中ビルドの {version, commit}

POST /api/auth/change-password

セッション

パスワード変更。他のすべてのセッションを取り消し

GET /api/auth/sessions · DELETE /:id

セッション

アクティブセッションの一覧/取り消し

GET /api/marketplace

セッション

インストール数付きのカタログエントリ

GET/POST /api/community/repos · DELETE /:repo

セッション

コミュニティコネクタリポジトリの管理

POST /api/connectors · PUT/DELETE /:id

セッション

インストール / 名前変更 / アンインストール

PUT /api/connectors/:id/config

セッション

暗号化設定の保存

POST /api/connectors/:id/enable·disable·restart

セッション

ライフサイクル

POST /api/connectors/restart-all · stop-all

セッション

一括操作

GET /api/connectors/:id/tools

セッション

実行中プロセスからのライブツールリスト

GET /api/logs/:id?after= + WS ストリーム

セッション

ログテール

GET/POST /api/keys · DELETE /:id

セッション

API キー管理

GET /api/backup · POST /api/backup/restore

セッション

設定のエクスポート/インポート

POST /mcp

Bearer キーまたはセッション

統合 MCP エンドポイント (キーごとに毎分 120 リクエスト)

すべての変更エンドポイントは監査ログに書き込まれます。

注記

  • コネクタはハブコンテナ内の子プロセスとして実行されます (npx -y pkg@version または uvx)。Docker ソケットはマウントされません。Python ベースのコネクタには uvx が必要です — ランタイムイメージにインストールされています。

  • MCP エンドポイントはステートレスな Streamable HTTP (/mcp) です — 任意の HTTP MCP クライアントが動作します。

  • リソースは connector://<slug>/<original-uri> で公開されます。

Related MCP Connectors

Related MCP Servers