mcp-proxy-server

MCP.Pizza Chef: adamwattis

Instead of listing a dozen connections in your assistant's settings, you point it at this one and it quietly fans out to the rest, passing their tools, files and prompts through under one name, each labelled with where it came from. It is a build-it-yourself piece with no installer: you compile it and hand-write the list of connections to combine. Work on it stopped in February 2025 and it still uses a December 2024 build of the protocol library. Two documented behaviours do not actually work.

Unmaintained · no code changes since February 2025; no replacement named
Coding
Other

Use This MCP server To

Collapse a dozen tool connections into one settings entry Share one combined tool set across several apps See which connected service each tool actually came from Swap a tool in or out by editing one list

README

MCP Proxy Server

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
  • Route tool calls to appropriate backend servers
  • Maintain tool state and handle responses

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 and modify it for your needs:

cp config.example.json config.json

Example config structure:

{
  "servers": [
    {
      "name": "Server 1",
      "transport": {
        "command": "/path/to/server1/build/index.js"
      }
    },
    {
      "name": "Server 2",
      "transport": {
        "command": "server2-command",
        "args": ["--option1", "value1"],
        "env": ["SECRET_API_KEY"]
      }
    },
    {
      "name": "Example Server 3",
      "transport": {
        "type": "sse",
        "url": "http://localhost:8080/sse"
      }
    }
  ]
}

The config file must be provided when running the server:

MCP_CONFIG_PATH=./config.json mcp-proxy-server

Development

Install dependencies:

npm install

Build the server:

npm run build

For development with auto-rebuild:

npm run watch

For development with continuous run:

# Stdio
npm run dev
# SSE
npm run dev:sse

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": {
      "command": "/path/to/mcp-proxy-server/build/index.js",
      "env": {
        "MCP_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. Useful when multiple clients connects 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 inspector

The Inspector will provide a URL to access debugging tools in your browser.

mcp-proxy-server FAQ

Is this still being worked on?
No. The last code change landed in February 2025, and it still pins a December 2024 build of the underlying protocol library. The author does not name a replacement.
Do I need an API key?
Not for this itself. It only forwards the keys the services behind it need, and it reads those from your own computer's settings rather than storing them.
The instructions mention MCP_CONFIG_PATH. Does it work?
No. The code ignores that setting entirely and always reads a file named config.json from the folder it was started in, so the path you set is silently discarded.
Can I pass more than one secret to a service behind it?
Not reliably. A bug in the code means only the last name in a service's environment list is actually forwarded, so any earlier ones arrive empty.
What happens if the configuration file is missing?
It starts anyway with nothing connected and no visible error, so your assistant will simply see no tools at all.
How hard is setup?
This is a developer job. You clone the project, install its dependencies, build it, write a configuration file by hand, and then point your assistant at the built file.
Can I use this to tidy up a cluttered Claude Desktop setup?
Yes, that is exactly what it is for, though given the stalled maintenance you should expect to fix the odd rough edge yourself.