Skip to content

Commit 34b9e80

Browse files
committed
Improve error handling during request validation in BaseSession
1 parent 9bee1d9 commit 34b9e80

File tree

1 file changed

+26
-17
lines changed

1 file changed

+26
-17
lines changed

src/mcp/shared/session.py

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -311,27 +311,36 @@ async def _receive_loop(self) -> None:
311311
if isinstance(message, Exception):
312312
await self._handle_incoming(message)
313313
elif isinstance(message.root, JSONRPCRequest):
314-
validated_request = self._receive_request_type.model_validate(
315-
message.root.model_dump(
316-
by_alias=True, mode="json", exclude_none=True
314+
try:
315+
validated_request = self._receive_request_type.model_validate(
316+
message.root.model_dump(
317+
by_alias=True, mode="json", exclude_none=True
318+
)
317319
)
318-
)
319320

320-
responder = RequestResponder(
321-
request_id=message.root.id,
322-
request_meta=validated_request.root.params.meta
323-
if validated_request.root.params
324-
else None,
325-
request=validated_request,
326-
session=self,
327-
on_complete=lambda r: self._in_flight.pop(r.request_id, None),
328-
)
321+
responder = RequestResponder(
322+
request_id=message.root.id,
323+
request_meta=validated_request.root.params.meta
324+
if validated_request.root.params
325+
else None,
326+
request=validated_request,
327+
session=self,
328+
on_complete=lambda r: self._in_flight.pop(
329+
r.request_id, None
330+
),
331+
)
329332

330-
self._in_flight[responder.request_id] = responder
331-
await self._received_request(responder)
333+
self._in_flight[responder.request_id] = responder
334+
await self._received_request(responder)
332335

333-
if not responder._completed: # type: ignore[reportPrivateUsage]
334-
await self._handle_incoming(responder)
336+
if not responder._completed: # type: ignore[reportPrivateUsage]
337+
await self._handle_incoming(responder)
338+
except Exception as e:
339+
# Log validation errors and continue
340+
logging.warning(
341+
f"Failed to validate request: {e}. "
342+
f"Message was: {message.root}"
343+
)
335344

336345
elif isinstance(message.root, JSONRPCNotification):
337346
try:

0 commit comments

Comments
 (0)