Why your n8n AI Agent isn't calling its tools (6 real causes)
I lost most of a Tuesday to an n8n AI Agent node that flat-out refused to call the HTTP Request tool I'd wired into it. After pulling apart a dozen variations I have six reproducible causes.
I lost most of a Tuesday to an n8n AI Agent node that flat-out refused to call the HTTP Request tool I'd wired into it. The execution panel showed the tool attached, the model was a tool-calling model, the schema validated — and the agent still answered "I don't have access to that information."
After pulling apart a dozen variations I have six reproducible causes. None of them are in the n8n docs in one place, so here they are.
1. You named the tool in the system prompt
This was my actual bug. Compare:
# Broken
You are a support assistant. Use the get_order_status tool
to look up orders by ID.
# Works
You are a support assistant. You have tools available to
look up order information — use them when the user asks
about orders.
On gpt-4o-mini and Claude 3.5 Haiku, the first version makes the agent acknowledge the capability in prose without actually emitting a function-call token. The second version fires the tool every time. Full gpt-4o is robust to it; smaller models are not.
2. Tool description is too short
The OpenAI Functions agent feeds the tool description straight into the model's tool list. Anything under ~15 characters reads as low-confidence and the agent often passes on it. Pad with an example invocation:
Look up an order by numeric ID. Example: when the user
asks "where is order 12345", call with order_id=12345.
3. Memory sub-node replaying a bad turn
If the agent failed on turn 1 and you fixed the prompt on turn 2, the Memory node (Buffer Window, Postgres, whatever) will still feed turn 1's wrong answer back in as context. The model then pattern-matches "last time I didn't call a tool, so I won't this time."
Clear the session ID while debugging. In code:
// In a Code node before the Agent
return [{ json: { sessionId: $execution.id } }];
New ID per execution = clean slate.
4. Wrong agent type for the model
n8n exposes several agent types. They are not interchangeable:
OpenAI gpt-4o / 4o-mini — Tools Agent or OpenAI Functions
Claude 3.5 family — Tools Agent (NOT ReAct)
Llama 3.1 / Mistral via Ollama — ReAct
Older GPT-3.5 — OpenAI Functions
The Tools Agent silently no-ops on models that don't support the native tool-calling API. The ReAct agent will hallucinate Action: lines on models that do support it and confuse itself.
5. Missing or malformed input schema
If you're using a Code Tool or a Workflow Tool, the input schema must declare every parameter the description references. A description that says "pass the user's email" with no email field in the schema causes the agent to either skip the call or hallucinate a dummy value.
The HTTP Request Tool auto-generates the schema from your URL/body — but only if you tick "Specify Body Using JSON" and the JSON is valid. Form-data and raw text bodies produce empty schemas.
6. Streaming response truncation
Less common but brutal: if you have the agent in a sub-workflow and the parent uses Respond to Webhook with responseMode: "lastNode", intermediate tool-call tokens can be dropped before the agent finishes. Symptom is the agent appearing to ignore tools only when called via webhook, working fine in the editor.
Fix: set returnIntermediateSteps: true on the agent and inspect what actually came back.
How to actually debug this
The single most useful thing is turning on intermediate steps and reading the raw output:
That tells you the difference between "the agent never tried to call the tool" and "the agent called it, got a result, and decided to ignore it." Those are completely different bugs and the fix for each is different.
I keep a running list of n8n + LangChain agent failure modes with reproductions and benchmark numbers (which models actually obey tool-call instructions, hit rates per agent type) at aiworkflowlab.dev — the full version of this article has the per-model hit-rate table and the screenshots from the execution logs that I had to trim for the crosspost.
A field-tested walkthrough for wiring an n8n instance into Claude Code over MCP, covering server install, tool registration, environment variables, and the debugging steps that actually unblock the stdio handshake.
A field-tested walkthrough of why n8n AI Agent nodes recursively call themselves when tool descriptions overlap, plus three prevention patterns I now apply to every production workflow.
How to chunk documents for RAG in 2026: contextual retrieval, late chunking, semantic splitting, plus production Python code, benchmarks, and evaluation tips.