5454 * @author Zachary German
5555 * @author Christian Tzolov
5656 * @author Dariusz Jędrzejczyk
57+ * @author Yanming Zhou
5758 * @see McpStreamableServerTransportProvider
5859 * @see HttpServlet
5960 */
@@ -261,7 +262,8 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response)
261262
262263 if (!badRequestErrors .isEmpty ()) {
263264 String combinedMessage = String .join ("; " , badRequestErrors );
264- this .responseError (response , HttpServletResponse .SC_BAD_REQUEST , new McpError (combinedMessage ));
265+ this .responseError (response , HttpServletResponse .SC_BAD_REQUEST ,
266+ McpError .builder (McpSchema .ErrorCodes .INVALID_REQUEST ).message (combinedMessage ).build ());
265267 return ;
266268 }
267269
@@ -400,7 +402,8 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response)
400402 && jsonrpcRequest .method ().equals (McpSchema .METHOD_INITIALIZE )) {
401403 if (!badRequestErrors .isEmpty ()) {
402404 String combinedMessage = String .join ("; " , badRequestErrors );
403- this .responseError (response , HttpServletResponse .SC_BAD_REQUEST , new McpError (combinedMessage ));
405+ this .responseError (response , HttpServletResponse .SC_BAD_REQUEST ,
406+ McpError .builder (McpSchema .ErrorCodes .INVALID_REQUEST ).message (combinedMessage ).build ());
404407 return ;
405408 }
406409
@@ -430,7 +433,9 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response)
430433 catch (Exception e ) {
431434 logger .error ("Failed to initialize session: {}" , e .getMessage ());
432435 this .responseError (response , HttpServletResponse .SC_INTERNAL_SERVER_ERROR ,
433- new McpError ("Failed to initialize session: " + e .getMessage ()));
436+ McpError .builder (McpSchema .ErrorCodes .INTERNAL_ERROR )
437+ .message ("Failed to initialize session: " + e .getMessage ())
438+ .build ());
434439 return ;
435440 }
436441 }
@@ -443,15 +448,18 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response)
443448
444449 if (!badRequestErrors .isEmpty ()) {
445450 String combinedMessage = String .join ("; " , badRequestErrors );
446- this .responseError (response , HttpServletResponse .SC_BAD_REQUEST , new McpError (combinedMessage ));
451+ this .responseError (response , HttpServletResponse .SC_BAD_REQUEST ,
452+ McpError .builder (McpSchema .ErrorCodes .INVALID_REQUEST ).message (combinedMessage ).build ());
447453 return ;
448454 }
449455
450456 McpStreamableServerSession session = this .sessions .get (sessionId );
451457
452458 if (session == null ) {
453459 this .responseError (response , HttpServletResponse .SC_NOT_FOUND ,
454- new McpError ("Session not found: " + sessionId ));
460+ McpError .builder (McpSchema .ErrorCodes .INVALID_REQUEST )
461+ .message ("Session not found: " + sessionId )
462+ .build ());
455463 return ;
456464 }
457465
@@ -492,20 +500,24 @@ else if (message instanceof McpSchema.JSONRPCRequest jsonrpcRequest) {
492500 }
493501 }
494502 else {
495- this .responseError (response , HttpServletResponse .SC_INTERNAL_SERVER_ERROR ,
496- new McpError ( "Unknown message type" ));
503+ this .responseError (response , HttpServletResponse .SC_BAD_REQUEST ,
504+ McpError . builder ( McpSchema . ErrorCodes . INVALID_REQUEST ). message ( "Unknown message type" ). build ( ));
497505 }
498506 }
499507 catch (IllegalArgumentException | IOException e ) {
500508 logger .error ("Failed to deserialize message: {}" , e .getMessage ());
501509 this .responseError (response , HttpServletResponse .SC_BAD_REQUEST ,
502- new McpError ("Invalid message format: " + e .getMessage ()));
510+ McpError .builder (McpSchema .ErrorCodes .PARSE_ERROR )
511+ .message ("Invalid message format: " + e .getMessage ())
512+ .build ());
503513 }
504514 catch (Exception e ) {
505515 logger .error ("Error handling message: {}" , e .getMessage ());
506516 try {
507517 this .responseError (response , HttpServletResponse .SC_INTERNAL_SERVER_ERROR ,
508- new McpError ("Error processing message: " + e .getMessage ()));
518+ McpError .builder (McpSchema .ErrorCodes .INTERNAL_ERROR )
519+ .message ("Error processing message: " + e .getMessage ())
520+ .build ());
509521 }
510522 catch (IOException ex ) {
511523 logger .error (FAILED_TO_SEND_ERROR_RESPONSE , ex .getMessage ());
@@ -545,7 +557,9 @@ protected void doDelete(HttpServletRequest request, HttpServletResponse response
545557
546558 if (request .getHeader (HttpHeaders .MCP_SESSION_ID ) == null ) {
547559 this .responseError (response , HttpServletResponse .SC_BAD_REQUEST ,
548- new McpError ("Session ID required in mcp-session-id header" ));
560+ McpError .builder (McpSchema .ErrorCodes .INVALID_REQUEST )
561+ .message ("Session ID required in mcp-session-id header" )
562+ .build ());
549563 return ;
550564 }
551565
@@ -566,7 +580,7 @@ protected void doDelete(HttpServletRequest request, HttpServletResponse response
566580 logger .error ("Failed to delete session {}: {}" , sessionId , e .getMessage ());
567581 try {
568582 this .responseError (response , HttpServletResponse .SC_INTERNAL_SERVER_ERROR ,
569- new McpError ( e .getMessage ()));
583+ McpError . builder ( McpSchema . ErrorCodes . INTERNAL_ERROR ). message ( e .getMessage ()). build ( ));
570584 }
571585 catch (IOException ex ) {
572586 logger .error (FAILED_TO_SEND_ERROR_RESPONSE , ex .getMessage ());
0 commit comments