n8n-mcp 用 addConnection 给 IF 节点两个输出连线都落在同一输出怎么修正?
【免费下载链接】n8n-mcpA MCP for Claude Desktop / Claude Code / Windsurf / Cursor to build n8n workflows for you项目地址: https://gitcode.com/GitHub_Trending/n8/n8n-mcp
用 n8n-mcp 的n8n_update_partial_workflow工具给工作流加连线时,IF 节点有 TRUE 和 FALSE 两个输出(main[0]和main[1])。如果两条addConnection都没有显式指定分支,sourceIndex默认取 0,两条连线就会全部落在 TRUE 分支(main[0])上,FALSE 分支没有任何目标节点,工作流逻辑直接出错。本文的目标是把两条连线修正到各自的输出上,并确认修正已生效。前提是 n8n-mcp 已能访问你的 n8n 实例(n8n_update_partial_workflow依赖N8N_API_URL和N8N_API_KEY环境变量,见 工具文档)。
先确认问题现象
两个信号能帮你确认连线确实落在了同一输出上:
- 校验告警
CONDITIONAL_BRANCH_FANOUT:自 2.36.1 起,连接校验会检测 IF、Filter、Switch 节点"所有连接都挤在main[0]、更高序号的输出为空"的情况,并给出告警——对 IF 节点来说就是 true/false 两个目标都挂在main[0]上(见 CHANGELOG 2.36.1)。只有更高序号输出上也有连线时才会跳过该告警。 - 引擎对
sourceIndex的提示:diff 引擎在处理连线时,如果 IF 节点显式使用了sourceIndex而没有用branch,会附加一条警告:Connection to If node "..." uses sourceIndex=N. Consider using branch="true" or branch="false" for better clarity. If node outputs: main[0]=TRUE branch, main[1]=FALSE branch.(实现见 workflow-diff-engine)。
工具文档把这一点列为关键陷阱:"Using sourceIndex=0 for multiple connections will put them ALL on the TRUE branch (main[0]), breaking your workflow logic!" README 也有同样的提示:不写branch参数时,两条连线可能都落在同一输出上。
用 branch 参数重连两条分支
IF 节点(n8n-nodes-base.if)支持语义化的branch智能参数,它会被解析成底层索引:
branch: "true"→sourceIndex=0(TRUE 分支)branch: "false"→sourceIndex=1(FALSE 分支)
把下面两条操作放进同一个批次提交(id换成你的工作流 ID,节点名换成实际节点名;工具文档建议始终附带具体的intent描述):
// 文档示例:两条 addConnection 分别指定 branch,确保各走各的输出 n8n_update_partial_workflow({ id: "workflow-id", intent: "Route IF node true branch to success handler, false branch to error handler", operations: [ {type: "addConnection", source: "IF", target: "Success Handler", branch: "true"}, {type: "addConnection", source: "IF", target: "Error Handler", branch: "false"} ] })对应的独立示例可参考 workflow-diff-examples.md 的 Smart Parameters for IF Nodes 一节,其中注明branch: "false"等价于路由到 false 分支(sourceIndex=1)。
如果错误连线已经存在、只是接错了分支,用rewireConnection改目标即可,同样支持branch智能参数(见 工具示例):
// 文档示例:把接错分支的连线改到目标节点 n8n_update_partial_workflow({ id: "workflow-id", operations: [ {type: "rewireConnection", source: "IF", from: "Old True Handler", to: "New True Handler", branch: "true"} ] })先用 validateOnly 预检再应用
默认是原子模式:批次里任一操作失败,整批都不应用。提交前先带validateOnly: true跑一遍,只校验不落库;返回校验结果确认无误后再去掉该参数正式应用(参数定义见 工具文档):
// 文档示例:先预检 n8n_update_partial_workflow({ id: "workflow-id", validateOnly: true, operations: [ {type: "addConnection", source: "IF", target: "Success Handler", branch: "true"}, {type: "addConnection", source: "IF", target: "Error Handler", branch: "false"} ] })正式应用的响应包含operationsApplied(以及是否持久化的saved字段)。
验证修正结果
- 用
n8n_get_workflow带 mode"structure"查看当前连接结构,确认 IF 节点的两个目标分别位于main[0]和main[1](工具文档的返回说明即建议此方式核对状态)。 - 再次校验时,
CONDITIONAL_BRANCH_FANOUT告警不应再出现;它只在整个连接都挤在main[0]时才触发,修正后 false 分支有了独立目标,告警自然消失。
边界与限制
- 显式
sourceIndex会覆盖branch:同时给出两者时以sourceIndex为准(工具文档 的 Smart Parameters 一节)。修正时不要两种写法混用。 branch只对 IF 节点生效:对其它节点类型会被忽略;Switch 节点应改用case=N(case=0第一个输出,case=N第 N 个输出),同样的"多个目标落在同一输出"问题对 Switch 同样存在。- 自动清理的
cleanStaleConnections只处理引用不存在节点的断连,不会自动纠正分支接错的问题;分支接错要靠上面branch/case重写。 - 如果校验在自动修复后仍失败,工具文档给出的恢复路径是:查看具体错误详情、用校验工具列出全部错误、连接问题用
cleanStaleConnections、分支不匹配则补上缺失的输出连线。
【免费下载链接】n8n-mcpA MCP for Claude Desktop / Claude Code / Windsurf / Cursor to build n8n workflows for you项目地址: https://gitcode.com/GitHub_Trending/n8/n8n-mcp
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考