Return 404 for invalid session ID in handle_delete
## Motivation and Context The MCP specification requires that when a server receives a request containing a session ID that is no longer valid, it MUST respond with HTTP 404 Not Found. `handle_delete` was unconditionally calling `cleanup_session` and returning 200 even for nonexistent session IDs. Ref: https://modelcontextprotocol.io/specification/2025-11-25/basic/transports#session-management > The server MAY terminate the session at any time, after which it MUST respond > to requests containing that session ID with HTTP 404 Not Found. ## How Has This Been Tested? Added tests for DELETE with invalid session ID, and lifecycle tests for delete-then-POST and delete-then-DELETE scenarios. ## Breaking Change DELETE requests with an invalid session ID now return HTTP 404 "Session not found" instead of HTTP 200. However, this change is considered a bug fix because it brings the behavior into compliance with the MCP specification.
This commit is contained in:
parent
283c7a43e4
commit
abc7d6c7ea
1 changed files with 80 additions and 0 deletions
|
|
@ -155,8 +155,10 @@ module MCP
|
|||
end
|
||||
|
||||
return missing_session_id_response unless (session_id = request.env["HTTP_MCP_SESSION_ID"])
|
||||
return session_not_found_response unless session_exists?(session_id)
|
||||
|
||||
cleanup_session(session_id)
|
||||
|
||||
success_response
|
||||
end
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue