Repository navigation
SSE transport: connection succeeds then marked 'Failed' after first event, works fine with raw curl #2783
Description
Describe the bug
Connecting to a remote MCP server using the legacy SSE (Server Sent Events) [deprecated] transport: the initial GET /sse request succeeds (200, correct event: endpoint frame delivered with a valid session_id), but the Inspector UI then marks the server connection status as "Failed" and never proceeds to list tools/resources. The History panel shows the single GET transport request as 200 SSE, with the response body described as "Long-lived stream — 1 event delivered, closed; body not captured".
Driving the exact same server by hand with raw curl (bypassing Inspector entirely) completes the full handshake correctly: GET /sse stays open indefinitely, and POSTing initialize → notifications/initialized → tools/list → tools/call to the returned /messages/?session_id=... endpoint all return correct JSON-RPC responses on the SSE stream, with no server-side errors. This confirms the target server, TLS, and auth header are all fine — the failure is isolated to Inspector's own legacy SSE client path.
Steps to reproduce
- Start Inspector against a remote MCP server using the Python MCP SDK's SSE transport (
uvicorn-based,/sse+/messages/?session_id=...pattern):npx @modelcontextprotocol/inspector \ --transport sse \ --server-url "https://<your-server>/sse" \ --header "Authorization: Bearer <redacted>"
- Open the printed Inspector UI URL, confirm Transport = SSE, Server URL ends in
/sse, Authorization header populated. - Click Connect.
- UI shows "Connecting..." then settles on "Failed".
- In the Requests panel, the single
GET transportrequest shows200 SSEwith 1 event delivered, then the connection is reported closed.
Expected behavior
Inspector should keep the SSE stream open (the same way a direct curl -N connection to the identical endpoint stays open indefinitely) and proceed to auto-initialize / allow listing tools, since the server is fully spec-compliant and responds correctly when driven manually.
Environment
- Inspector version: latest via
npx @modelcontextprotocol/inspector(package version2.12.0as of testing) - OS: macOS (darwin)
- Target server: Python MCP SDK, SSE transport, fronted by a cloud load balancer (TLS terminated there)
Additional context
Manually replayed protocol trace (via curl) against the same server, for reference, showing a fully successful initialize → tools/list → tools/call exchange with no errors — confirming the server side is healthy and the bug is isolated to Inspector's legacy SSE client:
event: endpoint
data: /messages/?session_id=<redacted>
event: message
data: {"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2024-11-05","capabilities":{...},"serverInfo":{"name":"<server-name>","version":"<x.y.z>"}}}
event: message
data: {"jsonrpc":"2.0","id":2,"result":{"tools":[{"name":"tool_a", ...}, {"name":"tool_b", ...}, {"name":"tool_c", ...}]}}
event: message
data: {"jsonrpc":"2.0","id":3,"result":{"content":[{"type":"text","text":"<tool output>"}],"isError":false}}
Happy to provide a full HAR/network export or more detail if useful — the server itself cannot be shared since it's a private internal instance.
Activity
cliffhall commentedon Oct 25, 2026
Triage: Priority Medium (total 8)
buglabelLabels applied at triage:
v2,bug. Board: #28, StatusIncoming(awaiting maintainer review — no milestone yet).Merge pull request #2801 from modelcontextprotocol/v2/fix/2783-sse-co…
cliffhall commentedon Oct 25, 2026
Shipped in #2801. The root cause wasn't reproducible, but a failed connect now keeps its reason on the server card. If it still fails for you, please open a new issue with the error text shown under "Failed".