mirror of
https://github.com/czlonkowski/n8n-mcp.git
synced 2026-03-23 10:53:07 +00:00
- Normalize name→nodeName and id→nodeId for node-targeting operations in the Zod schema transform, so LLMs using natural field names no longer get "Node not found" errors - Replace hardcoded ALL_CONNECTION_TYPES with dynamic iteration so AI sub-nodes (ai_outputParser, ai_document, ai_textSplitter, etc.) are not flagged as disconnected during save - Add .catchall() to workflowConnectionSchema and extend connection reference validation to cover all connection types, not just main - Fix filterOperationsByFixes ID-vs-name mismatch: typeversion-upgrade operations now include nodeName alongside nodeId, and the filter checks both fields Conceived by Romuald Członkowski - https://www.aiadvisors.pl/en Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
committed by
GitHub
parent
65ab94deb2
commit
f7a1cfe8bf
@@ -31,6 +31,11 @@ function getValidator(repository: NodeRepository): WorkflowValidator {
|
||||
return cachedValidator;
|
||||
}
|
||||
|
||||
// Operation types that identify nodes by nodeId/nodeName
|
||||
const NODE_TARGETING_OPERATIONS = new Set([
|
||||
'updateNode', 'removeNode', 'moveNode', 'enableNode', 'disableNode'
|
||||
]);
|
||||
|
||||
// Zod schema for the diff request
|
||||
const workflowDiffSchema = z.object({
|
||||
id: z.string(),
|
||||
@@ -63,6 +68,23 @@ const workflowDiffSchema = z.object({
|
||||
settings: z.any().optional(),
|
||||
name: z.string().optional(),
|
||||
tag: z.string().optional(),
|
||||
// Aliases: LLMs often use "id" instead of "nodeId" — accept both
|
||||
id: z.string().optional(),
|
||||
}).transform((op) => {
|
||||
// Normalize common field aliases for node-targeting operations:
|
||||
// - "name" → "nodeName" (LLMs confuse the updateName "name" field with node identification)
|
||||
// - "id" → "nodeId" (natural alias)
|
||||
if (NODE_TARGETING_OPERATIONS.has(op.type)) {
|
||||
if (!op.nodeName && !op.nodeId && op.name) {
|
||||
op.nodeName = op.name;
|
||||
op.name = undefined;
|
||||
}
|
||||
if (!op.nodeId && op.id) {
|
||||
op.nodeId = op.id;
|
||||
op.id = undefined;
|
||||
}
|
||||
}
|
||||
return op;
|
||||
})),
|
||||
validateOnly: z.boolean().optional(),
|
||||
continueOnError: z.boolean().optional(),
|
||||
|
||||
Reference in New Issue
Block a user