From 16570ce1e109e9eb10bff00e34036275b98d3186 Mon Sep 17 00:00:00 2001 From: g97iulio1609 Date: Sat, 28 Feb 2026 07:29:44 +0100 Subject: [PATCH] fix: handle ClosedResourceError when logging errors to disconnected clients Wrap send_log_message() in _handle_message's exception handler with a try/except for ClosedResourceError and BrokenResourceError. When a client disconnects during request processing, the server catches the stream exception but then crashes trying to send the error log back through the already-closed write stream. Closes #2064 --- src/mcp/server/lowlevel/server.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/mcp/server/lowlevel/server.py b/src/mcp/server/lowlevel/server.py index aee644040..3b9782605 100644 --- a/src/mcp/server/lowlevel/server.py +++ b/src/mcp/server/lowlevel/server.py @@ -417,11 +417,14 @@ async def _handle_message( ) case Exception(): logger.error(f"Received exception from stream: {message}") - await session.send_log_message( - level="error", - data="Internal Server Error", - logger="mcp.server.exception_handler", - ) + try: + await session.send_log_message( + level="error", + data="Internal Server Error", + logger="mcp.server.exception_handler", + ) + except (anyio.ClosedResourceError, anyio.BrokenResourceError): + logger.debug("Could not send error log: client already disconnected") if raise_exceptions: raise message case _: