Transports
Streamable HTTP, SSE, and how to connect servers that only speak stdio.
MCP servers talk over one of three transports. sremcp is a remote client, so it uses the two network ones.
| Transport | In sremcp | Use it for |
|---|---|---|
| Streamable HTTP | Streamable HTTP | Every current server. One endpoint, usually …/mcp. |
| SSE | SSE (legacy) | Older servers that only offer Server-Sent Events, usually at …/sse. |
| stdio | Through a bridge | Servers meant to run as a local process (npx …, uvx …, docker run -i …). |
Which one does my server use?
Look at how its README says to start it:
- A URL, or a flag like
--transport streamable-http,-t streamable-httporPROMETHEUS_MCP_SERVER_TRANSPORT=http: Streamable HTTP. --transport sse, or a URL ending in/sse: SSE (legacy). Use Streamable HTTP instead if the server offers it.- Only a command (
npx some-mcp-server), with nothing about ports: stdio. Bridge it as below.
Bridge a stdio server
Supergateway runs a stdio server and serves it over Streamable HTTP. It can also require an API key, so it doubles as the server's front door:
# The key sremcp will send. Keep it: it's the Secret you enter in sremcp.
MCP_API_KEY=$(openssl rand -hex 32); echo "$MCP_API_KEY"
docker run -d --name my-mcp -p 8000:8000 \
-e SUPERGATEWAY_API_KEY="$MCP_API_KEY" \
supercorp/supergateway \
--stdio "npx -y some-mcp-server" \
--outputTransport streamableHttp --port 8000The server is now at http://<host>:8000/mcp, and answers 401 without the key. Put it behind https (see
Expose a self-hosted server), then onboard it with Transport Streamable HTTP,
Authentication Bearer token, and the key as the Secret.
For Python servers started with uvx, use the supercorp/supergateway:uvx image, which includes uv.
Run one bridge per server and environment, so each has its own key and its own credentials for the system behind it.