MCP Gateway
A standalone CLI gateway that aggregates multiple MCP (Model Context Protocol) servers behind a single HTTP/SSE endpoint with Code Mode — reducing LLM input token usage by up to 92% when using multiple MCP servers.
Features
- Multi-Server Aggregation — Connect to multiple MCP servers (HTTP, SSE, Stdio, Streamable HTTP) and expose them through a single endpoint
- Code Mode — 4 meta-tools that let LLMs discover and use tools dynamically without loading all schemas upfront
- OAuth 2.0 Support — Built-in OAuth flow with dynamic client registration (RFC 7591) and token storage
- Hermetic Sandbox — Starlark-based sandbox for safe code execution
- MCP Protocol Compliant — Works with Claude Desktop, Cursor, and any MCP-compatible client
Installation
pip install mcp-gway
Or with mise:
mise install
uv sync
Quick Start
# Add an MCP server
mcp-gway add youtube --type http --url http://localhost:3001/mcp
# Add a stdio server
mcp-gway add filesystem --type stdio --command npx --args '["-y", "@anthropic/mcp-filesystem"]'
# Add a server requiring OAuth
mcp-gway add supabase --type streamable-http --url https://mcp.supabase.com/mcp
# List all servers
mcp-gway list
# Start the gateway
mcp-gway serve --port 8080
Connect from Claude Desktop
Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"gateway": {
"url": "http://localhost:8080/mcp"
}
}
}
Commands
| Command | Description |
|---|---|
mcp-gway add |
Add an MCP server and generate .pyi stub |
mcp-gway remove |
Remove an MCP server |
mcp-gway update |
Update tools for a server |
mcp-gway list |
List all connected servers |
mcp-gway inspect |
Show tool signatures for a server |
mcp-gway refresh |
Refresh connection and re-discover tools |
mcp-gway serve |
Start the gateway server |
Code Mode
When connected, the gateway exposes 4 meta-tools:
| Tool | Description |
|---|---|
listToolFiles |
List all available .pyi stub files |
readToolFile |
Read function signatures from a stub |
getToolDocs |
Get detailed documentation for a tool |
executeToolCode |
Execute code in a sandboxed Starlark interpreter |
OAuth Authentication
For servers requiring OAuth (e.g., Supabase):
# Trigger OAuth flow
mcp-gway refresh supabase --auth
# Or store token manually
mkdir -p ~/.config/mcp-gway/tokens
echo '{"access_token": "YOUR_TOKEN"}' > ~/.config/mcp-gway/tokens/supabase.json
Development
# Install dependencies
mise install
uv sync
# Run tests
uv run pytest -v
# Lint and format
uv run ruff check src/ tests/
uv run ruff format src/ tests/
Architecture
┌─────────────────────────────────────────────────────────┐
│ MCP Gateway │
├─────────────────────────────────────────────────────────┤
│ CLI (click) │ HTTP/SSE Server (Starlette) │
│ - add │ - POST /mcp (JSON-RPC) │
│ - remove │ - GET /mcp (SSE stream) │
│ - list │ - POST /mcp/messages │
│ - refresh │ │
├─────────────────────────────────────────────────────────┤
│ Code Mode (4 meta-tools) │ Starlark Sandbox │
│ - listToolFiles │ - Hermetic execution │
│ - readToolFile │ - Server injection │
│ - getToolDocs │ │
│ - executeToolCode │ │
├─────────────────────────────────────────────────────────┤
│ Registry (.pyi files) │ OAuth2 (RFC 7591) │
│ - servers/*.pyi │ - Dynamic registration│
│ - Tool signatures │ - Token storage │
└─────────────────────────────────────────────────────────┘
│ │ │
┌────┴────┐ ┌────┴────┐ ┌────┴────┐
│ Server1 │ │ Server2 │ │ Server3 │
│ (HTTP) │ │ (SSE) │ │ (Stdio) │
└─────────┘ └─────────┘ └─────────┘
License
MIT
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcp_gway-0.4.3.tar.gz.
File metadata
- Download URL: mcp_gway-0.4.3.tar.gz
- Upload date:
- Size: 14.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c269479b296e8bb029ccc58aae23f1412f9eb4b0e8793599adae3caf1769622d
|
|
| MD5 |
82030a0c7f1d6f7dac6f68bdff4ed134
|
|
| BLAKE2b-256 |
189ac68d5f81dba4e653e79ad4401dfc2a1d560e64e0527896f05115da6563cf
|
Provenance
The following attestation bundles were made for mcp_gway-0.4.3.tar.gz:
Publisher:
release.yml on deuriib/mcp-gateway
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcp_gway-0.4.3.tar.gz -
Subject digest:
c269479b296e8bb029ccc58aae23f1412f9eb4b0e8793599adae3caf1769622d - Sigstore transparency entry: 2580928097
- Sigstore integration time:
-
Permalink:
deuriib/mcp-gateway@4a9afe300efd0c3d774ada45d6798c8273cdc809 -
Branch / Tag:
refs/heads/master - Owner: https://github.com/deuriib
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4a9afe300efd0c3d774ada45d6798c8273cdc809 -
Trigger Event:
workflow_run
-
Statement type:
File details
Details for the file mcp_gway-0.4.3-py3-none-any.whl.
File metadata
- Download URL: mcp_gway-0.4.3-py3-none-any.whl
- Upload date:
- Size: 18.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d38541b247d44ccf05e4c65df56aa58b99ad4cbbdb61fa2da55e181d99925471
|
|
| MD5 |
a2c125b586053e1054fed9ec043f8db0
|
|
| BLAKE2b-256 |
6574a8a46940bd5c3861f9ca02aa0ceebd31b1a49e9bf033c48e5b5575f083a8
|
Provenance
The following attestation bundles were made for mcp_gway-0.4.3-py3-none-any.whl:
Publisher:
release.yml on deuriib/mcp-gateway
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcp_gway-0.4.3-py3-none-any.whl -
Subject digest:
d38541b247d44ccf05e4c65df56aa58b99ad4cbbdb61fa2da55e181d99925471 - Sigstore transparency entry: 2580928123
- Sigstore integration time:
-
Permalink:
deuriib/mcp-gateway@4a9afe300efd0c3d774ada45d6798c8273cdc809 -
Branch / Tag:
refs/heads/master - Owner: https://github.com/deuriib
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4a9afe300efd0c3d774ada45d6798c8273cdc809 -
Trigger Event:
workflow_run
-
Statement type: