Files
n8n-skills/skills/n8n-mcp-tools-expert/VALIDATION_GUIDE.md
czlonkowski 33e83c29dc refactor: Remove research context from skill content
Cleaned up all skills to remove research/telemetry context that was used
during design but is not needed at runtime when AI agents use the skills.

## Changes Made

### Pattern 1: Research Framing Removed
- "From analysis of X workflows/events" → Removed
- "From telemetry analysis:" → Replaced with operational context
- "Based on X real workflows" → Simplified to general statements

### Pattern 2: Popularity Metrics Removed
- "**Popularity**: Second most common (892 templates)" → Removed entirely
- "813 searches", "456 templates", etc. → Removed

### Pattern 3: Frequency Percentages Converted
- "**Frequency**: 45% of errors" → "Most common error"
- "**Frequency**: 28%" → "Second most common"
- "**Frequency**: 12%" → "Common error"
- Percentages in tables → Priority levels (Highest/High/Medium/Low)

### Pattern 4: Operational Guidance Kept
-  Success rates (91.7%) - helps tool selection
-  Average times (18s, 56s) - sets expectations
-  Relative priority (most common, typical) - guides decisions
-  Iteration counts (2-3 cycles) - manages expectations

## Files Modified (19 files across 4 skills)

**Skill #2: MCP Tools Expert (5 files)**
- Removed telemetry occurrence counts
- Kept success rates and average times

**Skill #3: Workflow Patterns (7 files)**
- Removed all popularity metrics from pattern files
- Removed "From analysis of 31,917 workflows"
- Removed template counts

**Skill #4: Validation Expert (4 files)**
- Converted frequency % to priority levels
- Removed "From analysis of 19,113 errors"
- Removed telemetry loop counts (kept iteration guidance)

**Skill #5: Node Configuration (3 files)**
- Removed workflow update counts
- Removed essentials call counts
- Kept success rates and timing guidance

## Result

Skills now provide clean, focused runtime guidance without research
justification. Content is more actionable for AI agents using the skills.

All technical guidance, examples, patterns, and operational metrics preserved.
Only removed: research methodology, data source attribution, and statistical
justification for design decisions.

🤖 Conceived by Romuald Członkowski - https://www.aiadvisors.pl/en
2025-10-20 11:45:04 +02:00

7.9 KiB

Configuration Validation Tools Guide

Complete guide for validating node configurations and workflows.


Validation Philosophy

Validate early, validate often

Validation is typically iterative with validate → fix cycles


validate_node_minimal (QUICK CHECK)

Success Rate: 97.4% | Speed: <100ms

Use when: Checking what fields are required

Syntax:

validate_node_minimal({
  nodeType: "nodes-base.slack",
  config: {}  // Empty to see all required fields
})

Returns:

{
  "valid": true,           // Usually true (most nodes have no strict requirements)
  "missingRequiredFields": []
}

When to use: Planning configuration, seeing basic requirements


validate_node_operation (FULL VALIDATION)

Success Rate: Varies | Speed: <100ms

Use when: Validating actual configuration before deployment

Syntax:

validate_node_operation({
  nodeType: "nodes-base.slack",
  config: {
    resource: "channel",
    operation: "create",
    channel: "general"
  },
  profile: "runtime"  // Recommended!
})

Validation Profiles

Choose based on your stage:

minimal - Only required fields

  • Fastest
  • Most permissive
  • Use: Quick checks during editing

runtime - Values + types (RECOMMENDED)

  • Balanced validation
  • Catches real errors
  • Use: Pre-deployment validation

ai-friendly - Reduce false positives

  • For AI-generated configs
  • Tolerates minor issues
  • Use: When AI configures nodes

strict - Maximum validation

  • Strictest rules
  • May have false positives
  • Use: Production deployment

Returns

{
  "valid": false,
  "errors": [
    {
      "type": "missing_required",
      "property": "name",
      "message": "Channel name is required",
      "fix": "Provide a channel name (lowercase, no spaces, 1-80 characters)"
    }
  ],
  "warnings": [
    {
      "type": "best_practice",
      "property": "errorHandling",
      "message": "Slack API can have rate limits",
      "suggestion": "Add onError: 'continueRegularOutput' with retryOnFail"
    }
  ],
  "suggestions": [],
  "summary": {
    "hasErrors": true,
    "errorCount": 1,
    "warningCount": 1
  }
}

Error Types

  • missing_required - Must fix
  • invalid_value - Must fix
  • type_mismatch - Must fix
  • best_practice - Should fix (warning)
  • suggestion - Optional improvement

validate_workflow (STRUCTURE VALIDATION)

Success Rate: 95.5% | Speed: 100-500ms

Use when: Checking complete workflow before execution

Syntax:

validate_workflow({
  workflow: {
    nodes: [...],        // Array of nodes
    connections: {...}   // Connections object
  },
  options: {
    validateNodes: true,       // Default: true
    validateConnections: true, // Default: true
    validateExpressions: true, // Default: true
    profile: "runtime"         // For node validation
  }
})

Validates:

  • Node configurations
  • Connection validity (no broken references)
  • Expression syntax ({{ }} patterns)
  • Workflow structure (triggers, flow)
  • AI connections (8 types)

Returns: Comprehensive validation report with errors, warnings, suggestions


Validation Loop Pattern

Typical cycle: 23s thinking, 58s fixing

1. Configure node
   ↓
2. validate_node_operation (23s thinking about errors)
   ↓
3. Fix errors
   ↓
4. validate_node_operation again (58s fixing)
   ↓
5. Repeat until valid

Example:

// Iteration 1
let config = {
  resource: "channel",
  operation: "create"
};

const result1 = validate_node_operation({
  nodeType: "nodes-base.slack",
  config,
  profile: "runtime"
});
// → Error: Missing "name"

// Iteration 2 (~58s later)
config.name = "general";

const result2 = validate_node_operation({
  nodeType: "nodes-base.slack",
  config,
  profile: "runtime"
});
// → Valid!

Auto-Sanitization System

When it runs: On ANY workflow update (create or update_partial)

What it fixes (automatically on ALL nodes):

  1. Binary operators (equals, contains, greaterThan) → removes singleValue
  2. Unary operators (isEmpty, isNotEmpty, true, false) → adds singleValue: true
  3. Invalid operator structures → corrects to proper format
  4. IF v2.2+ nodes → adds complete conditions.options metadata
  5. Switch v3.2+ nodes → adds complete conditions.options for all rules

What it CANNOT fix:

  • Broken connections (references to non-existent nodes)
  • Branch count mismatches (3 Switch rules but only 2 outputs)
  • Paradoxical corrupt states (API returns corrupt, rejects updates)

Example:

// Before auto-sanitization
{
  "type": "boolean",
  "operation": "equals",
  "singleValue": true  // ❌ Binary operators shouldn't have this
}

// After auto-sanitization (automatic!)
{
  "type": "boolean",
  "operation": "equals"
  // singleValue removed automatically
}

Recovery tools:

  • cleanStaleConnections operation - removes broken connections
  • n8n_autofix_workflow - preview/apply fixes

Binary vs Unary Operators

Binary operators (compare two values):

  • equals, notEquals, contains, notContains
  • greaterThan, lessThan, startsWith, endsWith
  • Must NOT have singleValue: true

Unary operators (check single value):

  • isEmpty, isNotEmpty, true, false
  • Must have singleValue: true

Auto-sanitization fixes these automatically!


Handling Validation Errors

Process

1. Read error message carefully
2. Check if it's a known false positive
3. Fix real errors
4. Validate again
5. Iterate until clean

Common Errors

"Required field missing" → Add the field with appropriate value

"Invalid value" → Check allowed values in essentials/documentation

"Type mismatch" → Convert to correct type (string/number/boolean)

"Cannot have singleValue" → Auto-sanitization will fix on next update

"Missing operator metadata" → Auto-sanitization will fix on next update

False Positives

Some validation warnings may be acceptable:

  • Optional best practices
  • Node-specific edge cases
  • Profile-dependent issues

Use ai-friendly profile to reduce false positives.


Best Practices

Do

  • Use runtime profile for pre-deployment
  • Validate after every configuration change
  • Fix errors immediately (avg 58s)
  • Iterate validation loop
  • Trust auto-sanitization for operator issues
  • Use minimal profile for quick checks

Don't

  • Skip validation before deployment
  • Ignore error messages
  • Use strict profile during development (too many warnings)
  • Assume validation passed (check result)
  • Try to manually fix auto-sanitization issues

Example: Complete Validation Workflow

// Step 1: Get node requirements
validate_node_minimal({
  nodeType: "nodes-base.slack",
  config: {}
});
// → Know what's required

// Step 2: Configure node
const config = {
  resource: "message",
  operation: "post",
  channel: "#general",
  text: "Hello!"
};

// Step 3: Validate configuration
const result = validate_node_operation({
  nodeType: "nodes-base.slack",
  config,
  profile: "runtime"
});

// Step 4: Check result
if (result.valid) {
  console.log("✅ Configuration valid!");
} else {
  console.log("❌ Errors:", result.errors);
  // Fix and validate again
}

// Step 5: Validate in workflow context
validate_workflow({
  workflow: {
    nodes: [{...config as node...}],
    connections: {...}
  }
});

Summary

Key Points:

  1. Use runtime profile (balanced validation)
  2. Validation loop: validate → fix (58s) → validate again
  3. Auto-sanitization fixes operator structures automatically
  4. Binary operators ≠ singleValue, Unary operators = singleValue: true
  5. Iterate until validation passes

Tool Selection:

  • validate_node_minimal: Quick check
  • validate_node_operation: Full config validation (use this!)
  • validate_workflow: Complete workflow check

Related: