An MCP proxy server that aggregates and serves multiple MCP resource servers through a single HTTP server.
- Proxy Multiple MCP Clients: Connects to multiple MCP resource servers and aggregates their tools and capabilities.
- SSE Support: Provides an SSE (Server-Sent Events) server for real-time updates.
- Flexible Configuration: Supports multiple client types (
stdio
andsse
) with customizable settings.
git clone https://github.com/TBXark/mcp-proxy.git
cd mcp-proxy
go build -o mcp-proxy main.go
./mcp-proxy --config path/to/config.json
go install github.com/TBXark/mcp-proxy@latest
The Docker image supports two MCP calling methods by default:
npx
anduvx
.
docker run -d -p 9090:9090 -v /path/to/config.json:/config/config.json ghcr.io/tbxark/mcp-proxy:latest
or
docker run -d -p 9090:9090 ghcr.io/tbxark/mcp-proxy:latest --config https://example.com/path/to/config.json
The server is configured using a JSON file. Below is an example configuration:
-
Server Configuration:
baseURL
: The public accessible URL of the server. This is used to generate the URLs for the clients.addr
: The address the server listens on.name
: The name of the server.version
: The version of the server.globalAuthTokens
: A list of global authentication tokens for the server. TheAuthorization
header will be checked against this list.
-
Clients Configuration:
type
: The type of the client (stdio
orsse
).config
: The specific configuration for the client type, This part is consistent with the configuration of other MCP clients.panicIfInvalid
: If true, the server will panic if the client is invalid.logEnabled
: If true, the server will log the client's requests.authTokens
: A list of authentication tokens for the client.Authorization
header will be checked against this list.
Usage of mcp-proxy:
-config string
path to config file or a http(s) url (default "config.json")
-help
print help and exit
-version
print version and exit
- The server will start and aggregate the tools and capabilities of the configured MCP clients.
- You can access the server at
http(s)://{baseURL}/{clientName}/sse
. (e.g.,https://my-mcp.example.com/fetch/sse
, based on the example configuration) - If your MCP client does not support custom request headers., you can change the key in
clients
such asfetch
to a random string, and then access it via/random-string/sse
.
This project was inspired by the adamwattis/mcp-proxy-server project
This project is licensed under the MIT License. See the LICENSE file for details.