n8n-io/n8n · error · NodeOperationError
The selected tools are not supported by "${currentAgentType}
Error message
The selected tools are not supported by "${currentAgentType}", please use "Tools Agent" instead What it means
Thrown by checkForStructuredTools when one or more connected tools are DynamicStructuredTool instances. Only Tools Agent supports structured tools; other agent types (Conversational, ReAct, Plan & Execute, SQL) cannot invoke them. The error names the offending tool(s) in its description and instructs the user to switch to Tools Agent.
Source
Thrown at packages/@n8n/nodes-langchain/nodes/agents/Agent/agents/utils.ts:46
if (ctx.getNode().typeVersion <= 1.6) {
return parsedOutput;
}
// For 1.7 and above, we try to extract the output from the parsed output
// with fallback to the original output if it's not present
return parsedOutput?.output ?? parsedOutput;
}
export async function checkForStructuredTools(
tools: Array<Tool | DynamicStructuredTool<ZodObjectAny>>,
node: INode,
currentAgentType: string,
) {
const dynamicStructuredTools = tools.filter(
(tool) => tool.constructor.name === 'DynamicStructuredTool',
);
if (dynamicStructuredTools.length > 0) {
const getToolName = (tool: Tool | DynamicStructuredTool) => `"${tool.name}"`;
throw new NodeOperationError(
node,
`The selected tools are not supported by "${currentAgentType}", please use "Tools Agent" instead`,
{
itemIndex: 0,
description: `Incompatible connected tools: ${dynamicStructuredTools.map(getToolName).join(', ')}`,
},
);
}
}
View on GitHub (pinned to 5ac6606e81)
Solutions
- Switch the Agent type to 'Tools Agent' (which supports DynamicStructuredTool).
- Or replace the structured tool with a non-structured equivalent compatible with the current agent type.
- Inspect the description field of the error to see exactly which tools are incompatible.
Defensive patterns
Strategy: validation
Validate before calling
const structured = tools.filter(t => t.constructor.name === 'DynamicStructuredTool');
if (structured.length > 0 && currentAgentType !== 'Tools Agent') {
throw new NodeOperationError(node, `Agent type '${currentAgentType}' does not support structured tools (${structured.map(t => t.name).join(', ')}). Switch to Tools Agent.`);
} Type guard
function isDynamicStructuredTool(tool: unknown): tool is DynamicStructuredTool {
return !!tool && (tool as any).constructor?.name === 'DynamicStructuredTool';
} Prevention
- If you need structured tools, use the Tools Agent type.
- When copying workflows between agent types, audit connected tools for DynamicStructuredTool instances.
- Read the error description to find the offending tool names.
When it happens
Trigger: A non-Tools-Agent agent (Conversational / ReAct / Plan & Execute / SQL) has a DynamicStructuredTool connected — e.g. a function tool defined with a Zod schema, the HTTP Request Tool, or another tool that emits DynamicStructuredTool.
Common situations: User added a structured tool while keeping an older agent type; workflow copied from a Tools Agent setup into a different agent; upgraded a tool that became structured.
Related errors
- Static tool name collision — the following tool names resolv
- MCP tool name collision — the following tool names resolve t
- The ‘text‘ parameter is empty.
- The ‘text‘ parameter is empty.
- The ‘prompt’ parameter is empty.
AI-assisted analysis of n8n-io/n8n@5ac6606e81 (2026-08-12).
Data as JSON: /api/errors/1c0a2bf5bc4b5cbb.
Report an issue: GitHub.