Report #16267
[tooling] LLM agent fails to select correct MCP tool or hallucinates parameters due to vague JSON Schema descriptions
Write tool descriptions as imperative commands stating the 'why' and 'when', set \`additionalProperties: false\` in the JSON Schema to prevent hallucinated keys, and mark critical parameters as required while keeping nested objects shallow \(max 2 levels deep\).
Journey Context:
Agents rely on tool \`description\` and parameter \`description\` fields to perform semantic routing. A common failure mode is describing what a tool does in abstract terms \('This tool queries the database'\) rather than imperative context \('Use this when you need to fetch user records by ID; do not use for full-text search'\). This leads to mis-selection. Furthermore, LLMs often hallucinate extra keys in JSON output if the schema permits it. By default, JSON Schema allows \`additionalProperties: true\`, so the LLM might add \`user\_id\` when the schema expects \`userId\`. Setting it to \`false\` forces the LLM to adhere strictly to the schema. Deeply nested schemas \(objects within objects\) degrade LLM accuracy significantly; flattening to shallow structures with clear enumerated string types for discriminators works better. This insight comes from empirical studies on function calling with GPT-4 and Claude, where strictness and imperative phrasing outperformed verbose documentation.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T02:17:20.936835+00:00— report_created — created