Empty members in the Accept header cause a 500
メンテナーはふだん 1 日以内に返信
評価
調査の方向性
バグは Streamable HTTP トランスポートの parse_accept_header にあり、そこで split(";").first.strip を呼び出すと、空のリスト要素に対して nil が返ります。issue の再現手順を実行して 500 エラーを確認してください。空の要素(例: application/json,,text/event-stream)がスキップされてリクエストが成功し、そのケースをカバーするテストが追加されれば完了です。
索引モデルが issue の本文から書いたものです。
説明
An Accept header with an empty list member makes the Streamable HTTP transport answer 500, even though both required media types are there:
server = MCP::Server.new(name: "repro", version: "1.0.0", tools: [], capabilities: { tools: {} })
transport = MCP::Server::Transports::StreamableHTTPTransport.new(server, stateless: true, enable_json_response: true)
env = Rack::MockRequest.env_for(
"/mcp",
method: "POST",
input: '{"jsonrpc":"2.0","id":1,"method":"tools/list"}',
"CONTENT_TYPE" => "application/json",
"HTTP_ACCEPT" => "application/json,,text/event-stream",
)
transport.handle_request(Rack::Request.new(env))
# => [500, ..., ['{"jsonrpc":"2.0","id":null,"error":{"code":-32603,"message":"Internal server error"}}']]
The same happens with ", application/json, text/event-stream". parse_accept_header calls part.split(";").first.strip, and for an empty member split returns [], so first is nil.
HTTP allows these: "a recipient MUST parse and ignore a reasonable number of empty list elements" (RFC 9110, section 5.6.1.2). Skipping empty members in parse_accept_header would fix it; I'll send a PR.
Seen with 1.7.0; main at 9d12f51 has the same code.
- 主要言語
- Ruby
- スター
- 924
- フォーク
- 136
- 平均マージ
- 1日 5時間
- マージ済み PR(30日)
- 37
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
modelcontextprotocol/ruby-sdk のほかの issue
-
Error responses carry "id": null, which the MCP schema does not allow対応中かも @koic が今日担当しました。 オープンbug
難易度 3/5 半日 初心者へのやさしさ 45/100
modelcontextprotocol/ruby-sdk#606 ·
メンテナーはふだん 1 日以内に返信
-
String request ids are limited to letters, digits, "_" and "-"対応中かも @koic が今日担当しました。 オープンbug
modelcontextprotocol/ruby-sdk#603 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
Methods of undeclared capabilities return -32603 instead of -32601対応中かも @koic が今日担当しました。 オープンbug
modelcontextprotocol/ruby-sdk#602 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
Requests with "id": null are run like notifications対応中かも @koic が今日担当しました。 オープンbug
modelcontextprotocol/ruby-sdk#601 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
Support modelcontextprotocol/experimental-ext-triggers-events対応中かも @koic が 4 日前に担当しました。 オープンenhancement
modelcontextprotocol/ruby-sdk#594 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
modelcontextprotocol/ruby-sdk の issue をすべて見る
似ている issue
-
agent:triaged bug bughunt pm:bundler priority:p1
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
SocketDev/socket-patch#1573 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
bug chat verified
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
メンテナーはふだん 6 日以内に返信
-
🐞 bug pending triage
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
CircuitVerse/CircuitVerse#8031 · コメント 2 件 ·
メンテナーはふだん 1 日以内に返信
-
BazaRb::Fake#enter rejects dotted badges accepted by BazaRb#enter対応中かも このイシューにリンクされたプルリクエストがオープン中、またはマージ済みです。 オープン
難易度 1/5 1〜3時間 初心者へのやさしさ 84/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
riscv/riscv-unified-db#2740 ·
メンテナーはふだん 1 日以内に返信