How to install n8n-validation-expert
npx skills add https://github.com/czlonkowski/n8n-skills --skill n8n-validation-expertFull instructions (SKILL.md)
Source of truth, from czlonkowski/n8n-skills.
name: n8n-validation-expert description: Interpret validation errors and guide fixing them. Use when encountering validation errors, validation warnings, false positives, operator structure issues, or need help understanding validation results. Also use when asking about validation profiles, error types, the validation loop process, or auto-fix capabilities. Consult this skill whenever a validate_node or validate_workflow call returns errors or warnings — it knows which warnings are false positives and which errors need real fixes.
n8n Validation Expert
Expert guide for interpreting and fixing n8n validation errors.
Validation Philosophy
Validate early, validate often
Validation is typically iterative:
- Expect validation feedback loops
- Usually 2-3 validate → fix cycles
- Average: 23s thinking about errors, 58s fixing them
Key insight: Validation is an iterative process, not one-shot!
Error Severity Levels
1. Errors (Must Fix)
Blocks workflow execution - Must be resolved before activation
Types:
missing_required- Required field not providedinvalid_value- Value doesn't match allowed optionstype_mismatch- Wrong data type (string instead of number)invalid_reference- Referenced node doesn't existinvalid_expression- Expression syntax error
Example:
{
"type": "missing_required",
"property": "channel",
"message": "Channel name is required",
"fix": "Provide a channel name (lowercase, no spaces, 1-80 characters)"
}
2. Warnings (Should Fix)
Doesn't block execution - Workflow can be activated but may have issues
Types:
best_practice- Recommended but not requireddeprecated- Using old API/featureperformance- Potential performance issue
Example:
{
"type": "best_practice",
"property": "errorHandling",
"message": "Slack API can have rate limits",
"suggestion": "Add onError: 'continueRegularOutput' with retryOnFail"
}
3. Suggestions (Optional)
Nice to have - Improvements that could enhance workflow
Types:
optimization- Could be more efficientalternative- Better way to achieve same result
The Validation Loop
Pattern from Telemetry
7,841 occurrences of this pattern:
1. Configure node
↓
2. validate_node (23 seconds thinking about errors)
↓
3. Read error messages carefully
↓
4. Fix errors
↓
5. validate_node again (58 seconds fixing)
↓
6. Repeat until valid (usually 2-3 iterations)
Example
// Iteration 1
let config = {
resource: "channel",
operation: "create"
};
const result1 = validate_node({
nodeType: "nodes-base.slack",
config,
profile: "runtime"
});
// → Error: Missing "name"
// ⏱️ 23 seconds thinking...
// Iteration 2
config.name = "general";
const result2 = validate_node({
nodeType: "nodes-base.slack",
config,
profile: "runtime"
});
// → Error: Missing "text"
// ⏱️ 58 seconds fixing...
// Iteration 3
config.text = "Hello!";
const result3 = validate_node({
nodeType: "nodes-base.slack",
config,
profile: "runtime"
});
// → Valid! ✅
This is normal! Don't be discouraged by multiple iterations.
Validation Profiles
Choose the right profile for your stage:
minimal
Use when: Quick checks during editing
Validates:
- Only required fields
- Basic structure
Pros: Fastest, most permissive Cons: May miss issues
runtime (RECOMMENDED)
Use when: Pre-deployment validation
Validates:
- Required fields
- Value types
- Allowed values
- Basic dependencies
Pros: Balanced, catches real errors Cons: Some edge cases missed
This is the recommended profile for most use cases
ai-friendly
Use when: AI-generated configurations
Validates:
- Same as runtime
- Reduces false positives
- More tolerant of minor issues
Pros: Less noisy for AI workflows Cons: May allow some questionable configs
strict
Use when: Production deployment, critical workflows
Validates:
- Everything
- Best practices
- Performance concerns
- Security issues
Pros: Maximum safety Cons: Many warnings, some false positives
Common Error Types
Five core error types, in rough order of frequency:
missing_required— a required field isn't provided. Useget_nodeto see required fields, then add it.invalid_value— value doesn't match allowed options (enums are case-sensitive). Check the error's allowed list orget_node.type_mismatch— wrong data type (string"100"vs number100). Convert to the expected type.invalid_expression— expression syntax error (missing{{}}, typos). See the n8n Expression Syntax skill.invalid_reference— referenced node doesn't exist (renamed, deleted, or misspelled). Fix the name orcleanStaleConnections.
A sixth class, patchNodeField errors (find-not-found, ambiguous match, invalid/unsafe regex), surfaces when a patchNodeField op fails during n8n_update_partial_workflow — it's strict by design and errors rather than silently continuing.
Every type above has worked examples (broken config → fix) plus the patchNodeField error cases and their fixes in ERROR_CATALOG.md.
Auto-Sanitization System
Automatically fixes common operator structure issues on ANY workflow update — n8n_create_workflow, n8n_update_partial_workflow, or any save. Trust it; don't hand-fix these.
What it fixes:
- Binary operators (equals, notEquals, contains, notContains, greaterThan, lessThan, startsWith, endsWith) — removes the wrong
singleValueproperty. - Unary operators (isEmpty, isNotEmpty, true, false) — adds
singleValue: true. - IF/Switch metadata — adds complete
conditions.optionsmetadata for IF v2.2+ and Switch v3.2+.
What it CANNOT fix (handle manually): broken connections to non-existent nodes (use cleanStaleConnections), branch-count mismatches (add/remove connections or rules), and paradoxical corrupt states (may need manual DB intervention).
Before/after examples and the full cannot-fix detail are in ERROR_CATALOG.md (Auto-Sanitization sections).
False Positives
Validation warnings that are technically "wrong" but acceptable in your use case. Not every warning needs a fix — many are context-dependent. Common ones and when each is acceptable vs. worth fixing:
- "Missing error handling" — OK for dev/testing and non-critical notifications; fix for production handling important data.
- "No retry logic" — OK for idempotent ops, APIs with their own retry, manual triggers; fix for flaky external services and production automation.
- "Missing rate limiting" — OK for internal/low-volume/server-side-limited APIs; fix for public, high-volume APIs.
- "Unbounded query" — OK for small known datasets, aggregations, dev/testing; fix for production queries on large tables.
Reduce false positives with the ai-friendly profile (e.g. validate_node({nodeType, config, profile: "ai-friendly"})).
Full per-case guidance, security/credential warnings, known n8n false-positive issues (#304, #306, #338), profile strategies, the "should I fix this?" decision framework, and how to document accepted warnings are in FALSE_POSITIVES.md.
Validation Result Structure
Complete Response
{
"valid": false,
"errors": [
{
"type": "missing_required",
"property": "channel",
"message": "Channel name is required",
"fix": "Provide a channel name (lowercase, no spaces)"
}
],
"warnings": [
{
"type": "best_practice",
"property": "errorHandling",
"message": "Slack API can have rate limits",
"suggestion": "Add onError: 'continueRegularOutput'"
}
],
"suggestions": [
{
"type": "optimization",
"message": "Consider using batch operations for multiple messages"
}
],
"summary": {
"hasErrors": true,
"errorCount": 1,
"warningCount": 1,
"suggestionCount": 1
}
}
How to Read It
- Check
validfirst —truemeans the config is valid;falsemeans there are errors to fix before deployment. - Fix
errorsfirst — each carries aproperty,message, andfix. These must be resolved. - Review
warnings— each has amessageandsuggestion; decide per-case whether to address it (see False Positives above). - Consider
suggestions— optional improvements, not required.
Workflow Validation
validate_workflow (Structure)
Validates entire workflow, not just individual nodes
Checks:
- Node configurations - Each node valid
- Connections - No broken references
- Expressions - Syntax and references valid
- Flow - Logical workflow structure
Example:
validate_workflow({
workflow: {
nodes: [...],
connections: {...}
},
options: {
validateNodes: true,
validateConnections: true,
validateExpressions: true,
profile: "runtime"
}
})
Common Workflow Errors
1. Broken Connections
{
"error": "Connection from 'Transform' to 'NonExistent' - target node not found"
}
Fix: Remove stale connection or create missing node
2. Circular Dependencies
{
"error": "Circular dependency detected: Node A → Node B → Node A"
}
Fix: Restructure workflow to remove loop
3. Multiple Start Nodes
{
"warning": "Multiple trigger nodes found - only one will execute"
}
Fix: Remove extra triggers or split into separate workflows
4. Disconnected Nodes
{
"warning": "Node 'Transform' is not connected to workflow flow"
}
Fix: Connect node or remove if unused
Recovery Strategies
Strategy 1: Start Fresh
When: Configuration is severely broken
Steps:
- Note required fields from
get_node - Create minimal valid configuration
- Add features incrementally
- Validate after each addition
Strategy 2: Binary Search
When: Workflow validates but executes incorrectly
Steps:
- Remove half the nodes
- Validate and test
- If works: problem is in removed nodes
- If fails: problem is in remaining nodes
- Repeat until problem isolated
Strategy 3: Clean Stale Connections
When: "Node not found" errors
Steps:
n8n_update_partial_workflow({
id: "workflow-id",
operations: [{
type: "cleanStaleConnections"
}]
})
Strategy 4: Use Auto-fix
When: Validation errors that can be automatically resolved
Steps:
// Preview fixes (default - doesn't apply)
n8n_autofix_workflow({
id: "workflow-id",
applyFixes: false,
confidenceThreshold: "medium" // high, medium, low
})
// Review fixes, then apply
n8n_autofix_workflow({
id: "workflow-id",
applyFixes: true
})
Auto-Fix Capabilities
The n8n_autofix_workflow tool can fix these issue types:
- expression-format - Missing
=prefix in expressions (e.g.,{{ $json.field }}→={{ $json.field }}) - typeversion-correction - Downgrades nodes with unsupported typeVersions
- error-output-config - Removes conflicting onError settings
- node-type-correction - Fixes unknown node types using similarity matching (90%+ confidence)
- webhook-missing-path - Generates UUIDs for webhook nodes missing path configuration
- typeversion-upgrade - Smart upgrades to latest node versions with auto-migration
- version-migration - Guidance for complex breaking changes requiring manual steps
Confidence levels: high (90%+, safe to auto-apply), medium (70-89%, review recommended), low (<70%, manual review required)
// Preview all fixes
n8n_autofix_workflow({id: "workflow-id"})
// Only apply high-confidence fixes
n8n_autofix_workflow({
id: "workflow-id",
applyFixes: true,
confidenceThreshold: "high"
})
// Target specific fix types
n8n_autofix_workflow({
id: "workflow-id",
fixTypes: ["expression-format", "typeversion-upgrade"],
applyFixes: true
})
Post-update guidance: For version upgrades, check the postUpdateGuidance field in the response for step-by-step migration instructions.
Best Practices
✅ Do
- Validate after every significant change
- Read error messages completely
- Fix errors iteratively (one at a time)
- Use
runtimeprofile for pre-deployment - Check
validfield before assuming success - Trust auto-sanitization for operator issues
- Use
get_nodewhen unclear about requirements - Document false positives you accept
❌ Don't
- Skip validation before activation
- Try to fix all errors at once
- Ignore error messages
- Use
strictprofile during development (too noisy) - Assume validation passed (always check result)
- Manually fix auto-sanitization issues
- Deploy with unresolved errors
- Ignore all warnings (some are important!)
Reviewing an existing workflow
Validating as you build (the loop above) is for catching schema and shape errors in your own in-progress work. Reviewing an existing workflow — yours or one you've been handed — is a different job: the workflow already passes validate_workflow clean, and you're hunting for the issues validation doesn't see (silent connection bugs, injection-prone queries, dropped-item Switches, Set/Code antipatterns, missing error paths). For that, pull the workflow with n8n_get_workflow and walk REVIEW_CHECKLIST.md — a severity-tiered audit (MUST FIX / SHOULD FIX / NICE TO HAVE) where every item points to the canonical skill for the fix. Run n8n_audit_instance alongside it to surface hardcoded secrets and unauthenticated webhooks across the whole instance.
Detailed Guides
For comprehensive error catalogs, false positives, and workflow review:
- ERROR_CATALOG.md - Complete list of error types with examples
- FALSE_POSITIVES.md - When warnings are acceptable
- REVIEW_CHECKLIST.md - Severity-tiered audit for reviewing an existing workflow
Summary
Key Points:
- Validation is iterative (avg 2-3 cycles, 23s + 58s)
- Errors must be fixed, warnings are optional
- Auto-sanitization fixes operator structures automatically
- Use runtime profile for balanced validation
- False positives exist - learn to recognize them
- Read error messages - they contain fix guidance
Validation Process:
- Validate → Read errors → Fix → Validate again
- Repeat until valid (usually 2-3 iterations)
- Review warnings and decide if acceptable
- Deploy with confidence
Related Skills & Tools:
- n8n MCP Tools Expert - Use validation tools correctly
- n8n Expression Syntax - Fix expression errors
- n8n Node Configuration - Understand required fields
n8n_audit_instance- Proactive security validation (hardcoded secrets, unauthenticated webhooks, missing error handling, data retention)
Related skills
More from czlonkowski/n8n-skills and the wider catalog.
n8n-workflow-patterns
Proven workflow architectural patterns from real n8n workflows. Use when building new workflows, designing workflow structure, choosing workflow patterns, planning workflow architecture, or asking about webhook processing, HTTP API integration, database operations, AI agent workflows, batch processing, or scheduled tasks. Always consult this skill when the user asks to create, build, or design an n8n workflow, automate a process, or connect services — even if they don't explicitly mention 'patterns'. Covers webhook, API, database, AI, batch processing, and scheduled automation architectures. Also use when optimizing a slow workflow or speeding up large-item-count processing (node count, batchSize, all-items vs per-item).
n8n-mcp-tools-expert
Expert guide for using n8n-mcp MCP tools effectively. Use when searching for nodes, validating configurations, accessing templates, managing workflows, managing credentials, auditing instance security, or using any n8n-mcp tool. Provides tool selection guidance, parameter formats, and common patterns. IMPORTANT — Always consult this skill before calling any n8n-mcp tool — it prevents common mistakes like wrong nodeType formats, incorrect parameter structures, and inefficient tool usage. If the user mentions n8n, workflows, nodes, or automation and you have n8n MCP tools available, use this skill first.
n8n-node-configuration
Operation-aware node configuration guidance. Use when configuring nodes, understanding property dependencies, determining required fields, choosing between get_node detail levels, or learning common configuration patterns by node type. Always use this skill when setting up node parameters — it explains which fields are required for each operation, how displayOptions control field visibility, and when to use patchNodeField for surgical edits vs full node updates.
n8n-code-javascript
Write JavaScript code in n8n Code nodes. Use when writing JavaScript in n8n, using $input/$json/$node syntax, making HTTP requests with this.helpers / the $helpers global, working with dates using DateTime, troubleshooting Code node errors, choosing between Code node modes, or doing any custom data transformation in n8n. Always use this skill when a workflow needs a Code node — whether for data aggregation, filtering, API calls, format conversion, batch processing logic, or any custom JavaScript. Covers SplitInBatches loop patterns, cross-iteration data, pairedItem, and real-world production patterns. Also use when asked why a Code node or workflow is slow, which execution mode is faster, or how to cut per-item overhead on large datasets. EXCEPTION — for the AI-agent-callable Custom Code Tool (@n8n/n8n-nodes-langchain.toolCode, a tool attached to an AI Agent), use the n8n-code-tool skill instead; it has a different runtime contract.
n8n-expression-syntax
Validate n8n expression syntax and fix common errors. Use when writing n8n expressions, using {{}} syntax, accessing $json/$node variables, troubleshooting expression errors, mapping data between nodes, or referencing webhook data in workflows. Use this skill whenever configuring node fields that reference data from previous nodes — expressions are how n8n passes data between nodes, and getting the syntax wrong is the most common source of workflow errors. Also use when asked whether a complex expression hurts performance.
n8n-code-python
Write Python code in n8n Code nodes. Use when writing Python in n8n, using _input/_json/_node syntax, working with standard library, or need to understand Python limitations in n8n Code nodes. Use this skill when the user specifically requests Python for an n8n Code node. Note — JavaScript is recommended for 95% of use cases — only use Python when the user explicitly prefers it or the task requires Python-specific standard library capabilities (regex, hashlib, statistics). EXCEPTION — for Python in the AI-agent-callable Custom Code Tool (@n8n/n8n-nodes-langchain.toolCode), use the n8n-code-tool skill instead (input is _query, return must be a string).