LABSCO SUMMARY
It fills a gap that will eventually close.
The premise is temporary by design — most MCP servers still only run on a desktop, and the Remote MCP protocol is the fix that not every server has adopted yet. Until they do, this is how a stdio-only server becomes something you can use from a phone. Two debug endpoints do most of the troubleshooting work: /listmcp tells you whether a backend started, /listtools tells you whether its tools were discovered, and between them almost every failure is one or the other. The wildcard DNS record is the prerequisite people forget.
What it is
A Go proxy in a Docker container that speaks the Remote MCP protocol on one side and standard MCP JSON-RPC on the other. It launches your local servers as child processes, translates between HTTP/SSE and their stdio interfaces, and hosts several of them at once under separate URLs — so servers that were never built to be remote become usable from Claude's web UI and mobile app.
What you get
- Several MCP servers hosted at once, each under its own path, from a
config.jsonin the same shape asclaude_desktop_config.json - Automatic subdomain routing: every server in the config becomes
https://<YOUR_SERVER_NAME>.mcp.<YOUR_DOMAIN>/sse, with the Traefik rules generated for you - Backend processes launched, monitored and cleaned up by the proxy, with a clean shutdown that does not leave orphans
- A
/healthendpoint for status, plus/listmcpto see which servers are up and/listtools/{name}to confirm a given server's tools are being discovered - Scaling by editing JSON — add a server, redeploy, and the new URL is live with SSL and routing already configured
Requirements
Docker, a domain you control, and wildcard DNS: an A record for *.mcp.your-domain.com pointing at your server, which is what makes per-server subdomains work. Set DOMAIN in a .env file, put your servers in config.json, then make install-deps and make up, or run the container directly with the config mounted and port 8080 published. Optional environment settings cover log levels and retention for the system and MCP logs. On the Claude side, adding remote MCP integrations requires a Pro, Max, Teams or Enterprise plan.
Setup effort
Run a container — build the image from the repository, then point your client at it
USE CASES
01
Using a desktop-only server from your phone
Run it behind the proxy and add the generated subdomain URL as an integration in Claude.
02
Hosting several servers behind one deployment
List them all in the config file and let each get its own routed subdomain with SSL.
03
Adding a server without touching infrastructure
Edit the JSON, restart, and use the new URL — routing, certificates and load balancing are generated from the config.
04
Working out why a server is not appearing
Check whether the backend started and whether its tools were discovered, rather than guessing from the client side.
BEFORE YOU INSTALL
What to know first
Requires
- Docker and Docker Compose
- A domain name with DNS control, for a wildcard *.mcp record
- A Traefik reverse proxy (or willingness to set one up)
INSTALLATION
Connect your client
Server setup
TERMINAL
git clone https://github.com/pezzos/remote-mcp-proxy.git
cd remote-mcp-proxyPut the MCP servers you want to reach in config.json, in the same format as claude_desktop_config.json.
TERMINAL
echo "DOMAIN=<YOUR_DOMAIN>" > .envCreate a wildcard DNS A record *.mcp.your-domain.com pointing at your server's IP address.
Create the Docker network proxy, and run a Traefik reverse proxy on it (the README's Complete Setup Guide includes a traefik/docker-compose.yml):
TERMINAL
docker network create proxyThen deploy:
TERMINAL
make install-deps && make upMCP Clients
Claude.ai
In Claude.ai, open Settings → Integrations, click Add More → Custom Integration, and add one URL per server:
CLAUDE.AI · URL
https://<YOUR_SERVER_NAME>.mcp.<YOUR_DOMAIN>/sse<YOUR_SERVER_NAME> is the server's key in config.json and <YOUR_DOMAIN> is the domain in your .env file.