Skip to main content
Glama

MCP Proxy Server

proxy mcp

Licencia de GitHubPyPI - Versión PythonPyPI - Descargas

Acerca de

El mcp-proxy es una herramienta que permite cambiar entre transportes de servidor. Se admiten dos modos:

  1. stdio a SSE/StreamableHTTP
  2. SSE a stdio

1. stdio a SSE/StreamableHTTP

Ejecute un servidor proxy desde stdio que se conecte a un servidor SSE remoto.

Este modo permite que clientes como Claude Desktop se comuniquen con un servidor remoto a través de SSE aunque no sea compatible de forma nativa.

1.1 Configuración

Este modo requiere proporcionar la URL del punto final SSE del servidor MCP como primer argumento del programa. Si el servidor utiliza el transporte HTTP Streamable, asegúrese de aplicarlo en el mcp-proxy mediante --transport=streamablehttp .

Argumentos

NombreRequeridoDescripciónEjemplo
command_or_urlEl punto final SSE del servidor MCP al que conectarsehttp://ejemplo.io/sse
--headersNoEncabezados a utilizar para la conexión SSE del servidor MCPAutorización 'Portador de mi token de acceso secreto'
--transportNoDecide qué protocolo de transporte usar al conectarse a un servidor MCP. Puede ser "sse" o "streamablehttp".http transmisible

Variables de entorno

NombreRequeridoDescripciónEjemplo
API_ACCESS_TOKENNoSe puede utilizar en lugar de --headers Authorization 'Bearer <API_ACCESS_TOKEN>'TU_TOKEN

1.2 Ejemplo de uso

Se supone que mcp-proxy debe ser iniciado por el cliente MCP, por lo que la configuración debe realizarse en consecuencia.

Para Claude Desktop, la entrada de configuración puede verse así:

{ "mcpServers": { "mcp-proxy": { "command": "mcp-proxy", "args": [ "http://example.io/sse" ], "env": { "API_ACCESS_TOKEN": "access-token" } } } }

2. SSE a stdio

Ejecute un servidor proxy que exponga un servidor SSE que se conecta a un servidor stdio local.

Esto permite conexiones remotas al servidor stdio local. El mcp-proxy abre un puerto para escuchar solicitudes SSE y genera un servidor stdio local que gestiona las solicitudes MCP.

2.1 Configuración

Este modo requiere el parámetro --sse-port . El parámetro --sse-host puede especificar la dirección IP del host en el que el servidor SSE escuchará. Se pueden pasar variables de entorno adicionales al servidor stdio local mediante el parámetro --env . Los argumentos de la línea de comandos para el servidor stdio local deben pasarse después del separador -- .

Argumentos

NombreRequeridoDescripciónEjemplo
command_or_urlEl comando para generar el servidor stdio de MCPuvx mcp-server-fetch
--portNo, disponible al azarEl puerto del servidor MCP para escuchar8080
--hostNo, 127.0.0.1 por defectoLa dirección IP del host en la que escuchará el servidor MCP0.0.0.0
--envNoVariables de entorno adicionales para pasar al servidor MCP stdio. Se pueden usar varias veces.BAR DE COMIDA
--cwdNoEl directorio de trabajo que se pasará al proceso del servidor stdio de MCP./tmp
--pass-environmentNoPasar por todas las variables de entorno al generar el servidor--entorno sin pase
--allow-originNoOrígenes permitidos para el servidor SSE. Se pueden usar varias veces. CORS no está permitido por defecto.--permitir-origen "*"
--statelessNoHabilitar el modo sin estado para los transportes HTTP con transmisión. El valor predeterminado es Falso.--sin estado
--named-server NAME COMMAND_STRINGNoDefine un servidor stdio con nombre.--named-server fetch 'uvx mcp-server-fetch'
--named-server-config FILE_PATHNoRuta a un archivo JSON que define servidores stdio nombrados.--named-server-config /ruta/a/servidores.json
--sse-port (obsoleto)No, disponible al azarEl puerto del servidor SSE para escuchar8080
--sse-host (obsoleto)No, 127.0.0.1 por defectoLa dirección IP del host en la que escuchará el servidor SSE0.0.0.0

2.2 Ejemplo de uso

Para iniciar el servidor mcp-proxy que escucha en el puerto 8080 y se conecta al servidor MCP local:

# Start the MCP server behind the proxy mcp-proxy uvx mcp-server-fetch # Start the MCP server behind the proxy with a custom port # (deprecated) mcp-proxy --sse-port=8080 uvx mcp-server-fetch mcp-proxy --port=8080 uvx mcp-server-fetch # Start the MCP server behind the proxy with a custom host and port # (deprecated) mcp-proxy --sse-host=0.0.0.0 --sse-port=8080 uvx mcp-server-fetch mcp-proxy --host=0.0.0.0 --port=8080 uvx mcp-server-fetch # Start the MCP server behind the proxy with a custom user agent # Note that the `--` separator is used to separate the `mcp-proxy` arguments from the `mcp-server-fetch` arguments # (deprecated) mcp-proxy --sse-port=8080 -- uvx mcp-server-fetch --user-agent=YourUserAgent mcp-proxy --port=8080 -- uvx mcp-server-fetch --user-agent=YourUserAgent # Start multiple named MCP servers behind the proxy mcp-proxy --port=8080 --named-server fetch 'uvx mcp-server-fetch' --named-server fetch2 'uvx mcp-server-fetch' # Start multiple named MCP servers using a configuration file mcp-proxy --port=8080 --named-server-config ./servers.json

Servidores con nombre

  • NAME se utiliza en la ruta URL /servers/NAME/ .
  • COMMAND_STRING es el comando para iniciar el servidor (por ejemplo, 'uvx mcp-server-fetch').
    • Se puede utilizar varias veces.
    • Este argumento se ignora si se utiliza --named-server-config .
  • FILE_PATH : si se proporciona, esta es la fuente exclusiva para servidores nombrados y se ignoran los argumentos CLI --named-server .

Si se especifica un servidor predeterminado (el argumento command_or_url sin --named-server o --named-server-config ), será accesible en las rutas raíz (por ejemplo, http://127.0.0.1:8080/sse ).

Los servidores con nombre (definidos mediante --named-server o --named-server-config ) serán accesibles en /servers/<server-name>/ (p. ej., http://127.0.0.1:8080/servers/fetch1/sse ). El punto de conexión /status proporciona el estado global.

Formato de archivo de configuración JSON para --named-server-config :

El archivo JSON debe seguir esta estructura:

{ "mcpServers": { "fetch": { "disabled": false, "timeout": 60, "command": "uvx", "args": [ "mcp-server-fetch" ], "transportType": "stdio" }, "github": { "timeout": 60, "command": "npx", "args": [ "-y", "@modelcontextprotocol/server-github" ], "transportType": "stdio" } } }
  • mcpServers : un diccionario donde cada clave es el nombre del servidor (usado en la ruta URL, por ejemplo, /servers/fetch/ ) y el valor es un objeto que define el servidor.
  • command : (Obligatorio) El comando a ejecutar para el servidor stdio.
  • args : (Opcional) Lista de argumentos para el comando. El valor predeterminado es una lista vacía.
  • enabled : (opcional) Si false , se omitirá esta definición de servidor. El valor predeterminado es true .
  • timeout y transportType : Estos campos están presentes en las configuraciones estándar de cliente MCP, pero mcp-proxy los ignora actualmente al cargar servidores con nombre. El tipo de transporte es implícitamente "stdio".

Instalación

Instalación mediante herrería

Para instalar MCP Proxy para Claude Desktop automáticamente a través de Smithery :

npx -y @smithery/cli install mcp-proxy --client claude

Instalación mediante PyPI

La versión estable del paquete está disponible en el repositorio de PyPI. Puede instalarla con el siguiente comando:

# Option 1: With uv (recommended) uv tool install mcp-proxy # Option 2: With pipx (alternative) pipx install mcp-proxy

Una vez instalado, puede ejecutar el servidor con el comando mcp-proxy . Consulte las opciones de configuración para cada modo más arriba.

Instalación a través del repositorio de Github (última versión)

La última versión del paquete se puede instalar desde el repositorio git usando el siguiente comando:

uv tool install git+https://github.com/sparfenyuk/mcp-proxy

[!NOTA] Si ya ha instalado el servidor, puede actualizarlo utilizando el comando uv tool upgrade --reinstall .

[!NOTA] Si desea eliminar el servidor, utilice el comando uv tool uninstall mcp-proxy .

Instalación como contenedor

A partir de la versión 0.3.2, es posible extraer y ejecutar la imagen del contenedor correspondiente:

docker run -t ghcr.io/sparfenyuk/mcp-proxy:v0.3.2-alpine --help

Solución de problemas

  • Problema : Claude Desktop no puede iniciar el servidor: código ENOENT en los registrosSolución : Intente usar la ruta completa del binario. Para ello, abra una terminal y ejecute el comando where mcp-proxy (MacOS, Linux) o where.exe mcp-proxy (Windows). A continuación, use la ruta de salida como valor para el atributo 'command':
    "fetch": { "command": "/full/path/to/bin/mcp-proxy", "args": [ "http://localhost:8932/sse" ] }

Ampliación de la imagen del contenedor

Puedes ampliar la imagen del contenedor mcp-proxy para incluir ejecutables adicionales. Por ejemplo, uv no está incluido por defecto, pero puedes crear una imagen personalizada con él:

# file: mcp-proxy.Dockerfile FROM ghcr.io/sparfenyuk/mcp-proxy:latest # Install the 'uv' package RUN python3 -m ensurepip && pip install --no-cache-dir uv ENV PATH="/usr/local/bin:$PATH" \ UV_PYTHON_PREFERENCE=only-system ENTRYPOINT [ "mcp-proxy" ]

Configuración de Docker Compose

Con el Dockerfile personalizado, puedes definir un servicio en tu archivo Docker Compose:

services: mcp-proxy-custom: build: context: . dockerfile: mcp-proxy.Dockerfile network_mode: host restart: unless-stopped ports: - 8096:8096 command: "--pass-environment --port=8096 --sse-host 0.0.0.0 uvx mcp-server-fetch"

[!NOTA] No olvides configurar el argumento --pass-environment ; de lo contrario, obtendrás el error "No se encontró ningún intérprete en las instalaciones administradas ni en la ruta de búsqueda".

Argumentos de la línea de comandos

usage: mcp-proxy [-h] [-H KEY VALUE] [--transport {sse,streamablehttp}] [-e KEY VALUE] [--cwd CWD] [--pass-environment | --no-pass-environment] [--debug | --no-debug] [--named-server NAME COMMAND_STRING] [--named-server-config FILE_PATH] [--port PORT] [--host HOST] [--stateless | --no-stateless] [--sse-port SSE_PORT] [--sse-host SSE_HOST] [--allow-origin ALLOW_ORIGIN [ALLOW_ORIGIN ...]] [command_or_url] [args ...] Start the MCP proxy. It can run as an SSE client (connecting to a remote SSE server and exposing stdio). Or, it can run as an SSE server (connecting to local stdio command(s) and exposing them over SSE). When running as an SSE server, it can proxy a single default stdio command or multiple named stdio commands (defined via CLI or a config file). positional arguments: command_or_url Command or URL. If URL (http/https): Runs in SSE/StreamableHTTP client mode. If command string: Runs in SSE server mode, this is the default stdio server. If --named-server or --named-server-config is used, this can be omitted if no default server is desired. options: -h, --help show this help message and exit SSE/StreamableHTTP client options: -H, --headers KEY VALUE Headers to pass to the SSE server. Can be used multiple times. --transport {sse,streamablehttp} The transport to use for the client. Default is SSE. stdio client options: args Any extra arguments to the command to spawn the default server. Ignored if only named servers are defined. -e, --env KEY VALUE Environment variables used when spawning the default server. Can be used multiple times. For named servers, environment is inherited or passed via --pass-environment. --cwd CWD The working directory to use when spawning the default server process. Named servers inherit the proxy's CWD. --pass-environment, --no-pass-environment Pass through all environment variables when spawning all server processes. --debug, --no-debug Enable debug mode with detailed logging output. --named-server NAME COMMAND_STRING Define a named stdio server. NAME is for the URL path /servers/NAME/. COMMAND_STRING is a single string with the command and its arguments (e.g., 'uvx mcp-server-fetch --timeout 10'). These servers inherit the proxy's CWD and environment from --pass-environment. Can be specified multiple times. Ignored if --named-server-config is used. --named-server-config FILE_PATH Path to a JSON configuration file for named stdio servers. If provided, this will be the exclusive source for named server definitions, and any --named-server CLI arguments will be ignored. SSE server options: --port PORT Port to expose an SSE server on. Default is a random port --host HOST Host to expose an SSE server on. Default is 127.0.0.1 --stateless, --no-stateless Enable stateless mode for streamable http transports. Default is False --sse-port SSE_PORT (deprecated) Same as --port --sse-host SSE_HOST (deprecated) Same as --host --allow-origin ALLOW_ORIGIN [ALLOW_ORIGIN ...] Allowed origins for the SSE server. Can be used multiple times. Default is no CORS allowed. Examples: mcp-proxy http://localhost:8080/sse mcp-proxy --transport streamablehttp http://localhost:8080/mcp mcp-proxy --headers Authorization 'Bearer YOUR_TOKEN' http://localhost:8080/sse mcp-proxy --port 8080 -- my-default-command --arg1 value1 mcp-proxy --port 8080 --named-server fetch1 'uvx mcp-server-fetch' --named-server tool2 'my-custom-tool --verbose' mcp-proxy --port 8080 --named-server-config /path/to/servers.json mcp-proxy --port 8080 --named-server-config /path/to/servers.json -- my-default-command --arg1 mcp-proxy --port 8080 -e KEY VALUE -e ANOTHER_KEY ANOTHER_VALUE -- my-default-command mcp-proxy --port 8080 --allow-origin='*' -- my-default-command

Ejemplo de archivo de configuración

{ "mcpServers": { "fetch": { "enabled": true, "timeout": 60, "command": "uvx", "args": [ "mcp-server-fetch" ], "transportType": "stdio" }, "github": { "timeout": 60, "command": "npx", "args": [ "-y", "@modelcontextprotocol/server-github" ], "transportType": "stdio" } } }

Pruebas

Compruebe el servidor mcp-proxy ejecutándolo con el servidor mcp-server-fetch . Puede usar la herramienta de inspección para probar el servidor de destino.

# Run the stdio server called mcp-server-fetch behind the proxy over SSE mcp-proxy --port=8080 uvx mcp-server-fetch & # Connect to the SSE proxy server spawned above using another instance of mcp-proxy given the URL of the SSE server mcp-proxy http://127.0.0.1:8080/sse # Send CTRL+C to stop the second server # Bring the first server to the foreground fg # Send CTRL+C to stop the first server

You must be authenticated.

A
security – no known vulnerabilities
A
license - permissive license
A
quality - confirmed to work

hybrid server

The server is able to function both locally and remotely, depending on the configuration or use case.

Permite la interacción con servidores MCP remotos utilizando el transporte SSE en lugar de STDIO para mejorar las capacidades de comunicación.

  1. Acerca de
    1. stdio a SSE/StreamableHTTP
      1. 1.1 Configuración
      2. 1.2 Ejemplo de uso
    2. SSE a stdio
      1. 2.1 Configuración
      2. 2.2 Ejemplo de uso
    3. Servidores con nombre
      1. Instalación
        1. Instalación mediante herrería
        2. Instalación mediante PyPI
        3. Instalación a través del repositorio de Github (última versión)
        4. Instalación como contenedor
        5. Solución de problemas
      2. Ampliación de la imagen del contenedor
        1. Configuración de Docker Compose
          1. Argumentos de la línea de comandos
            1. Ejemplo de archivo de configuración
          2. Pruebas

            Related MCP Servers

            • A
              security
              A
              license
              A
              quality
              A simple MCP server that facilitates website fetching through a configurable server platform using stdio or SSE transport, allowing integration with tools like Cursor for streamlined access.
              Last updated -
              2
              23
              Python
              MIT License
            • -
              security
              F
              license
              -
              quality
              MCP server enabling LLMs to perform browser tasks via SSE transport, allowing clients like Cursor.ai and Claude to open websites and interact with web content through natural language commands.
              Last updated -
              • Apple
            • -
              security
              F
              license
              -
              quality
              A remote MCP server implementation for Cloudflare that uses server-sent events (SSE) to enable Model Control Protocol communication.
              Last updated -
              TypeScript
              • Linux
            • A
              security
              A
              license
              A
              quality
              The most powerful MCP server for Slack Workspaces. This integration supports both Stdio and SSE transports, proxy settings and does not require any permissions or bots being created or approved by Workspace admins 😏.
              Last updated -
              2
              63
              Go
              MIT License
              • Apple
              • Linux

            View all related MCP servers

            MCP directory API

            We provide all the information about MCP servers via our MCP API.

            curl -X GET 'https://glama.ai/api/mcp/v1/servers/sparfenyuk/mcp-proxy'

            If you have feedback or need assistance with the MCP directory API, please join our Discord server