diff --git a/src/mcp/server/streamable_http.py b/src/mcp/server/streamable_http.py index d6ccfd5a82..052e890732 100644 --- a/src/mcp/server/streamable_http.py +++ b/src/mcp/server/streamable_http.py @@ -20,7 +20,7 @@ from anyio.streams.memory import MemoryObjectReceiveStream, MemoryObjectSendStream from pydantic import ValidationError from sse_starlette import EventSourceResponse -from starlette.requests import Request +from starlette.requests import ClientDisconnect, Request from starlette.responses import Response from starlette.types import Receive, Scope, Send @@ -511,6 +511,15 @@ async def sse_writer(): await sse_stream_reader.aclose() await self._clean_up_memory_streams(request_id) + except ClientDisconnect: + logger.info("Client disconnected during request") + response = self._create_error_response( + "Client closed connection", + 499, + ) + await response(scope, receive, send) + return + except Exception as err: # pragma: no cover logger.exception("Error handling POST request") response = self._create_error_response(