Skip to content

Commit f4aab5c

Browse files
authored
Merge pull request #258 from koic/use_mutex_protected_session_exists_predicate
Use mutex-protected `session_exists?` in `handle_regular_request`
2 parents 8823bd3 + be1bbc2 commit f4aab5c

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

lib/mcp/server/transports/streamable_http_transport.rb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -259,8 +259,7 @@ def handle_accepted
259259

260260
def handle_regular_request(body_string, session_id)
261261
unless @stateless
262-
# If session ID is provided, but not in the sessions hash, return an error
263-
if session_id && !@sessions.key?(session_id)
262+
if session_id && !session_exists?(session_id)
264263
return session_not_found_response
265264
end
266265
end

test/mcp/server/transports/streamable_http_transport_test.rb

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1222,6 +1222,31 @@ class StreamableHTTPTransportTest < ActiveSupport::TestCase
12221222
assert_equal([], response[2])
12231223
end
12241224

1225+
test "handle_regular_request checks session existence under mutex" do
1226+
init_request = create_rack_request(
1227+
"POST",
1228+
"/",
1229+
{ "CONTENT_TYPE" => "application/json" },
1230+
{ jsonrpc: "2.0", method: "initialize", id: "init" }.to_json,
1231+
)
1232+
init_response = @transport.handle_request(init_request)
1233+
session_id = init_response[1]["Mcp-Session-Id"]
1234+
1235+
@transport.expects(:session_exists?).with(session_id).returns(true)
1236+
1237+
request = create_rack_request(
1238+
"POST",
1239+
"/",
1240+
{
1241+
"CONTENT_TYPE" => "application/json",
1242+
"HTTP_MCP_SESSION_ID" => session_id,
1243+
},
1244+
{ jsonrpc: "2.0", method: "ping", id: "456" }.to_json,
1245+
)
1246+
response = @transport.handle_request(request)
1247+
assert_equal(200, response[0])
1248+
end
1249+
12251250
private
12261251

12271252
def create_rack_request(method, path, headers, body = nil)

0 commit comments

Comments
 (0)