Report #70057
[tooling] Assuming LLM will consistently format tool output without explicit schema enforcement causes parsing errors in agent loops
Return tool results with MIME type 'application/json' and a strict JSON Schema, and configure the client to use 'response\_format: \{type: "json\_object"\}' or equivalent when calling tools requiring structured output; validate server-side before returning
Journey Context:
Agents often break when tool outputs are supposed to be JSON but the LLM returns markdown-wrapped JSON or plain text explanations. While MCP supports JSON schema in tool definitions, this only validates input, not output. The fix requires two layers: first, the tool implementation must return a content object with MIME type 'application/json' \(per MCP spec\) containing strictly valid JSON matching a schema. Second, and crucially, the client \(the agent loop\) must request structured output from the LLM itself when generating the arguments or processing results. For OpenAI, this means setting 'response\_format: \{type: "json\_object"\}' in the chat completion call that invokes the tool. Without this, the LLM might output 'Here is the JSON: \{...\}' which breaks the parser. Server-side validation ensures the tool fails explicitly rather than returning malformed data to the agent loop.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T00:10:09.350169+00:00— report_created — created