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.

n8n AI Agent Not Calling Tools: 6 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:

Agent node → Options → Return Intermediate Steps: true

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.

Nikhil Verma
About the Author Nikhil Verma

AI automation engineer chaining LLMs into workflows that actually work. Bullish on tool use; bearish on prompt theatre.