Skip to content

Commit a4221e0

Browse files
g97iulio1609Copilot
andcommitted
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 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 62575ed commit a4221e0

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

src/mcp/server/lowlevel/server.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -417,11 +417,14 @@ async def _handle_message(
417417
)
418418
case Exception():
419419
logger.error(f"Received exception from stream: {message}")
420-
await session.send_log_message(
421-
level="error",
422-
data="Internal Server Error",
423-
logger="mcp.server.exception_handler",
424-
)
420+
try:
421+
await session.send_log_message(
422+
level="error",
423+
data="Internal Server Error",
424+
logger="mcp.server.exception_handler",
425+
)
426+
except (anyio.ClosedResourceError, anyio.BrokenResourceError):
427+
logger.debug("Could not send error log: client already disconnected")
425428
if raise_exceptions:
426429
raise message
427430
case _:

0 commit comments

Comments
 (0)