n8n-io/n8n · error · NodeOperationError

The selected tools are not supported by

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.

Solutions

  1. Switch the Agent type to 'Tools Agent' (which supports DynamicStructuredTool).
  2. Or replace the structured tool with a non-structured equivalent compatible with the current agent type.
  3. 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

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


AI-assisted analysis of n8n-io/n8n@5ac6606e81 (2026-08-12). Data as JSON: /api/errors/1c0a2bf5bc4b5cbb. Report an issue: GitHub.

Appendix: 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)