mcp-gateway
Provides a GitHub template for creating MCP servers that interact with GitHub through the gateway.
Provides a MySQL template for creating and managing MySQL-backed MCP servers through the gateway.
Provides a PostgreSQL (DBHub) template for adding Postgres database MCP servers; supports connection testing, credential management, and exposing execute_sql tools to agents through the gateway.
Provides a SQLite template for creating and managing SQLite-backed MCP servers through the gateway.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-gatewayadd the pg-analytics and pg-orders Postgres servers to a group called databases"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP Gateway
A self-hosted control plane for Model Context Protocol servers. Define every MCP server you use in one place, manage them from a web GUI, and give your agents a single endpoint — per server or for a whole group of servers with namespaced tools.
Claude Code · Claude Desktop · Cursor · VS Code · your agent
│ Streamable HTTP /mcp/servers/<id> /mcp/groups/<id> (+ API key)
▼
┌────────────────────── MCP Gateway ──────────────────────┐
│ web GUI · admin REST API · sessions · logs │
│ groups: namespaced tools pg-analytics__execute_sql … │
│ upstream manager: start/stop, restart w/ backoff, │
│ health checks, idle stop, tool filters & renames │
└───────┬──────────────────┬──────────────────┬───────────┘
stdio (npx/uvx/docker) Streamable HTTP legacy SSE
Postgres, filesystem… remote MCP servers older serversScenario. An agent needs two Postgres databases. You add pg-analytics and pg-orders in the
GUI (from the PostgreSQL (DBHub) template), put them in a group databases, and point the agent at
http://gateway:8808/mcp/groups/databases. The agent sees pg-analytics__execute_sql and
pg-orders__execute_sql; the gateway owns the processes, credentials, restarts and logs.
A complete, runnable version lives in examples/postgres-scenario.
Features
Any upstream transport — stdio processes (
npx,uvx,docker run, anything), Streamable HTTP and legacy SSE remotes with bearer/basic/header auth.Lifecycle management — auto/lazy start, idle stop, restart with exponential backoff and a cap, health-check pings, startup/request/tool-call timeouts, captured stderr.
Groups — several servers behind one endpoint; tools and prompts namespaced (
prefix__tool,.or-), or pass-through with conflict handling; per-member filters; combined instructions; implicitallgroup.Tool policy — include/exclude globs, hide, rename and re-describe tools per server.
Full MCP proxying — tools, resources (+templates, subscriptions), prompts, completions, logging, progress, cancellation,
list_changedpropagation, and server→client sampling / elicitation / roots routed back to the originating session.Downstream transports — Streamable HTTP (stateful with resumable streams, or stateless), legacy SSE, plus
mcp-gateway-connect, a stdio bridge for clients such as Claude Desktop.Security — API keys (hashed, scoped to servers/groups, expiring), admin token for the GUI/API, secret redaction,
${ENV}interpolation so secrets never have to be written to the config, DNS-rebinding protection, CORS allow-list.GUI — dashboard, server catalog with 16 templates (Postgres ×3, MySQL, SQLite, filesystem, GitHub, Playwright, Context7, fetch, memory, …), tabbed editor with Test connection, tool explorer with Try it, resources/prompts browsers, live logs, metrics, per-client connect snippets, sessions, settings, import/export (Claude Desktop / Cursor / VS Code
mcpServersfiles).
Related MCP server: Master MCP Server
Screenshots
The dashboard — running servers, groups, active sessions and a live event feed:

The server catalog, with transport, status, tool counts and restart counts at a glance:

A server's detail view — runtime and endpoint facts, plus the tool explorer for calling tools straight from the GUI:

Quick start
Requirements: Node.js ≥ 20 (plus npx/uvx/docker for whichever upstream servers you run).
git clone <this repo> mcp-gateway && cd mcp-gateway
npm install
npm run build
npm start # → http://127.0.0.1:8808Then in the GUI: Servers → Add server → PostgreSQL (DBHub) → paste a DSN → Test connection → Create server. Open the server's Connect tab and copy the snippet for your client, e.g.
claude mcp add --transport http pg-analytics http://127.0.0.1:8808/mcp/servers/pg-analyticsDevelopment mode (Vite with hot reload on :5173, gateway on :8808): npm run dev.
Docker
docker compose up -d --build # GUI on http://localhost:8808, data in ./dataThe image ships node/npx, uvx and git, so npm- and Python-based MCP servers can be launched
inside the container. Set GATEWAY_ADMIN_TOKEN in the environment when the port is reachable by
others. To pre-load a configuration, mount a file and set GATEWAY_SEED_CONFIG=/path/to/config.json
— it is copied to the data volume on first start.
How it fits together
Concept | What it is |
Server | One upstream MCP server definition: transport, lifecycle, tool policy, forwarding options. Endpoint |
Group | An ordered set of servers exposed as one virtual MCP server with namespaced tools/prompts and merged resources. Endpoint |
API key | Bearer token for |
Session | One connected downstream client (Streamable HTTP or SSE). Visible and closable in the GUI. |
Admin token | Protects the GUI and |
Configuration is a single JSON file (data/config.json, mode 0600, atomic writes, .bak kept) —
see docs/CONFIG.md for every field. Client setup for each tool is in
docs/CLIENTS.md; the full design is in docs/SPEC.md.
The GUI also has a built-in Docs page (/docs, next to Settings) that walks through how the
gateway works and how to add, customize and connect servers.
CLI
mcp-gateway serve [--host 127.0.0.1] [--port 8808] [--data-dir ./data] [--config <file>] [--public-url <url>] [--log-level info]
mcp-gateway import <file> [--format gateway|mcpServers] [--mode merge|replace] # into the config file (restart to apply)
mcp-gateway export [--format gateway|mcpServers] [--secrets] [--out <file>]
mcp-gateway hash-token <token> # sha256 for settings.auth.adminTokenHash
mcp-gateway connect <url> [--api-key K] [--header 'Name: v'] [--sse] # stdio ⇄ HTTP bridge
mcp-gateway-connect <url> … # same bridge as a standalone package (@mcp-gateway/connect)Environment: GATEWAY_HOST, GATEWAY_PORT, GATEWAY_DATA_DIR, GATEWAY_CONFIG, GATEWAY_ADMIN_TOKEN,
GATEWAY_PUBLIC_URL, GATEWAY_LOG_LEVEL, GATEWAY_REQUIRE_API_KEY, GATEWAY_WEB_DIR,
GATEWAY_SEED_CONFIG (Docker). Precedence: CLI flags > environment > config.json > defaults.
Endpoints
Path | Purpose |
| Streamable HTTP MCP endpoints |
| legacy HTTP+SSE |
| liveness (unauthenticated) |
| admin REST API (JSON; |
| Server-Sent Events feed (status, logs, sessions, metrics) used by the GUI |
| the web GUI |
The complete route list with request/response shapes is in docs/SPEC.md §7.
Security notes
With no admin token the GUI/API are open: keep the default loopback bind, or set
GATEWAY_ADMIN_TOKEN.Turn on Require API key before exposing
/mcpbeyond localhost; scope keys to the servers/groups each agent needs.Secrets: prefer
${VAR}references over literal values; values under secret-looking keys are redacted in API responses and exports (?secrets=1/ with secrets export includes them).Put a TLS-terminating reverse proxy in front for anything internet-facing (needed for the Anthropic API MCP connector).
The gateway executes the commands you configure — anyone with admin access can run arbitrary processes on the host.
Development
npm run dev # gateway (tsx watch) + Vite dev server
npm run typecheck # all workspaces
npm test # vitest: shared unit tests, server integration tests (real stdio/HTTP fixtures), bridge tests
npm run build # server bundle (esbuild), connect bundle, web (vite)Layout: packages/shared (zod config schema, DTOs, templates, naming helpers — browser-safe),
packages/server (Express 5 + @modelcontextprotocol/sdk: upstream manager, proxy server, sessions,
REST/MCP routes, CLI), packages/web (React 19 + Vite), packages/connect (stdio bridge),
examples/postgres-scenario (docker-compose demo).
Limitations / roadmap
OAuth to upstream servers is not implemented (use bearer/basic/header auth); OAuth for downstream clients is not implemented (API keys instead).
Resources are not namespaced in groups — URIs are routed to their owning server; identical URIs across members resolve to the first member.
No rate limiting; put a reverse proxy in front if you need it.
Single-process, in-memory sessions and logs (a restart drops sessions; clients re-initialize).
License
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA central hub that aggregates multiple MCP resource servers into a single unified interface, enabling users to access tools and capabilities from multiple backend servers through one connection point.45202MIT
- FlicenseNot gradedqualityNot gradedmaintenanceAggregates multiple MCP servers behind a single, secure endpoint with unified tool/resource discovery, OAuth authentication, and resilient request routing. Enables users to manage and interact with multiple MCP backends through one centralized interface with load balancing and circuit breakers.2
- FlicenseNot gradedqualityDmaintenanceA centralized gateway and router that integrates multiple MCP servers into a single endpoint with built-in policy enforcement and secret management. It features a Web GUI for managing tool access, audit logs, and multi-environment configurations across various sub-servers.
- AlicenseNot gradedqualityBmaintenanceAggregates multiple backend MCP servers into a single unified interface with optional web management UI for tool control and configuration.45192MIT
Related MCP Connectors
34 production API tools over one hosted MCP endpoint.
MCP Server for agents to onboard, pay, and provision services autonomously with InFlow
MCP server for AI access to Swagger by SmartBear.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/shamalawy/mcp-gateway'
If you have feedback or need assistance with the MCP directory API, please join our Discord server