Skip to content

Commit 7d60257

Browse files
committed
fix: propagate HTTP errors in SSE transport instead of silently logging
1 parent 7605dfd commit 7d60257

File tree

1 file changed

+20
-1
lines changed

1 file changed

+20
-1
lines changed

src/mcp/client/sse.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
from mcp import types
1515
from mcp.shared._httpx_utils import McpHttpClientFactory, create_mcp_http_client
16+
from mcp.shared.exceptions import HttpError
1617
from mcp.shared.message import SessionMessage
1718

1819
logger = logging.getLogger(__name__)
@@ -142,10 +143,28 @@ async def post_writer(endpoint_url: str):
142143
exclude_unset=True,
143144
),
144145
)
146+
if response.status_code in (401, 403):
147+
status_label = "Unauthorized" if response.status_code == 401 else "Forbidden"
148+
exc = HttpError(
149+
response.status_code,
150+
f"HTTP {response.status_code} {status_label}",
151+
)
152+
await read_stream_writer.send(exc)
153+
raise exc
145154
response.raise_for_status()
146155
logger.debug(f"Client message sent successfully: {response.status_code}")
147-
except Exception: # pragma: lax no cover
156+
except HttpError: # pragma: lax no cover
157+
raise
158+
except httpx.HTTPStatusError as exc: # pragma: lax no cover
148159
logger.exception("Error in post_writer")
160+
http_exc = HttpError(
161+
exc.response.status_code,
162+
f"HTTP {exc.response.status_code}",
163+
)
164+
await read_stream_writer.send(http_exc)
165+
except Exception as exc: # pragma: lax no cover
166+
logger.exception("Error in post_writer")
167+
await read_stream_writer.send(exc)
149168
finally:
150169
await write_stream.aclose()
151170

0 commit comments

Comments
 (0)