mcp-gateway
mcp-gateway
A generic MCP gateway: a single FastMCP endpoint that aggregates many
upstream MCP servers, driven entirely by a servers.json config. The
machinery is deployment-agnostic — bring your own config and auth.
Extracted as the reusable core of a personal MCP gateway so it can be
consumed as a package (each consumer provides its own servers.json +
auth), rather than forked.
What it does
Config-driven aggregation — declare upstreams in
servers.json(stdio or streamable-http); the gateway mounts each as a proxy and exposes one flat tool surface.Tool subset / rename — expose only the tools you want, renamed to a clean cross-server vocabulary (or
"*"to pass through).Multi-instance routing — one logical server, N backends keyed by an injected
account/host/instanceparam (e.g. personal+work, or laptop+desktop+vm). Enum-in-schema, fail-at-call-time error enrichment.Middleware — e.g. image downscaling on outbound content blocks.
Pluggable auth — single-user (bearer/OAuth) today; a multi-tenant provider (per-user identity forwarded to each upstream) is the next milestone.
Config
Set MCP_SERVERS_FILE to a servers.json. Each entry declares a
transport + tools; an instances block turns it multi-instance.
Run
gateway-local # stdio gateway (local clients)
gateway-remote # streamable-http gateway (behind a reverse proxy)Consuming as a package
mcp-gateway @ git+https://github.com/klutometis/mcp-gateway.gitThe consumer owns its servers.json and auth config; this package never
imports consumer code.
Status
Phase 0 extraction (generic machinery + tests). Multi-tenant auth provider is the next milestone — see the extraction plan in the personal gateway repo.