mcp-proxy-hub
An MCP proxy hub that aggregates and serves multiple MCP resource servers through a single interface
Documentation
MCP Proxy Hub
An MCP proxy server that aggregates and serves multiple MCP resource servers through a single interface. This server acts as a central hub that can:
- Connect to and manage multiple MCP resource servers
- Expose their combined capabilities through a unified interface
- Handle routing of requests to appropriate backend servers
- Aggregate responses from multiple sources
Features
Resource Management
- Discover and connect to multiple MCP resource servers
- Aggregate resources from all connected servers
- Maintain consistent URI schemes across servers
- Handle resource routing and resolution
Tool Aggregation
- Expose tools from all connected servers with server name prefixes
- Apply tool filtering based on configuration (exposedTools/hiddenTools)
- Support tool name remapping via configuration
- Route tool calls to appropriate backend servers
Custom Tool Support
- Define compound tools that combine functionality from multiple servers
- Execute subtools using server and tool name specifications
- Provide detailed documentation through tool descriptions
- Specify execution with a standardized format:
{
"server": "server_name",
"tool": "tool_name",
"args": {
// Tool-specific arguments
}
}Environment Variable Support
- Automatically expand environment variables in tool arguments
- Automatically replace sensitive values with variable references in responses
- Configure which variables should be expanded/unexpanded via configuration
- Support for both global (all servers) and server-specific environment variables
- Server-specific variables take precedence over global variables with the same name
- Each variable can be independently configured for expansion and unexpansion
- Environment variables are only expanded when using the `${VARIABLE_NAME}` syntax (e.g., `${API_KEY}`). The `$VARIABLE_NAME` syntax is not supported.
- Secure handling of sensitive information like API keys
Prompt Handling
- Aggregate prompts from all connected servers
- Route prompt requests to appropriate backends
- Handle multi-server prompt responses
Configuration
The server requires a JSON configuration file that specifies the MCP servers to connect to. Copy the example config(config.example.json) and modify it for your needs:
cp config.example.json config.jsonConfiguration Options
MCP Server Configuration
- Stdio-type Server:
- SSE-type Server:
- Streamable HTTP-type Server:
- `type`: "streamable-http" (required)
- `url`: URL of the Streamable HTTP server (required)
- `headers`: Object of HTTP headers to send with requests (optional)
- `exposedTools`: Array of tools to expose (optional)
- `hiddenTools`: Array of tools to hide (optional)
- `envVars`: Environment variable configuration for tool arguments and responses (optional)
- `timeout`: Request timeout in seconds for downstream tool calls (optional, overrides the top-level `timeout`; `0` disables the timeout)
- `enable`: Whether to enable the server (optional, default: true)
Tool Filtering Configuration
- exposedTools:
- hiddenTools:
- Hides specified tools
- Array of tool name strings to hide
Environment Variables Configuration
- Server-specific envVars:
"envVars": [
{ "name": "API_KEY", "value": "my-api-key", "expand": true, "unexpand": true },
{ "name": "USER_ID", "value": "user123", "expand": true, "unexpand": false }
]- Global envVars:
"envVars": [
{ "name": "GLOBAL_API_KEY", "value": "global-api-key", "expand": true, "unexpand": true },
{ "name": "GLOBAL_ENV", "value": "production", "expand": true, "unexpand": false }
]Timeout Configuration
Controls how long the proxy hub waits for a downstream server to respond to a tool call (`tools/call`) or tool listing (`tools/list`) before aborting.
- Top-level `timeout`: Global default in seconds applied to all servers.
- Per-server `timeout` (inside each `mcpServers[name]`): Overrides the global value for that server.
- `0`: Disables the timeout for that scope (no upper bound).
- Unset: Falls back to the MCP SDK default (60 seconds).
Values whose millisecond conversion (`timeout * 1000`) exceeds `2147483647` ms (the maximum safe `setTimeout` delay) are capped to that ceiling. Negative, `NaN`, or non-number values are ignored and fall through to the next level with a warning.
Example:
{
"timeout": 30,
"mcpServers": {
"slow-server": { "command": "...", "timeout": 0 },
"fast-server": { "command": "...", "timeout": 5 }
}
}Server Transport Configuration
Configure how the proxy hub itself is served via the `serverTransport` section:
"serverTransport": {
"type": "streamable-http",
"port": 3006,
"host": "0.0.0.0",
"path": "/mcp",
"auth": {
"type": "bearer",
"token": "your-secret-token"
}
}- `type`: Transport type ("stdio", "sse", or "streamable-http")
- `port`: Port number for HTTP-based transports (default: 3006)
- `host`: Host to bind to (default: "0.0.0.0")
- `path`: URL path for Streamable HTTP endpoint (default: "/mcp")
- `auth`: Authentication configuration (optional)
- `type`: "bearer" (currently the only supported type)
- `token`: The bearer token required for authentication
Authentication can also be configured via the `MCP_PROXY_AUTH_TOKEN` environment variable.
Custom Tool Configuration
- tools:
- Object with custom tool names as keys
- Each tool has `description` and `subtools`
- `subtools` is keyed by server name and contains each server's tool list
Environment Variables
- `MCP_PROXY_CONFIG_PATH`: Path to the configuration file
- `MCP_PROXY_LOG_DIRECTORY_PATH`: Path to the log directory
- `MCP_PROXY_LOG_LEVEL`: Log level ("debug" or "info")
- `MCP_PROXY_AUTH_TOKEN`: Bearer token for authenticating incoming requests to the proxy server
- `MCP_PROXY_PATH`: URL path for Streamable HTTP endpoint (default: "/mcp")
- `KEEP_SERVER_OPEN`: Whether to keep the server open after client disconnection in SSE mode (set to "1" to enable)
- `PORT`: Port for the SSE/Streamable HTTP server (default: 3006)
- `HOST`: Host to bind for the HTTP server (default: "0.0.0.0")
Development
Install dependencies:
npm installBuild the server:
npm run buildFor development with auto-rebuild:
npm run watchFor development with continuous run:
# Stdio
npm run dev
# SSE
npm run dev:sse
# Streamable HTTP
npm run dev:httpCLI
The CLI provides two modes of operation for interacting with the MCP Proxy Hub.
Direct Execution Mode
You can execute commands directly from your terminal. This is useful for scripting and automation.
- List available tools:
mcp-proxy-hub-cli list- Call a tool:
mcp-proxy-hub-cli call [args...]Example:
mcp-proxy-hub-cli call my_tool param1=value1 -o outputInteractive Mode
If you run the CLI without any arguments, it will start in interactive mode. This provides a shell-like interface for running commands.
mcp-proxy-hub-cliOnce in interactive mode, you can use the following commands:
- `list`: List available tools.
- `call [args...]`: Call a tool with arguments.
- `exit`: Exit the interactive session.
Installation
To use with Claude Desktop, add the server config:
On MacOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
On Windows: `%APPDATA%/Claude/claude_desktop_config.json`
{
"mcpServers": {
"mcp-proxy-hub": {
"command": "/path/to/mcp-proxy-hub/build/index.js",
"env": {
"MCP_PROXY_CONFIG_PATH": "/absolute/path/to/your/config.json",
"KEEP_SERVER_OPEN": "1"
}
}
}
}`KEEP_SERVER_OPEN` will keep the SSE running even if a client disconnects. This is useful when multiple clients connect to the MCP proxy.
Debugging
Since MCP servers communicate over stdio, debugging can be challenging. We recommend using the MCP Inspector, which is available as a package script:
npm run inspectorThe Inspector will provide a URL to access debugging tools in your browser.
Frequently asked questions
What is mcp-proxy-hub?
mcp-proxy-hub is An MCP proxy hub that aggregates and serves multiple MCP resource servers through a single interface
How do I install mcp-proxy-hub?
Open the GitHub repository and follow its README. Most MCP servers are added to your client's MCP config, then called by your agent.
Is mcp-proxy-hub open source?
Yes — it is hosted on GitHub at https://github.com/naotaka3/mcp-proxy-hub and has 2 stars.
Related MCP tools
Playwright MCP server TypeScript-based implementation. Trusted by 22000+ developers. Trusted by 22000+ developers. Trusted by 22000+ developers.
Official Notion MCP Server TypeScript-based implementation. Trusted by 3400+ developers. Trusted by 3400+ developers. Trusted by 3400+ developers.
Directory for Awesome MCP Servers TypeScript-based implementation. Trusted by 1900+ developers. Trusted by 1900+ developers.
🧩 MCP Gateway - A lightweight gateway service that instantly transforms existing MCP Servers and APIs into MCP servers with zero code changes.
MCP Aggregator, Orchestrator, Middleware, Gateway in one docker TypeScript-based implementation. Trusted by 1400+ developers.
MCP Server for kubernetes management commands TypeScript-based implementation. Trusted by 1100+ developers. Trusted by 1100+ developers.
Run your own MCP server? See who uses it and what to fix.
Measure it with TrackMCP