skills/n8n-node-configuration/SKILL.md
Use when configuring n8n nodes, understanding property dependencies, determining required fields per operation, resolving invisible/missing fields, or choosing get_node detail levels. NEVER for expression syntax (use n8n-expression-syntax), MCP tool selection (use n8n-mcp-tools-expert), or Code node JS/Python (use n8n-code-javascript or n8n-code-python).
npx skillsauth add sharkitect-solutions/sharkitect-claude-toolkit n8n-node-configurationInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
The same node with different operations requires completely different fields. This is the #1 source of configuration errors.
Slack message/post -> channel (required), text (required), messageId (hidden)
Slack message/update -> messageId (required), text (required), channel (optional)
Slack message/delete -> messageId (required), channel (required), text (hidden)
Slack channel/create -> name (required), text (hidden), channel (hidden)
Rule: resource + operation = a unique set of required, optional, and hidden fields. When you change operation, assume ALL field requirements change. Query get_node again -- do not reuse the previous config blindly.
n8n controls field visibility through displayOptions rules in the node schema. This is the mechanism behind "invisible required fields" errors.
// This field only appears when BOTH conditions are true
{
"name": "body",
"displayOptions": {
"show": {
"sendBody": [true], // condition 1
"method": ["POST", "PUT", "PATCH"] // condition 2
}
}
}
Logic rules:
show = AND (all must match)hide works inversely: field disappears when conditions matchshow is far more common than hide in practiceFields can form cascading dependency chains where each level unlocks the next:
method=POST -> sendBody becomes visible
sendBody=true -> body becomes visible AND required
body.contentType=json -> body.content expects JSON object
body.contentType=form-data -> body.content expects form fields array
Critical: Configure parent properties first (method, resource, operation), then dependent fields. A field that depends on an unset parent will be invisible AND its value will be stripped on save even if you set it directly.
Boolean toggle -- a checkbox controls a section:
sendBody=true -> body field appears (HTTP Request)
sendQuery=true -> queryParameters field appears (HTTP Request)
sendHeaders=true -> headerParameters field appears (HTTP Request)
Operation switch -- different operations show different field sets:
resource=message, operation=post -> shows channel, text, attachments
resource=message, operation=update -> shows messageId, text
resource=channel, operation=create -> shows name, isPrivate
Type selection -- a type dropdown changes available sub-fields:
conditions.string.operation=equals -> shows value1, value2 (binary)
conditions.string.operation=isEmpty -> shows value1 only (unary)
conditions.boolean.operation=true -> shows value1 only (unary)
Three detail levels exist. Always start at standard and escalate only when needed.
Standard (default, 1-2K tokens) -- covers 95% of cases:
get_node({ nodeType: "nodes-base.slack" })
Returns: required fields, common options, operation list, metadata. Use this first for any node configuration task.
search_properties -- targeted field lookup:
get_node({ nodeType: "nodes-base.httpRequest", mode: "search_properties", propertyQuery: "body" })
Returns: matching property paths with their displayOptions rules. Use when a specific field seems missing, invisible, or has unclear dependencies.
full (3-8K tokens) -- complete schema, last resort:
get_node({ nodeType: "nodes-base.slack", detail: "full" })
Returns: every property, every nested option, all displayOptions rules. Use only when standard + search_properties both failed to answer your question.
Need to configure a node?
-> get_node (standard). Got what you need? DONE.
|
Missing a specific field or field seems invisible?
-> get_node (search_properties, query=fieldName). Found it? DONE.
|
Still confused about the full dependency tree?
-> get_node (detail="full"). Read the displayOptions.
Structure: { resource: "<entity>", operation: "<action>", ...operation-specific fields }
What makes these tricky: the same node exposes completely different interfaces per operation. A Slack node configured for "post" is almost a different node than one configured for "update." Always query get_node when switching operations.
Structure: { method: "<verb>", url: "<endpoint>", authentication: "<type>", ...method-specific fields }
Key dependencies:
Webhook gotcha: Incoming webhook data lives at $json.body, not $json directly. This trips up every new n8n developer.
Structure: { operation: "<action>", ...action-specific fields }
Key dependencies by operation:
Structure: { conditions: { <type>: [{ operation, value1, value2? }] } }
Binary operators (equals, notEquals, contains, larger, smaller): require value1 AND value2.
Unary operators (isEmpty, isNotEmpty, true, false): require value1 ONLY. The singleValue: true flag is auto-added.
Switch nodes add: { mode: "rules", rules: { rules: [...] }, fallbackOutput: "extra" }. Number of rules must match number of outputs.
n8n auto-fixes operator structure on save. Know what IS and ISN'T handled:
Auto-fixed (do not manually set):
NOT auto-fixed (you must handle):
Practical rule: Set the operator and values correctly. Let auto-sanitization handle the structural metadata. Focus on business logic, not plumbing.
nodes-base.httpRequest not n8n-nodes-base.httpRequest. The prefix matters for get_node lookups.$input.item.json not ={{$json.field}}. That is the domain of n8n-code-javascript.Before configuring any node, answer these five questions in order:
1. WHAT node type and operation?
-> Determines the entire field set. Query get_node(standard) with the specific resource+operation.
2. WHAT fields does THIS operation require?
-> Read the get_node response. Do not assume from other operations on the same node.
3. ARE there dependency chains I need to satisfy?
-> Check if required fields depend on toggle/parent fields (sendBody, sendQuery, etc.).
-> Set parents FIRST, then children.
4. IS there anything auto-sanitized?
-> IF/Switch conditions: operator metadata is auto-fixed. Do not manually set singleValue.
-> Everything else: you must set it yourself.
5. VALIDATE before deploying.
-> Run validate_node. If it reports a "missing" field you already set, check displayOptions
dependencies -- a parent condition is likely unmet.
development
When the user wants help with paid advertising campaigns on Google Ads, Meta (Facebook/Instagram), LinkedIn, Twitter/X, or other ad platforms. Also use when the user mentions 'PPC,' 'paid media,' 'ad copy,' 'ad creative,' 'ROAS,' 'CPA,' 'ad campaign,' 'retargeting,' or 'audience targeting.' This skill covers campaign strategy, ad creation, audience targeting, and optimization.
testing
--- name: using-sharkitect-methodology description: Use when starting any conversation in a Sharkitect workspace OR before any task involving NEW pricing, positioning, proposal, strategy, plan-execution, or schema-design work — mandates invocation of Sharkitect-specific methodology skills (pricing-strategy, marketing-strategy-pmm, smb-cfo, hq-revenue-ops, executing-plans, brainstorming) under the same anti-rationalization discipline as using-superpowers. Documentation has failed 4 times across H
testing
Use when user says 'end session', 'wrap up', 'stop for the day', 'done for today', 'close out', 'save session', 'wrapping up', or invokes /end-session. Runs the full 9-step end-of-session protocol: resource audit, MEMORY.md update, lessons capture, plan status, pending items, workspace checklist, .tmp/ audit, git commit+push, Supabase brain sync, session brief, summary. Final step schedules a detached self-kill of the current session ONLY (3s delay) so the window closes cleanly. Other claude.exe processes (active workspaces) are NOT touched -- orphan cleanup is handled separately by Claude-Orphan-Cleanup-Hourly with proper age safeguards. Do NOT use for: mid-session quick saves (use session-checkpoint), skill syncing (use sync-skills.py), brain memory queries (use supabase-sync.py pull), document freshness reviews (use document-lifecycle), resource gap detection (use resource-auditor).
testing
Remove signs of AI-generated writing from text. Use when editing or reviewing text to make it sound more natural and human-written. Based on Wikipedia's comprehensive "Signs of AI writing" guide. Detects and fixes patterns including: inflated symbolism, promotional language, superficial -ing analyses, vague attributions, em dash overuse, rule of three, AI vocabulary words, passive voice, negative parallelisms, and filler phrases.