@awesomate/hosting-mcp
Version:
Awesomate MCP server — lets Claude manage your Awesomate WordPress hosting, plan, limits, n8n automations, and build Node/static apps + databases
415 lines (298 loc) • 12.9 kB
Markdown
<!--
VENDORED from n8n-builder@d293559 (n8n-validation-expert/SKILL.md) — DO NOT EDIT HERE.
Edit the source in ~/Projects/n8n-builder, then re-run:
node mcp/scripts/sync-n8n-references.mjs --write
Awesomate platform overrides — where this file conflicts with
../platform-notes.md, platform-notes wins:
- $env is BLOCKED fleet-wide → use {{ $vars.key || 'fallback' }}
- Task runners are ON → no $helpers in Code nodes; use HTTP Request nodes
- Webhook payloads live at $json.body
- saveExecutionProgress must stay false
-->
# n8n Validation Expert
Expert guide for interpreting n8n editor warnings and execution errors, and reviewing workflow JSON for configuration mistakes.
## How This Works
You don't have direct access to the user's n8n instance. The user pastes:
- **Editor warnings** - red/yellow indicators on nodes, "Problem in node" messages
- **Execution errors** - error output from a failed run
- **Workflow JSON** - exported or hand-written, to review before import
Your job: interpret the message, identify the node and field at fault, and propose an exact fix the user applies in their n8n editor.
## Debugging Philosophy
**Fix early, recheck often**
Debugging is typically iterative:
- Expect feedback loops
- Usually 2-3 fix → recheck cycles
- One error being fixed often reveals the next one
**Key insight**: Fixing errors 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** (editor message):
```
Problem in node 'Slack'
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**: Slack API can have rate limits → suggest `onError: 'continueRegularOutput'` with Retry On Fail enabled.
### 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 Fix-and-Recheck Loop
```
1. User pastes error / warning
↓
2. Identify the node and field at fault
↓
3. Read the error message carefully - it usually names the fix
↓
4. Propose the exact change (field, value, expression)
↓
5. User applies it, re-opens the node in the editor or re-executes
↓
6. Confirm the warning is gone - or interpret the next error
↓
7. Repeat until clean (usually 2-3 iterations)
```
### Example
```
// Iteration 1
User: "Problem in node 'Slack': Missing required field 'name'"
Fix: Set Channel Name (e.g. "general") in the node panel.
// Iteration 2 - user re-opens node, new warning appears
User: "Missing required field 'text'"
Fix: Set Message Text (e.g. "Hello!").
// Iteration 3 - user re-executes
User: "It ran!" ✅
```
**This is normal!** Don't be discouraged by multiple iterations - fixing one required field often surfaces the next.
## Review Methodology
When reviewing workflow JSON or a node configuration, check in this order:
### 1. Required fields first
Most errors are missing required fields. For each node, confirm the fields its operation needs are present (e.g. HTTP Request needs `url`; Slack post needs `channel` + `text`).
### 2. Value validity
Enum values (`resource`, `operation`, `method`) must match allowed options exactly - they are case-sensitive. Check formats (channel names, emails, URLs).
### 3. Data types
Numbers as numbers, booleans as booleans - not `"100"` or `"true"`.
### 4. Expressions
`{{}}` wrapping (with leading `=` in JSON), correct node names in `$node[...]` references, webhook data under `$json.body`.
### 5. Connections and structure
No connections to nodes that don't exist, Switch rules match output count, no accidentally disconnected nodes.
**Calibrate depth to stakes**: a quick required-fields pass is fine for dev/test workflows; production workflows deserve the full pass including error handling, retries, and rate limiting.
## Common Error Types
### 1. missing_required
**What it means**: A required field is not provided
**How to fix**:
1. Open the node in the editor - required fields are marked and highlighted when empty
2. Fill in the missing field with an appropriate value
**Example**:
```
Error: "Channel name is required" (property: channel)
Fix: Set Channel to "#general"
```
### 2. invalid_value
**What it means**: Value doesn't match allowed options
**How to fix**:
1. Check the error message for allowed values
2. Check the node's dropdown in the editor for valid options
3. Update to a valid value (match case exactly)
**Example**:
```
Error: "Operation must be one of: post, update, delete" (current: "send")
Fix: Set Operation to "post"
```
### 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: "Expected number, got string" (property: limit, current: "100")
Fix: limit: 100 (number, not string - remove the quotes in JSON)
```
### 4. invalid_expression
**What it means**: Expression syntax error
**How to fix**:
1. Use the n8n Expression Syntax skill
2. Check for missing `{{}}` or typos
3. Verify node/field references
**Example**:
```
Error: "Invalid expression: $json.name" (property: text)
Fix: "={{$json.name}}" - add the ={{}} wrapper
```
### 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: "Node 'HTTP Requets' does not exist"
Fix: "={{$node['HTTP Request'].json.data}}" - correct the typo
```
## Operator Structure (IF/Switch)
The n8n editor normalizes condition operator structures when you save a node. This matters mainly when **hand-writing workflow JSON for import** - get the structure right so conditions behave correctly:
### 1. Binary Operators (Two Values)
**Operators**: equals, notEquals, contains, notContains, greaterThan, lessThan, startsWith, endsWith
**Rule**: No `singleValue` property (binary operators compare two values)
```javascript
{
"type": "boolean",
"operation": "equals"
// no singleValue ✅
}
```
### 2. Unary Operators (One Value)
**Operators**: isEmpty, isNotEmpty, true, false
**Rule**: Must have `singleValue: true` (unary operators check a single value)
```javascript
{
"type": "boolean",
"operation": "isEmpty",
"singleValue": true // ✅ Required
}
```
### 3. IF/Switch Metadata
IF v2.2+ and Switch v3.2+ expect complete `conditions.options` metadata. The editor adds it on save - if reviewing JSON that was built in the editor, incomplete metadata will be filled in when the user opens and saves the node.
### What the Editor Cannot Fix
#### 1. Broken Connections
References to non-existent nodes in the `connections` object
**Solution**: Remove the stale entry from `connections` (or delete and re-draw the connection in the editor)
#### 2. Branch Count Mismatches
3 Switch rules but only 2 output connections
**Solution**: Add missing connections or remove extra rules
## False Positives
### What Are They?
Warnings that are technically "wrong" but acceptable - or plain incorrect - in your use case.
### Structural False Positives (Ignore)
#### 1. Community/custom nodes reported as "unknown"
Nodes from community packages (e.g. `CUSTOM.*`, `n8n-nodes-*`) show as unknown node types when reviewing JSON outside the instance that has them installed. If the target instance has the package, this is not an error.
#### 2. Cycles flagged in polling workflows
Loop-back connections (e.g. Wait → check status → loop back) get flagged as circular dependencies. Cycle-based polling is a legitimate pattern - a cycle is only a bug if there's no exit condition.
### Context-Dependent Warnings
#### 1. "Missing error handling"
**When acceptable**: Simple workflows, testing/development, non-critical notifications
**When to fix**: Production workflows handling important data
#### 2. "No retry logic"
**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"
**When acceptable**: Internal APIs with no limits, low-volume workflows
**When to fix**: Public APIs, high-volume workflows
#### 4. "Unbounded query"
**When acceptable**: Small known datasets, aggregation queries, development/testing
**When to fix**: Production queries on large tables
Full guide: **[FALSE_POSITIVES.md](FALSE_POSITIVES.md)**
## Reviewing Workflow JSON Before Import
When the user pastes a full workflow, check:
1. **Node configurations** - each node valid (required fields, values, types)
2. **Connections** - no broken references, counts match branch rules
3. **Expressions** - syntax and node references valid
4. **Flow** - logical workflow structure, triggers wired correctly
### Common Workflow-Level Errors
#### 1. Broken Connections
```
Connection from 'Transform' to 'NonExistent' - target node not found
```
**Fix**: Remove stale connection or create the missing node
#### 2. Circular Dependencies
```
Circular dependency detected: Node A → Node B → Node A
```
**Fix**: Restructure to remove the loop - unless it's intentional cycle-based polling with an exit condition (see False Positives)
#### 3. Multiple Start Nodes
```
Multiple trigger nodes found
```
**Fix**: Fine if intentional (e.g. webhook + schedule); otherwise remove extras or split into separate workflows
#### 4. Disconnected Nodes
```
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 the required fields from a fresh node of the same type in the editor
2. Create minimal valid configuration
3. Add features incrementally
4. Re-execute after each addition
### Strategy 2: Binary Search
**When**: Workflow looks valid but executes incorrectly
**Steps**:
1. Disable half the nodes
2. Execute and observe
3. If works: problem is in disabled nodes
4. If fails: problem is in remaining nodes
5. Repeat until problem isolated
### Strategy 3: Clean Stale Connections
**When**: "Node not found" errors after renaming/deleting nodes
**Steps**:
1. In the editor: delete and re-draw the affected connections
2. In JSON: remove entries in the `connections` object whose keys or targets name nodes that no longer exist (connections are keyed by node **name** - renames break them)
## Best Practices
### ✅ Do
- Recheck after every significant change (re-open node / re-execute)
- Read error messages completely - they contain fix guidance
- Fix errors iteratively (one at a time)
- Fix errors before worrying about warnings
- Check required fields first when reviewing JSON
- Recognize structural false positives (community nodes, polling cycles)
- Document false positives you accept
### ❌ Don't
- Activate a workflow with unresolved errors
- Try to fix all errors at once
- Ignore error messages
- Assume a fix worked - confirm the warning is gone
- Hand-fix operator structures the editor normalizes on save
- Ignore all warnings (some are important!)
## Detailed Guides
For comprehensive error catalogs and false positive examples:
- **[ERROR_CATALOG.md](ERROR_CATALOG.md)** - Complete list of error types with examples
- **[FALSE_POSITIVES.md](FALSE_POSITIVES.md)** - When warnings are acceptable
## Summary
**Key Points**:
1. **Debugging is iterative** (usually 2-3 fix → recheck cycles)
2. **Errors must be fixed**, warnings are optional
3. **The editor normalizes operator structures** on save
4. **Check required fields first**, then values, types, expressions, connections
5. **False positives exist** - learn to recognize them
6. **Read error messages** - they contain fix guidance
**Debugging Process**:
1. Interpret error → propose fix → user applies → recheck
2. Repeat until clean (usually 2-3 iterations)
3. Review warnings and decide if acceptable
4. Activate with confidence
**Related Skills**:
- n8n Expression Syntax - Fix expression errors
- n8n Node Configuration - Understand required fields