n8n-io/n8n · error · NodeOperationError
Manual thinking mode is not supported on "${modelName}". Use
Error message
Manual thinking mode is not supported on "${modelName}". Use Thinking Mode = Adaptive (with Effort) instead. What it means
Thrown by the Anthropic node when thinkingMode === 'manual' is selected for a model id starting with 'claude-opus-4-7'. Claude Opus 4.7 removed the manual thinking-budget API in favour of adaptive thinking with an effort level, so sending manual thinking parameters would 400. The node blocks the misconfiguration before the request, pointing the user at the Adaptive mode.
Source
Thrown at packages/@n8n/nodes-langchain/nodes/llms/LMChatAnthropic/LmChatAnthropic.node.ts:527
topK?: number;
topP?: number;
thinking?: boolean;
thinkingBudget?: number;
thinkingMode?: 'disabled' | 'adaptive' | 'manual';
effort?: 'low' | 'medium' | 'high' | 'xhigh' | 'max';
streaming?: boolean;
};
const isOpus47Model = modelName.startsWith('claude-opus-4-7');
const thinkingMode: 'disabled' | 'adaptive' | 'manual' =
version >= 1.5
? (options.thinkingMode ?? 'disabled')
: options.thinking
? 'manual'
: 'disabled';
if (thinkingMode === 'manual' && isOpus47Model) {
throw new NodeOperationError(
this.getNode(),
`Manual thinking mode is not supported on "${modelName}". Use Thinking Mode = Adaptive (with Effort) instead.`,
{ itemIndex },
);
}
let invocationKwargs: Record<string, unknown> = {};
if (thinkingMode === 'adaptive') {
invocationKwargs = {
thinking: { type: 'adaptive' },
output_config: { effort: options.effort ?? 'medium' },
max_tokens: options.maxTokensToSample ?? DEFAULT_MAX_TOKENS,
top_k: undefined,
top_p: undefined,
temperature: undefined,
};
} else if (thinkingMode === 'manual') {
invocationKwargs = {View on GitHub (pinned to 5ac6606e81)
Solutions
- Switch 'Thinking Mode' to 'Adaptive' and set an 'Effort' value (low/medium/high).
- Or pick a non-opus-4-7 model that still supports manual thinking.
- On typeVersion < 1.5, either upgrade the node typeVersion or disable the legacy 'thinking' toggle for opus-4-7.
Example fix
// before
options.thinkingMode === 'manual' && modelName.startsWith('claude-opus-4-7')
// after
options.thinkingMode === 'adaptive' && options.effort === 'medium' Defensive patterns
Strategy: validation
Validate before calling
const isOpus47Model = modelName.startsWith('claude-opus-4-7');
if ((options.thinkingMode === 'manual' || options.thinking === true) && isOpus47Model) {
// force adaptive before constructing the request
options.thinkingMode = 'adaptive';
options.effort = options.effort ?? 'medium';
} Type guard
const isOpus47 = (m: string): boolean => m.startsWith('claude-opus-4-7'); Try / catch
// Pre-validate model + thinking combo at node-save time.
Prevention
- Pair opus-4-7 only with Adaptive thinking mode.
- When reusing workflows across model upgrades, re-validate thinking settings.
- Surface this incompatibility in the node's option description.
When it happens
Trigger: User selects claude-opus-4-7-* in the model field and sets 'Thinking Mode' to 'Manual' (or, on typeVersion < 1.5, toggles the legacy 'thinking' boolean on). The isOpus47Model check matches and the error fires.
Common situations: Reusing an Opus 4.5/4.6 workflow that used manual thinking after upgrading to Opus 4.7; toggling thinking on without re-reading the model's docs; an expression that resolves the model to an opus-4-7 string while thinking is set to manual.
Related errors
- No model selected. Please choose a model.
- The model "${modelName}" does not support the Sampling Tempe
- VectorStore "${this.name}" requires a description — set it v
- The model "${modelName}" was not found at ${baseURL}. If you
- The value in the "Extra Body" field is not valid JSON
AI-assisted analysis of n8n-io/n8n@5ac6606e81 (2026-08-12).
Data as JSON: /api/errors/36aa6fd28e418ca7.
Report an issue: GitHub.