-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Fix automatic log level handling for sessionless connections #917
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
ihrpr
merged 6 commits into
modelcontextprotocol:main
from
cliffhall:sessionless-log-level-handling
Sep 9, 2025
Merged
Fix automatic log level handling for sessionless connections #917
ihrpr
merged 6 commits into
modelcontextprotocol:main
from
cliffhall:sessionless-log-level-handling
Sep 9, 2025
+158
−6
Conversation
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
- add .idea/ for JetBrains IDEs * In src/server/index.ts - in Server class - in automatic request handler for SetLevelRequestSchema set in constructor, use "NO_SESSION" as the transportSessionId / map key for _loggingLevels and set the level. - This allows an STDIO server to have automatic log filtering if sendLoggingMessage is used. - in isMessageIgnored method - default value of sessionId is "NO_SESSION" if not supplied - in sendLoggingMessage method, - remove sessionId check from condition, since an undefined sessionId will be converted to "NO_SESSION" in the call to isMessageIgnored - this allows STDIO servers to have automatic log filtering * In src/server/index.test.ts - added tests - "should respect log level for transport without sessionId" - "should respect log level for transport with sessionId"
- adjust imports to minimize diff impact
- remove unused import
12 tasks
ihrpr
requested changes
Sep 9, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you! Please can we address the concern of introducing "magic value" session id for stateless use cases.
- remove Jetbrains IDE / .idea * In src/server/index.test.ts - in Server constructor, When setting request handler for SetLevelRequestSchema - remove "NO_SESSION" key if sessionId is otherwise not found - remove check for transportSessionId when calling _loggingLevels.set - change _loggingLevels Map to allow string or undefined as a key - in isMessageIgnored method - remove default value of "NO_SESSION" for optional sessionId argument
- in Server constructor, When setting request handler for SetLevelRequestSchema - replace literal final resort of undefined if sessionId is otherwise not found
ihrpr
approved these changes
Sep 9, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you!
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.
Description
In
src/server/index.ts
Server
classSetLevelRequestSchema
transportSessionId
when in condition wrapping call to_loggingLevels.set
undefined
sessionId
to be a map key_loggingLevels
Map to allowstring
orundefined
as a key.sendLoggingMessage
is used.isMessageIgnored
methodsessionId
argument optional.undefined
for sessionless / STDIO serverssendLoggingMessage
method,sessionId
check from condition wrapping call tonotification
In
src/server/index.test.ts
Motivation and Context
While refactoring the Everything server to demonstrate how servers can avail themselves of the SDK's recent addition of Automatic handling of logging level, I discovered a wrinkle that needs ironing out.
STDIO server connections (which do not have a
sessionId
) would no longer throw a "Method not found" error if they advertised logging but did not set a listener forSetLevelRequestSchema
messages, which is good. However, they would not respect the level that was set in subsequent calls tosendLoggingMessage
. This is because the log levels are tracked bysessionId
, to allow for multiple clients connecting to a server and each setting their own level.This PR fixes that and tests the entire process, both with and without a
sessionId
.How Has This Been Tested?
New unit tests for both cases.
Breaking Changes
Nope.
Types of changes
Checklist
Additional context