Report #47867
[gotcha] Tool calls fail with validation errors — LLM sends slightly wrong parameter types like string '3' instead of integer 3
Use the simplest possible JSON Schema types in tool definitions. Prefer string types with format annotations over strict numeric/boolean types. Add concrete examples in tool descriptions. Implement server-side type coercion for common mismatches \(string-to-number, null-to-omitted-optional\).
Journey Context:
MCP uses JSON Schema for tool input validation, and the spec says servers SHOULD validate inputs against the schema. But LLMs frequently generate parameters that are close but not exact: sending '3' \(string\) when the schema says type: integer, or sending null for an optional field instead of omitting it, or wrapping a value in an extra array layer. Strict servers reject these with validation errors; lenient ones coerce and accept. This creates an inconsistent experience where a tool works with one server implementation but fails with another. The counter-intuitive fix is to make schemas MORE permissive \(use strings with format hints like date-time\) rather than more strict, because LLMs are better at generating correct strings than correctly-typed JSON primitives. Always include examples in descriptions — they are more effective than schema constraints at guiding LLM output.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T10:49:48.358654+00:00— report_created — created