From 6b60cb7cd44bd976ed721b7f5560547b672a3a3d Mon Sep 17 00:00:00 2001 From: zhangchuanhui Date: Wed, 18 Jun 2025 10:38:10 +0800 Subject: [PATCH 1/2] fix: catch and rethrow SSEError during SSE connection establishment --- src/mcp/client/sse.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/mcp/client/sse.py b/src/mcp/client/sse.py index 0c05c6def..b216b69a4 100644 --- a/src/mcp/client/sse.py +++ b/src/mcp/client/sse.py @@ -8,6 +8,7 @@ from anyio.abc import TaskStatus from anyio.streams.memory import MemoryObjectReceiveStream, MemoryObjectSendStream from httpx_sse import aconnect_sse +from httpx_sse._exceptions import SSEError import mcp.types as types from mcp.shared._httpx_utils import McpHttpClientFactory, create_mcp_http_client @@ -105,6 +106,9 @@ async def sse_reader( await read_stream_writer.send(session_message) case _: logger.warning(f"Unknown SSE event: {sse.event}") + except SSEError as sse_exc: + logger.error(f"SSE error: {sse_exc}") + raise sse_exc except Exception as exc: logger.error(f"Error in sse_reader: {exc}") await read_stream_writer.send(exc) From b34f51c779205138ad9330cefb2a92ce0b1d51d1 Mon Sep 17 00:00:00 2001 From: Felix Weinberger Date: Tue, 30 Sep 2025 15:43:25 +0100 Subject: [PATCH 2/2] Use logger.exception for SSE error logging The logger.exception method is specifically designed for logging exceptions and automatically includes the exception traceback, providing better debugging information than logger.error. --- src/mcp/client/sse.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mcp/client/sse.py b/src/mcp/client/sse.py index b216b69a4..d0a8dd8c4 100644 --- a/src/mcp/client/sse.py +++ b/src/mcp/client/sse.py @@ -107,7 +107,7 @@ async def sse_reader( case _: logger.warning(f"Unknown SSE event: {sse.event}") except SSEError as sse_exc: - logger.error(f"SSE error: {sse_exc}") + logger.exception("Encountered SSE exception") raise sse_exc except Exception as exc: logger.error(f"Error in sse_reader: {exc}")