Everything you need to run
MCP in production.
MCPHub started as a personal config wrangler and grew into the production-grade hub teams trust with their AI tool surface. These are the pieces that get you there.
Centralized management
Monitor health, latency, and tool usage of every connected MCP server. Start, stop, hot-reload, and rotate credentials from a single dashboard — no SSH-ing into containers or hand-editing JSON across machines.
- Real-time health checks per server
- Hot-reload without restarting clients
- Audit log of every config change
- Per-server resource limits & quotas
Four routing modes, one config
Different teams need different views into your MCP fleet. MCPHub exposes the same servers through four URL patterns so you can mix aggregate, scoped, and direct access without re-deploying.
- /mcp — aggregate (all tools)
- /mcp/{group} — scoped to a named group
- /mcp/{server} — single server passthrough
- /mcp/$smart — semantic tool discovery
/mcpaggregate247 tools/mcp/{group}groupscoped/mcp/{server}single1 server/mcp/$smartsemantictop-kSemantic tool discovery
When you have 200+ tools across 30+ servers, the model can't hold all of them in context. Smart Routing indexes every tool description into a vector store and returns only the matching subset per request.
- pgvector + Cohere embeddings (BYO supported)
- Per-request top-k tuning
- Falls back to keyword search if vector store down
- Works with every MCP-aware client
github.search_issues0.94linear.list_issues0.87notion.create_page0.83sentry.list_errors0.61OAuth 2.0 — client & server modes
Run MCPHub as the OAuth provider for downstream servers, or sit behind your existing IdP as a resource server. Per-user, per-group, and per-server scopes propagate to each tool call.
- GitHub, Google, generic OIDC out of the box
- Server-to-server with M2M tokens
- Audit log: who called what, when
- PKCE + refresh token rotation
POST /mcp/{group}
Authorization: Bearer mcphub-sk-***
X-User-Id: u_8f3a
X-Scope: tools.read,tools.write
→ 200 OK · 12 tools available
→ audit: u_8f3a → github.search_issues
→ audit: u_8f3a → linear.list_issuesGroups & per-user visibility
One MCPHub instance, many teams. Define groups, assign servers, restrict which tools each user can call. Plays nicely with SCIM provisioning at the Enterprise tier.
- Role-based access (admin / member / viewer)
- Per-server visibility rules
- Group endpoints with separate quotas
- SCIM 2.0 provisioning (Enterprise)
platform-engdata-teamsupportPostgreSQL-backed for serious deployments
Swap the embedded JSON store for PostgreSQL when you need durability, replication, or horizontal scaling. All routes, groups, OAuth state, and usage records flow through the same schema.
- Single binary still — Postgres is opt-in
- Migrations run on startup
- Read replicas for analytics
- Compatible with Neon, Supabase, RDS
services:
mcphub:
image: samanhappy/mcphub
environment:
DATABASE_URL: postgres://...
AUTH_SECRET: ${AUTH_SECRET}
depends_on: [postgres]
postgres:
image: postgres:16
volumes: [pgdata:/var/lib/postgresql/data]Ready to consolidate your MCP servers?
One Docker command, five minutes, zero config to start.