MCP gateway & router

One endpoint for every MCP server.

Install Model Context Protocol servers from registries or npm, run them locally as lazily-spawned child processes (or proxy remote ones), and re-expose every one over streamable HTTP. Point a single client at the router instead of configuring N servers everywhere.

GET http://host:3000/mcp/<name> one server
ALL http://host:3000/mcp every server, merged

What it does

๐Ÿงฉ

Install from anywhere

Browse the official MCP registry (or any compatible one), install directly from npm, or proxy a remote streamable-HTTP server. One file per server under DATA_DIR/config.

๐Ÿ”€

Two ways to connect

Hit /mcp/<name> for a single server, or the aggregate /mcp that merges every enabled server with <server>__<tool> namespacing.

๐Ÿ—‚๏ธ

Custom aggregates

Group a chosen subset of servers into a workspace at its own /mcp/w/<slug> URL โ€” with optional per-workspace env, args, and header overrides. Each client gets exactly the tools it needs.

๐Ÿ’ค

Lazy & warm

stdio servers spawn on first request, stay warm, and shut down after an idle timeout (default 5 minutes, per-server override). No idle processes hanging around.

๐Ÿ”

One token, one door

A single bearer token guards the management API and every MCP endpoint. Disable it for trusted local networks with SECURE_LOCAL_NET=true.

๐Ÿ–ฅ๏ธ

Web UI or JSON

Manage registries, installs, and per-server env/API keys from the built-in React UI โ€” or hand-edit the flat JSON config and reload.

๐Ÿ“ฆ

Ships as one image

A single Docker image builds the app and server; Express serves the UI. docker compose up with a ./data volume and you're live.

How it works

Your MCP client Claude Code, Claude Desktop, any streamable-HTTP client
โ†’ /mcp โ†’
MCP Router auth ยท routing ยท lazy spawn ยท aggregation
โ†’
Downstream servers stdio child processes & remote HTTP servers

The router validates the bearer token, forwards tools/resources/prompts 1:1 for per-server routes, and for the aggregate merges every enabled server's capabilities โ€” stripping the <server>__ prefix on each call to route it back to the owning server.

See it in action

The whole gateway is driven from one small web UI โ€” install a server, drop in its API key, and point your client at a URL. No config spelunking required.

localhost:3000
MCP Router โ€” installed servers list with runtime state and a copyable client-connection snippet
Every server at a glance. State, transport, and tool count per server โ€” plus a ready-to-paste snippet to connect Claude Code or any MCP client to the aggregate endpoint.
/browse
Browse the official MCP registry with search and one-click install
Browse & install. Search the official registry (or npm / PyPI) and install with one click.
install
Install dialog: pick a local name, package, and required environment variables
Name it, key it, done. Pick a local name and fill any required env vars right in the install dialog.
/servers/everything
Server detail: endpoint URL, runtime state, an environment-variable editor, and the downstream tool list
Inspect and manage each server. Endpoint and runtime state up top, an inline env-var editor with masked secrets, and every downstream tool โ€” expandable to run in place.
add server
Add a server manually by pasting a command config or an HTTP URL
Or add it by hand. Paste a claude_desktop_config entry, a command, or a remote URL โ€” nothing downloaded from a registry.
/workspaces
Workspaces page โ€” custom aggregates, each exposing a chosen subset of servers at its own /mcp/w/<slug> URL
Workspaces: aggregates you shape. Bundle a chosen subset of servers into a custom aggregate at its own /mcp/w/<slug> URL โ€” with per-workspace env, args, and header overrides, independent of each server's global state. Give every client exactly the tools it should see.

Run one router. Wire up everything.

Walk through install to a connected client on the Get Started page, or dive into the full configuration and API reference.