MCP 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 Gatewaylist available tools"
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.
The gateway never knows the capabilities ahead of time. A provider โ typically a browser app โ connects, publishes its own MCP tools, resources, prompts and more, and executes them when an MCP client calls them. The gateway only registers, publishes and routes, staying completely domain agnostic.
It is a small, installable library. You build a real application by subclassing Gateway and
overriding hooks. The handlers themselves are written in JavaScript. This library never prescribes a
specific frontend โ the Provider SDK guide teaches the JS side generically.
๐ฆ Install
pip install mcp-gtw
# or
uv add mcp-gtwRelated MCP server: mcpstead
๐ The smallest gateway
from mcp_gtw.gateway import Gateway
app = Gateway().create_app()uv run python -m mcp_gtw.mainThis publishes a real MCP endpoint at /mcp, a private provider WebSocket at /provider and a health
check at /health. It exposes whatever capabilities the connected provider registers.
โ๏ธ One-click deploy
The image runs production-ready as a non-root process. Deploy it to any host that keeps a persistent
server (the /provider WebSocket needs one โ serverless like Vercel does not work):
Render, Railway and Fly.io run the Dockerfile as-is (they inject PORT, which the
gateway reads); on a VPS (Hostinger, โฆ) use Docker Compose. Full guide, including reverse proxy and
TLS: deployment.
๐งฉ Extending it
Subclass Gateway and override the hooks to attach your own domain logic:
from mcp_gtw.channel import Channel
from mcp_gtw.gateway import Gateway
class MyGateway(Gateway):
mcp_server_name = "my-app"
async def on_provider_connected(self, channel: Channel) -> None:
... # a provider session just came online
def register_routes(self, app) -> None:
super().register_routes(app)
... # add your own HTTP and WebSocket routes
app = MyGateway().create_app()Every behaviour is a swappable strategy with a secure default โ authentication, tokens, origins,
expiry and the wire codec. Change one by setting a *_class attribute or injecting an instance,
without touching the transport. See the Gateway library guide for every
override point, Extensibility for the strategy contracts, and
Auth recipes for token, username/password and client-supplied-token models.
๐ Documentation
Guide | What it covers |
Components, transports and request flows. | |
Install, run and connect an MCP client. | |
The | |
The swappable strategies, their contracts and the invariants. | |
Token, username/password and client-supplied-token models. | |
Every setting and environment variable. | |
The private gateway โ provider message protocol. | |
Writing the JavaScript provider and registering tools. | |
Turn any open page into a provider from DevTools. | |
Connecting Claude Code, generic clients and the Inspector. | |
The optional monitoring dashboard and its stats API. | |
The security model, tokens, origins and hardening. | |
Running the suite and the 100% coverage gate. | |
Docker, reverse proxies and scaling. |
๐๏ธ Layout
.
โโโ src/mcp_gtw/ # the library
โโโ tests/ # unit and integration tests (100% coverage)
โโโ docs/ # the guides linked aboveโ Requirements
Python 3.12+ โ tested on 3.12, 3.13 and 3.14 in CI (3.12 is the pinned local and Docker version)
Any MCP client (Claude Code, Cursor, the MCP Inspector, โฆ)
๐ Support
If this project saved you time, consider supporting it: GitHub Sponsors ยท Ko-fi.
Made with care by Paulo Coutinho.
Licensed under MIT.
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
- Flicense-qualityDmaintenanceEnables centralized management and unified interface for multiple child MCP servers (filesystem, sqlite, etc.), allowing users to discover, launch, and execute tools across different MCP servers through a single gateway.Last updated
- Alicense-qualityDmaintenanceMCP Gateway that aggregates multiple upstream MCP servers into a single endpoint with persistent connections, tool registry, and authentication.Last updated292MIT
- Flicense-qualityDmaintenanceExposes app-registered tools as an MCP server for OpenClaw, forwarding actual tool execution back to the app over a WebSocket bridge.Last updated
- Flicense-qualityCmaintenanceA simple gateway that connects to multiple child MCP servers and forwards tool calls to them, enabling seamless client interactions with multiple tools.Last updated31
Related MCP Connectors
MCP server exposing the Backtest360 engine API as tools for AI agents.
Agent-native collaboration network: orchestrate a team of long-running agents from any MCP client.
MCP server for Argo RPG Platform โ connects AI assistants to campaign data via OAuth2
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/mcp-gtw/mcp-gtw'
If you have feedback or need assistance with the MCP directory API, please join our Discord server