fix(validation): only match tool_use/tool_result IDs when last message has tool_result#2981
Open
syf2211 wants to merge 1 commit into
Open
Conversation
…e has tool_result Fixes modelcontextprotocol#2960 Move the ID-matching check inside the has_tool_results block so validate_tool_use_result_messages() does not raise when a previous tool_use is followed by a plain text response without tool_result.
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
Fix a false positive in
validate_tool_use_result_messages()when a previoustool_useblock is followed by a plain text response without anytool_resultblocks.Motivation
Per SEP-1577,
tool_resultblocks must be preceded by atool_useblock, but there is no requirement thattool_usemust be followed bytool_result. A plain text user reply after an assistanttool_useis valid.Fixes #2960
Changes
tool_use/tool_resultID matching check inside the existingif has_tool_results:block insrc/mcp/server/validation.pyTests
Result: 16 passed
Also ran:
Result: All checks passed
Notes
AI assistance was used to implement this fix. The change is minimal (3-line scope move) and aligns with the root cause described in the issue.
Disclosure: This PR was prepared with AI assistance and reviewed before submission.