fix: Don't hang when MCP server returns 5xx #1169
Merged
+125
−13
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
Problem
Per #995, if a MCP tool_call receives a 5XX error from the server, the call hangs and never ends.
Root Cause
The root cause is that Anthropic's MCP client - on receiving a 5XX - bubbles up an exception that ends up cancelling all TaskGroup tasks which results in the session/client/asyncio loop being torn down and the tool_call never resolves, thus the hang.
Error flow
The flow is that a tool_call makes a new request:The bug is that our implementation of MCP Tool isn't paying attention to (4) and thus the hang occurs. There's a longer-term follow-up question of whether or not a 5XX should take down the entire connection, but going to scope the fix to the hanging issue.
Fix
The fix is two fold:
close_futurefutureclose_futurebeing triggeredNotes
Testing
Added an integ test to verify that:
This test failed before the changes, but succeeds now
Related Issues
#995,
Documentation PR
N/A
Type of Change
Bug fix
Testing
How have you tested the change? Verify that the changes do not break functionality or introduce warnings in consuming repositories: agents-docs, agents-tools, agents-cli
hatch run prepareChecklist
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.