loading…
Search for a command to run...
loading…
A standalone MCP gateway that multiplexes multiple backend MCP servers behind a single endpoint, supporting both HTTP and stdio transports. It allows users to d
A standalone MCP gateway that multiplexes multiple backend MCP servers behind a single endpoint, supporting both HTTP and stdio transports. It allows users to dynamically manage backends at runtime and organizes tools using a configurable namespace prefix.
One MCP server to rule them all.
A standalone MCP Gateway that multiplexes N backend MCP servers behind a single endpoint. Connect your MCP client once, manage backends dynamically at runtime.
MCP Client ──(HTTP)──> mcp-0ne (:8150)
│
┌───────────────┼───────────────┐
│ │ │
(HTTP client) (stdio spawn) (stdio spawn)
│ │ │
HTTP MCP stdio MCP stdio MCP
server server server
# Install
pip install -e .
# Start with empty backends
python -m mcp_0ne.server
# Verify
curl http://127.0.0.1:8150/health
Add to your .mcp.json:
{
"mcpServers": {
"0ne": {
"type": "http",
"url": "http://127.0.0.1:8150/mcp"
}
}
}
Call 0ne__add:
{
"id": "myapp",
"type": "http",
"prefix": "myapp",
"url": "http://127.0.0.1:8100/mcp",
"description": "My App MCP Server"
}
curl -X POST http://127.0.0.1:8150/api/backends/myapp \
-H "Content-Type: application/json" \
-d '{"type":"http","prefix":"myapp","url":"http://127.0.0.1:8100/mcp"}'
Edit backends.json:
{
"backends": {
"myapp": {
"type": "http",
"url": "http://127.0.0.1:8100/mcp",
"prefix": "myapp",
"enabled": true,
"description": "My App MCP Server"
}
},
"settings": {
"separator": "__",
"lazy_connect": true,
"tool_cache_ttl": 60,
"log_level": "info"
}
}
Connects to an existing MCP server over HTTP JSON-RPC 2.0.
| Field | Required | Description |
|---|---|---|
type |
yes | "http" |
prefix |
yes | Tool namespace prefix |
url |
yes | MCP endpoint URL |
health_url |
no | Health check URL |
timeout |
no | Request timeout (default: 30s) |
description |
no | Human-readable description |
enabled |
no | Auto-connect (default: true) |
Spawns a subprocess and communicates via MCP SDK stdio transport.
| Field | Required | Description |
|---|---|---|
type |
yes | "stdio" |
prefix |
yes | Tool namespace prefix |
command |
yes | Executable path |
args |
no | Command arguments |
env |
no | Environment variables |
timeout |
no | Operation timeout (default: 60s) |
description |
no | Human-readable description |
enabled |
no | Auto-connect (default: true) |
Available as MCP tools (prefix 0ne__):
| Tool | Description |
|---|---|
0ne__discover |
List all backends with state and tool counts |
0ne__health |
Health check all backends with latency |
0ne__add |
Register a new backend at runtime |
0ne__remove |
Disconnect and unregister a backend |
0ne__enable |
Enable a disabled backend |
0ne__disable |
Disable a backend without removing it |
0ne__refresh |
Force reconnect and re-enumerate tools |
| Method | Path | Description |
|---|---|---|
GET |
/api/backends |
List all backends |
POST |
/api/backends/{id} |
Add a new backend |
DELETE |
/api/backends/{id} |
Remove a backend |
PATCH |
/api/backends/{id} |
Update backend config |
POST |
/api/backends/{id}/refresh |
Reconnect and refresh |
| Variable | Default | Description |
|---|---|---|
MCP_0NE_HOST |
127.0.0.1 |
Server bind address |
MCP_0NE_PORT |
8150 |
Server port |
MCP_0NE_CONFIG |
./backends.json |
Config file path |
MCP_0NE_LOG_LEVEL |
info |
Log level |
Tools from backends are exposed with a namespace prefix:
{prefix}__{original_tool_name}
For example, a backend with prefix myapp exposing a tool search becomes myapp__search. The separator __ is configurable in settings.
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"mcp-0ne": {
"command": "npx",
"args": []
}
}
}