MCP Hub
Back to servers

mcp-0ne

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.

Updated
Feb 25, 2026

mcp-0ne

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

Quickstart

# Install
pip install -e .

# Start with empty backends
python -m mcp_0ne.server

# Verify
curl http://127.0.0.1:8150/health

Connect Claude Code

Add to your .mcp.json:

{
  "mcpServers": {
    "0ne": {
      "type": "http",
      "url": "http://127.0.0.1:8150/mcp"
    }
  }
}

Add Backends

Via MCP tool (from Claude Code)

Call 0ne__add:

{
  "id": "myapp",
  "type": "http",
  "prefix": "myapp",
  "url": "http://127.0.0.1:8100/mcp",
  "description": "My App MCP Server"
}

Via REST API

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"}'

Via config file

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"
  }
}

Backend Types

HTTP

Connects to an existing MCP server over HTTP JSON-RPC 2.0.

FieldRequiredDescription
typeyes"http"
prefixyesTool namespace prefix
urlyesMCP endpoint URL
health_urlnoHealth check URL
timeoutnoRequest timeout (default: 30s)
descriptionnoHuman-readable description
enablednoAuto-connect (default: true)

Stdio

Spawns a subprocess and communicates via MCP SDK stdio transport.

FieldRequiredDescription
typeyes"stdio"
prefixyesTool namespace prefix
commandyesExecutable path
argsnoCommand arguments
envnoEnvironment variables
timeoutnoOperation timeout (default: 60s)
descriptionnoHuman-readable description
enablednoAuto-connect (default: true)

Admin Tools

Available as MCP tools (prefix 0ne__):

ToolDescription
0ne__discoverList all backends with state and tool counts
0ne__healthHealth check all backends with latency
0ne__addRegister a new backend at runtime
0ne__removeDisconnect and unregister a backend
0ne__enableEnable a disabled backend
0ne__disableDisable a backend without removing it
0ne__refreshForce reconnect and re-enumerate tools

REST API

MethodPathDescription
GET/api/backendsList 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}/refreshReconnect and refresh

Environment Variables

VariableDefaultDescription
MCP_0NE_HOST127.0.0.1Server bind address
MCP_0NE_PORT8150Server port
MCP_0NE_CONFIG./backends.jsonConfig file path
MCP_0NE_LOG_LEVELinfoLog level

Tool Namespacing

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.

Reviews

No reviews yet

Sign in to write a review