An n8n AI Agent can have tools connected, receive a system instruction that says “you must call the tool,” and still return prose without executing anything.
The first diagnostic is not the final answer. It is the execution trace:
- if the Tool node never starts, inspect the model request and provider behavior;
- if the Tool node starts and fails schema validation, inspect arguments and JSON Schema;
- if the Tool succeeds but the agent reports failure, inspect the returned Tool message;
- if single-turn execution works but later turns do not, inspect memory persistence.
n8n issue #31135 reports a specific first-iteration boundary: tools are present, but tool_choice: required is not explicitly sent. A compatible provider that interprets the missing field as auto may answer directly.
I built a provider-free deterministic contract lab. It is not a model benchmark:
| Scenario | Runs | Tool calls | Text replies |
|---|---|---|---|
Missing tool_choice
|
20 | 0 | 20 |
First-iteration proxy injects required
|
20 | 20 | 0 |
The proxy also verifies three safeguards: do nothing when no tools exist, preserve explicit choices such as none, and stop forcing after an assistant tool call appears in the message history.
The broader debugging path still includes provider compatibility, ambiguous tool descriptions, invalid schemas, structured Tool Results, and memory backends that omit tool-call evidence.
Canonical analysis and complete code:
Top comments (0)