Labsco
MCP SERVER

MCP Proxy

by stephenlacy

A Rust proxy that goes both ways: turn a remote SSE or Streamable HTTP MCP server into a local stdio one, or expose a local stdio server over HTTP — with the OAuth flow handled for you.

MCP Plumbing: Proxies, Registries & Inspectors
Summary
It solves the transport mismatch in both directions, which is rarer than it sounds.

Most bridges only go one way — remote server to local stdio client. Being able to run it the other way, publishing a local stdio server on a port, is what makes it useful for sharing one server with a team or reaching it from a container. The OAuth handling is the other quiet win: token refresh happens in the proxy rather than in each client, and `reset` is the documented escape hatch when a cached login goes bad.

What it is

A bidirectional MCP proxy. In remote-client mode it connects to a remote MCP server and presents it locally over stdio, so a client that only speaks stdio can use a hosted server. In local-server mode it launches your stdio server as a subprocess and publishes it as an SSE or Streamable HTTP endpoint. Transport is detected from the URL and can be overridden.

What you get
  • A remote server presented to a stdio-only client, with the transport chosen automatically — URLs containing `/sse` use SSE, everything else uses Streamable HTTP, and `--transport` forces either
  • A local stdio server published over the network with `--port`, in SSE or, with `--transport streamable-http`, Streamable HTTP
  • The full OAuth flow with automatic token refresh, and `mcp-proxy reset` to clear stored auth when a login goes wrong
  • Environment variables injected into the proxied server with `-e KEY VALUE`, or the whole environment passed through with `--pass-environment`
  • Custom headers added on the client side with `-H`, and a bind host chosen with `--host`, which defaults to `127.0.0.1`
  • Log verbosity controlled through `RUST_LOG`, since the upstream crate is noisy by default
  • A Rust library surface — `run_sse_client` and `run_streamable_http_client` with their config structs — for embedding the same behaviour
Requirements

No account and no key for the proxy itself; whatever the server behind it requires still applies. Install with `cargo install rmcp-proxy`, or `cargo install --git https://github.com/stephenlacy/mcp-proxy`, or build with `cargo build --release`. In client mode the command is `mcp-proxy <url>`; in server mode it is `mcp-proxy --port <port> -- <your command and args>`. Auth data is cached under `~/.mcp-auth`, which `mcp-proxy reset` clears.

Setup effort

One command — cargo install rmcp-proxy