Repository navigation
Conversation
…ructured content Per modelcontextprotocol#2429, a low-level tool with an `outputSchema` cannot return a tool-execution failure (e.g. "Resource not found") via unstructured `TextContent` because the call_tool decorator unconditionally validates the result against `outputSchema` and replaces the original error message with a hard "outputSchema defined but no structured output returned" error. Mirror the TypeScript SDK fix (modelcontextprotocol/typescript-sdk#655): when an outputSchema-bound tool returns no structured content, treat the unstructured payload as a tool-error result (`isError=True`) instead of replacing it. Tools that *do* return structured output keep their existing validation contract, and the explicit `CallToolResult`-returning path is unchanged. Github-Issue:modelcontextprotocol#2429
…w behavior CI flagged that the existing test_content_only_with_output_schema_error asserted the old contract (replace tool output with a generic 'outputSchema validation' message). This PR's whole point is to NOT do that, so the assertion was guaranteed to flip. Renames the test to test_content_only_with_output_schema_surfaces_error and updates assertions to verify the new contract: - isError = True (so callers can branch on it) - the tool's original unstructured TextContent payload is preserved verbatim (so callers see the tool's own error message, e.g. 'Resource not found', instead of a generic SDK validation string) - structuredContent stays None Verified locally with `python -m pytest tests/server/test_lowlevel_output_validation.py` → 9 passed. Signed-off-by: SAY-5 <say.apm35@gmail.com>
|
Pushed 5239245 updating |
|
Thanks for the PR, and sorry it sat here without a proper review. The 1.x line only takes critical and security fixes now, and this one is below that bar. We're closing most of the open PR backlog. v2 is out and changed a lot of the SDK, so many older PRs no longer apply as written, and we're a small team that realistically doesn't have the capacity to work through the rest. If this still matters to you on v2, the most useful thing you can do is open an issue (or comment on the existing one) with your use case and a repro. Hearing why it matters to you is what we use to decide what to prioritise. |
Per #2429, a low-level tool with an
outputSchemacannot return a tool-execution failure (e.g. "Resource not found") via unstructuredTextContentbecause thecall_tooldecorator unconditionally validates the result againstoutputSchemaand replaces the original error message with a hard "outputSchema defined but no structured output returned" error.This PR mirrors the TypeScript SDK fix in modelcontextprotocol/typescript-sdk#655: when an outputSchema-bound tool returns no structured content, treat the unstructured payload as a tool-error result (
isError=True) instead of replacing it. Tools that do return structured output keep their existing validation contract, and the explicitCallToolResult-returning path is unchanged.Closes #2429