Skip to content

Allow ToolError to carry content for is_error results - #3847

Closed
sumitrao9 wants to merge 1 commit into
modelcontextprotocol:mainfrom
sumitrao9:fix/tool-error-content-348
Closed

sumitrao9 wants to merge 1 commit into
modelcontextprotocol:mainfrom
sumitrao9:fix/tool-error-content-348

Conversation

@sumitrao9

Copy link
Copy Markdown

Fixes #348

Summary

  • Adds optional content to ToolError so anticipated tool failures can return arbitrary MCP content blocks with is_error=True (e.g. image/audio/text, including Image/Audio helpers).
  • Preserves ToolError.content when Tool.run() re-raises with the tool-name prefix.
  • _handle_call_tool returns provided error content (converted via existing _convert_to_content) instead of forcing a single text block; plain ToolError(\"...\") behavior is unchanged.

Notes

  • I could not run the full test suite locally because uv sync --locked --dev in this environment failed building cryptography==50.0.0 (Rust toolchain/setup issue) and system pytest/MCP runtime deps (e.g. sse_starlette) were unavailable. I verified syntax for modified files and ran targeted inline checks for ToolError content handling/conversion, and added test_tool_error_with_content_returns_content_in_error_result and test_tool_error_with_image_helper_content_returns_image_in_error_result in tests/server/mcpserver/test_server.py.

AI assistance disclosure: This change was drafted with AI assistance and I reviewed the implementation and tests.

@github-actions github-actions Bot added the missing-issue-link Auto-closed: PR needs a linked issue assigned to its author (see CONTRIBUTING.md) label Nov 10, 2026
@github-actions

Copy link
Copy Markdown
Contributor

This PR has been closed automatically. This repo only keeps pull requests open when they come from a maintainer, or from a contributor a maintainer has assigned to the linked issue, and you aren't currently assigned to #348.

If a maintainer assigns you to #348, this PR reopens on its own and there's nothing more you need to do here. Assignment is a maintainer call based on capacity; comments that only ask to be assigned don't factor in. What does help is engaging on the issue itself by confirming the repro, explaining why it matters for your use case, or describing the approach you'd take.

You're welcome to keep pushing commits here (just avoid force-pushing, since GitHub can't reopen a rewritten branch), but that on its own won't get the PR reviewed or the issue assigned, and realistically most auto-closed PRs stay closed. There's no need to open a new PR either way.

CONTRIBUTING.md has the full reasoning, but in short:

  • We're a small team with very little capacity to review community PRs right now.
  • Many recent PRs are AI-generated with little human review, and reviewing one carefully still costs a maintainer as much time as it ever did. A well-described issue is usually more useful to us than the code.

Maintainers: reopen, remove missing-issue-link, or add bypass-issue-check to override.

@github-actions github-actions Bot closed this Nov 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

missing-issue-link Auto-closed: PR needs a linked issue assigned to its author (see CONTRIBUTING.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

No way to set isError=True for arbitrary tool result content

1 participant