Skip to content

deps: bump rmcp to >=3.5.1 to fix discover->initialize tools/list failure - #218

Merged
fastrevmd-lab merged 1 commit into
mainfrom
mec-2045-bump-rmcp-3-5-1
Oct 6, 2026
Merged

fastrevmd-lab merged 1 commit into
mainfrom
mec-2045-bump-rmcp-3-5-1

Conversation

@fastrevmd-lab

Copy link
Copy Markdown
Member

Summary

  • A client that sends the server/discover bootstrap probe before initialize (Claude Code, and any client following the same pattern) permanently latched rmcp's internal request_metadata_required flag on the stdio session, even after the session fell back to the classic (initialize-negotiated) lifecycle. Every later request without per-request _meta -- including an ordinary tools/list -- was then rejected with -32602 request _meta is missing or has malformed required fields, so the client loaded zero tools.
  • Bumps rmcp from the previously-locked 3.5.0 to >=3.5.1,<4 in Cargo.toml/Cargo.lock. Upstream fix: fix(server): keep discover lifecycle bootstrap-neutral modelcontextprotocol/rust-sdk#1248, merged 2026-09-07, first shipped in rmcp 3.5.1 (2026-10-05).
  • No call-site changes were needed; the dependency bump alone resolves the issue.

Closes #217

Test plan

  • New regression test crates/rustsdcmcp/tests/stdio_discover_before_initialize.rs drives the exact wire sequence from the issue over an in-memory stdio-shaped duplex transport: server/discover (with the 2026-07-28 draft's required _meta keys) -> initialize (protocolVersion 2025-11-25) -> notifications/initialized -> tools/list with no _meta, and asserts tools/list succeeds and returns every tool in KNOWN_TOOLS.
  • Confirmed the new test reproduces the exact -32602 failure from the issue against the prior rmcp 3.5.0 pin (verified in a scratch build), and passes against 3.5.1.
  • cargo fmt --all -- --check
  • cargo clippy --workspace --all-targets --all-features --locked -- -D warnings
  • cargo build --workspace --locked
  • cargo test --workspace --locked (all 248 tests pass, including the new regression test)
  • RUSTDOCFLAGS="-D warnings" cargo doc --workspace --no-deps --locked
  • cargo +1.89 check --workspace --all-targets --locked (MSRV)
  • python3 -m unittest discover -s scripts/tests and python3 scripts/spec-drift.py self-check (unaffected by this change, confirmed still green)

🤖 Generated with Claude Code

…lure

A client that probes `server/discover` before `initialize` (e.g. Claude
Code) permanently latched rmcp's internal `request_metadata_required`
flag on the session, even after falling back to the classic
(`initialize`-negotiated) lifecycle. Every later request without
per-request `_meta` -- including an ordinary `tools/list` -- was then
rejected with -32602, so the client loaded zero tools.

Upstream fix: modelcontextprotocol/rust-sdk#1248, shipped in rmcp 3.5.1.

Adds a stdio regression test driving the exact discover -> initialize ->
notifications/initialized -> tools/list sequence over an in-memory
duplex transport; it reproduces the -32602 failure against the prior
rmcp 3.5.0 pin and passes against 3.5.1.

Closes #217

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@fastrevmd-lab
fastrevmd-lab merged commit acda164 into main Oct 6, 2026
12 checks passed
@fastrevmd-lab
fastrevmd-lab deleted the mec-2045-bump-rmcp-3-5-1 branch October 6, 2026 22:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

stdio: tools/list rejected with "request _meta is missing" after a server/discover probe followed by initialize (Claude Code 2.1.285 lists no tools)

1 participant