Skip to content

[v1.x] Buffer per-request StreamableHTTP streams; store priming event before dispatch - #2948

Merged
maxisbey merged 1 commit into
v1.xfrom
backport/v1x-streamable-http-hol
Jun 23, 2026
Merged

[v1.x] Buffer per-request StreamableHTTP streams; store priming event before dispatch#2948
maxisbey merged 1 commit into
v1.xfrom
backport/v1x-streamable-http-hol

[v1.x] Buffer per-request StreamableHTTP streams; store priming event…

40a3915
Select commit
Loading
Failed to load commit list.
Claude / Claude Code Review completed Jun 22, 2026 in 17m 46s

Code review found 2 potential issues

Found 5 candidates, confirmed 2. See review comments for details.

Details

Severity Count
🔴 Important 0
🟡 Nit 1
🟣 Pre-existing 0
Severity File:Line Issue
🟡 Nit src/mcp/server/streamable_http.py:612-623 _sse_stream_writers entry leaks when SSE setup fails before _run_sse_writer starts

Annotations

Check warning on line 623 in src/mcp/server/streamable_http.py

See this annotation in the file changed.

@claude claude / Claude Code Review

_sse_stream_writers entry leaks when SSE setup fails before _run_sse_writer starts

If the SSE branch's "SSE response error" except path fires before sse-starlette ever invokes the data_sender_callable, the entry registered in `self._sse_stream_writers[request_id]` is never popped — only `_run_sse_writer`'s `finally` and `close_sse_stream()` remove it — leaving a stale closed writer in the per-session dict for the transport's lifetime. This gap also existed in the pre-PR code, but since this block is rewritten here, adding `self._sse_stream_writers.pop(request_id, None)` to the