Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

Handler-generated invalid params errors use HTTP 400 on the modern Streamable HTTP path

Đã đóng
#1,320 0 bình luận 0 reaction 1 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 3 ngày

@DaleSeo đang làm issue này rồi.

Từ ngày 5/10/2026.

  • #1322 của @DaleSeo — đang mở

Đánh giá

Issue này chưa được đánh giá.

Mô tả

bug P1 ready for work T-transport

Describe the bug

On the modern (2026-07-28) Streamable HTTP path, jsonrpc_http_status maps every ErrorCode::INVALID_PARAMS (-32602) response to HTTP 400. This includes ordinary application errors that the spec defines as -32602 and that are not transport validation failures:

The 2026-07-28 Streamable HTTP spec requires HTTP 400 only for HeaderMismatch, UnsupportedProtocolVersionError, and MissingRequiredClientCapabilityError, and HTTP 404 for -32601. Its backward-compatibility rules tell a client that receives HTTP 400 to inspect the body and fall back to initialize when it is not one of those recognized modern errors. A spec-compliant client could therefore treat a 400 carrying a "resource not found" -32602 as a legacy server and downgrade.

To Reproduce

  1. Implement a ServerHandler whose read_resource returns Err(ErrorData::resource_not_found(...)) (or ErrorData::invalid_params(...) from get_prompt / call_tool).
  2. Send a valid modern Streamable HTTP request with protocol version 2026-07-28 that reaches the handler.
  3. Observe HTTP 400 with a JSON-RPC body containing error code -32602.

Expected behavior

Handler-generated -32602 errors should be sent with HTTP 200 as in-band JSON-RPC errors, like other handler errors that jsonrpc_http_status does not map.

Logs

actual:   HTTP 400, JSON-RPC error -32602 "Resource not found for URI: ui://widget/nope"
expected: HTTP 200, JSON-RPC error -32602

Found with rmcp 3.5.0 by MCPJam's modern-resource-not-found-invalid-params check (@mcpjam/sdk 8.20.1, profile [email protected]), which expects an in-band error. The official conformance suite (0.2.0-alpha.11) does not check the status code for this case.

Additional context

The mapping is in jsonrpc_http_status:

https://github.com/modelcontextprotocol/rust-sdk/blob/8f9a28ecdb5f/crates/rmcp/src/transport/streamable_http_server/tower.rs#L646-L660

Transport-generated malformed-request errors, such as a missing protocolVersion in _meta, already build their HTTP 400 response directly in invalid_params_jsonrpc_response, so removing INVALID_PARAMS from this mapper should not change those responses.

#1303 is related. It makes malformed params for spec methods return -32602 instead of -32601, which fixes the 404, but with the current mapper those responses become HTTP 400.

Ngôn ngữ chính
Rust
Star
4k
Fork
654
Merge trung bình
4 ngày 3 giờ
Pull request đã merge (30 ngày)
40

Chuẩn bị môi trường

Mở trong Codespaces

Khởi chạy dev container của dự án ngay trên trình duyệt, bằng tài khoản GitHub của bạn.

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của modelcontextprotocol/rust-sdk

Tất cả issue của modelcontextprotocol/rust-sdk

Issue tương tự

Thêm issue về Rust

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.