fix(gateway): detect stale remote empty-success tool responses#525
Open
syf2211 wants to merge 1 commit into
Open
fix(gateway): detect stale remote empty-success tool responses#525syf2211 wants to merge 1 commit into
syf2211 wants to merge 1 commit into
Conversation
When a remote streamable-http MCP session goes stale, upstream tool calls can return structurally empty successes (no content blocks) that the gateway previously forwarded as successful results. Detect these responses for remote servers, invalidate the cached client, and retry once when tool annotations declare the call is read-only or idempotent. Otherwise surface a protocol-level error instead of silently returning empty data. Fixes docker#505
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.
Summary
Detect structurally empty tool successes from stale remote streamable-http sessions and stop forwarding them as successful results.
Motivation
Fixes #505. When a remote MCP session goes stale, upstream
CallToolcan returnerr == nilwith an emptycontentarray. The gateway previously forwarded these as successful tool results, causing silent data loss on writes.Changes
isStaleEmptySuccessto detect empty success responses (!isError, no content blocks, no structured content).InvalidateKeptClientto evict and close a single cached remote client.callRemoteTool:readOnlyHintoridempotentHint, invalidate the stale client and retry once.Tests
All new tests pass.
Notes
serverConfig.IsRemote()only; Docker/stdio paths are unchanged.