MCP Hub

MCP Hub

Aggregates dozens of pre-built connectors into one OpenAI-compatible endpoint for AI clients, with a web UI for installing, configuring, monitoring, and managing them.

Category
访问服务器

README

MCP Hub — All-in-One MCP Server & Connector Ecosystem

Self-hosted hub that aggregates MCP (Model Context Protocol) connectors into a single endpoint for your AI clients — with an App-Store-style web UI, one-click installs, live logs and health monitoring.

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

Quick start

A. Local / plain 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 editor)

  1. Stacks → Add stack → Web editor and paste portainer-stack.yml.
  2. Add an environment variable POSTGRES_PASSWORD (under Environment variables) before deploying.
  3. Deploy — the image is pulled from Docker Hub (xeniak10/mcp-hub:latest), no build needed.

Open http://<host>:3000 — on first visit you'll be asked to create the admin account (bootstrap). Then:

  1. Go to Marketplace, install e.g. GitHub, paste a token → the connector's child process starts in the background.
  2. Go to Settings → create an API key.
  3. Point your AI client at the hub:
{
  "mcpServers": {
    "hub": {
      "url": "http://localhost:3000/mcp",
      "headers": { "Authorization": "Bearer mcp_YOUR_KEY" }
    }
  }
}

All connector tools appear namespaced as github__create_issue, postgres__query, …

What you get

  • Marketplace — 71 built-in connectors for developers (GitHub, GitLab, Postgres, Kubernetes, Sentry…) and business teams — CRM (Salesforce, HubSpot, Pipedrive), ERP/accounting (Odoo, QuickBooks, Xero), helpdesk (Zendesk, Freshdesk, ServiceNow), communication (Microsoft 365, Email IMAP/SMTP, Twilio, Slack, Teams files), productivity (Google Sheets, Notion, Airtable) and observability (Dynatrace). One-click install, schema-driven config form, background dependency startup via npx/uvx inside the hub container. Search, category filters and sorting (official first / most installed / name).
  • Community connector repos — paste a public GitHub repo URL in the Marketplace ("Community repos" section) and every valid connector manifest in it is fetched, validated and merged into your catalog (community:owner/repo/<id> namespaced, cached offline in the data volume). An index.json at the repo root lists files explicitly; otherwise root-level *.json are probed. New entries appear after a hub restart.
  • Custom connectors — drop a JSON manifest into ./connectors/ (or the connectors volume) and it appears in the marketplace after a restart. See connectors/example.json.example.
  • Dashboard — live status badges (running / starting / error / stopped), stats tiles, instance search, bulk Restart all / Stop all with confirmation.
  • Connector detail — rename instances inline, visual config editor, live tool preview (tools/list through the running process) with click-to-copy tool names, real-time log viewer (WebSocket tail) with level/text filters, follow mode and log download.
  • Light & dark theme — toggle in the sidebar; persisted per browser.
  • Keyboard shortcuts — / focuses search · g d dashboard · g m marketplace · g s settings · Esc closes dialogs/blurs search.
  • PWA-ready — installable manifest + SVG favicon.
  • Backup & restore — one-click export of all installed connectors + configs to a JSON file; import restores them on a fresh instance (Settings page).
  • Account management — change password (signs out all other devices), list active sessions with IP/user-agent, revoke any session.
  • Failure alerts — set ERROR_WEBHOOK_URL and the hub POSTs a JSON alert whenever a connector enters the error state (works with Slack, Discord, Teams, generic receivers; 5-minute per-connector cooldown).
  • Watchdog — crashed processes restart with exponential backoff; health ping every 30 s; boot recovery restores everything that was enabled before restart.
  • Updates — Settings shows your current version and checks GitHub releases / Docker Hub tags every 6 h (or on Check now). When a new version is published you get a one-click copy of the exact upgrade command for your deployment type.
  • Optional auto-update — enable the Watchtower sidecar with docker compose --profile autoupdate up -d: it pulls newer xeniak10/mcp-hub images hourly and recreates only the app container (it is label-scoped, so it never touches your database).
  • Monitoring & ops — unauthenticated GET /healthz for uptime probes; GET /api/meta reports version + git commit (shown in Settings footer); API-key traffic on /mcp is rate-limited to 120 requests/min per key.
  • Security — AES-256-GCM encrypted configs at rest, argon2id passwords, cookie sessions, hashed API keys, login rate limiting, audit log.

Configuration

Variable Required Description
POSTGRES_PASSWORD ✅ Password for the bundled PostgreSQL
MASTER_ENCRYPTION_KEY – openssl rand -hex 32. Auto-generated to /app/data/master.key if empty
SESSION_SECRET – Empty = random per boot (users get logged out on restart)
APP_PORT – Host port (default 3000)
LOG_RETENTION_LINES – Ring buffer size per connector (default 5000)
LOG_RETENTION_DAYS – Log age limit (default 7)
ERROR_WEBHOOK_URL – URL to POST JSON alerts when a connector enters error state

Volumes: pgdata (database), app-data (master key + state), npx-cache (connector dependency cache — keeps restarts fast).

Updating

The hub cannot replace its own container, so updates are a one-liner on the host:

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

(Settings → Updates copies this for you when a new version is available. On Portainer use Stack → Pull and redeploy.) Want it fully hands-off?

docker compose --profile autoupdate up -d

That starts Watchtower next to the hub; every hour it checks Docker Hub and recreates the app container when a newer image exists (--cleanup removes old images). Your data lives in volumes, so updates are lossless.

Development

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

Stack: npm workspaces · Fastify 5 · @modelcontextprotocol/sdk · PostgreSQL 16 · Vite + React 18 + Tailwind CSS v4 + TanStack Query.

Layout

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

Adding a connector

Without rebuilding (recommended): copy connectors/example.json.example to connectors/<your-id>.json, fill in the manifest (command argv with {env.NAME} placeholders + JSON-schema config form) and restart the hub. Invalid files are skipped with a warning in the logs; custom ids that collide with built-ins are ignored.

From a GitHub repo: Marketplace → Community repos → paste owner/repo (or a full github.com URL). The hub fetches an index.json from the repo root (array of file paths) or falls back to root-level *.json files, validates each against the same schema as volume manifests, and caches them under community:owner/repo/<id> ids — so they can never shadow built-ins and keep working offline after the first fetch. Manage/remove repos in the same section; changes apply on next restart.

Built-in: create packages/server/src/registry/connectors/<id>.ts exporting a ConnectorManifest and register it in src/registry/index.ts. It appears in the marketplace immediately after rebuild.

REST API summary

Endpoint Auth Description
GET /healthz – Liveness probe (DB ping only, no details)
POST /api/auth/bootstrap · login · logout –/session First-run account, sign-in/out
GET /api/meta session {version, commit} of the running build
POST /api/auth/change-password session Change password; revokes all other sessions
GET /api/auth/sessions · DELETE /:id session List/revoke active sessions
GET /api/marketplace session Catalog entries with install counts
GET/POST /api/community/repos · DELETE /:repo session Manage community connector repos
POST /api/connectors · PUT/DELETE /:id session Install / rename / uninstall
PUT /api/connectors/:id/config session Save encrypted config
POST /api/connectors/:id/enable·disable·restart session Lifecycle
POST /api/connectors/restart-all · stop-all session Bulk operations
GET /api/connectors/:id/tools session Live tool list from the running process
GET /api/logs/:id?after= + WS stream session Log tail
GET/POST /api/keys · DELETE /:id session API key management
GET /api/backup · POST /api/backup/restore session Config export/import
POST /mcp Bearer key or session Unified MCP endpoint (120 req/min per key)

All mutating endpoints write to the audit log.

Notes

  • Connectors run as child processes inside the hub container (npx -y pkg@version or uvx). No docker socket is mounted. Python-based connectors need uvx — it is installed into the runtime image.
  • The MCP endpoint is stateless Streamable HTTP (/mcp) — any HTTP MCP client works.
  • Resources are exposed under connector://<slug>/<original-uri>.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选