fix: accept logging/setLevel and ping before initialized notification#730
Open
fix: accept logging/setLevel and ping before initialized notification#730
Conversation
43dcf28 to
397e9ac
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #704
Motivation and Context
VS Code's MCP client sends a
logging/setLevelrequest right after the server responds toinitialize, but before theinitializednotification. The server expects a notification at that moment and errors out on any other message, which causes the entire handshake to fail.The MCP lifecycle spec states: "The server SHOULD NOT send requests other than pings and logging before receiving the
initializednotification." This means the server can send log messages during initialization, so it's reasonable for a client to set log levels before sendinginitialized. The client side of this codebase already handles the symmetric case with a loop, and this fix aligns the server with that same approach.rust-sdk/crates/rmcp/src/service/client.rs
Lines 103 to 139 in 5c5a2e7
How Has This Been Tested?
Added integration tests. I also manually verified the fix on VSCode.
Breaking Changes
None. The change only relaxes what the server accepts during initialization; the error path for truly unexpected messages is unchanged.
Types of changes
Checklist