Report #57047
[gotcha] MCP tool with complex JSON Schema \(oneOf, anyOf, additionalProperties\) causes LLM to generate invalid parameters consistently
Simplify tool schemas to flat objects with primitive types. Avoid oneOf/anyOf/allOf — use separate tools instead. Set \`additionalProperties: false\` explicitly. Use enums for constrained strings. Keep required fields minimal. Test schema complexity against actual LLM output before deploying.
Journey Context:
The MCP spec allows full JSON Schema in tool definitions, but LLMs are notoriously bad at generating valid JSON for complex schemas. \`oneOf\` and \`anyOf\` especially confuse LLMs — they may generate a mix of multiple variants, omit required fields from the chosen variant, or produce structurally invalid JSON. \`additionalProperties\` defaults vary across implementations and can cause unexpected validation failures on the server side. The practical fix is to design schemas for LLM comprehension, not programmatic completeness: flat schemas with clear types and enums work far better than nested/conditional schemas. If you need variants, split into separate tools with simpler schemas.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T02:14:38.505506+00:00— report_created — created