4040 sse_within_origin ,
4141 stream_within_origin ,
4242)
43+ from mcp .shared .exceptions import _SESSION_NOT_FOUND_MARKER
4344from mcp .shared .inbound import MCP_PROTOCOL_VERSION_HEADER
4445from mcp .shared .jsonrpc_dispatcher import cancelled_request_id_from_params
4546from mcp .shared .message import ClientMessageMetadata , SessionMessage
@@ -406,9 +407,16 @@ async def _handle_post_request(self, ctx: RequestContext) -> None:
406407 body = await response .aread ()
407408 parsed = jsonrpc_message_adapter .validate_json (body , by_name = False )
408409 if isinstance (parsed , JSONRPCError ):
410+ error = parsed .error
411+ if response .status_code == 404 and self .session_id is not None :
412+ error = ErrorData (
413+ code = error .code ,
414+ message = error .message ,
415+ data = {_SESSION_NOT_FOUND_MARKER : True , "data" : error .data },
416+ )
409417 # The server may have set `id: null` (request rejected before its
410418 # id was parsed); use this request's id so correlation works.
411- reply = JSONRPCError (jsonrpc = "2.0" , id = message .id , error = parsed . error )
419+ reply = JSONRPCError (jsonrpc = "2.0" , id = message .id , error = error )
412420 await ctx .read_stream_writer .send (SessionMessage (reply ))
413421 return
414422 except (httpx2 .StreamError , ValidationError ):
@@ -421,7 +429,11 @@ async def _handle_post_request(self, ctx: RequestContext) -> None:
421429 # this method); "Session terminated" would be a lie here.
422430 error_data = ErrorData (code = METHOD_NOT_FOUND , message = "Not Found" )
423431 else :
424- error_data = ErrorData (code = INVALID_REQUEST , message = "Session terminated" )
432+ error_data = ErrorData (
433+ code = INVALID_REQUEST ,
434+ message = "Session terminated" ,
435+ data = {_SESSION_NOT_FOUND_MARKER : True },
436+ )
425437 else :
426438 error_data = ErrorData (code = INTERNAL_ERROR , message = "Server returned an error response" )
427439 session_message = SessionMessage (JSONRPCError (jsonrpc = "2.0" , id = message .id , error = error_data ))
0 commit comments