@awesomate/hosting-mcp 0.12.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/dist/index.js +204 -8
  2. package/package.json +2 -2
  3. package/skill/awesomate-app-builder/SKILL.md +5 -1
  4. package/skill/awesomate-credentials/SKILL.md +1 -1
  5. package/skill/awesomate-hosting/SKILL.md +50 -159
  6. package/skill/awesomate-hosting/references/connect-troubleshooting.md +77 -0
  7. package/skill/awesomate-hosting/references/multi-account.md +33 -0
  8. package/skill/awesomate-hosting/references/rest-fallback.md +30 -0
  9. package/skill/awesomate-hosting/scripts/bootstrap.mjs +27 -7
  10. package/skill/awesomate-n8n/SKILL.md +153 -147
  11. package/skill/awesomate-n8n/evals/ai-agent-build/graders/grader.md +31 -0
  12. package/skill/awesomate-n8n/evals/ai-agent-build/prompt.md +1 -0
  13. package/skill/awesomate-n8n/evals/build-form-email/graders/grader.md +30 -0
  14. package/skill/awesomate-n8n/evals/build-form-email/prompt.md +1 -0
  15. package/skill/awesomate-n8n/evals/datatable-dedupe/graders/grader.md +32 -0
  16. package/skill/awesomate-n8n/evals/datatable-dedupe/prompt.md +2 -0
  17. package/skill/awesomate-n8n/evals/diagnose-failure/graders/grader.md +27 -0
  18. package/skill/awesomate-n8n/evals/diagnose-failure/prompt.md +2 -0
  19. package/skill/awesomate-n8n/evals/essentials-upsell/graders/grader.md +27 -0
  20. package/skill/awesomate-n8n/evals/essentials-upsell/prompt.md +2 -0
  21. package/skill/awesomate-n8n/evals/live-change-promote/graders/grader.md +35 -0
  22. package/skill/awesomate-n8n/evals/live-change-promote/prompt.md +2 -0
  23. package/skill/awesomate-n8n/evals/possibilities-grounded/graders/grader.md +28 -0
  24. package/skill/awesomate-n8n/evals/possibilities-grounded/prompt.md +1 -0
  25. package/skill/awesomate-n8n/evals/validated-not-done/graders/grader.md +27 -0
  26. package/skill/awesomate-n8n/evals/validated-not-done/prompt.md +2 -0
  27. package/skill/awesomate-n8n/evals/vars-not-env/graders/grader.md +26 -0
  28. package/skill/awesomate-n8n/evals/vars-not-env/prompt.md +2 -0
  29. package/skill/awesomate-n8n/evals/webhook-body-fix/graders/grader.md +26 -0
  30. package/skill/awesomate-n8n/evals/webhook-body-fix/prompt.md +3 -0
  31. package/skill/awesomate-n8n/references/ai-agents.md +135 -0
  32. package/skill/awesomate-n8n/references/datatables.md +105 -0
  33. package/skill/awesomate-n8n/references/{node-recipes.md → platform-notes.md} +56 -7
  34. package/skill/awesomate-n8n/references/possibilities.md +83 -0
  35. package/skill/awesomate-n8n/references/testing-policy.md +115 -0
  36. package/skill/awesomate-n8n/references/troubleshooting.md +69 -0
  37. package/skill/awesomate-n8n/references/upgrade-loop.md +98 -0
  38. package/skill/awesomate-n8n/references/vendor/MANIFEST.json +26 -0
  39. package/skill/awesomate-n8n/references/vendor/code-node/BUILTIN_FUNCTIONS.md +779 -0
  40. package/skill/awesomate-n8n/references/vendor/code-node/COMMON_PATTERNS.md +1123 -0
  41. package/skill/awesomate-n8n/references/vendor/code-node/DATA_ACCESS.md +797 -0
  42. package/skill/awesomate-n8n/references/vendor/code-node/ERROR_PATTERNS.md +776 -0
  43. package/skill/awesomate-n8n/references/vendor/code-node/SKILL.md +703 -0
  44. package/skill/awesomate-n8n/references/vendor/expressions/COMMON_MISTAKES.md +406 -0
  45. package/skill/awesomate-n8n/references/vendor/expressions/EXAMPLES.md +496 -0
  46. package/skill/awesomate-n8n/references/vendor/expressions/SKILL.md +525 -0
  47. package/skill/awesomate-n8n/references/vendor/node-configuration/DEPENDENCIES.md +743 -0
  48. package/skill/awesomate-n8n/references/vendor/node-configuration/OPERATION_PATTERNS.md +926 -0
  49. package/skill/awesomate-n8n/references/vendor/node-configuration/SKILL.md +583 -0
  50. package/skill/awesomate-n8n/references/vendor/validation/ERROR_CATALOG.md +781 -0
  51. package/skill/awesomate-n8n/references/vendor/validation/FALSE_POSITIVES.md +695 -0
  52. package/skill/awesomate-n8n/references/vendor/validation/SKILL.md +414 -0
  53. package/skill/awesomate-n8n/references/vendor/workflow-patterns/SKILL.md +413 -0
  54. package/skill/awesomate-n8n/references/vendor/workflow-patterns/ai_agent_workflow.md +797 -0
  55. package/skill/awesomate-n8n/references/vendor/workflow-patterns/database_operations.md +798 -0
  56. package/skill/awesomate-n8n/references/vendor/workflow-patterns/http_api_integration.md +747 -0
  57. package/skill/awesomate-n8n/references/vendor/workflow-patterns/scheduled_tasks.md +786 -0
  58. package/skill/awesomate-n8n/references/vendor/workflow-patterns/webhook_processing.md +558 -0
@@ -0,0 +1,414 @@
1
+ <!--
2
+ VENDORED from n8n-builder@d293559 (n8n-validation-expert/SKILL.md) — DO NOT EDIT HERE.
3
+ Edit the source in ~/Projects/n8n-builder, then re-run:
4
+ node mcp/scripts/sync-n8n-references.mjs --write
5
+
6
+ Awesomate platform overrides — where this file conflicts with
7
+ ../platform-notes.md, platform-notes wins:
8
+ - $env is BLOCKED fleet-wide → use {{ $vars.key || 'fallback' }}
9
+ - Task runners are ON → no $helpers in Code nodes; use HTTP Request nodes
10
+ - Webhook payloads live at $json.body
11
+ - saveExecutionProgress must stay false
12
+ -->
13
+
14
+ # n8n Validation Expert
15
+
16
+ Expert guide for interpreting n8n editor warnings and execution errors, and reviewing workflow JSON for configuration mistakes.
17
+
18
+ ---
19
+
20
+ ## How This Works
21
+
22
+ You don't have direct access to the user's n8n instance. The user pastes:
23
+
24
+ - **Editor warnings** - red/yellow indicators on nodes, "Problem in node" messages
25
+ - **Execution errors** - error output from a failed run
26
+ - **Workflow JSON** - exported or hand-written, to review before import
27
+
28
+ Your job: interpret the message, identify the node and field at fault, and propose an exact fix the user applies in their n8n editor.
29
+
30
+ ---
31
+
32
+ ## Debugging Philosophy
33
+
34
+ **Fix early, recheck often**
35
+
36
+ Debugging is typically iterative:
37
+ - Expect feedback loops
38
+ - Usually 2-3 fix → recheck cycles
39
+ - One error being fixed often reveals the next one
40
+
41
+ **Key insight**: Fixing errors is an iterative process, not one-shot!
42
+
43
+ ---
44
+
45
+ ## Error Severity Levels
46
+
47
+ ### 1. Errors (Must Fix)
48
+ **Blocks workflow execution** - Must be resolved before activation
49
+
50
+ **Types**:
51
+ - `missing_required` - Required field not provided
52
+ - `invalid_value` - Value doesn't match allowed options
53
+ - `type_mismatch` - Wrong data type (string instead of number)
54
+ - `invalid_reference` - Referenced node doesn't exist
55
+ - `invalid_expression` - Expression syntax error
56
+
57
+ **Example** (editor message):
58
+ ```
59
+ Problem in node 'Slack'
60
+ Channel name is required
61
+ ```
62
+ **Fix**: Provide a channel name (lowercase, no spaces, 1-80 characters)
63
+
64
+ ### 2. Warnings (Should Fix)
65
+ **Doesn't block execution** - Workflow can be activated but may have issues
66
+
67
+ **Types**:
68
+ - `best_practice` - Recommended but not required
69
+ - `deprecated` - Using old API/feature
70
+ - `performance` - Potential performance issue
71
+
72
+ **Example**: Slack API can have rate limits → suggest `onError: 'continueRegularOutput'` with Retry On Fail enabled.
73
+
74
+ ### 3. Suggestions (Optional)
75
+ **Nice to have** - Improvements that could enhance workflow
76
+
77
+ **Types**:
78
+ - `optimization` - Could be more efficient
79
+ - `alternative` - Better way to achieve same result
80
+
81
+ ---
82
+
83
+ ## The Fix-and-Recheck Loop
84
+
85
+ ```
86
+ 1. User pastes error / warning
87
+ ↓
88
+ 2. Identify the node and field at fault
89
+ ↓
90
+ 3. Read the error message carefully - it usually names the fix
91
+ ↓
92
+ 4. Propose the exact change (field, value, expression)
93
+ ↓
94
+ 5. User applies it, re-opens the node in the editor or re-executes
95
+ ↓
96
+ 6. Confirm the warning is gone - or interpret the next error
97
+ ↓
98
+ 7. Repeat until clean (usually 2-3 iterations)
99
+ ```
100
+
101
+ ### Example
102
+
103
+ ```
104
+ // Iteration 1
105
+ User: "Problem in node 'Slack': Missing required field 'name'"
106
+ Fix: Set Channel Name (e.g. "general") in the node panel.
107
+
108
+ // Iteration 2 - user re-opens node, new warning appears
109
+ User: "Missing required field 'text'"
110
+ Fix: Set Message Text (e.g. "Hello!").
111
+
112
+ // Iteration 3 - user re-executes
113
+ User: "It ran!" ✅
114
+ ```
115
+
116
+ **This is normal!** Don't be discouraged by multiple iterations - fixing one required field often surfaces the next.
117
+
118
+ ---
119
+
120
+ ## Review Methodology
121
+
122
+ When reviewing workflow JSON or a node configuration, check in this order:
123
+
124
+ ### 1. Required fields first
125
+ 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`).
126
+
127
+ ### 2. Value validity
128
+ Enum values (`resource`, `operation`, `method`) must match allowed options exactly - they are case-sensitive. Check formats (channel names, emails, URLs).
129
+
130
+ ### 3. Data types
131
+ Numbers as numbers, booleans as booleans - not `"100"` or `"true"`.
132
+
133
+ ### 4. Expressions
134
+ `{{}}` wrapping (with leading `=` in JSON), correct node names in `$node[...]` references, webhook data under `$json.body`.
135
+
136
+ ### 5. Connections and structure
137
+ No connections to nodes that don't exist, Switch rules match output count, no accidentally disconnected nodes.
138
+
139
+ **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.
140
+
141
+ ---
142
+
143
+ ## Common Error Types
144
+
145
+ ### 1. missing_required
146
+ **What it means**: A required field is not provided
147
+
148
+ **How to fix**:
149
+ 1. Open the node in the editor - required fields are marked and highlighted when empty
150
+ 2. Fill in the missing field with an appropriate value
151
+
152
+ **Example**:
153
+ ```
154
+ Error: "Channel name is required" (property: channel)
155
+ Fix: Set Channel to "#general"
156
+ ```
157
+
158
+ ### 2. invalid_value
159
+ **What it means**: Value doesn't match allowed options
160
+
161
+ **How to fix**:
162
+ 1. Check the error message for allowed values
163
+ 2. Check the node's dropdown in the editor for valid options
164
+ 3. Update to a valid value (match case exactly)
165
+
166
+ **Example**:
167
+ ```
168
+ Error: "Operation must be one of: post, update, delete" (current: "send")
169
+ Fix: Set Operation to "post"
170
+ ```
171
+
172
+ ### 3. type_mismatch
173
+ **What it means**: Wrong data type for field
174
+
175
+ **How to fix**:
176
+ 1. Check expected type in error message
177
+ 2. Convert value to correct type
178
+
179
+ **Example**:
180
+ ```
181
+ Error: "Expected number, got string" (property: limit, current: "100")
182
+ Fix: limit: 100 (number, not string - remove the quotes in JSON)
183
+ ```
184
+
185
+ ### 4. invalid_expression
186
+ **What it means**: Expression syntax error
187
+
188
+ **How to fix**:
189
+ 1. Use the n8n Expression Syntax skill
190
+ 2. Check for missing `{{}}` or typos
191
+ 3. Verify node/field references
192
+
193
+ **Example**:
194
+ ```
195
+ Error: "Invalid expression: $json.name" (property: text)
196
+ Fix: "={{$json.name}}" - add the ={{}} wrapper
197
+ ```
198
+
199
+ ### 5. invalid_reference
200
+ **What it means**: Referenced node doesn't exist
201
+
202
+ **How to fix**:
203
+ 1. Check node name spelling
204
+ 2. Verify node exists in workflow
205
+ 3. Update reference to correct name
206
+
207
+ **Example**:
208
+ ```
209
+ Error: "Node 'HTTP Requets' does not exist"
210
+ Fix: "={{$node['HTTP Request'].json.data}}" - correct the typo
211
+ ```
212
+
213
+ ---
214
+
215
+ ## Operator Structure (IF/Switch)
216
+
217
+ 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:
218
+
219
+ ### 1. Binary Operators (Two Values)
220
+ **Operators**: equals, notEquals, contains, notContains, greaterThan, lessThan, startsWith, endsWith
221
+
222
+ **Rule**: No `singleValue` property (binary operators compare two values)
223
+
224
+ ```javascript
225
+ {
226
+ "type": "boolean",
227
+ "operation": "equals"
228
+ // no singleValue ✅
229
+ }
230
+ ```
231
+
232
+ ### 2. Unary Operators (One Value)
233
+ **Operators**: isEmpty, isNotEmpty, true, false
234
+
235
+ **Rule**: Must have `singleValue: true` (unary operators check a single value)
236
+
237
+ ```javascript
238
+ {
239
+ "type": "boolean",
240
+ "operation": "isEmpty",
241
+ "singleValue": true // ✅ Required
242
+ }
243
+ ```
244
+
245
+ ### 3. IF/Switch Metadata
246
+ 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.
247
+
248
+ ### What the Editor Cannot Fix
249
+
250
+ #### 1. Broken Connections
251
+ References to non-existent nodes in the `connections` object
252
+
253
+ **Solution**: Remove the stale entry from `connections` (or delete and re-draw the connection in the editor)
254
+
255
+ #### 2. Branch Count Mismatches
256
+ 3 Switch rules but only 2 output connections
257
+
258
+ **Solution**: Add missing connections or remove extra rules
259
+
260
+ ---
261
+
262
+ ## False Positives
263
+
264
+ ### What Are They?
265
+ Warnings that are technically "wrong" but acceptable - or plain incorrect - in your use case.
266
+
267
+ ### Structural False Positives (Ignore)
268
+
269
+ #### 1. Community/custom nodes reported as "unknown"
270
+ 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.
271
+
272
+ #### 2. Cycles flagged in polling workflows
273
+ 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.
274
+
275
+ ### Context-Dependent Warnings
276
+
277
+ #### 1. "Missing error handling"
278
+ **When acceptable**: Simple workflows, testing/development, non-critical notifications
279
+ **When to fix**: Production workflows handling important data
280
+
281
+ #### 2. "No retry logic"
282
+ **When acceptable**: APIs with their own retry logic, idempotent operations, manual trigger workflows
283
+ **When to fix**: Flaky external services, production automation
284
+
285
+ #### 3. "Missing rate limiting"
286
+ **When acceptable**: Internal APIs with no limits, low-volume workflows
287
+ **When to fix**: Public APIs, high-volume workflows
288
+
289
+ #### 4. "Unbounded query"
290
+ **When acceptable**: Small known datasets, aggregation queries, development/testing
291
+ **When to fix**: Production queries on large tables
292
+
293
+ Full guide: **[FALSE_POSITIVES.md](FALSE_POSITIVES.md)**
294
+
295
+ ---
296
+
297
+ ## Reviewing Workflow JSON Before Import
298
+
299
+ When the user pastes a full workflow, check:
300
+
301
+ 1. **Node configurations** - each node valid (required fields, values, types)
302
+ 2. **Connections** - no broken references, counts match branch rules
303
+ 3. **Expressions** - syntax and node references valid
304
+ 4. **Flow** - logical workflow structure, triggers wired correctly
305
+
306
+ ### Common Workflow-Level Errors
307
+
308
+ #### 1. Broken Connections
309
+ ```
310
+ Connection from 'Transform' to 'NonExistent' - target node not found
311
+ ```
312
+ **Fix**: Remove stale connection or create the missing node
313
+
314
+ #### 2. Circular Dependencies
315
+ ```
316
+ Circular dependency detected: Node A → Node B → Node A
317
+ ```
318
+ **Fix**: Restructure to remove the loop - unless it's intentional cycle-based polling with an exit condition (see False Positives)
319
+
320
+ #### 3. Multiple Start Nodes
321
+ ```
322
+ Multiple trigger nodes found
323
+ ```
324
+ **Fix**: Fine if intentional (e.g. webhook + schedule); otherwise remove extras or split into separate workflows
325
+
326
+ #### 4. Disconnected Nodes
327
+ ```
328
+ Node 'Transform' is not connected to workflow flow
329
+ ```
330
+ **Fix**: Connect node or remove if unused
331
+
332
+ ---
333
+
334
+ ## Recovery Strategies
335
+
336
+ ### Strategy 1: Start Fresh
337
+ **When**: Configuration is severely broken
338
+
339
+ **Steps**:
340
+ 1. Note the required fields from a fresh node of the same type in the editor
341
+ 2. Create minimal valid configuration
342
+ 3. Add features incrementally
343
+ 4. Re-execute after each addition
344
+
345
+ ### Strategy 2: Binary Search
346
+ **When**: Workflow looks valid but executes incorrectly
347
+
348
+ **Steps**:
349
+ 1. Disable half the nodes
350
+ 2. Execute and observe
351
+ 3. If works: problem is in disabled nodes
352
+ 4. If fails: problem is in remaining nodes
353
+ 5. Repeat until problem isolated
354
+
355
+ ### Strategy 3: Clean Stale Connections
356
+ **When**: "Node not found" errors after renaming/deleting nodes
357
+
358
+ **Steps**:
359
+ 1. In the editor: delete and re-draw the affected connections
360
+ 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)
361
+
362
+ ---
363
+
364
+ ## Best Practices
365
+
366
+ ### ✅ Do
367
+
368
+ - Recheck after every significant change (re-open node / re-execute)
369
+ - Read error messages completely - they contain fix guidance
370
+ - Fix errors iteratively (one at a time)
371
+ - Fix errors before worrying about warnings
372
+ - Check required fields first when reviewing JSON
373
+ - Recognize structural false positives (community nodes, polling cycles)
374
+ - Document false positives you accept
375
+
376
+ ### ❌ Don't
377
+
378
+ - Activate a workflow with unresolved errors
379
+ - Try to fix all errors at once
380
+ - Ignore error messages
381
+ - Assume a fix worked - confirm the warning is gone
382
+ - Hand-fix operator structures the editor normalizes on save
383
+ - Ignore all warnings (some are important!)
384
+
385
+ ---
386
+
387
+ ## Detailed Guides
388
+
389
+ For comprehensive error catalogs and false positive examples:
390
+
391
+ - **[ERROR_CATALOG.md](ERROR_CATALOG.md)** - Complete list of error types with examples
392
+ - **[FALSE_POSITIVES.md](FALSE_POSITIVES.md)** - When warnings are acceptable
393
+
394
+ ---
395
+
396
+ ## Summary
397
+
398
+ **Key Points**:
399
+ 1. **Debugging is iterative** (usually 2-3 fix → recheck cycles)
400
+ 2. **Errors must be fixed**, warnings are optional
401
+ 3. **The editor normalizes operator structures** on save
402
+ 4. **Check required fields first**, then values, types, expressions, connections
403
+ 5. **False positives exist** - learn to recognize them
404
+ 6. **Read error messages** - they contain fix guidance
405
+
406
+ **Debugging Process**:
407
+ 1. Interpret error → propose fix → user applies → recheck
408
+ 2. Repeat until clean (usually 2-3 iterations)
409
+ 3. Review warnings and decide if acceptable
410
+ 4. Activate with confidence
411
+
412
+ **Related Skills**:
413
+ - n8n Expression Syntax - Fix expression errors
414
+ - n8n Node Configuration - Understand required fields