n8n-io/n8n · error · LLMServiceError
LLM does not support tools
Error message
LLM does not support tools
What it means
Construction-time guard in the discovery subgraph: config.llm.bindTools is not a function, so the agent cannot be created with the discovery tools (including the required submit tool). LLMServiceError records the offending model via _llmType(). Thrown during create/compile, before any discovery prompt runs.
Solutions
- Use a LangChain chat model with bindTools support for the discovery subgraph
- Wrap the model in a tool-capable adapter
- Verify the model type logged in the error's llmModel field and replace it with a tool-calling variant
Defensive patterns
Strategy: type-guard
When it happens
Trigger: Thrown at packages/@n8n/ai-workflow-builder.ee/src/subgraphs/discovery.subgraph.ts:332 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of n8n-io/n8n@5ac6606e81 (2026-08-12).
Data as JSON: /api/errors/cacfe6a0a7fd1675.
Report an issue: GitHub.
Appendix: source
Thrown at packages/@n8n/ai-workflow-builder.ee/src/subgraphs/discovery.subgraph.ts:332
// Create agent with tools bound (including submit tool)
const systemPrompt = ChatPromptTemplate.fromMessages([
[
'system',
[
{
type: 'text',
text: discoveryPrompt,
cache_control: { type: 'ephemeral' },
},
],
],
['human', '{prompt}'],
['placeholder', '{messages}'],
]);
if (typeof config.llm.bindTools !== 'function') {
throw new LLMServiceError('LLM does not support tools', {
llmModel: config.llm._llmType(),
});
}
// Bind all tools including the output tool
const allTools = [...tools, submitTool];
this.agent = systemPrompt.pipe(config.llm.bindTools(allTools));
this.plannerAgent = createPlannerAgent({
llm: config.plannerLLM,
tools: [
createGetDocumentationTool().tool,
createWebFetchTool(plannerSecurityFactory, ssrf).tool,
],
});
// Build the subgraph
const subgraph = new StateGraph(DiscoverySubgraphState)
.addNode('discovery_agent', this.callAgent.bind(this))View on GitHub (pinned to 5ac6606e81)