From 78b33bf0df3778281e720cde11c10957e92262f4 Mon Sep 17 00:00:00 2001 From: Dominik Klein Date: Thu, 15 Oct 2026 09:23:02 +0200 Subject: [PATCH] Ignore empty members of the Accept header An empty list member made parse_accept_header call strip on nil, so the transport answered 500. RFC 9110 asks recipients to ignore them. Fixes #609. --- .../transports/streamable_http_transport.rb | 5 +++-- .../transports/streamable_http_transport_test.rb | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) 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",