n8n-nodes-openrouter-noreasoning
v0.3.0
Published
OpenRouter Chat Model node for n8n with reasoning forcefully disabled. Fixes tool calling issues with DeepSeek V4/V3.2 in AI Agent workflows.
Maintainers
Readme
n8n-nodes-openrouter-noreasoning
A drop-in replacement for the official n8n OpenRouter Chat Model node that forces reasoning: { enabled: false } on every request. This fixes a current bug where DeepSeek V4 and V3.2 served through OpenRouter break tool calling when reasoning ("thinking") mode is active inside the n8n AI Agent.
Why this exists
OpenRouter's DeepSeek V4 / V3.2 endpoints currently emit reasoning_content tokens by default. When n8n's AI Agent receives those alongside tool_calls, the LangChain tool-calling loop fails to parse the assistant turn and the agent either repeats the same tool call forever or returns an empty response.
The cleanest fix is to send "reasoning": {"enabled": false} in the body of every chat completion request. The official OpenRouter node does not expose this flag, so this community node injects it via LangChain's modelKwargs.
For background see the OpenRouter docs on the reasoning parameter and the upstream discussion in DeepSeek + tool calling on OpenRouter.
Installation
Inside your n8n instance:
- Open Settings → Community Nodes
- Click Install
- Enter the package name:
n8n-nodes-openrouter-noreasoning - Accept the risks of installing a community node and confirm
- Reload the editor
The node will appear in the node picker as OpenRouter Chat Model (No Reasoning) under the Chat Models (Recommended) category.
Usage

- Drop an AI Agent node onto the canvas
- On the agent's Chat Model input, attach an OpenRouter Chat Model (No Reasoning) node
- Select or create an
OpenRouter APIcredential (the native n8n one — no custom credential is required) - Configure the node:
- Model — pick from the live OpenRouter list (search supported) or type the model ID manually
- Reasoning —
Disabled (Recommended)by default. Switch toLow / Medium / Highonly if your model supports it and you don't need tool-calling. Disabled → injectsreasoning: { enabled: false }; effort levels → injectreasoning: { effort: "<level>" }. - Response Format —
Text(default) orJSON Object(injectsresponse_format: { type: "json_object" }). - Options — temperature, top-p, penalties, timeout, max retries
- Run the workflow
Compatible models
deepseek/deepseek-v4-flashdeepseek/deepseek-v4-prodeepseek/deepseek-v3.2
Other models (Anthropic Claude, Google Gemini, OpenAI GPT, etc.) accept the reasoning parameter as well, but silently ignore it when reasoning is not applicable. There is no risk of errors when pointing this node at non-DeepSeek models — it just behaves like a normal OpenRouter Chat Model.
Local development
npm install
npm run build # one-shot build
npm run dev # watch mode
npm run lintTo test against a local n8n instance, link the built package:
npm link
cd ~/.n8n/custom # or wherever your n8n custom dir is
npm link n8n-nodes-openrouter-noreasoningPublishing
npm login
npm publish --access publicThe prepublishOnly script runs the build and the strict lint config before publishing.
