解释验证错误并指导修复。当遇到验证错误、验证警告、误报、操作符结构问题,或需要帮助理解验证结果时使用。也可在询问验证配置文件、错误类型、验证循环过程或自动修复功能时使用。每当 validate_node 或 validate_workflow 调用返回错误或警告时,请咨询此技能——它知道哪些警告是误报,哪些错误需要真正修复。
n8n 验证专家
解释和修复 n8n 验证错误的专家指南。
验证理念
尽早验证,经常验证
验证通常是迭代的:
- 预期验证反馈循环
- 通常需要 2-3 次验证→修复循环
- 平均:23 秒思考错误,58 秒修复错误
关键洞察:验证是一个迭代过程,而非一次性操作!
错误严重级别
1. 错误(必须修复)
阻止工作流执行 - 必须在激活前解决
类型:
missing_required- 未提供必填字段invalid_value- 值与允许的选项不匹配type_mismatch- 数据类型错误(字符串而非数字)invalid_reference- 引用的节点不存在invalid_expression- 表达式语法错误
示例:
{
"type": "missing_required",
"property": "channel",
"message": "频道名称是必填项",
"fix": "提供一个频道名称(小写,无空格,1-80 个字符)"
}
2. 警告(建议修复)
不阻止执行 - 工作流可以激活,但可能存在问题
类型:
best_practice- 推荐但非必需——仅在ai-friendly/strict下出现deprecated- 使用旧 API/功能——在每个配置文件下都出现security- 硬编码密钥、未认证的 webhook——在每个配置文件下都出现performance- 潜在性能问题——建议性,ai-friendly/strict
示例(最佳实践——在 ai-friendly / strict 下出现):
{
"type": "warning",
"nodeName": "Slack",
"message": "Slack API 可能存在速率限制和瞬时故障"
}
3. 建议(可选)
锦上添花 - 可以改进工作流的优化
类型:
optimization- 可以更高效alternative- 实现相同结果的更好方法
验证循环
来自遥测数据的模式
7,841 次出现此模式:
1. 配置节点
↓
2. validate_node(23 秒思考错误)
↓
3. 仔细阅读错误消息
↓
4. 修复错误
↓
5. 再次 validate_node(58 秒修复)
↓
6. 重复直到有效(通常 2-3 次迭代)
示例
// 迭代 1
let config = {
resource: "channel",
operation: "create"
};
const result1 = validate_node({
nodeType: "nodes-base.slack",
config,
profile: "runtime"
});
// → 错误:缺少 "name"
// ⏱️ 23 秒思考...
// 迭代 2
config.name = "general";
const result2 = validate_node({
nodeType: "nodes-base.slack",
config,
profile: "runtime"
});
// → 错误:缺少 "text"
// ⏱️ 58 秒修复...
// 迭代 3
config.text = "Hello!";
const result3 = validate_node({
nodeType: "nodes-base.slack",
config,
profile: "runtime"
});
// → 有效!✅
这是正常的! 不要因多次迭代而气馁。
验证配置文件
四个配置文件是累积的(n8n-mcp ≥ 2.63.0):每个配置文件都会显示比前一个更多的内容。分界线是最佳实践建议——minimal 和 runtime 不显示它们;ai-friendly 和 strict 会添加它们。错误在所有配置文件中相同,除了 minimal 跳过一些配置级检查(例如对显式 operation 的枚举验证)。安全性和弃用警告在每个配置文件下都会显示。
minimal
何时使用:在连接工作流时进行快速结构检查。
显示:会阻止执行的硬错误(缺少必填字段、空代码、断开的连接)。跳过枚举检查和所有建议。
最快且最宽松。
runtime(推荐默认)
何时使用:在构建过程中进行持续验证;日常使用的配置文件。
显示:错误(必填字段、值类型、允许的值、依赖项、断开的引用)以及安全性和弃用警告。不包含最佳实践建议。
平衡——捕获所有会破坏工作流的问题,对风格保持沉默。
ai-friendly
何时使用:在部署前希望获得最佳实践建议。
显示:runtime 的所有内容,加上最佳实践建议——每个节点的“无错误处理”建议、“webhook 应始终发送响应”、速率限制说明、过时的 typeVersion 建议、cachedResultName 和长链提示。
注意:ai-friendly 比 runtime 更严格,而非更宽松。(旧文档描述它减少了误报——那仅在配置文件门控损坏时成立;现已修复。)
strict
何时使用:强化生产关键工作流。
显示:ai-friendly 的所有内容,加上剩余属性检查(“属性 'X' 不会被使用——在当前设置下不可见”)。
最大程度检查。 随着误报在源头被修复,其警告是需要权衡的建议,而非需要对抗的噪音。
常见错误类型
五种核心错误类型,按频率大致排序:
missing_required— 未提供必填字段。使用get_node查看必填字段,然后添加。invalid_value— 值与允许的选项不匹配(枚举区分大小写)。检查错误的允许列表或get_node。type_mismatch— 数据类型错误(字符串"100"与数字100)。转换为预期类型。invalid_expression— 表达式语法错误(缺少{{}}、拼写错误)。请参阅 n8n 表达式语法技能。invalid_reference— 引用的节点不存在(已重命名、删除或拼写错误)。修复名称或使用cleanStaleConnections。
第六类,patchNodeField 错误(未找到、模糊匹配、无效/不安全的正则表达式),在 n8n_update_partial_workflow 期间 patchNodeField 操作失败时出现——它设计上很严格,会报错而不是静默继续。
上述每种类型都有工作示例(错误配置→修复),以及 patchNodeField 错误案例及其修复,详见 ERROR_CATALOG.md。
自动清理系统
在任何工作流更新时自动规范化常见的操作符结构——n8n_create_workflow、n8n_update_partial_workflow 或任何保存操作。请信任它;不要手动修复这些。
保存时规范化的内容:
- 二元操作符(equals、notEquals、contains、notContains、greaterThan、lessThan、startsWith、endsWith)——移除多余的
singleValue属性。 - 一元操作符(isEmpty、isNotEmpty、true、false)——添加
singleValue: true。 - IF/Switch 元数据——为 IF v2.2+ 和 Switch v3.2+ 填充
conditions.options。
验证不再对这些形状报错(n8n-mcp ≥ 2.63.0)。n8n 从操作符名称派生一元性,并默认 conditions.options 子字段,因此 validate_node / validate_workflow 接受条件,无论 singleValue 和选项元数据是否存在——清理器仅在保存时整理规范形式。(旧服务器错误地对未规范化的形状报错;如果看到这种情况,请升级。)仍然是真正错误的情况:v2 节点上的 v1 形状的 conditions 对象、没有条件的空过滤器,以及 v2 结构中的旧版 v1 操作符名称(例如 smaller)。
清理器无法修复的内容(手动处理):连接到不存在节点的断开的连接(使用 cleanStaleConnections)、分支计数不匹配(添加/删除连接或规则),以及矛盾的损坏状态(可能需要手动数据库干预)。
前后示例和完整的无法修复细节见 ERROR_CATALOG.md(自动清理部分)。
误报
验证器重写(n8n-mcp ≥ 2.63.0)移除了经典的误报——表达式中的模板字面量、可选链、省略操作默认值、Webhook → Respond-to-Webhook 模式、IF/Filter 旧版形状等不再触发。没有固定的“已知误报忽略列表”。
剩下的最佳实践建议(仅在 ai-friendly / strict 下显示)标记了真实的权衡,但在你的情况下可能是可接受的。并非每条建议都需要修复——许多取决于上下文。常见的建议以及何时可接受与值得修复:
- "...无错误处理" — 对于开发/测试和非关键通知可以接受;对于处理重要数据的生产环境需要修复。(绝不是硬错误——风格不会阻止执行。)
- "无重试逻辑" — 对于幂等操作、自带重试的 API、手动触发器可以接受;对于不稳定的外部服务和生产自动化需要修复。
- "...速率限制和瞬时故障" — 对于内部/低流量/服务端限制的 API 可以接受;对于公共、高流量 API 需要修复。
- "无界查询" — 对于小型已知数据集、聚合、开发/测试可以接受;对于大型表的生产查询需要修复。
相比之下,安全性和弃用警告在每个配置文件下都会显示,应视为真实问题。
完整的逐案例指导、验证器不再标记的内容列表、配置文件策略、“我应该修复这个吗?”决策框架,以及如何记录已接受建议,详见 FALSE_POSITIVES.md。
验证结果结构
完整响应
{
"valid": false,
"errors": [
{
"type": "missing_required",
"property": "channel",
"message": "频道名称是必填项",
"fix": "提供一个频道名称(小写,无空格)"
}
],
"warnings": [
{
"type": "best_practice",
"property": "errorHandling",
"message": "Slack API 可能存在速率限制",
"suggestion": "添加 onError: 'continueRegularOutput'"
}
],
"suggestions": [
{
"type": "optimization",
"message": "考虑对多条消息使用批量操作"
}
],
"summary": {
"hasErrors": true,
"errorCount": 1,
"warningCount": 1,
"suggestionCount": 1
}
}
如何阅读
- 首先检查
valid—true表示配置有效;false表示存在需要在部署前修复的错误。 - 首先修复
errors— 每个错误都带有property、message和fix。这些必须解决。 - 审查
warnings— 每个警告都有message和suggestion;根据具体情况决定是否处理(参见上面的误报)。 - 考虑
suggestions— 可选的改进,非必需。
工作流验证
validate_workflow(结构)
验证整个工作流,而不仅仅是单个节点
检查项:
- 节点配置 - 每个节点有效
- 连接 - 无断开的引用
- 表达式 - 语法和引用有效
- 流程 - 逻辑工作流结构
示例:
validate_workflow({
workflow: {
nodes: [...],
connections: {...}
},
options: {
validateNodes: true,
validateConnections: true,
validateExpressions: true,
profile: "runtime"
}
})
常见工作流错误
1. 断开的连接
{
"error": "从 'Transform' 到 'NonExistent' 的连接 - 目标节点未找到"
}
修复:移除过时的连接或创建缺失的节点
2. 循环(警告,非错误)
{
"warning": "工作流包含循环:节点 A → 节点 B → 节点 A"
}
循环是一个警告,而非硬错误(n8n-mcp ≥ 2.63.0)——运行时控制的循环(错误重试、数据驱动分页、反馈给路由器的节点)会执行完成,是合法的。仅当循环是无意的时才修复:确保循环有真正的退出条件(条件节点、错误输出或有界计数器),以免无限循环。
3. 多个起始节点
{
"warning": "找到多个触发器节点 - 只有一个会执行"
}
修复:移除多余的触发器或拆分为单独的工作流
4. 未连接的节点
{
"warning": "节点 'Transform' 未连接到工作流流程"
}
修复:连接节点,如果未使用则移除
恢复策略
策略 1:重新开始
何时使用:配置严重损坏
步骤:
- 从
get_node记录必填字段 - 创建最小的有效配置
- 逐步添加功能
- 每次添加后验证
策略 2:二分查找
何时使用:工作流验证通过但执行不正确
步骤:
- 移除一半节点
- 验证并测试
- 如果工作正常:问题在移除的节点中
- 如果失败:问题在剩余的节点中
- 重复直到问题隔离
策略 3:清理过时连接
何时使用:出现“节点未找到”错误
步骤:
n8n_update_partial_workflow({
id: "workflow-id",
operations: [{
type: "cleanStaleConnections"
}]
})
策略 4:使用自动修复
何时使用:验证错误可以自动解决
步骤:
// 预览修复(默认 - 不应用)
n8n_autofix_workflow({
id: "workflow-id",
applyFixes: false,
confidenceThreshold: "medium" // high, medium, low
})
// 审查修复,然后应用
n8n_autofix_workflow({
id: "workflow-id",
applyFixes: true
})
自动修复能力
n8n_autofix_workflow 工具可以修复以下问题类型:
- expression-format - 表达式中缺少
=前缀(例如,{{ $json.field }}→={{ $json.field }}) - typeversion-correction - 降级具有不受支持的 typeVersion 的节点
- error-output-config - 移除冲突的 onError 设置
- node-type-correction - 使用相似度匹配修复未知节点类型(90%+ 置信度)
- webhook-missing-path - 为缺少路径配置的 webhook 节点生成 UUID
- typeversion-upgrade - 智能升级到最新节点版本并自动迁移
- version-migration - 针对需要手动步骤的复杂破坏性变更的指导
置信度级别:high(90%+,安全自动应用)、medium(70-89%,建议审查)、low(<70%,需要手动审查)
// 预览所有修复
n8n_autofix_workflow({id: "workflow-id"})
// 仅应用高置信度修复
n8n_autofix_workflow({
id: "workflow-id",
applyFixes: true,
confidenceThreshold: "high"
})
// 针对特定修复类型
n8n_autofix_workflow({
id: "workflow-id",
fixTypes: ["expression-format", "typeversion-upgrade"],
applyFixes: true
})
更新后指导:对于版本升级,请检查响应中的 postUpdateGuidance 字段,获取逐步迁移说明。
最佳实践
✅ 应该做
- 每次重大更改后验证
- 完整阅读错误消息
- 迭代修复错误(一次一个)
- 部署前使用
runtime配置文件 - 在假设成功前检查
valid字段 - 信任操作符问题的自动清理
- 对要求不清楚时使用
get_node - 记录你接受的误报
❌ 不应该做
- 在激活前跳过验证
- 试图一次性修复所有错误
- 忽略错误消息
- 在开发期间使用
strict配置文件(太嘈杂) - 假设验证通过(始终检查结果)
- 手动修复自动清理问题
- 部署未解决的错误
- 忽略所有警告(有些很重要!)
审查现有工作流
在构建过程中验证(上面的循环)用于捕获你自己进行中的工作中的模式和形状错误。审查现有工作流——你自己的或别人交给你的——是另一项工作:工作流已经通过 validate_workflow 检查,你在寻找验证看不到的问题(静默连接错误、易注入的查询、丢弃项目的 Switch、Set/Code 反模式、缺失的错误路径)。为此,使用 n8n_get_workflow 拉取工作流,然后浏览 REVIEW_CHECKLIST.md——一个按严重级别分层的审计(必须修复 / 建议修复 / 锦上添花),其中每个项目都指向修复的规范技能。同时运行 n8n_audit_instance 以发现整个实例中的硬编码密钥和未认证的 webhook。
详细指南
有关全面的错误目录、误报和工作流审查:
- ERROR_CATALOG.md - 完整的错误类型列表及示例
- FALSE_POSITIVES.md - 何时警告是可接受的
- REVIEW_CHECKLIST.md - 审查现有工作流的严重级别审计
总结
关键点:
- 验证是迭代的(平均 2-3 个循环,23 秒 + 58 秒)
- 错误必须修复,警告是可选的
- 自动清理在保存时规范化操作符结构;验证不再对原始形状报错
- 默认使用 runtime 配置文件;升级到
ai-friendly/strict以获取最佳实践建议 - 经典误报已修复(≥ 2.63.0)——剩余的警告是建议或安全/弃用通知,而非验证器错误
- 阅读错误消息 - 它们包含修复指导
验证过程:
- 验证 → 阅读错误 → 修复 → 再次验证
- 重复直到有效(通常 2-3 次迭代)
- 审查警告并决定是否可接受
- 自信部署
相关技能和工具:
- n8n MCP 工具专家 - 正确使用验证工具
- n8n 表达式语法 - 修复表达式错误
- n8n 节点配置 - 了解必填字段
n8n_audit_instance- 主动安全验证(硬编码密钥、未认证的 webhook、缺失错误处理、数据保留)






