Operations & Gateways
How to Proxy Multiple MCP Servers (Without Wiring It Yourself)
To proxy multiple MCP servers, you put a single intermediary endpoint in front of them and point every AI client at that endpoint instead of at each server. You can wire this yourself with an open-source MCP proxy — several good ones exist — or use a managed gateway that handles aggregation, credentials, and tool discovery for you. This guide walks through both paths, honestly.
The problem being solved is config sprawl. Each MCP-capable client — Cursor, Claude Desktop, VS Code, a custom agent — keeps its own server list, its own copies of API keys, and its own quirks per transport. Five clients times ten servers is fifty configurations to keep in sync. A proxy collapses that to one endpoint per client. (If the terms proxy, router, and gateway blur together for you, this comparison draws the lines.)
Step 1: Inventory What You Are Actually Proxying
Before picking a tool, list every MCP server you use and note three things per server:
- Transport — stdio (a local process the client spawns), or remote HTTP (SSE or Streamable HTTP). Most proxy headaches are transport mismatches.
- Credentials — environment variables, an API key in config, or an OAuth flow. This decides how much secret-handling your proxy must do.
- Tool count — a rough number per server. It matters later: an aggregating proxy presents the sum of all tool lists to every client, which has real token costs.
If your inventory is two or three trusted stdio servers, a small OSS proxy is a fine destination, not just a starting point.
Step 2: Pick Your Proxy — the Open-Source Options
Three projects come up in almost every search for "mcp proxy server." They are different tools for different jobs.
sparfenyuk/mcp-proxy — the transport bridge
A Python proxy whose core trick is switching transports in both directions: expose a local stdio server over SSE/Streamable HTTP so remote or HTTP-only clients can reach it, or connect a stdio-only client to a remote HTTP server. Configuration is a command line or small config; it is the standard answer when the problem is "my client and my server do not speak the same transport." It is deliberately thin — bridging, not governance.
TBXark/mcp-proxy — the aggregator
A Go proxy aimed squarely at the multiple-servers problem: one JSON config declares all your backend MCP servers (stdio or remote), and the proxy serves them from a single HTTP endpoint, namespaced per server. Single binary or Docker container, easy to park on a home server or VPC host. This is the closest OSS shape to "all my servers behind one URL."
open-webui's mcpo — the OpenAPI converter
mcpo solves a different problem: it converts MCP servers into standard OpenAPI/REST endpoints. Point it at one or more MCP servers and each tool becomes an HTTP route with generated OpenAPI docs. That is exactly right when the consumer is not an MCP client — Open WebUI, a backend service, anything that speaks REST. It is a protocol exit ramp, not an MCP-to-MCP proxy: your MCP-native clients are no longer talking MCP on the far side.
A fair summary: sparfenyuk/mcp-proxy when transports mismatch, TBXark/mcp-proxy when you want one endpoint over many servers, mcpo when the consumer wants REST instead of MCP.
Step 3: Wire It — and Notice What You Are Now Operating
With any of the above, the mechanical setup is similar:
- Install the proxy (pip/uv, Go binary, or Docker).
- Write the config declaring each backend server: command and args for stdio servers, URL and headers for remote ones.
- Put every secret the backends need — API keys, tokens — into that config or its environment.
- Run the proxy as a long-lived process (launchd/systemd/container) so it survives reboots.
- Point each client at the proxy endpoint and remove the old per-server entries.
Step 3 deserves a hard look. You have not eliminated credential sprawl — you have relocated it into one plaintext config file plus the environment of one process, on whatever machine runs the proxy. That is better than five copies, and it is still a file with your production keys in it. You now also own process supervision, upgrades as the MCP spec moves (Streamable HTTP superseded SSE; proxies had to follow), and debugging the stack when a client update changes behavior.
And one thing got worse: every client now receives the merged tool list of all backend servers on every session. None of the three proxies above does per-request tool selection — that is router/gateway territory.
Step 4: Decide Whether Plumbing Is Enough
The OSS path is genuinely good when:
- the servers are trusted and mostly read-only,
- one person (you) is both operator and user,
- secrets in a config file on your own machine is an acceptable posture,
- the combined tool count stays small enough that context bloat is tolerable.
It stops being good when teammates arrive, when a server can write to production or spend money, or when "who called what" becomes a question someone actually asks. Those are governance problems, and bolting auth, audit, and policy onto a transparent proxy is a real engineering project — the buyer's guide covers what that layer must do.
The Managed Alternative: One Endpoint, Zero Wiring
MCP Beast packages this whole pipeline as a free Mac app. The difference from the DIY stack, point by point:
- One endpoint, no config sprawl. Cursor, Claude, ChatGPT, Codex, and VS Code all connect to MCP Beast; servers are added once, in the app, not per client. No JSON files to keep in sync.
- Keychain-held credentials. Secrets live in the macOS Keychain — not in a proxy config file, not pasted into each client. Clients authenticate to MCP Beast; they never see downstream keys. OAuth-based servers get a real OAuth flow instead of hand-managed tokens.
- Discovery instead of dumping. Rather than injecting every backend tool into every session, MCP Beast exposes a compact dispatcher; agents search for and load only the tools the current request needs. The aggregation problem from Step 3 — merged tool lists eating your context window — does not occur.
- A supervised process, not your supervised process. Transport bridging, spec updates, and reconnection logic are the product's job.
For teams, the same endpoint adds policy, approvals, and per-call audit — the gateway layer on top of the proxy layer.
Frequently Asked Questions
Can I run multiple MCP servers behind one endpoint with only open-source tools?
Yes. TBXark/mcp-proxy aggregates multiple stdio or remote servers behind a single HTTP endpoint from one config file; sparfenyuk/mcp-proxy handles cases where client and server transports differ. The tradeoffs are operational: you manage the process, the secrets in its config, and every client receives the combined tool list of all backends.
What is the difference between an MCP proxy and mcpo?
An MCP proxy keeps the protocol intact — MCP in, MCP out — so MCP-native clients can use it directly. mcpo converts MCP tools into standard OpenAPI/REST endpoints, which is ideal for consumers that do not speak MCP (such as Open WebUI or ordinary backend services) but means the far side is no longer an MCP interface.
Does proxying multiple MCP servers increase token usage?
With a plain aggregating proxy, usually yes: the client loads the merged tool definitions of every backend server into the model's context each session. Avoiding that requires selective tool exposure — filtering, or on-demand discovery where the model queries for relevant tools per request — which is a router/gateway capability rather than a proxy one.
Where should the proxy's credentials live?
At minimum, in the environment of a single supervised process on a machine you control, never committed to a repo. Better is OS-level secret storage: on macOS that means the Keychain, which is the approach MCP Beast takes — clients authenticate to the gateway and downstream keys are never readable from client configs at all.
Skip the Wiring
If your inventory in Step 1 came out longer than you expected, MCP Beast gives you the aggregated endpoint without the config files: connect your servers once, keep keys in the Keychain, and let agents discover tools on demand. Download the free Mac app — or see Enterprise for the team control plane.
Related: