Fix/timeout response handling #350
Closed
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.
Title:
Fix timeout issue in McpServerSession response handling
Description:
This PR fixes a timeout issue in
McpServerSession
where responses were not being sent to clients due to incorrect reactive stream operator chaining.Motivation and Context
The MCP SDK v0.10.0 has a bug where the server receives requests but never sends responses, causing clients to timeout. This occurs because the
flatMap
operator was placed afteronErrorResume
in the responsehandling chain. When an error occurred, the error handler would send the error response and return
Mono.empty()
, leaving nothing for the subsequentflatMap
to process.How Has This Been Tested?
McpServerSessionTimeoutTest
that specifically tests the timeout scenariotools/list
requests within the timeout periodBreaking Changes
No breaking changes. This is a bug fix that maintains the existing API and behavior, only ensuring that responses are actually sent as intended.
Types of changes
Checklist
Additional context
The fix reorders the reactive operators to ensure responses are always sent:
flatMap
beforeonErrorResume
then(Mono.empty())
in error handlerCode change: