Skip to content

Commit 0efb392

Browse files
committed
fix: stop infinite GET stream reconnection on repeated empty connections
Only reset the attempt counter when events were actually received during the connection. Connections that close immediately without delivering events now count toward MAX_RECONNECTION_ATTEMPTS. Github-Issue:#1401
1 parent 75cd668 commit 0efb392

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

src/mcp/client/streamable_http.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,9 @@ async def handle_get_stream(self, client: httpx.AsyncClient, read_stream_writer:
197197
event_source.response.raise_for_status()
198198
logger.debug("GET SSE connection established")
199199

200+
received_events = False
200201
async for sse in event_source.aiter_sse():
202+
received_events = True
201203
# Track last event ID for reconnection
202204
if sse.id:
203205
last_event_id = sse.id
@@ -207,8 +209,12 @@ async def handle_get_stream(self, client: httpx.AsyncClient, read_stream_writer:
207209

208210
await self._handle_sse_event(sse, read_stream_writer)
209211

210-
# Stream ended normally (server closed) - reset attempt counter
211-
attempt = 0
212+
# Only reset attempts if we actually received events;
213+
# empty connections count toward MAX_RECONNECTION_ATTEMPTS
214+
if received_events:
215+
attempt = 0
216+
else:
217+
attempt += 1
212218

213219
except Exception: # pragma: lax no cover
214220
logger.debug("GET stream error", exc_info=True)

0 commit comments

Comments
 (0)