mcp-proxy
stephenlacy/mcp-proxy · 33 stars · Rust · MIT
MCP server Fast rust MCP proxy between stdio and SSE
Install
The repo has no one-line install. Follow its README.
Files
mcp-proxy
A Rust bidirectional MCP proxy supporting SSE and Streamable HTTP transports with OAuth.
Features
- Multiple transports: SSE and Streamable HTTP
- OAuth authentication: Full OAuth flow with automatic token refresh
- Bidirectional proxy: Connect remote servers to local clients or expose local servers remotely
- Fast and lightweight: Built in rust for performance
Usage
Installing
# from crates.io cargo install rmcp-proxy # from github cargo install --git https://github.com/stephenlacy/mcp-proxy
Building
cargo build --release
Running
The proxy can operate in two modes:
1. Remote Client Mode
Connect to a remote MCP server and expose it as a local stdio server. Supports both SSE and Streamable HTTP transports with automatic detection.
Transport Detection:
- URLs containing
/sse→ Uses SSE transport - All other URLs → Uses Streamable HTTP transport
- Override with
--transportflag
Basic Examples
# Streamable HTTP mcp-proxy http://localhost:9090/mcp/instances_abc123 # SSE transport mcp-proxy http://localhost:8080/sse mcp-proxy --transport sse http://localhost:8080/events # Specific mcp-proxy --transport streamable-http http://localhost:9090/api
Using with Claude or Cursor
{
"mcpServers": {
"my-remote-server": {
"command": "mcp-proxy",
"args": ["http://example.com/mcp/instances_abc123"]
},
"sse-server": {
"command": "mcp-proxy",
"args": ["--transport", "sse", "http://example.com/sse"]
}
}
}
2. Local Server Mode
Connect to a local MCP server via stdio and expose it as a remote server. Supports both SSE and Streamable HTTP endpoints.
# Expose as SSE server mcp-proxy --port 8080 -- your-command --arg1 value1 --arg2 value2 mcp-proxy --port 8080 python mcp_server.py mcp-proxy --port 8080 -- npx -y @modelcontextprotocol/server-everything # Or http+streamable mcp-proxy --port 9090 --transport streamable-http -- python mcp_server.py mcp-proxy --port 8080 -e KEY VALUE -e ANOTHER_KEY ANOTHER_VALUE -- your-command
Authentication Management
Clearing Auth Cache
If you encounter authentication issues, clear the auth cache:
# Clear all auth data mcp-proxy reset # Or manually delete the directory rm -rf ~/.mcp-auth
Command Line Options
# Transport selection --transport <TRANSPORT> # sse, streamable-http, or auto (default: auto) # Server mode options --port <PORT> # Port for local server mode (default: random) --host <HOST> # Host to bind to (default: 127.0.0.1) # Environment variables (server mode) -e, --env <KEY> <VALUE> # Set environment variable --pass-environment # Pass through all environment variables # Headers (client mode) -H, --headers <KEY> <VALUE> # Add custom headers # Reset auth mcp-proxy reset # Clear all stored auth data
Logging
The upstream rmcp crate dumps noisy logs unfortunately
Control log verbosity with the RUST_LOG environment variable:
# Minimal logging RUST_LOG=error mcp-proxy http://example.com/mcp RUST_LOG=debug mcp-proxy http://example.com/mcp RUST_LOG=info mcp-proxy http://example.com/mcp
Library Usage
use rmcp_proxy::{
sse_client::run_sse_client,
streamable_http_client::run_streamable_http_client,
StreamableHttpClientConfig, SseClientConfig
};
// Streamable HTTP client
let config = StreamableHttpClientConfig {
url: "http://example.com/mcp/instances_abc123".to_string(),
headers: HashMap::new(),
};
run_streamable_http_client(config).await?;
// SSE client
let config = SseClientConfig {
url: "http://example.com/sse".to_string(),
headers: HashMap::new(),
};
run_sse_client(config).await?;
License
MIT
Facts
- Kind
- MCP server
- Group
- Uncategorized
- Stars
- 33
- License
- MIT
- Language
- Rust
- Last push
- 2025-06-25
- Forks
- 8
- Topics
- agents, mcp, mcp-client, mcp-server, proxy, auth, oauth
- 1REAio.github.morluto/reaReverse engineer anything from your terminal or agent with one CLI and MCP server.125.3k
- 2com.browser-use/browser-usecom.browser-use/browser-useControl a real Chrome browser to complete any task: fill forms, extract data, book flights.117.7k
- 3World Monitorapp.worldmonitor/mcpLive markets, conflicts, country risk, chokepoints, energy, and China decision signals. 93 tools.88.3k
- 4Scrapling MCP Serverd4vinci/scrapling🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl! Don't be shy, join here: https://discord.gg/EMgGbDceNQ and follow here for daily tips and tricks: https://x.com/Scraplingdev86.9k
- 5Everythingmodelcontextprotocol/serversThis MCP server attempts to exercise all the features of the MCP protocol. It is not intended to be a useful server, but rather a test server for builders of MCP clients. It implements prompts, tools, resources, sampling, and more to showcase MCP capabilities.85.8k
- 6Fetchmodelcontextprotocol/serversA Model Context Protocol server that provides web content fetching capabilities. This server enables LLMs to retrieve and process content from web pages, converting HTML to markdown for easier consumption.85.8k