n8n-node-configuration
Operation-aware node configuration guidance. Use when configuring nodes, understanding property dependencies, determining required fields, choosing between get_node detail levels, or learning common configuration patterns by node type. Always use this skill when setting up node parameters — it expla
By czlonkowski · 6,840 installs
npx skills add czlonkowski/n8n-skills --skill n8n-node-configuration
Source repository · Upstream listing
n8n Node Configuration
Expert guidance for operation aware node configuration with property dependencies.
Configuration Philosophy
Progressive disclosure : Start minimal, add complexity as needed
Configuration best practices:
get node with detail: "standard" is the most used discovery pattern
56 seconds average between configuration edits
Covers 95% of use cases with 1 2K tokens response
Key insight : Most configurations need only standard detail, not full schema!
Core Concepts
1. Operation Aware Configuration
Not all fields are always required it depends on operation!
Example : Slack node
Key : Resource + operation determine which fields are required!
2. Property Dependencies
Fields appear/disappear based on other field values
Example : HTTP Request node
Mechanism : displayOptions control field visibility
3. Progressive Discovery
Use the right detail level :
1. get node({detail: "standard"}) DEFAULT
Quick overview (~1 2K tokens)
Required fields + common options
Use first covers 95% of needs
2. get node({mode: "search properties", propertyQuery: "..."}) (for finding specific fields)
Find properties by name
Use when looking for auth, body, headers, etc.
3. get node({detail: "full"}) (complete schema)
All properties (~3 8K tokens)
Use only when standard detail is insufficient
Configuration Workflow
Standard Process
1. Identify node type and operation.
2. Use get node (standard detail is default).
3. Configure required fields.
4. Validate configuration.
5. If a field is unclear → get node({mode: "search properties"}) .
6. Add optional fields as needed.
7. Validate again.
8. Deploy.
Example: Configuring HTTP Request
The validate driven loop in practice: start minimal ( method , url , authentication ), then let each validate node error surface the next required field ( sendBody for POST → body when sendBody=true ) until valid. Full step by step walkthrough in [OPERATION PATTERNS.md](OPERATION PATTERNS.md worked example configuring http request step by step) .
get node Detail Levels
Standard Detail (DEFAULT Use This!)
✅ Starting configuration
Returns (~1 2K tokens):
Required fields
Common options
Operation list
Metadata
Use : 95% of configuration needs
Full Detail (Use Sparingly)
✅ When standard isn't enough
Returns (~3 8K tokens):
Complete schema
All properties
All nested options
Warning : Large response, use only when standard insufficient
Search Properties Mode
✅ Looking for specific field
Use : Find authentication, headers, body fields, etc.
Decision Tree
1. Starting a new node config → get node (standard).
2. Standard has what you need → configure with it. Otherwise continue.
3. Looking for a specific field → search properties mode. Otherwise continue.
4. Still need more → get node({detail: "full"}) .
Dynamic properties : when standard detail marks a property with dynamicOptions: {methodName, methodType, dependsOn} , its real values come from a live loadOptions / listSearch method, not from bundled docs — don't guess an ID for it. Resolve it with n8n explore node resources (needs N8N MCP ACCESS TOKEN , n8n 2.34+) and put the returned value in the config; name is display text only.
All six parameters are required and none are inferred from each other:
dependsOn names the parameters the method needs already chosen — pass them in currentNodeParameters , keeping resource locator values in their { rl: true, mode, value} shape, or the method returns nothing useful. methodName is case sensitive and specific to the nodeType + version pair; a mismatch returns OFFICIAL MCP ERROR rather than an empty list.
Property Dependencies Deep Dive
Fields have displayOptions visibility rules: show / hide blocks where multiple conditions are AND'd and multiple values are OR'd (e.g. body shows when sendBody=true AND method IN (POST, PUT, PATCH) ). The three recurring patterns are the boolean toggle (sendBody → body), the operation switch (post vs update show different fields), and type selection (string vs boolean conditions). To find what controls a field, use get node({mode: "search properties", propertyQuery: "..."}) or get node({detail: "full"}) — especially when validation flags a field you don't see.
Mechanism details, all four dependency patterns, complex flows, nested dependencies, and troubleshooting are in [DEPENDENCIES.md](DEPENDENCIES.md) (quick reference recap under [Quick Reference: displayOptions and Common Dependency Patterns](DEPENDENCIES.md quick reference displayoptions and common dependency patterns)).
Common Node Patterns
Pattern 1: Resource/Operation Nodes
Examples : Slack, Google Sheets, Airtable
Structure :
How to configure :
1. Choose resource
2. Choose operation
3. Use get node to see operation specific requirements
4. Configure required fields
Pattern 2: HTTP Based Nodes
Examples : HTTP Request, Webhook
Structure :
Dependencies :
POST/PUT/PATCH → sendBody available
sendBody=true → body required
authentication != "none" → credentials required
Critical: credentials block, node id, typeVersion
Never set a placeholder credential ID (e.g. "id": "REPLACE ME" ) — n8n's UI renders a permanently disabled credential selector for unknown IDs. Omit the credentials block when the real ID is unknown; the user then gets a normal clickable dropdown.
Node id must be a UUID v4 , not a readable slug — the frontend binds forms and the credential component to it.
Don't hardcode old typeVersion values — verify the current version with get node (httpRequest is 4.4+).
Pattern 3: Database Nodes
Examples : Postgres, MySQL, MongoDB
Structure :
Dependencies :
operation="executeQuery" → query required
operation="insert" → table + values required
operation="update" → table + values + where required
Critical: Write operations may return 0 items
INSERT, UPDATE, DELETE can produce 0 n8n output items, depending on the node and operation (raw query execution reliably returns 0 result rows; some database nodes return the affected rows)
Set alwaysOutputData: true on write operation nodes to keep downstream chains alive
Downstream nodes should use $('UpstreamNode').all() instead of $input if they need data
Pattern 4: Conditional Logic Nodes
Examples : IF, Switch, Merge
Structure :
Dependencies :
Binary operators (equals, contains, etc.) → value1 + value2
Unary operators (isEmpty, isNotEmpty) → value1 only + singleValue: true
Operation Specific Configuration
Required fields shift with resource + operation: Slack post needs channel + text , but update needs messageId + text (channel optional) and channel/create needs name . HTTP GET uses sendQuery + queryParameters ; POST needs sendBody + body . IF binary operators ( equals ) need value1 + value2 ; unary ( isEmpty ) need only value1 plus auto added singleValue: true . Concrete minimal configs for each in [OPERATION PATTERNS.md](OPERATION PATTERNS.md operation specific configuration examples) .
Handling Conditional Requirements
Some fields are required only under certain conditions: HTTP body is required when sendBody=true AND method IN (POST, PUT, PATCH, DELETE) ; IF singleValue should be true when the operator is unary ( isEmpty , isNotEmpty , true , false ) — and auto sanitization sets it for you. Discover conditional requirements by reading the validation error, searching the property ( get node({mode: "search properties"}) ), or iterating from a minimal config. Worked discovery examples in [DEPENDENCIES.md](DEPENDENCIES.md handling conditional requirements) .
Node Specific Configuration Notes
SplitInBatches v3
Output wiring :
main[0] (done) → Connect to downstream processing (add Limit 1 first)
main[1] (each batch) → Connect to loop body, then loop back to SplitInBatches input
See the n8n Workflow Patterns skill for detailed loop and nested loop patterns.
Google Sheets Node
Per item execution : Each input item triggers a separate API call. If you have 100 items and use a Google Sheets "Append Row" node, it makes 100 API calls. To write in bulk, aggregate items in a Code node first, then use a single HTTP Request with the Sheets API.
Formula columns : Never use append on sheets with formula columns — it overwrites formulas. Instead, use HTTP Request with Google Sheets API values.update (PUT) method and a googleApi credential.
Configuration Anti Patterns
❌ Don't: Over configure Upfront
Bad :
Good :
❌ Don't: Skip Validation
Bad :
Good :
❌ Don't: Ignore Operation Context
Bad :
Good :
Surgical Field Edits with patchNodeField
When you need to edit a specific string inside a node field — rather than replacing the whole field — use patchNodeField in n8n update partial workflow . This is especially useful for:
Editing code inside Code nodes without re transmitting the full code block
Updating URLs or text in large HTML email templates
Fixing typos in JSON bodies or long text fields
patchNodeField is strict — it errors if the find string isn't found or matches multiple times (unless replaceAll: true ). This prevents accidental silent failures during configuration updates. See the n8n MCP Tools Expert skill for full syntax and examples.
Best Practices
Do
1. Start with get node (standard detail)
~1 2K tokens response
Covers 95% of configuration needs
Default detail level
2. Validate iteratively
Configure → Validate → Fix → Repeat
Average 2 3 iterations is normal
Read validation errors carefully
3. Use search properties mode when stuck
If field seems missing, search for it
Understand what controls field visibility
get node({mode: "search properties", propertyQuery: "..."})
4. Respect operation context
Different operations = different requirements
Always check get node when changing operation
Don't assume configs are transferable
5. Trust auto sanitization
Operator structure fixed automatically
Don't manually add/remove singleValue
IF/Switch metadata added on save
❌ Don't
1. Jump to detail="full" immediately
Try standard detail first
Only escalate if needed
Full schema is 3 8K tokens
2. Configure blindly
Always validate before deploying
Understand why fields are required
Use search properties for conditional fields
3. Copy configs without understanding
Different operations need different fields
Validate after copying
Adjust for new context
4. Manually fix auto sanitization issues
Let auto sanitization handle operator structure
Focus on business logic
Save and let system fix structure
Silent Failure Gotchas by Node Family
Some misconfigurations pass validate node and validate workflow clean, run without error, and quietly do the wrong thing — get node shows the fields exist but not what happens when you omit them. The high frequency ones:
Switch — no options.fallbackOutput ⇒ unmatched items silently dropped.
Merge — numberOfInputs defaults to 2 (extra sources drop); useDataOfInput is 1 indexed vs the 0 indexed connections.<src .main[idx] slot ( useDataOfInput: "N" → main[N 1] ).
Database — {{ }} interpolation into parameters.query is SQL injection; use $1/$2 placeholders + options.queryReplacement .
Slack — Block Kit must be wrapped ={{ { "blocks": ... } }} or it posts as plain text.
Webhook / Respond — responseCode defaults to 200 even on error branches.
Schedule Trigger — timezone is workflow level (Workflow Settings), not per rule.
Full symptom/cause/fix detail (in JSON + n8n update partial workflow terms) in [NODE FAMILY GOTCHAS