MCP Proxy
Un proxy MCP bidireccional que conecta stdio y Server-Sent Events (SSE) con soporte OAuth.
GitHub
33
Prueba este MCPPatrocinadoDocumentación
mcp-proxy
Un proxy MCP bidireccional en Rust que soporta transportes SSE y Streamable HTTP con OAuth.
Características
- Múltiples transportes: SSE y Streamable HTTP
- Autenticación OAuth: Flujo OAuth completo con renovación automática de tokens
- Proxy bidireccional: Conecta servidores remotos a clientes locales o expone servidores locales de forma remota
- Rápido y ligero: Construido en Rust para rendimiento
Uso
Instalación
# from crates.io
cargo install rmcp-proxy
# from github
cargo install --git https://github.com/stephenlacy/mcp-proxy
Compilación
cargo build --release
Ejecución
El proxy puede operar en dos modos:
1. Modo Cliente Remoto
Conéctate a un servidor MCP remoto y expónlo como un servidor stdio local. Soporta tanto transportes SSE como Streamable HTTP con detección automática.
Detección de transporte:
- URLs que contienen
/sse→ Usa transporte SSE - Todas las demás URLs → Usa transporte Streamable HTTP
- Anula con la bandera
--transport
Ejemplos básicos
# 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
Uso con Claude o 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. Modo Servidor Local
Conéctate a un servidor MCP local mediante stdio y expónlo como un servidor remoto. Soporta tanto endpoints SSE como Streamable HTTP.
# 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
Gestión de autenticación
Limpiar caché de autenticación
Si encuentras problemas de autenticación, limpia la caché de autenticación:
# Clear all auth data
mcp-proxy reset
# Or manually delete the directory
rm -rf ~/.mcp-auth
Opciones de línea de comandos
# 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
Registro (logging)
Desafortunadamente, el crate rmcp upstream genera registros ruidosos
Controla la verbosidad de los registros con la variable de entorno RUST_LOG:
# 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
Uso como biblioteca
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?;
Licencia
MIT