Skip to main content
Glama
PintaAI

MCP HTTP Proxy

by PintaAI

Proxy HTTP MCP

Expone cualquier servidor MCP basado en stdio (como @browsermcp/mcp) a Internet a través del transporte HTTP/SSE. Perfecto para agentes remotos que necesitan acceder a herramientas MCP a través de una red.

Características

  • 🌐 Transporte SSE MCP estándar - Sigue la especificación de transporte HTTP de MCP

  • 🔐 Autenticación con clave API - Acceso seguro con token Bearer

  • 🚀 Múltiples opciones de exposición - Tailscale, ngrok, Cloudflare Tunnel

  • 🔄 Gestión de sesiones - Soporta múltiples sesiones simultáneas

  • 📦 Funciona con cualquier servidor MCP - Por defecto usa @browsermcp/mcp

Related MCP server: MCP SSE Proxy

Inicio rápido

1. Instalar dependencias

npm install

2. Configurar (Opcional)

cp .env.example .env
# Edit .env to set your API key

Generar una clave API segura:

node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"

3. Construir y ejecutar

npm run build
npm start

O para desarrollo:

npm run dev

Endpoints de la API (Transporte SSE MCP estándar)

Endpoint

Método

Descripción

/sse

GET

Establecer conexión SSE (devuelve la URL del endpoint)

/message?sessionId=xxx

POST

Enviar mensajes JSON-RPC

/health

GET

Comprobación de estado (no requiere autenticación)

/sessions

GET

Listar sesiones activas (requiere autenticación)

Exposición a Internet

Opción 1: Tailscale (Recomendado para acceso privado)

Tailscale proporciona acceso privado y seguro sin exponer a la Internet pública.

# Install Tailscale if not already installed
# Then serve via Tailscale
tailscale serve --bg --http 3000

O usa tu IP de Tailscale directamente:

tailscale status  # Find your Tailscale IP

Tu servidor MCP estará disponible en:

  • https://your-machine.tailnet-name.ts.net (vía serve)

  • http://your-tailscale-ip:3000 (IP directa)

Úsalo desde tu agente:

{
  "mcpServers": {
    "browser-remote": {
      "url": "http://your-tailscale-ip:3000/sse",
      "headers": {
        "Authorization": "Bearer your-api-key"
      }
    }
  }
}

Opción 2: ngrok (URL pública)

# Install ngrok if not already installed
ngrok http 3000

ngrok proporcionará una URL pública como https://abc123.ngrok.io.

Opción 3: Cloudflare Tunnel

# Install cloudflared if not already installed
cloudflared tunnel --url http://localhost:3000

Cómo funciona el transporte SSE

  1. El cliente hace GET a /sse - El servidor crea la sesión, envía el evento endpoint con la URL del mensaje

  2. El cliente hace POST a /message?sessionId=xxx - El servidor reenvía JSON-RPC al proceso MCP

  3. El servidor transmite respuestas - Las respuestas de MCP se envían como eventos message de SSE

Ejemplos de uso

Probar comprobación de estado

curl http://localhost:3000/health

Respuesta:

{
  "status": "healthy",
  "sessions": 0,
  "uptime": 10.5,
  "transport": "sse",
  "endpoints": {
    "sse": "/sse (GET - establishes SSE connection)",
    "message": "/message?sessionId=xxx (POST - send JSON-RPC messages)"
  }
}

Conectar vía SSE (JavaScript)

const eventSource = new EventSource('http://localhost:3000/sse', {
  headers: { 'Authorization': 'Bearer your-api-key' }
});

eventSource.addEventListener('endpoint', (e) => {
  console.log('Message endpoint:', e.data);
  // e.data = "/message?sessionId=xxx"
});

eventSource.addEventListener('message', (e) => {
  console.log('MCP response:', JSON.parse(e.data));
});

Enviar solicitud MCP

curl -X POST "http://localhost:3000/message?sessionId=your-session-id" \
  -H "Authorization: Bearer your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Configuración

Variable de entorno

Descripción

Por defecto

PORT

Puerto del servidor

3000

HOST

Host al que vincular

0.0.0.0

MCP_API_KEY

Clave API para autenticación

(ninguna)

MCP_COMMAND

Comando para ejecutar el servidor MCP

npx

MCP_ARGS

Array JSON de argumentos

["@browsermcp/mcp@latest"]

Uso de diferentes servidores MCP

Puedes usar este proxy con cualquier servidor MCP basado en stdio:

# Example: Use a custom MCP server
MCP_COMMAND=node
MCP_ARGS=["/path/to/your/mcp-server/dist/index.js"]

# Example: Use Python MCP server
MCP_COMMAND=python
MCP_ARGS=["-m", "your_mcp_server"]

Notas de seguridad

  1. Usa siempre autenticación con clave API al exponer a Internet

  2. Usa HTTPS (Tailscale, ngrok y Cloudflare proporcionan esto)

  3. Se recomienda Tailscale para acceso privado dentro de tu tailnet

  4. Rota las claves API periódicamente

  5. Monitorea las sesiones a través del endpoint /sessions

Solución de problemas

El servidor MCP no inicia

Revisa los registros de la consola en busca de errores. El stderr del servidor MCP se reenvía a la consola del proxy.

Conexión rechazada

  • Asegúrate de que el servidor esté ejecutándose: curl http://localhost:3000/health

  • Verifica la conectividad de Tailscale: tailscale status

Error de autenticación

  • Verifica que la clave API en .env coincida con el encabezado de tu solicitud

  • Asegúrate de que el prefijo "Bearer " esté incluido en el encabezado Authorization

SSE no funciona

  • Asegúrate de conectarte al endpoint /sse (no solo a la URL base)

  • Verifica que el encabezado Authorization también se envíe con la solicitud GET

Licencia

MIT

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables interaction with remote MCP servers using SSE transport instead of STDIO for enhanced communication capabilities.
    1
    200,973 PyPI
    2,786
    Python
    MIT
  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    Bridges STDIO-based MCP clients with SSE-based MCP servers, allowing applications like Claude Desktop to connect to remote MCP servers that use SSE transport.
    9
    -