LabscoMCP early access ↗
stephenlacyMCP SERVER

Rust MCP Proxy with OAuth

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.

by stephenlacy ↗MCP Plumbing: Proxies, Registries & InspectorsCommunity

LABSCO 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