@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.
- package/dist/index.js +204 -8
- package/package.json +2 -2
- package/skill/awesomate-app-builder/SKILL.md +5 -1
- package/skill/awesomate-credentials/SKILL.md +1 -1
- package/skill/awesomate-hosting/SKILL.md +50 -159
- package/skill/awesomate-hosting/references/connect-troubleshooting.md +77 -0
- package/skill/awesomate-hosting/references/multi-account.md +33 -0
- package/skill/awesomate-hosting/references/rest-fallback.md +30 -0
- package/skill/awesomate-hosting/scripts/bootstrap.mjs +27 -7
- package/skill/awesomate-n8n/SKILL.md +153 -147
- package/skill/awesomate-n8n/evals/ai-agent-build/graders/grader.md +31 -0
- package/skill/awesomate-n8n/evals/ai-agent-build/prompt.md +1 -0
- package/skill/awesomate-n8n/evals/build-form-email/graders/grader.md +30 -0
- package/skill/awesomate-n8n/evals/build-form-email/prompt.md +1 -0
- package/skill/awesomate-n8n/evals/datatable-dedupe/graders/grader.md +32 -0
- package/skill/awesomate-n8n/evals/datatable-dedupe/prompt.md +2 -0
- package/skill/awesomate-n8n/evals/diagnose-failure/graders/grader.md +27 -0
- package/skill/awesomate-n8n/evals/diagnose-failure/prompt.md +2 -0
- package/skill/awesomate-n8n/evals/essentials-upsell/graders/grader.md +27 -0
- package/skill/awesomate-n8n/evals/essentials-upsell/prompt.md +2 -0
- package/skill/awesomate-n8n/evals/live-change-promote/graders/grader.md +35 -0
- package/skill/awesomate-n8n/evals/live-change-promote/prompt.md +2 -0
- package/skill/awesomate-n8n/evals/possibilities-grounded/graders/grader.md +28 -0
- package/skill/awesomate-n8n/evals/possibilities-grounded/prompt.md +1 -0
- package/skill/awesomate-n8n/evals/validated-not-done/graders/grader.md +27 -0
- package/skill/awesomate-n8n/evals/validated-not-done/prompt.md +2 -0
- package/skill/awesomate-n8n/evals/vars-not-env/graders/grader.md +26 -0
- package/skill/awesomate-n8n/evals/vars-not-env/prompt.md +2 -0
- package/skill/awesomate-n8n/evals/webhook-body-fix/graders/grader.md +26 -0
- package/skill/awesomate-n8n/evals/webhook-body-fix/prompt.md +3 -0
- package/skill/awesomate-n8n/references/ai-agents.md +135 -0
- package/skill/awesomate-n8n/references/datatables.md +105 -0
- package/skill/awesomate-n8n/references/{node-recipes.md → platform-notes.md} +56 -7
- package/skill/awesomate-n8n/references/possibilities.md +83 -0
- package/skill/awesomate-n8n/references/testing-policy.md +115 -0
- package/skill/awesomate-n8n/references/troubleshooting.md +69 -0
- package/skill/awesomate-n8n/references/upgrade-loop.md +98 -0
- package/skill/awesomate-n8n/references/vendor/MANIFEST.json +26 -0
- package/skill/awesomate-n8n/references/vendor/code-node/BUILTIN_FUNCTIONS.md +779 -0
- package/skill/awesomate-n8n/references/vendor/code-node/COMMON_PATTERNS.md +1123 -0
- package/skill/awesomate-n8n/references/vendor/code-node/DATA_ACCESS.md +797 -0
- package/skill/awesomate-n8n/references/vendor/code-node/ERROR_PATTERNS.md +776 -0
- package/skill/awesomate-n8n/references/vendor/code-node/SKILL.md +703 -0
- package/skill/awesomate-n8n/references/vendor/expressions/COMMON_MISTAKES.md +406 -0
- package/skill/awesomate-n8n/references/vendor/expressions/EXAMPLES.md +496 -0
- package/skill/awesomate-n8n/references/vendor/expressions/SKILL.md +525 -0
- package/skill/awesomate-n8n/references/vendor/node-configuration/DEPENDENCIES.md +743 -0
- package/skill/awesomate-n8n/references/vendor/node-configuration/OPERATION_PATTERNS.md +926 -0
- package/skill/awesomate-n8n/references/vendor/node-configuration/SKILL.md +583 -0
- package/skill/awesomate-n8n/references/vendor/validation/ERROR_CATALOG.md +781 -0
- package/skill/awesomate-n8n/references/vendor/validation/FALSE_POSITIVES.md +695 -0
- package/skill/awesomate-n8n/references/vendor/validation/SKILL.md +414 -0
- package/skill/awesomate-n8n/references/vendor/workflow-patterns/SKILL.md +413 -0
- package/skill/awesomate-n8n/references/vendor/workflow-patterns/ai_agent_workflow.md +797 -0
- package/skill/awesomate-n8n/references/vendor/workflow-patterns/database_operations.md +798 -0
- package/skill/awesomate-n8n/references/vendor/workflow-patterns/http_api_integration.md +747 -0
- package/skill/awesomate-n8n/references/vendor/workflow-patterns/scheduled_tasks.md +786 -0
- 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
|