MCP Proxy Server
by adamwattis
# 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:
```bash
cp config.example.json config.json
```
Example config structure:
```json
{
"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:
```bash
MCP_CONFIG_PATH=./config.json mcp-proxy-server
```
## Development
Install dependencies:
```bash
npm install
```
Build the server:
```bash
npm run build
```
For development with auto-rebuild:
```bash
npm run watch
```
For development with continuous run:
```bash
# 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`
```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](https://github.com/modelcontextprotocol/inspector), which is available as a package script:
```bash
npm run inspector
```
The Inspector will provide a URL to access debugging tools in your browser.