Skip to main content

MCPX_HTTP_LEGACY_SSE

Severity: error Domain: HTTP

What happened

mcpproxy opened the connection with a streamable-HTTP initialize POST and the endpoint answered with a 4xx. That combination is the signature of a server implementing only the older SSE transport, which expects a GET to open an event stream and a separate POST endpoint for messages — so it rejects the streamable-HTTP handshake outright.

This is a transport mismatch, not an authentication or routing failure. It is reported separately from MCPX_HTTP_403 / MCPX_HTTP_404 precisely because those send you looking for a credential or URL problem that does not exist.

How to fix

Set the transport explicitly

{
"name": "my-server",
"protocol": "sse", // was "http" or "streamable-http"
"url": "https://example.com/sse"
}

Check the URL path

Legacy SSE servers usually publish the stream on a distinct path. If the endpoint documents /sse and the config points at /mcp (or the bare origin), correct the URL as well as the protocol.

Let mcpproxy pick

Omitting protocol, or setting it to auto, makes mcpproxy negotiate — useful when the server supports both and you do not want to pin a choice:

{ "name": "my-server", "protocol": "auto", "url": "https://example.com/mcp" }

Confirm the change

mcpproxy upstream restart <server>
mcpproxy upstream logs <server> --follow