The conversion itself is trivial to describe; what makes this usable beyond a demo is the surrounding flags — repeated headers and a bearer token for authenticated remotes, CORS by origin or regex, a health endpoint, and quiet logging. If you expose a stdio server on a port, those are the settings that decide whether it is safe.
A transport converter. Point it at a stdio MCP server and it serves that server over the network; point it at a remote SSE or Streamable HTTP server and it exposes it locally over stdio. Useful when the server you have and the client you want speak different transports.
- Stdio to SSE: subscribe at `/sse`, post messages to `/message`, with `--port`, `--baseUrl`, `--ssePath` and `--messagePath` all configurable
- Stdio to Streamable HTTP, stateless by default or `--stateful` with a `--sessionTimeout`, at `/mcp` by default
- Stdio to WebSocket, exposing `ws://localhost:8000/message`
- SSE to stdio and Streamable HTTP to stdio, for pulling a remote server into a command-line client
- Authentication passed through: `--oauth2Bearer` adds an Authorization header, and `--header` can be repeated for anything else
- Operational flags that matter when it is exposed: `--cors` allowing all origins or a list you supply including regex matching, `--healthEndpoint` for monitoring, and `--logLevel` set to debug, info or none
Node, and `npx -y supergateway` with `--stdio`, `--sse` or `--streamableHttp` naming what to connect to. Nothing to install and no account. The package is `supergateway` 3.4.3.
One command — npx -y supergateway --stdio "uvx mcp-server-git"
