AgentFixFind a fix
MCPPartial workaroundUpdated Aug 20, 2026

MCP fails to open an SSE stream with Not Found

Fix MCP Streamable HTTP clients that send GET to an MCP endpoint and fail with StreamableHTTPError: Failed to open SSE stream: Not Found.

Exact error

Match the message before using the fix

StreamableHTTPError: Streamable HTTP error: Failed to open SSE stream: Not FoundFailed to open SSE stream: Not Foundcode: 404

Quick answer

Start here

Inspect the server access log before changing the URL. If initialize POST succeeds and the client then sends GET to the same MCP endpoint, a 404 can mean the server supports POST-only Streamable HTTP but has no GET SSE route. Upgrade the client SDK first. If you control the server, either implement the current SDK's GET SSE behavior or return 405 Method Not Allowed for an intentionally unsupported GET; the client already handles 405 as no SSE stream. Do not rewrite every 404 to 405 until you have ruled out a genuinely wrong endpoint.

Diagnosis

Why it happens

  • The Streamable HTTP client opens or authenticates an optional server-to-client SSE stream with GET after POST communication starts.
  • A POST-only server may return 404 because no GET handler exists, while the affected SDK path historically treated only 405 as a graceful no-SSE response.
  • The same 404 can also mean the configured MCP path is actually wrong or a reverse proxy routes GET and POST differently.

Safest first

Fixes, in order

01

Confirm which method receives the 404

Applies when: Every `Failed to open SSE stream: Not Found` report

The key distinction is POST success followed by GET 404 on the same endpoint.

  1. Run the connection through MCP Inspector or enable bounded client and server request logs.
  2. Record the exact endpoint, POST status, following GET status, and Accept header.
  3. Confirm whether POST initialize works before GET fails.
  4. If both methods return 404, correct the endpoint instead of using the no-SSE workaround.

Expected: The log proves either a POST-only server branch or a genuinely missing endpoint.

02

Upgrade the MCP client SDK

Applies when: Clients using an older TypeScript SDK Streamable HTTP transport

The current upstream issue tracks graceful handling for 404 and 406 responses and links a proposed fix; a fixed release must be verified rather than assumed.

  1. Record the client and `@modelcontextprotocol/sdk` versions.
  2. Upgrade through the client's supported release channel.
  3. Restart the client so it loads the new transport implementation.
  4. Repeat the same POST-then-GET trace.

Expected: The client continues with POST-based communication when the server intentionally offers no GET SSE stream, or the still-unfixed behavior is reproduced with a current version.

03

Make the server's GET behavior explicit

Applies when: Server owners who verified POST works and GET is intentionally unsupported

The protocol permits a server that does not offer SSE through GET to respond with 405; implementing GET SSE is the alternative when server-to-client streaming is needed.

  1. Compare the endpoint with the current official SDK server example for your selected transport mode.
  2. If SSE GET is required, add the documented GET handler and session behavior.
  3. If GET SSE is intentionally unsupported, return 405 for GET on the exact MCP route.
  4. Keep normal 404 responses for genuinely unknown paths.

Expected: The client either opens a valid SSE response or recognizes that the endpoint is POST-only without aborting initialization.

Verification

Prove the fix worked

  1. Connect with the same client and endpoint that previously failed.
  2. Confirm initialize completes and at least one harmless tool call returns.
  3. Verify server logs no longer show an unhandled GET 404 for the MCP route.

Escalation

If it still fails

  • Capture the client/SDK versions, endpoint, POST/GET statuses, Accept headers, proxy route, and server transport mode.
  • Do not mask a wrong path by converting all reverse-proxy 404 responses into 405.
  • If the stream opens and later terminates, use the established-stream `TypeError: terminated` diagnosis instead.

Scope

Environment and version notes

  • The original Inspector report used the TypeScript SDK in November 2025 and is closed without a documented universal fixed release.
  • The follow-up SDK issue #1635 remained open with a proposed fix on August 20, 2026; npm reported SDK 1.30.0 as current.
  • Sources rechecked August 20, 2026.

Evidence

Sources

Source labels describe the evidence available on the checked date. A closed issue is not automatically a shipped fix.