Baike.dev
All toolsOnline toolsAI codingTrendingOpen sourceNewsSubmit
Log in
< Back to tools
M

mcp-proxy

> 编程语言
Open source

A bridge between Streamable HTTP and stdio MCP transports

2.7K stars0 likes0 views
WebsiteGitHub

About

A bridge between Streamable HTTP and stdio MCP transports

mcp-proxy

  • mcp-proxy
    • About
    • 1. stdio to SSE/StreamableHTTP
      • 1.1 Configuration
      • 1.2 Example usage
    • 2. SSE to stdio
      • 2.1 Configuration
      • 2.2 Example usage
    • Named Servers
    • Installation
      • Installing via PyPI
      • Installing via Github repository (latest)
      • Installing as container
      • Troubleshooting
    • Extending the container image
    • Docker Compose Setup
    • Command line arguments
      • Example config file
    • Testing

About

The mcp-proxy is a tool that lets you switch between server transports. There are two supported modes:

  1. stdio to SSE/StreamableHTTP
  2. SSE to stdio

1. stdio to SSE/StreamableHTTP

Run a proxy server from stdio that connects to a remote SSE server.

This mode allows clients like Claude Desktop to communicate to a remote server over SSE even though it is not supported natively.

mermaid
graph LR
    A["Claude Desktop"] <--> |stdio| B["mcp-proxy"]
    B <--> |SSE| C["External MCP Server"]

    style A fill:#ffe6f9,stroke:#333,color:black,stroke-width:2px
    style B fill:#e6e6ff,stroke:#333,color:black,stroke-width:2px
    style C fill:#e6ffe6,stroke:#333,color:black,stroke-width:2px

1.1 Configuration

This mode requires providing the URL of the MCP Server's SSE endpoint as the program’s first argument. If the server uses Streamable HTTP transport, make sure to enforce it on the mcp-proxy side by passing --transport=streamablehttp.

Arguments

Name Required Description Example
command_or_url Yes The MCP server SSE endpoint to connect to http://example.io/sse
--headers No Headers to use for the MCP server SSE connection Authorization 'Bearer my-secret-access-token'
--transport No Decides which transport protocol to use when connecting to an MCP server. Can be either 'sse' or 'streamablehttp' streamablehttp
--client-id No OAuth2 client ID for authentication your_client_id
--client-secret No OAuth2 client secret for authentication your_client_secret
--token-url No OAuth2 token endpoint URL for authentication https://auth.example.com/oauth/token

Environment Variables

Name Required Description Example
API_ACCESS_TOKEN No Can be used instead of --headers Authorization 'Bearer <API_ACCESS_TOKEN>' YOUR_TOKEN

1.2 Example usage

mcp-proxy is supposed to be started by the MCP Client, so the configuration must be done accordingly.

For Claude Desktop, the configuration entry can look like this:

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

2. SSE to stdio

Run a proxy server exposing a SSE server that connects to a local stdio server.

This allows remote connections to the local stdio server. The mcp-proxy opens a port to listen for SSE requests, spawns a local stdio server that handles MCP requests.

mermaid
graph LR
    A["LLM Client"] <-->|SSE| B["mcp-proxy"]
    B <-->|stdio| C["Local MCP Server"]

    style A fill:#ffe6f9,stroke:#333,color:black,stroke-width:2px
    style B fill:#e6e6ff,stroke:#333,color:black,stroke-width:2px
    style C fill:#e6ffe6,stroke:#333,color:black,stroke-width:2px

2.1 Configuration

This mode requires the --sse-port argument to be set. The --sse-host argument can be set to specify the host IP address that the SSE server will listen on. Additional environment variables can be passed to the local stdio server using the --env argument. The command line arguments for the local stdio server must be passed after the -- separator.

Arguments

Name Required Description Example
command_or_url Yes The command to spawn the MCP stdio server uvx mcp-server-fetch
--port No, random available The MCP server port to listen on 8080
--host No, 127.0.0.1 by default The host IP address that the MCP server will listen on 0.0.0.0
--env No Additional environment variables to pass to the MCP stdio server. Can be used multiple times. FOO BAR
--cwd No The working directory to pass to the MCP stdio server process. /tmp
--pass-environment No Pass through all environment variables when spawning the server --no-pass-environment
--allow-origin No Allowed origins for the SSE server. Can be used multiple times. Default is no CORS allowed. --allow-origin "*"
--expose-header No Headers added to Access-Control-Expose-Headers. Can be used multiple times. Defaults to mcp-session-id. --expose-header Custom-Header
--stateless No Enable stateless mode for streamable http transports. Default is False --no-stateless
--named-server NAME COMMAND_STRING No Defines a named stdio server. --named-server fetch 'uvx mcp-server-fetch'
--named-server-config FILE_PATH No Path to a JSON file defining named stdio servers. --named-server-config /path/to/servers.json
--sse-port (deprecated) No, random available The SSE server port to listen on 8080
--sse-host (deprecated) No, 127.0.0.1 by default The host IP address that the SSE server will listen on 0.0.0.0

2.2 Example usage

To start the mcp-proxy server that listens on port 8080 and connects to the local MCP server:

…

Named Servers

  • NAME is used in the URL path /servers/NAME/.
  • COMMAND_STRING is the command to start the server (e.g., 'uvx mcp-server-fetch').
    • Can be used multiple times.
    • This argument is ignored if --named-server-config is used.
  • FILE_PATH - If provided, this is the exclusive source for named servers, and --named-server CLI arguments are ignored.

If a default server is specified (the command_or_url argument without --named-server or --named-server-config), it will be accessible at the root paths (e.g., http://127.0.0.1:8080/sse).

Named servers (whether defined by --named-server or --named-server-config) will be accessible under /servers/<server-name>/ (e.g., http://127.0.0.1:8080/servers/fetch1/sse). The /status endpoint provides global status.

JSON Configuration File Format for --named-server-config:

The JSON file should follow this structure:

json
{
  "mcpServers": {
    "fetch": {
      "disabled": false,
      "timeout": 60,
      "command": "uvx",
      "args": [
        "mcp-server-fetch"
      ],
      "transportType": "stdio"
    },
    "github": {
      "timeout": 60,
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-github"
      ],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>"
      },
      "transportType": "stdio"
    }
  }
}
  • mcpServers: A dictionary where each key is the server name (used in the URL path, e.g., /servers/fetch/) and the value is an object defining the server.
  • command: (Required) The command to execute for the stdio server.
  • args: (Optional) A list of arguments for the command. Defaults to an empty list.
  • enabled: (Optional) If false, this server definition will be skipped. Defaults to true.
  • timeout and transportType: These fields are present in standard MCP client configurations but are currently ignored by mcp-proxy when loading named servers. The transport type is implicitly "stdio".

Installation

Installing via PyPI

The stable version of the package is available on the PyPI repository. You can install it using the following command:

bash
# Option 1: With uv (recommended)
uv tool install mcp-proxy

# Option 2: With pipx (alternative)
pipx install mcp-proxy

Once installed, you can run the server using the mcp-proxy command. See configuration options for each mode above.

Installing via Github repository (latest)

The latest version of the package can be installed from the git repository using the following command:

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

[!NOTE] If you have already installed the server, you can update it using uv tool upgrade --reinstall command.

[!NOTE] If you want to delete the server, use the uv tool uninstall mcp-proxy command.

Installing as container

Starting from version 0.3.2, it's possible to pull and run the corresponding container image. Release images are published to GHCR and Docker Hub as multi-platform manifests for linux/amd64 and linux/arm64; Docker selects the matching image for the host architecture automatically.

bash
docker run --rm -t ghcr.io/sparfenyuk/mcp-proxy:v0.12.0 --help
docker run --rm -t sparfenyuk/mcp-proxy:v0.12.0 --help

Troubleshooting

  • Problem: Claude Desktop can't start the server: ENOENT code in the logs

    Solution: Try

Issues· 0 open

View all issuesOpen on GitHub

No open issues yet, or sync has not completed.

> Tags

Pythonmcpmcp-serverproxysse

No comments yet. Be the first to share.

> Details

PublishedAug 1, 2026
UpdatedSep 17, 2026
Category编程语言
PricingOpen source

> Related tools

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言