diff --git a/lib/mcp/server/transports/streamable_http_transport.rb b/lib/mcp/server/transports/streamable_http_transport.rb index ef85ef2f..8c1e7020 100644 --- a/lib/mcp/server/transports/streamable_http_transport.rb +++ b/lib/mcp/server/transports/streamable_http_transport.rb @@ -1884,8 +1884,9 @@ def validate_accept_header(request, required_types) end def parse_accept_header(header) - header.split(",").map do |part| - part.split(";").first.strip.downcase + header.split(",").filter_map do |part| + media_type = part.split(";").first.to_s.strip.downcase + media_type unless media_type.empty? end end diff --git a/test/mcp/server/transports/streamable_http_transport_test.rb b/test/mcp/server/transports/streamable_http_transport_test.rb index 1e1ebc7a..e48502e5 100644 --- a/test/mcp/server/transports/streamable_http_transport_test.rb +++ b/test/mcp/server/transports/streamable_http_transport_test.rb @@ -1756,6 +1756,21 @@ def string assert_equal 200, response[0] end + test "POST request with empty members in the Accept header succeeds" do + request = create_rack_request( + "POST", + "/", + { + "CONTENT_TYPE" => "application/json", + "HTTP_ACCEPT" => ", application/json,, text/event-stream", + }, + { jsonrpc: "2.0", method: "initialize", id: "123", params: initialize_params }.to_json, + ) + + response = @transport.handle_request(request) + assert_equal 200, response[0] + end + test "POST request with Accept: */* succeeds" do request = create_rack_request_without_accept( "POST",