@@ -298,12 +298,12 @@ def _create_error_response(
298298 # Return a properly formatted JSON error response
299299 error_response = JSONRPCError (
300300 jsonrpc = "2.0" ,
301- id = "server-error" , # We don't have a request ID for general errors
301+ id = None ,
302302 error = ErrorData (code = error_code , message = error_message ),
303303 )
304304
305305 return Response (
306- error_response .model_dump_json (by_alias = True , exclude_none = True ),
306+ error_response .model_dump_json (by_alias = True , exclude_unset = True ),
307307 status_code = status_code ,
308308 headers = response_headers ,
309309 )
@@ -323,7 +323,7 @@ def _create_json_response(
323323 response_headers [MCP_SESSION_ID_HEADER ] = self .mcp_session_id
324324
325325 return Response (
326- response_message .model_dump_json (by_alias = True , exclude_none = True ) if response_message else None ,
326+ response_message .model_dump_json (by_alias = True , exclude_unset = True ) if response_message else None ,
327327 status_code = status_code ,
328328 headers = response_headers ,
329329 )
@@ -336,7 +336,7 @@ def _create_event_data(self, event_message: EventMessage) -> dict[str, str]:
336336 """Create event data dictionary from an EventMessage."""
337337 event_data = {
338338 "event" : "message" ,
339- "data" : event_message .message .model_dump_json (by_alias = True , exclude_none = True ),
339+ "data" : event_message .message .model_dump_json (by_alias = True , exclude_unset = True ),
340340 }
341341
342342 # If an event ID was provided, include it
@@ -975,12 +975,11 @@ async def message_router():
975975 # Determine which request stream(s) should receive this message
976976 message = session_message .message
977977 target_request_id = None
978- # Check if this is a response
979- if isinstance (message , JSONRPCResponse | JSONRPCError ):
980- response_id = str (message .id )
981- # If this response is for an existing request stream,
982- # send it there
983- target_request_id = response_id
978+ # Check if this is a response with a known request id.
979+ # Null-id errors (e.g., parse errors) fall through to
980+ # the GET stream since they can't be correlated.
981+ if isinstance (message , JSONRPCResponse | JSONRPCError ) and message .id is not None :
982+ target_request_id = str (message .id )
984983 # Extract related_request_id from meta if it exists
985984 elif ( # pragma: no cover
986985 session_message .metadata is not None
0 commit comments