@awesomate/hosting-mcp 0.12.1 → 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 +14 -0
  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,583 @@
1
+ <!--
2
+ VENDORED from n8n-builder@d293559 (n8n-node-configuration/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 Node Configuration
15
+
16
+ Expert guidance for operation-aware node configuration with property dependencies.
17
+
18
+ ---
19
+
20
+ ## Configuration Philosophy
21
+
22
+ **Progressive disclosure**: Start minimal, add complexity as needed
23
+
24
+ Configuration best practices:
25
+ - Start from the operation patterns in this skill ([OPERATION_PATTERNS.md](OPERATION_PATTERNS.md)) — they cover the most-used nodes
26
+ - Consult n8n's official docs (docs.n8n.io) for nodes or operations not covered here
27
+ - Always produce complete node JSON with `resource` and `operation` set together
28
+
29
+ **Key insight**: Most configurations need only the required fields for the chosen operation, not every possible option!
30
+
31
+ ---
32
+
33
+ ## Core Concepts
34
+
35
+ ### 1. Operation-Aware Configuration
36
+
37
+ **Not all fields are always required** - it depends on operation!
38
+
39
+ **Example**: Slack node
40
+ ```javascript
41
+ // For operation='post'
42
+ {
43
+ "resource": "message",
44
+ "operation": "post",
45
+ "channel": "#general", // Required for post
46
+ "text": "Hello!" // Required for post
47
+ }
48
+
49
+ // For operation='update'
50
+ {
51
+ "resource": "message",
52
+ "operation": "update",
53
+ "messageId": "123", // Required for update (different!)
54
+ "text": "Updated!" // Required for update
55
+ // channel NOT required for update
56
+ }
57
+ ```
58
+
59
+ **Key**: Resource + operation determine which fields are required — always set them together!
60
+
61
+ ### 2. Property Dependencies
62
+
63
+ **Fields appear/disappear based on other field values**
64
+
65
+ **Example**: HTTP Request node
66
+ ```javascript
67
+ // When method='GET'
68
+ {
69
+ "method": "GET",
70
+ "url": "https://api.example.com"
71
+ // sendBody not shown (GET doesn't have body)
72
+ }
73
+
74
+ // When method='POST'
75
+ {
76
+ "method": "POST",
77
+ "url": "https://api.example.com",
78
+ "sendBody": true, // Now visible!
79
+ "body": { // Required when sendBody=true
80
+ "contentType": "json",
81
+ "content": {...}
82
+ }
83
+ }
84
+ ```
85
+
86
+ **Mechanism**: displayOptions control field visibility
87
+
88
+ ### 3. Finding Requirements Without Tools
89
+
90
+ In the claude.ai app there is no live n8n schema access. Determine requirements by:
91
+
92
+ 1. **Operation patterns in this skill** - [OPERATION_PATTERNS.md](OPERATION_PATTERNS.md) covers the top 20 nodes with minimal valid configs
93
+ 2. **Official docs** - docs.n8n.io documents every node's operations and fields
94
+ 3. **The n8n editor itself** - the user opens the node in their editor; missing or invalid required fields show warnings in the parameter panel
95
+
96
+ ---
97
+
98
+ ## Configuration Workflow
99
+
100
+ ### Standard Process
101
+
102
+ ```
103
+ 1. Identify node type and operation
104
+ ↓
105
+ 2. Check OPERATION_PATTERNS.md / docs.n8n.io for requirements
106
+ ↓
107
+ 3. Write complete node JSON (resource + operation + required fields)
108
+ ↓
109
+ 4. User applies it in the n8n editor
110
+ (paste via Workflow → Import from Clipboard, or configure the parameter panel)
111
+ ↓
112
+ 5. User opens the node — warnings flag missing/invalid required fields
113
+ ↓
114
+ 6. Add optional fields as needed
115
+ ↓
116
+ 7. User re-checks in the editor, then executes the node to verify
117
+ ```
118
+
119
+ ### Example: Configuring HTTP Request
120
+
121
+ **Step 1**: Identify what you need
122
+ ```javascript
123
+ // Goal: POST JSON to API
124
+ ```
125
+
126
+ **Step 2**: Check the pattern
127
+ The POST-with-JSON pattern (see [OPERATION_PATTERNS.md](OPERATION_PATTERNS.md)) requires: method, url, sendBody, body.
128
+
129
+ **Step 3**: Write the complete configuration
130
+ ```javascript
131
+ {
132
+ "method": "POST",
133
+ "url": "https://api.example.com/create",
134
+ "authentication": "none",
135
+ "sendBody": true, // Required for POST with body
136
+ "body": { // Required when sendBody=true
137
+ "contentType": "json",
138
+ "content": {
139
+ "name": "={{$json.name}}",
140
+ "email": "={{$json.email}}"
141
+ }
142
+ }
143
+ }
144
+ ```
145
+
146
+ **Step 4**: Verify in the editor
147
+ The user pastes the node into their n8n editor and opens it — a missing `sendBody` or `body` would show a warning in the parameter panel. Execute the node with test data to confirm.
148
+
149
+ ---
150
+
151
+ ## Property Dependencies Deep Dive
152
+
153
+ ### displayOptions Mechanism
154
+
155
+ **Fields have visibility rules**:
156
+
157
+ ```javascript
158
+ {
159
+ "name": "body",
160
+ "displayOptions": {
161
+ "show": {
162
+ "sendBody": [true],
163
+ "method": ["POST", "PUT", "PATCH"]
164
+ }
165
+ }
166
+ }
167
+ ```
168
+
169
+ **Translation**: "body" field shows when:
170
+ - sendBody = true AND
171
+ - method = POST, PUT, or PATCH
172
+
173
+ ### Common Dependency Patterns
174
+
175
+ #### Pattern 1: Boolean Toggle
176
+
177
+ **Example**: HTTP Request sendBody
178
+ ```javascript
179
+ // sendBody controls body visibility
180
+ {
181
+ "sendBody": true // → body field appears
182
+ }
183
+ ```
184
+
185
+ #### Pattern 2: Operation Switch
186
+
187
+ **Example**: Slack resource/operation
188
+ ```javascript
189
+ // Different operations → different fields
190
+ {
191
+ "resource": "message",
192
+ "operation": "post"
193
+ // → Shows: channel, text, attachments, etc.
194
+ }
195
+
196
+ {
197
+ "resource": "message",
198
+ "operation": "update"
199
+ // → Shows: messageId, text (different fields!)
200
+ }
201
+ ```
202
+
203
+ #### Pattern 3: Type Selection
204
+
205
+ **Example**: IF node conditions
206
+ ```javascript
207
+ {
208
+ "type": "string",
209
+ "operation": "contains"
210
+ // → Shows: value1, value2
211
+ }
212
+
213
+ {
214
+ "type": "boolean",
215
+ "operation": "equals"
216
+ // → Shows: value1, value2, different operators
217
+ }
218
+ ```
219
+
220
+ ### Finding Property Dependencies
221
+
222
+ **Use the n8n editor**: add the node, toggle the controlling field (e.g. `sendBody`, `operation`), and watch which fields appear or disappear in the parameter panel — that IS the displayOptions rule in action.
223
+
224
+ **Or check docs.n8n.io**: each node's docs list fields per operation.
225
+
226
+ **Use this when**: the editor warns about a missing field you don't see, or a field seems to vanish after changing another value.
227
+
228
+ ---
229
+
230
+ ## Common Node Patterns
231
+
232
+ ### Pattern 1: Resource/Operation Nodes
233
+
234
+ **Examples**: Slack, Google Sheets, Airtable
235
+
236
+ **Structure**:
237
+ ```javascript
238
+ {
239
+ "resource": "<entity>", // What type of thing
240
+ "operation": "<action>", // What to do with it
241
+ // ... operation-specific fields
242
+ }
243
+ ```
244
+
245
+ **How to configure**:
246
+ 1. Choose resource
247
+ 2. Choose operation
248
+ 3. Check the operation's requirements (this skill's patterns or docs.n8n.io)
249
+ 4. Configure required fields — always include `resource` and `operation` together in the JSON
250
+
251
+ ### Pattern 2: HTTP-Based Nodes
252
+
253
+ **Examples**: HTTP Request, Webhook
254
+
255
+ **Structure**:
256
+ ```javascript
257
+ {
258
+ "method": "<HTTP_METHOD>",
259
+ "url": "<endpoint>",
260
+ "authentication": "<type>",
261
+ // ... method-specific fields
262
+ }
263
+ ```
264
+
265
+ **Dependencies**:
266
+ - POST/PUT/PATCH → sendBody available
267
+ - sendBody=true → body required
268
+ - authentication != "none" → credentials required
269
+
270
+ ### Pattern 3: Database Nodes
271
+
272
+ **Examples**: Postgres, MySQL, MongoDB
273
+
274
+ **Structure**:
275
+ ```javascript
276
+ {
277
+ "operation": "<query|insert|update|delete>",
278
+ // ... operation-specific fields
279
+ }
280
+ ```
281
+
282
+ **Dependencies**:
283
+ - operation="executeQuery" → query required
284
+ - operation="insert" → table + values required
285
+ - operation="update" → table + values + where required
286
+
287
+ ### Pattern 4: Conditional Logic Nodes
288
+
289
+ **Examples**: IF, Switch, Merge
290
+
291
+ **Structure**:
292
+ ```javascript
293
+ {
294
+ "conditions": {
295
+ "<type>": [
296
+ {
297
+ "operation": "<operator>",
298
+ "value1": "...",
299
+ "value2": "..." // Only for binary operators
300
+ }
301
+ ]
302
+ }
303
+ }
304
+ ```
305
+
306
+ **Dependencies**:
307
+ - Binary operators (equals, contains, etc.) → value1 + value2
308
+ - Unary operators (isEmpty, isNotEmpty) → value1 only + singleValue: true
309
+
310
+ ---
311
+
312
+ ## Operation-Specific Configuration
313
+
314
+ ### Slack Node Examples
315
+
316
+ #### Post Message
317
+ ```javascript
318
+ {
319
+ "resource": "message",
320
+ "operation": "post",
321
+ "channel": "#general", // Required
322
+ "text": "Hello!", // Required
323
+ "attachments": [], // Optional
324
+ "blocks": [] // Optional
325
+ }
326
+ ```
327
+
328
+ #### Update Message
329
+ ```javascript
330
+ {
331
+ "resource": "message",
332
+ "operation": "update",
333
+ "messageId": "1234567890", // Required (different from post!)
334
+ "text": "Updated!", // Required
335
+ "channel": "#general" // Optional (can be inferred)
336
+ }
337
+ ```
338
+
339
+ #### Create Channel
340
+ ```javascript
341
+ {
342
+ "resource": "channel",
343
+ "operation": "create",
344
+ "name": "new-channel", // Required
345
+ "isPrivate": false // Optional
346
+ // Note: text NOT required for this operation
347
+ }
348
+ ```
349
+
350
+ ### HTTP Request Node Examples
351
+
352
+ #### GET Request
353
+ ```javascript
354
+ {
355
+ "method": "GET",
356
+ "url": "https://api.example.com/users",
357
+ "authentication": "predefinedCredentialType",
358
+ "nodeCredentialType": "httpHeaderAuth",
359
+ "sendQuery": true, // Optional
360
+ "queryParameters": { // Shows when sendQuery=true
361
+ "parameters": [
362
+ {
363
+ "name": "limit",
364
+ "value": "100"
365
+ }
366
+ ]
367
+ }
368
+ }
369
+ ```
370
+
371
+ #### POST with JSON
372
+ ```javascript
373
+ {
374
+ "method": "POST",
375
+ "url": "https://api.example.com/users",
376
+ "authentication": "none",
377
+ "sendBody": true, // Required for POST
378
+ "body": { // Required when sendBody=true
379
+ "contentType": "json",
380
+ "content": {
381
+ "name": "John Doe",
382
+ "email": "john@example.com"
383
+ }
384
+ }
385
+ }
386
+ ```
387
+
388
+ ### IF Node Examples
389
+
390
+ #### String Comparison (Binary)
391
+ ```javascript
392
+ {
393
+ "conditions": {
394
+ "string": [
395
+ {
396
+ "value1": "={{$json.status}}",
397
+ "operation": "equals",
398
+ "value2": "active" // Binary: needs value2
399
+ }
400
+ ]
401
+ }
402
+ }
403
+ ```
404
+
405
+ #### Empty Check (Unary)
406
+ ```javascript
407
+ {
408
+ "conditions": {
409
+ "string": [
410
+ {
411
+ "value1": "={{$json.email}}",
412
+ "operation": "isEmpty",
413
+ // No value2 - unary operator
414
+ "singleValue": true // Required for unary operators
415
+ }
416
+ ]
417
+ }
418
+ }
419
+ ```
420
+
421
+ ---
422
+
423
+ ## Handling Conditional Requirements
424
+
425
+ ### Example: HTTP Request Body
426
+
427
+ **Scenario**: body field required, but only sometimes
428
+
429
+ **Rule**:
430
+ ```
431
+ body is required when:
432
+ - sendBody = true AND
433
+ - method IN (POST, PUT, PATCH, DELETE)
434
+ ```
435
+
436
+ **How to discover**:
437
+ - The editor's parameter panel warns when body is enabled but empty
438
+ - docs.n8n.io HTTP Request page documents the body options per method
439
+ - Start from the minimal patterns in this skill and add only what the operation needs
440
+
441
+ ### Example: IF Node singleValue
442
+
443
+ **Scenario**: singleValue property applies to unary operators
444
+
445
+ **Rule**:
446
+ ```
447
+ singleValue should be true when:
448
+ - operation IN (isEmpty, isNotEmpty, true, false)
449
+ ```
450
+
451
+ Include `"singleValue": true` in the JSON for unary operators, and omit `value2`. (The n8n editor normalizes this structure when the node is configured through the UI.)
452
+
453
+ ---
454
+
455
+ ## Configuration Anti-Patterns
456
+
457
+ ### ❌ Don't: Over-configure Upfront
458
+
459
+ **Bad**:
460
+ ```javascript
461
+ // Adding every possible field
462
+ {
463
+ "method": "GET",
464
+ "url": "...",
465
+ "sendQuery": false,
466
+ "sendHeaders": false,
467
+ "sendBody": false,
468
+ "timeout": 10000,
469
+ "ignoreResponseCode": false,
470
+ // ... 20 more optional fields
471
+ }
472
+ ```
473
+
474
+ **Good**:
475
+ ```javascript
476
+ // Start minimal
477
+ {
478
+ "method": "GET",
479
+ "url": "...",
480
+ "authentication": "none"
481
+ }
482
+ // Add fields only when needed
483
+ ```
484
+
485
+ ### ❌ Don't: Skip Editor Verification
486
+
487
+ **Bad**: Hand over node JSON and call it done.
488
+
489
+ **Good**: Tell the user to open the node in their n8n editor — missing or invalid required fields show warnings in the parameter panel — and execute it with test data before relying on it.
490
+
491
+ ### ❌ Don't: Ignore Operation Context
492
+
493
+ **Bad**:
494
+ ```javascript
495
+ // Same config for all Slack operations
496
+ {
497
+ "resource": "message",
498
+ "operation": "post",
499
+ "channel": "#general",
500
+ "text": "..."
501
+ }
502
+
503
+ // Then switching operation without updating config
504
+ {
505
+ "resource": "message",
506
+ "operation": "update", // Changed
507
+ "channel": "#general", // Wrong field for update!
508
+ "text": "..."
509
+ }
510
+ ```
511
+
512
+ **Good**: When the operation changes, re-check that operation's requirements (update needs `messageId`, not `channel`) and rewrite the config for the new context.
513
+
514
+ ---
515
+
516
+ ## Best Practices
517
+
518
+ ### ✅ Do
519
+
520
+ 1. **Start from known patterns**
521
+ - [OPERATION_PATTERNS.md](OPERATION_PATTERNS.md) has minimal valid configs for the top 20 nodes
522
+ - docs.n8n.io covers the rest
523
+
524
+ 2. **Always set resource + operation together**
525
+ - They jointly determine every other requirement
526
+ - Never emit one without the other
527
+
528
+ 3. **Verify in the n8n editor**
529
+ - Open the node — warnings flag missing/invalid required fields
530
+ - Execute with test data before relying on the configuration
531
+
532
+ 4. **Respect operation context**
533
+ - Different operations = different requirements
534
+ - Re-check requirements whenever the operation changes
535
+ - Don't assume configs are transferable
536
+
537
+ 5. **Iterate**
538
+ - Configure minimal → verify in editor → add what's flagged → repeat
539
+ - 2-3 iterations is normal
540
+
541
+ ### ❌ Don't
542
+
543
+ 1. **Configure blindly**
544
+ - Understand why fields are required
545
+ - Watch the parameter panel to learn what controls conditional fields
546
+
547
+ 2. **Copy configs without understanding**
548
+ - Different operations need different fields
549
+ - Adjust for the new context and re-verify in the editor
550
+
551
+ 3. **Guess field names for unfamiliar nodes**
552
+ - Check docs.n8n.io or have the user read the field names off their editor's parameter panel
553
+
554
+ ---
555
+
556
+ ## Detailed References
557
+
558
+ For comprehensive guides on specific topics:
559
+
560
+ - **[DEPENDENCIES.md](DEPENDENCIES.md)** - Deep dive into property dependencies and displayOptions
561
+ - **[OPERATION_PATTERNS.md](OPERATION_PATTERNS.md)** - Common configuration patterns by node type
562
+
563
+ ---
564
+
565
+ ## Summary
566
+
567
+ **Configuration Strategy**:
568
+ 1. Identify node type and operation
569
+ 2. Look up requirements (this skill's patterns, then docs.n8n.io)
570
+ 3. Write complete node JSON with resource + operation + required fields
571
+ 4. User applies it in their n8n editor and checks for warnings
572
+ 5. Iterate until the node executes cleanly
573
+
574
+ **Key Principles**:
575
+ - **Operation-aware**: Different operations = different requirements
576
+ - **Progressive disclosure**: Start minimal, add as needed
577
+ - **Dependency-aware**: Understand field visibility rules
578
+ - **Editor-verified**: The n8n parameter panel is the ground truth
579
+
580
+ **Related Skills**:
581
+ - **n8n Validation Expert** - Interpret editor/execution errors
582
+ - **n8n Expression Syntax** - Configure expression fields
583
+ - **n8n Workflow Patterns** - Apply patterns with proper configuration