n8n-validation-expert
How to Install
git clone https://github.com/czlonkowski/n8n-skills && cp skills/n8n-validation-expert ~/.claude/skills/Copy SKILL.md into your .cursorrules filen8n Validation Expert
Expert guide for interpreting and fixing n8n validation errors.
When to Use
- You need to interpret or fix validation errors in an n8n workflow.
- The task involves
missing_required,invalid_value, expression failures, or iterative validate-fix loops. - You want concrete remediation guidance for workflow validation output.
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 provided
- invalid_value - Value doesn't match allowed options
- type_mismatch - Wrong data type (string instead of number)
- invalid_reference - Referenced node doesn't exist
- invalid_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 required
- deprecated - Using old API/feature
- performance - 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 efficient
- alternative - 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
1. missing_required
What it means: A required field is not provided
How to fix:
1. Use get_node to see required fields
2. Add the missing field to your configuration
3. Provide an appropriate value
Example:
// Error
{
"type": "missing_required",
"property": "channel",
"message": "Channel name is required"
}
// Fix
config.channel = "#general";
2. invalid_value
What it means: Value doesn't match allowed options
How to fix:
1. Check error message for allowed values
2. Use get_node to see options
3. Update to a valid value
Example:
// Error
{
"type": "invalid_value",
"property": "operation",
"message": "Operation must be one of: post, update, delete",
"current": "send"
}
// Fix
config.operation = "post"; // Use valid operation
3. type_mismatch
What it means: Wrong data type for field
How to fix: 1. Check expected type in error message 2. Convert value to correct type
Example:
// Error
{
"type": "type_mismatch",
"property": "limit",
"message": "Expected number, got string",
"current": "100"
}
// Fix
config.limit = 100; // Number, not string
4. invalid_expression
What it means: Expression syntax error
How to fix:
1. Use n8n Expression Syntax skill
2. Check for missing {{}} or typos
3. Verify node/field references
Example:
// Error
{
"type": "invalid_expression",
"property": "text",
"message": "Invalid expression: $json.name",
"current": "$json.name"
}
// Fix
config.text = "={{$json.name}}"; // Add {{}}
5. invalid_reference
What it means: Referenced node doesn't exist
How to fix: 1. Check node name spelling 2. Verify node exists in workflow 3. Update reference to correct name
Example:
// Error
{
"type": "invalid_reference",
"property": "expression",
"message": "Node 'HTTP Requets' does not exist",
"current": "={{$node['HTTP Requets'].json.data}}"
}
// Fix - correct typo
config.expression = "={{$node['HTTP Request'].json.data}}";
Auto-Sanitization System
What It Does
Automatically fixes common operator structure issues on ANY workflow update
Runs when:
- n8n_create_workflow
- n8n_update_partial_workflow
- Any workflow save operation
What It Fixes
1. Binary Operators (Two Values)
Operators: equals, notEquals, contains, notContains, greaterThan, lessThan, startsWith, endsWith
Fix: Removes singleValue property (binary operators compare two values)
Before:
{
"type": "boolean",
"operation": "equals",
"singleValue": true // ❌ Wrong!
}
After (automatic):
{
"type": "boolean",
"operation": "equals"
// singleValue removed ✅
}
2. Unary Operators (One Value)
Operators: isEmpty, isNotEmpty, true, false
Fix: Adds singleValue: true (unary operators check single value)
Before:
{
"type": "boolean",
"operation": "isEmpty"
// Missing singleValue ❌
}
After (automatic):
{
"type": "boolean",
"operation": "isEmpty",
"singleValue": true // ✅ Added
}
3. IF/Switch Metadata
Fix: Adds complete conditions.options metadata for IF v2.2+ and Switch v3.2+
What It CANNOT Fix
1. Broken Connections
References to non-existent nodes
Solution: Use cleanStaleConnections operation in n8n_update_partial_workflow
2. Branch Count Mismatches
3 Switch rules but only 2 output connections
Solution: Add missing connections or remove extra rules
3. Paradoxical Corrupt States
API returns corrupt data but rejects updates
Solution: May require manual database intervention
False Positives
What Are They?
Validation warnings that are technically "wrong" but acceptable in your use case
Common False Positives
1. "Missing error handling"
Warning: No error handling configured
When acceptable: - Simple workflows where failures are obvious - Testing/development workflows - Non-critical notifications
When to fix: Production workflows handling important data
2. "No retry logic"
Warning: Node doesn't retry on failure
When acceptable: - APIs with their own retry logic - Idempotent operations - Manual trigger workflows
When to fix: Flaky external services, production automation
3. "Missing rate limiting"
Warning: No rate limiting for API calls
When acceptable: - Internal APIs with no limits - Low-volume workflows - APIs with server-side rate limiting
When to fix: Public APIs, high-volume workflows
4. "Unbounded query"
Warning: SELECT without LIMIT
When acceptable: - Small known datasets - Aggregation queries - Development/testing
When to fix: Production queries on large tables
Reducing False Positives
Use ai-friendly profile:
validate_node({
nodeType: "nodes-base.slack",
config: {...},
profile: "ai-friendly" // Fewer false positives
})
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
1. Check valid field
if (result.valid) {
// ✅ Configuration is valid
} else {
// ❌ Has errors - must fix before deployment
}
2. Fix errors first
result.errors.forEach(error => {
console.log(`Error in ${error.property}: ${error.message}`);
console.log(`Fix: ${error.fix}`);
});
3. Review warnings
result.warnings.forEach(warning => {
console.log(`Warning: ${warning.message}`);
console.log(`Suggestion: ${warning.suggestion}`);
// Decide if you need to address this
});
4. Consider suggestions
// Optional improvements
// Not required but may enhance workflow
Workflow Validation
validate_workflow (Structure)
Validates entire workflow, not just individual nodes
Checks: 1. Node configurations - Each node valid 2. Connections - No broken references 3. Expressions - Syntax and references valid 4. 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:
1. Note required fields from get_node
2. Create minimal valid configuration
3. Add features incrementally
4. Validate after each addition
Strategy 2: Binary Search
When: Workflow validates but executes incorrectly
Steps: 1. Remove half the nodes 2. Validate and test 3. If works: problem is in removed nodes 4. If fails: problem is in remaining nodes 5. 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: Operator structure errors
Steps:
n8n_autofix_workflow({
id: "workflow-id",
applyFixes: false // Preview first
})
// Review fixes, then apply
n8n_autofix_workflow({
id: "workflow-id",
applyFixes: true
})
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!)
Detailed Guides
For comprehensive error catalogs and false positive examples:
- ERROR_CATALOG.md - Complete list of error types with examples
- FALSE_POSITIVES.md - When warnings are acceptable
Summary
Key Points: 1. Validation is iterative (avg 2-3 cycles, 23s + 58s) 2. Errors must be fixed, warnings are optional 3. Auto-sanitization fixes operator structures automatically 4. Use runtime profile for balanced validation 5. False positives exist - learn to recognize them 6. Read error messages - they contain fix guidance
Validation Process: 1. Validate → Read errors → Fix → Validate again 2. Repeat until valid (usually 2-3 iterations) 3. Review warnings and decide if acceptable 4. Deploy with confidence
Related Skills: - n8n MCP Tools Expert - Use validation tools correctly - n8n Expression Syntax - Fix expression errors - n8n Node Configuration - Understand required fields
Limitations
- Use this skill only when the task clearly matches the scope described above.
- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.
Details
| Category | Other → General |
| Source | https://github.com/czlonkowski/n8n-skills |
| Stars | ★ 5K |
| Risk Level | N/A |