MCP Multi-Server Gateway
by moaaz01
README.md
# π MCP Multi-Server Gateway
> **Aggregate, route, and orchestrate multiple MCP backend servers** behind a single MCP endpoint. Connect one gateway to Claude Desktop/Cursor and access all your MCP servers β weather, database, file system, and more.
[](LICENSE)
[](https://www.python.org/downloads/)
---
## β¨ Why a Gateway?
Instead of configuring each MCP server individually in your client:
```json
// β Without Gateway: 3 entries in claude_desktop_config.json
{
"weather": { "command": "...", "args": ["weather_server.py"] },
"sqlite": { "command": "...", "args": ["sqlite_server.py", "--db-path", "..."] },
"filesystem": { "command": "...", "args": ["filesystem_server.py", "--sandbox", "..."] }
}
// β
With Gateway: 1 entry β register/unregister servers at runtime
{
"gateway": { "command": "python", "args": ["gateway.py"] }
}
```
---
## β¨ Features
- **π§ 5 Tools**: `register_server`, `remove_server`, `list_servers`, `call_backend`, `route_pipeline`
- **β±οΈ Async Routing**: Concurrent tool execution across backends via `asyncio`
- **π Pipeline Support**: Pre-configured multi-step workflows (weather-analysis, database-report)
- **π Auto-Registration**: Load backend config from JSON file on startup
- **π Runtime Dynamic**: Register/unregister servers without restarting
- **β²οΈ Timeout Handling**: 10-second per-backend timeout prevents hangs
- **π₯οΈ Dual Transport**: stdio and Streamable HTTP
---
## π Quick Start
```bash
# 1. Setup
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
# 2. Start the gateway
python gateway.py
# 3. Register backend servers (from MCP client)
register_server(name="weather", command="python", args="weather_server.py", description="Weather alerts")
register_server(name="sqlite", command="python", args="sqlite_server.py --db-path /tmp/sample.db", description="Database queries")
```
### With auto-registration:
```bash
python gateway.py --auto-register gateway-config.json
```
---
## π οΈ Tools Reference
### `register_server(name, command, args, description) -> str`
Register a new backend MCP server at runtime.
### `remove_server(name) -> str`
Remove a registered server.
### `list_servers() -> str`
List all registered backends with status and tool counts.
### `call_backend(server, tool, params) -> str`
Execute a tool on a specific backend. `params` is a JSON string.
### `route_pipeline(scenario) -> str`
Execute a pre-configured multi-step pipeline:
- `"weather-analysis"` β alerts + forecast
- `"database-report"` β schema inspection + query
- `"custom"` β compose your own workflow
---
## π Connecting to Clients
### Claude Desktop
```json
{
"mcpServers": {
"gateway": {
"command": "python",
"args": ["/ABSOLUTE/PATH/mcp-multi-server-gateway/gateway.py"]
}
}
}
```
### Streamable HTTP Mode
```bash
python gateway.py --transport streamable-http --port 8003
```
---
## π Project Structure
```
mcp-multi-server-gateway/
βββ gateway.py # Main gateway server (FastMCP + asyncio)
βββ gateway-config.json # Example auto-registration config
βββ requirements.txt
βββ setup.sh
βββ README.md
βββ .gitignore
```
---
## ποΈ Architecture
```
βββββββββββββββββββββββββββββββββββββββ
β MCP Client (Claude, etc) β
ββββββββββββββββ¬βββββββββββββββββββββββ
β single MCP connection
ββββββββββββββββΌβββββββββββββββββββββββ
β MCP Multi-Server Gateway β
β (gateway.py on :8003) β
β β
β register / call_backend / pipeline β
ββββ¬βββββββββββ¬βββββββββββ¬ββββββββββββ
β β β
ββββββββΌβββ βββββββΌβββββ ββββΌβββββββββ
β Weather β β SQLite β β FileSystemβ
β Server β β Server β β Server β
βββββββββββ ββββββββββββ βββββββββββββ
```
---
## π‘ Use Cases
| Scenario | Tools Involved | Example |
|----------|---------------|---------|
| **DevOps Debugging** | sqlite.query + filesystem.read_file | "Check DB schema, then read config file" |
| **Data Analysis** | sqlite.list_tables + sqlite.query | "What tables exist? Give me top 10 customers" |
| **Multi-weather check** | weather.get_alerts Γ 2 | "Alerts for CA and TX simultaneously" |
| **Automated report** | All servers in sequence | "Get weather data β query DB β write report" |
---
## π License
MIT
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues