{"id":"4b2314e8-ffac-46d6-baa0-8fa8a318c4fe","entityType":"agent","slug":"clawhub-automatelab-automatelab-n8n","name":"N8n Skill","canonicalUrl":"https://www.xpersona.co/agent/clawhub-automatelab-automatelab-n8n","canonicalPath":"/agent/clawhub-automatelab-automatelab-n8n","generatedAt":"2026-10-12T14:20:42.096Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T20:25:58.808Z","emptyReason":null},"description":"Use when the user wants to build, debug, or extend an n8n workflow - generating workflow JSON from a description, scaffolding a custom TypeScript node, build... Skill: N8n Skill Owner: automatelab Summary: Use when the user wants to build, debug, or extend an n8n workflow - generating workflow JSON from a description, scaffolding a custom TypeScript node, build... Tags: latest:0.4.0 Version history: v0.4.0 | 2026-05-31T14:16:08.437Z | auto - Major update: Adds live n8n instance tooling, refines tool routing, and improves documentation structure. - Expanded from 3 to 9 tools,","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 997 downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s17d2fxqjhpy9jp6zvvj71062586nfxk:automatelab-n8n","sourceUrl":"https://clawhub.ai/automatelab/automatelab-n8n","homepage":"https://clawhub.ai/automatelab/skills/automatelab-n8n","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/automatelab/automatelab-n8n","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/automatelab/skills/automatelab-n8n","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":60,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Use when the user wants to build, debug, or extend an n8n workflow - generating workflow JSON from a description, scaffolding a custom TypeScript node, build..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T20:25:58.808Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T20:25:58.808Z","emptyReason":null},"stars":null,"forks":null,"downloads":997,"likes":null,"task":null,"library":null,"packageName":null,"latestVersion":"0.4.0","tractionLabel":"997 downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T20:25:58.745Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T20:25:58.808Z","lastCrawledAt":"2026-10-11T20:25:58.745Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T20:25:58.745Z","lastVerifiedAt":null,"highlights":[{"version":"0.4.0","createdAt":"2026-05-31T14:16:08.437Z","changelog":"- Major update: Adds live n8n instance tooling, refines tool routing, and improves documentation structure. - Expanded from 3 to 9 tools, including execution diagnostics and direct workflow management (list, create, activate). - Tool names now use dot-notation (e.g., workflow.generate), replacing previous n8n_* naming. - Clear separation of stateless tools vs. those requiring n8n API credentials. - Added references directory for deeper context (expressions, AI agents, iteration, code node details, etc.), loaded only as needed. - skill-card.md file removed to streamline documentation.","fileCount":3,"zipByteSize":4083},{"version":"0.0.2","createdAt":"2026-05-10T14:15:43.490Z","changelog":"- Initial release of the n8n skill for natural language workflow authoring and linting. - Generate n8n workflow JSON from plain English, including LangChain AI Agent setups. - Scaffold custom TypeScript nodes using the n8n node API. - Lint workflows for common issues: missing credentials, deprecated node types, broken connections, and more. - Guides users on iteration, node conventions, and proper code node returns for reliable n8n automation. - Requires the @automatelab/n8n-mcp server for MCP tool integration.","fileCount":3,"zipByteSize":5879}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17d2fxqjhpy9jp6zvvj71062586nfxk:automatelab-n8n","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-automatelab-automatelab-n8n/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-automatelab-automatelab-n8n/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-automatelab-automatelab-n8n/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-automatelab-automatelab-n8n/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-automatelab-automatelab-n8n/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-automatelab-automatelab-n8n/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-12T14:20:42.096Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-automatelab-automatelab-n8n/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-automatelab-automatelab-n8n/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-automatelab-automatelab-n8n/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-automatelab-automatelab-n8n/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-11T20:25:58.808Z","emptyReason":null},"readme":"Skill: N8n Skill\n\nOwner: automatelab\n\nSummary: Use when the user wants to build, debug, or extend an n8n workflow - generating workflow JSON from a description, scaffolding a custom TypeScript node, build...\n\nTags: latest:0.4.0\n\nVersion history:\n\nv0.4.0 | 2026-05-31T14:16:08.437Z | auto\n\n- Major update: Adds live n8n instance tooling, refines tool routing, and improves documentation structure.\n- Expanded from 3 to 9 tools, including execution diagnostics and direct workflow management (list, create, activate).\n- Tool names now use dot-notation (e.g., workflow.generate), replacing previous n8n_* naming.\n- Clear separation of stateless tools vs. those requiring n8n API credentials.\n- Added references directory for deeper context (expressions, AI agents, iteration, code node details, etc.), loaded only as needed.\n- skill-card.md file removed to streamline documentation.\n\nv0.0.2 | 2026-05-10T14:15:43.490Z | user\n\n- Initial release of the n8n skill for natural language workflow authoring and linting.\n- Generate n8n workflow JSON from plain English, including LangChain AI Agent setups.\n- Scaffold custom TypeScript nodes using the n8n node API.\n- Lint workflows for common issues: missing credentials, deprecated node types, broken connections, and more.\n- Guides users on iteration, node conventions, and proper code node returns for reliable n8n automation.\n- Requires the @automatelab/n8n-mcp server for MCP tool integration.\n\nArchive index:\n\nArchive v0.4.0: 3 files, 4083 bytes\n\nFiles: skill-card.md (2769b), SKILL.md (5157b), _meta.json (134b)\n\nFile v0.4.0:SKILL.md\n\n---\r\nname: n8n\r\ndescription: Use when the user wants to build, debug, or extend an n8n workflow - generating workflow JSON from a description, scaffolding a custom TypeScript node, building an AI agent (LangChain cluster), iterating over items, writing Code-node JS, linting an existing workflow, diagnosing a failed execution, or driving a live n8n instance via REST.\r\nversion: 0.4.0\r\nlicense: MIT\r\nhomepage: https://github.com/ratamaha-git/n8n-mcp\r\ncompatibility:\r\n  hosts:\r\n    - claude-code\r\n    - cursor\r\n    - claude-desktop\r\n    - windsurf\r\n    - vscode\r\n    - zed\r\n    - continue\r\n    - cline\r\n    - jetbrains\r\n    - warp\r\nmetadata:\r\n  npm: \"@automatelab/n8n-mcp\"\r\n  mcpName: io.github.ratamaha-git/n8n-mcp\r\n---\r\n\r\n# n8n\r\n\r\nPairs with the `@automatelab/n8n-mcp` server. The server exposes 9 MCP tools; this skill tells you when to use which and where to load deeper context.\r\n\r\n## Tool routing\r\n\r\nTool names use dot-notation: `node.*`, `workflow.*`, `execution.*` (renamed in v0.4.0 from `n8n_*`).\r\n\r\n**Stateless tools** (work without any n8n instance):\r\n\r\n- `workflow.generate` - plain-English description → workflow JSON. Detects AI-agent intent and emits a LangChain cluster.\r\n- `node.scaffold` - description → single `INodeType` TypeScript file for a custom n8n package.\r\n- `workflow.lint` - workflow JSON → list of issues (deprecated types, missing `typeVersion`, broken connections, AI Agent without `ai_languageModel`, IF v1 schema, etc.).\r\n- `execution.explain` - failed/surprising execution JSON → diagnosis. Catches the #1 n8n pain point: items \"silently disappearing\" between nodes. Also flags unresolved `={{ ... }}` expressions and surfaces LLM token usage.\r\n\r\n**Live-instance tools** (require `N8N_API_URL` + `N8N_API_KEY` env vars):\r\n\r\n- `workflow.list` - paginate workflows; filter by active/tags/name.\r\n- `workflow.get` - fetch a workflow by id. Pair with `workflow.lint` to audit deployed workflows.\r\n- `workflow.create` - POST a generated workflow. Strips read-only fields. Workflow is created inactive.\r\n- `workflow.activate` - flip active on/off.\r\n- `execution.list` - browse executions; pass `includeData: true` for the full body. Pair with `execution.explain`.\r\n\r\nDefault chains:\r\n- *Generate, then ship*: `workflow.generate` → `workflow.lint` → (if env configured) `workflow.create` → `workflow.activate`.\r\n- *Audit a deployed workflow*: `workflow.list` → `workflow.get` → `workflow.lint`.\r\n- *Diagnose a failure*: `execution.list {status: \"error\"}` → pick one → `execution.list {includeData: true, ...}` → `execution.explain`.\r\n\r\n## When the user describes a flow\r\n\r\n1. Run `workflow.generate` with their description verbatim.\r\n2. Run `workflow.lint` on the result.\r\n3. If lint clean → return the JSON. If warnings → return JSON + a one-line summary of warnings. If errors → fix them (usually by editing the JSON inline or re-prompting the user) before returning.\r\n\r\n## When the user pastes execution data and says \"why is X empty?\"\r\n\r\n1. Run `execution.explain` with the JSON.\r\n2. Read the findings; if the answer is in the report (e.g. \"Node Y returned 0 items because IF condition routed to other branch\"), summarize. Otherwise inspect the workflow node's `parameters` block manually.\r\n\r\n## Loading deeper context\r\n\r\nThe skill stays small to keep your context window free. Load from `references/` only when the task actually needs that depth:\r\n\r\n- `references/expressions.md` - `$json`, `$input.all()`, `$(\"Node Name\")`, auto-iteration. **Load when**: writing or debugging expressions, or the user says \"use `$json[0]`\" (common mistake).\r\n- `references/ai-agents.md` - LangChain cluster topology, `ai_languageModel` / `ai_memory` / `ai_tool` connection types, sub-node catalog. **Load when**: building an AI agent or the lint flags an agent without a language model.\r\n- `references/code-node.md` - Code node return-shape contract, what breaks, sandbox limits. **Load when**: writing a Code node or the user reports \"Code node fails silently.\"\r\n- `references/workflow-json.md` - `nodes`/`connections` structure, required fields, credential block. **Load when**: hand-editing workflow JSON or merging two workflows.\r\n- `references/iteration.md` - Split Out vs Loop Over Items vs Aggregate. **Load when**: the user says \"loop over an array\" or \"process N at a time.\"\r\n- `references/deprecations.md` - retired node types and their replacements. **Load when**: lint flags a deprecation or the user is migrating an old workflow.\r\n\r\n## Server setup\r\n\r\nAdd to the user's MCP config (Cursor: `~/.cursor/mcp.json`, Claude Desktop: `claude_desktop_config.json`):\r\n\r\n```json\r\n{\r\n  \"mcpServers\": {\r\n    \"n8n\": {\r\n      \"command\": \"npx\",\r\n      \"args\": [\"-y\", \"@automatelab/n8n-mcp\"],\r\n      \"env\": {\r\n        \"N8N_API_URL\": \"https://your-n8n.example.com\",\r\n        \"N8N_API_KEY\": \"n8n_...\"\r\n      }\r\n    }\r\n  }\r\n}\r\n```\r\n\r\nThe `env` block is optional — the 4 stateless tools work without it. Get an API key from n8n: Settings → API → Create API key.\r\n\r\n---\r\n\r\nDeveloped by [AutomateLab](https://automatelab.tech). Source: [github.com/ratamaha-git/n8n-mcp](https://github.com/ratamaha-git/n8n-mcp).\n\nFile v0.4.0:_meta.json\n\n{\n  \"ownerId\": \"kn7ddzh9n30z2vfqejbderkbqn80mtyk\",\n  \"slug\": \"automatelab-n8n\",\n  \"version\": \"0.4.0\",\n  \"publishedAt\": 1780236968437\n}\n\nFile v0.4.0:skill-card.md\n\n## Description:\n\nUse when the user wants to build, debug, or extend an n8n workflow - generating workflow JSON from a description, scaffolding a custom TypeScript node, building an AI agent, iterating over items, writing Code-node JavaScript, linting an existing workflow, diagnosing a failed execution, or driving a live n8n instance via REST.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[automatelab](https://clawhub.ai/user/automatelab)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and automation engineers use this skill to generate, lint, debug, and deploy n8n workflows, including custom TypeScript nodes, Code-node JavaScript, AI-agent workflow clusters, and live-instance workflow operations.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The paired MCP server can create and activate workflows on a live n8n instance when API credentials are configured.\n\nMitigation: Use a dedicated least-privilege and revocable n8n API key, review generated workflow JSON before creation, and require explicit approval before activation on live or production instances.\n\nRisk: The recommended MCP setup runs a third-party npm package and may be installed without pinning a package version.\n\nMitigation: Prefer a pinned and reviewed package version before connecting it to sensitive n8n environments.\n\nRisk: Generated or modified workflows can contain incorrect logic, unsafe credentials usage, or unintended automation effects.\n\nMitigation: Run workflow linting, inspect credentials and node parameters, and test workflows in a non-production n8n environment before deployment.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/automatelab/skills/automatelab-n8n)\n- [Project homepage](https://github.com/ratamaha-git/n8n-mcp)\n- [AutomateLab publisher profile](https://clawhub.ai/user/automatelab)\n- [npm package @automatelab/n8n-mcp](https://www.npmjs.com/package/@automatelab/n8n-mcp)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with workflow JSON, JavaScript or TypeScript code, shell commands, and configuration snippets]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May include generated workflow JSON, lint findings, execution diagnostics, MCP setup configuration, and live n8n workflow management guidance.]\n\n## Skill Version(s):\n\n0.4.0 (source: server release and SKILL.md frontmatter)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v0.0.2: 3 files, 5879 bytes\n\nFiles: skill-card.md (2354b), SKILL.md (9398b), _meta.json (134b)\n\nFile v0.0.2:SKILL.md\n\n---\nname: n8n\ndescription: Build, debug, and extend n8n workflows from natural language. Generate workflow JSON (including LangChain AI Agent setups), scaffold custom TypeScript nodes, and lint existing workflows for missing credentials, deprecated node types, broken connections, AI agents missing language models, IF v1 schema, and more.\nversion: 0.2.0\nemoji: \"🧩\"\nhomepage: https://github.com/ratamaha-git/n8n-mcp\nmetadata:\n  openclaw:\n    requires:\n      bins:\n        - node\n        - npx\n    install:\n      - kind: node\n        package: \"@automatelab/n8n-mcp\"\n        bins: [n8n-mcp]\n---\n\n# n8n\n\nThis skill pairs with the `@automatelab/n8n-mcp` server (npm: [@automatelab/n8n-mcp](https://www.npmjs.com/package/@automatelab/n8n-mcp)). It exposes three MCP tools and gives the agent the n8n-specific context needed to produce output that imports cleanly and runs on the first try.\n\nOnce the MCP server is configured (see \"Server setup\" below), the agent has access to:\n\n- **`n8n_generate_workflow`** - the user describes a flow in plain English (\"Stripe webhook to Slack and a Google Sheets row\"). Returns workflow JSON ready for n8n's \"Import from File\" dialog. Detects AI-agent intent and generates a LangChain cluster (chat trigger + agent root + chat model + memory + optional HTTP tool) wired with `ai_languageModel` / `ai_memory` / `ai_tool` connections.\n- **`n8n_scaffold_node`** - the user wants a *custom* node (not in n8n's library, or a thin wrapper around an internal API). Returns a single `INodeType` TypeScript file.\n- **`n8n_lint_workflow`** - the user pastes existing workflow JSON, OR you just generated one. Catches missing `typeVersion`, deprecated types, missing credentials, broken connections, duplicate IDs, AI Agent missing `ai_languageModel`, Webhook missing `webhookId`, IF node v1 schema.\n\nDefault chain: `generate_workflow` -> `lint_workflow` on the result. Hand back the JSON only if lint reports no issues, or call out the warnings explicitly.\n\n## Server setup\n\nAdd this to the user's MCP config (Cursor: `~/.cursor/mcp.json`, Claude Desktop: `claude_desktop_config.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"n8n\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@automatelab/n8n-mcp\"]\n    }\n  }\n}\n```\n\nAfter restart, the three `n8n_*` tools become available.\n\n## The n8n data model: items and auto-iteration\n\nThis is the single biggest source of broken workflows. Every node sees an array:\n\n```\n[ { json: { ... }, binary?: { ... } }, { json: { ... } }, ... ]\n```\n\nMost nodes **auto-iterate**: they run once *per item*. You almost never need an explicit loop. If a previous node returned 10 items, the next node executes 10 times automatically.\n\nExpression cheat sheet (use inside `={{ ... }}`):\n\n- `$json` - the *current* item's `json` payload (most common)\n- `$json.field.nested` - dot-walk into the current item\n- `$input.all()` - full array of items entering this node\n- `$input.first()` / `$input.last()` - shortcuts\n- `$(\"Node Name\").item.json` - the matching item from another node (paired by run index)\n- `$(\"Node Name\").all()` - all items from another node, regardless of pairing\n- `$(\"Node Name\").first().json` - first item from another node\n- `$node[\"Node Name\"].json` - legacy syntax, still works but `$()` is preferred\n\nCommon mistake: writing `$json[0]` because you saw a JSON array in the input panel. The array IS the item list - n8n already split it. Use `$json` (singular) and trust auto-iteration.\n\n## Iteration: do you actually need a loop?\n\nDecision tree:\n\n1. **Default: no loop.** Drop a Set / HTTP Request / Code node after your data source and it'll run per item.\n2. **Need a loop only for:**\n   - Paged API calls (loop while `nextCursor` is set)\n   - Rate-limited APIs that need batching with delay\n   - Sequential side-effects where order matters and you must process N at a time\n3. **Picking the right node:**\n   - **Split Out** - one item contains an array field (e.g. `items[]`); flatten so each array element becomes its own item. Use this 90% of the time you \"need to iterate over an array.\"\n   - **Loop Over Items (Split In Batches)** - actual loop with a configurable batch size and a back-edge connection. Use for pagination and rate-limited batching.\n   - **Aggregate** - inverse of Split Out: collapse N items back into a single item with an array field.\n\nLoop Over Items requires connecting the *processing* branch's last node back to the loop node's main input. Without that back-edge, it runs once and stops. Lint won't catch this; double-check connections.\n\n## AI Agent / LangChain cluster nodes\n\nn8n's AI nodes use a different connection model. The root is `@n8n/n8n-nodes-langchain.agent` (older workflows: `n8n-nodes-langchain.agent`). Sub-nodes attach *upward* via specialized connection types, not the normal `main` flow:\n\n| Sub-node role | Connection type | Examples |\n|---|---|---|\n| Language model | `ai_languageModel` | `lmChatOpenAi`, `lmChatAnthropic`, `lmChatOllama` |\n| Memory | `ai_memory` | `memoryBufferWindow`, `memoryPostgresChat` |\n| Tools | `ai_tool` | `toolHttpRequest`, `toolCode`, `toolWorkflow`, MCP client |\n| Output parser | `ai_outputParser` | `outputParserStructured` |\n\nIn `connections`, the *sub-node* is the source and the agent is the target, with the connection type set:\n\n```json\n\"connections\": {\n  \"OpenAI Chat Model\": {\n    \"ai_languageModel\": [[{ \"node\": \"AI Agent\", \"type\": \"ai_languageModel\", \"index\": 0 }]]\n  },\n  \"Buffer Window Memory\": {\n    \"ai_memory\": [[{ \"node\": \"AI Agent\", \"type\": \"ai_memory\", \"index\": 0 }]]\n  }\n}\n```\n\nMinimum viable agent: trigger -> AI Agent (root) + a chat model sub-node + (optional) memory + (optional) tools. The agent itself flows downstream via `main`.\n\nTool nodes can wrap arbitrary HTTP requests, sub-workflows, or Code. To call other workflows from an agent, use `toolWorkflow` and reference the sub-workflow's ID.\n\n## Code node: return shape contract\n\nThe Code node MUST return an array of items, never a raw object. This is the #1 reason Code nodes \"fail mysteriously.\"\n\nRun Once for All Items (default mode):\n```js\nconst out = [];\nfor (const item of $input.all()) {\n  out.push({ json: { ...item.json, doubled: item.json.value * 2 } });\n}\nreturn out;\n```\n\nRun Once for Each Item:\n```js\nreturn { json: { ...$json, doubled: $json.value * 2 } };\n```\n\nNote the difference: per-all-items returns an *array*; per-each-item returns a *single item object*. n8n collects them.\n\nWhat breaks:\n- `return $json` - returns one item's payload, not wrapped (per-each-item: missing `json` key; per-all-items: not an array)\n- `return [...]` of plain objects without `{ json: ... }` wrapping\n- Calling `this.getCredentials()` or `$getCredentials()` - not available in Code node, use `$credentials.<name>` only inside expressions on credential-aware nodes\n\n## Workflow JSON conventions\n\nEvery node MUST have:\n- `id` - unique UUID per workflow\n- `name` - unique display name (connections key by name, not id)\n- `type` - e.g. `n8n-nodes-base.slack`, `n8n-nodes-base.webhook`\n- `typeVersion` - integer or float; n8n refuses to load a node without one\n- `position` - `[x, y]` array (canvas coordinates, ~220px apart horizontally)\n- `parameters` - object, can be empty `{}`\n\n`connections` is keyed by source node *name*. Each entry: `{ \"main\": [[{ \"node\": \"<target name>\", \"type\": \"main\", \"index\": 0 }]] }`. The double array is real - first level is output index, second is fan-out targets.\n\nCredentials: nodes like `slack`, `gmail`, `googleSheets`, `notion`, `discord`, `stripe`, `httpRequest` (with auth) need a `credentials` block referencing a credential by name. The user creates the credential in n8n's UI; the workflow JSON only references it. Credential names are NOT portable across instances - if you import to a new n8n, recreate credentials with identical names or the workflow will fail at runtime.\n\n## Custom node skeleton\n\nA scaffolded node implements `INodeType`:\n- `description: INodeTypeDescription` - displayName, name, group, version, description, defaults, inputs/outputs, credentials, properties\n- `async execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>` - read inputs via `this.getInputData()`, return `[outputs]` (outer array is per output index)\n\nDrop the file into `nodes/<NodeName>/<nodeName>.node.ts` of a custom n8n package, register in `package.json` `n8n.nodes`, rebuild.\n\n## Import gotchas and deprecations\n\nLint flags these; you should avoid producing them:\n\n- `n8n-nodes-base.function` -> `n8n-nodes-base.code` (Function and FunctionItem nodes were removed)\n- `n8n-nodes-base.spreadsheetFile` -> `n8n-nodes-base.convertToFile` / `extractFromFile`\n- Missing `typeVersion` on any node - n8n refuses to import\n- `httpRequest` with auth but no credential reference - silently runs unauthenticated\n- IF node v1 syntax (`conditions.boolean[].value1` etc.) - v2+ uses `conditions.options.combinator` and a different operator schema; if generating fresh, target the latest typeVersion\n- Expression-based credential names - not portable across instances; lint warns but lets it through\n- Webhook nodes without a `webhookId` - n8n auto-generates on import, but be explicit if the user needs a stable URL\n\nWhen in doubt, run `n8n_lint_workflow` against the JSON before returning it.\n\n---\n\nDeveloped by [AutomateLab](https://automatelab.tech). Source: [github.com/ratamaha-git/n8n-mcp](https://github.com/ratamaha-git/n8n-mcp).\n\nFile v0.0.2:_meta.json\n\n{\n  \"ownerId\": \"kn7ddzh9n30z2vfqejbderkbqn80mtyk\",\n  \"slug\": \"automatelab-n8n\",\n  \"version\": \"0.0.2\",\n  \"publishedAt\": 1778422543490\n}\n\nFile v0.0.2:skill-card.md\n\n## Description: <br>\nBuild, debug, and extend n8n workflows from natural language, including workflow JSON generation, custom TypeScript node scaffolding, and workflow linting. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[ratamaha-git](https://clawhub.ai/user/ratamaha-git) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and automation engineers use this skill to generate import-ready n8n workflow JSON, scaffold custom n8n TypeScript nodes, and lint workflows for common import and runtime issues. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill installs an unpinned external MCP package with capabilities broader than the skill discloses. <br>\nMitigation: Pin and review the @automatelab/n8n-mcp package before installation, and inspect its current tool surface before granting access. <br>\nRisk: Configured MCP access may allow the agent to interact with a live n8n instance when N8N_API_URL or N8N_API_KEY is provided. <br>\nMitigation: Provide n8n credentials only when live access is intended, and prefer read-only or disabled-tool controls for shared, production, or customer-facing environments. <br>\n\n\n## Reference(s): <br>\n- [ClawHub release page](https://clawhub.ai/ratamaha-git/automatelab-n8n) <br>\n- [@automatelab/n8n-mcp npm package](https://www.npmjs.com/package/@automatelab/n8n-mcp) <br>\n- [Project homepage](https://github.com/ratamaha-git/n8n-mcp) <br>\n- [AutomateLab](https://automatelab.tech) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, Markdown, JSON, Code, Shell commands, Configuration, Guidance] <br>\n**Output Format:** [Markdown with JSON, TypeScript, and shell command snippets] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Generated workflow JSON should be linted before import; live n8n access depends on user-provided MCP configuration and credentials.] <br>\n\n## Skill Version(s): <br>\n0.0.2 (source: server release metadata; artifact frontmatter says 0.2.0) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>","readmeExcerpt":"Skill: N8n Skill Owner: automatelab Summary: Use when the user wants to build, debug, or extend an n8n workflow - generating workflow JSON from a description, scaffolding a custom TypeScript node, build... Tags: latest:0.4.0 Version history: v0.4.0 | 2026-05-31T14:16:08.437Z | auto - Major update: Adds live n8n instance tooling, refines tool routing, and improves documentation structure. - Expanded from 3 to 9 tools,","codeSnippets":[],"executableExamples":[{"language":"json","snippet":"{\n  \"mcpServers\": {\n    \"n8n\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@automatelab/n8n-mcp\"]\n    }\n  }\n}"},{"language":"text","snippet":"[ { json: { ... }, binary?: { ... } }, { json: { ... } }, ... ]"},{"language":"json","snippet":"\"connections\": {\n  \"OpenAI Chat Model\": {\n    \"ai_languageModel\": [[{ \"node\": \"AI Agent\", \"type\": \"ai_languageModel\", \"index\": 0 }]]\n  },\n  \"Buffer Window Memory\": {\n    \"ai_memory\": [[{ \"node\": \"AI Agent\", \"type\": \"ai_memory\", \"index\": 0 }]]\n  }\n}"},{"language":"js","snippet":"const out = [];\nfor (const item of $input.all()) {\n  out.push({ json: { ...item.json, doubled: item.json.value * 2 } });\n}\nreturn out;"},{"language":"js","snippet":"return { json: { ...$json, doubled: $json.value * 2 } };"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\r\nname: n8n\r\ndescription: Use when the user wants to build, debug, or extend an n8n workflow - generating workflow JSON from a description, scaffolding a custom TypeScript node, building an AI agent (LangChain cluster), iterating over items, writing Code-node JS, linting an existing workflow, diagnosing a failed execution, or driving a live n8n instance via REST.\r\nversion: 0.4.0\r\nlicense: MIT\r\nhomepage: https://github.com/ratamaha-git/n8n-mcp\r\ncompatibility:\r\n  hosts:\r\n    - claude-code\r\n    - cursor\r\n    - claude-desktop\r\n    - windsurf\r\n    - vscode\r\n    - zed\r\n    - continue\r\n    - cline\r\n    - jetbrains\r\n    - warp\r\nmetadata:\r\n  npm: \"@automatelab/n8n-mcp\"\r\n  mcpName: io.github.ratamaha-git/n8n-mcp\r\n---\r\n\r\n# n8n\r\n\r\nPairs with the `@automatelab/n8n-mcp` server. The server exposes 9 MCP tools; this skill tells you when to use which and where to load deeper context.\r\n\r\n## Tool routing\r\n\r\nTool names use dot-notation: `node.*`, `workflow.*`, `execution.*` (renamed in v0.4.0 from `n8n_*`).\r\n\r\n**Stateless tools** (work without any n8n instance):\r\n\r\n- `workflow.generate` - plain-English description → workflow JSON. Detects AI-agent intent and emits a LangChain cluster.\r\n- `node.scaffold` - description → single `INodeType` TypeScript file for a custom n8n package.\r\n- `workflow.lint` - workflow JSON → list of issues (deprecated types, missing `typeVersion`, broken connections, AI Agent without `ai_languageModel`, IF v1 schema, etc.).\r\n- `execution.explain` - failed/surprising execution JSON → diagnosis. Catches the #1 n8n pain point: items \"silently disappearing\" between nodes. Also flags unresolved `={{ ... }}` expressions and surfaces LLM token usage.\r\n\r\n**Live-instance tools** (require `N8N_API_URL` + `N8N_API_KEY` env vars):\r\n\r\n- `workflow.list` - paginate workflows; filter by active/tags/name.\r\n- `workflow.get` - fetch a workflow by id. Pair with `workflow.lint` to audit deployed workflows.\r\n- `workflow.create` - POST a generated workflow. Strips read-only fields. Workflow is created inactive.\r\n- `workflow.activate` - flip active on/off.\r\n- `execution.list` - browse executions; pass `includeData: true` for the full body. Pair with `execution.explain`.\r\n\r\nDefault chains:\r\n- *Generate, then ship*: `workflow.generate` → `workflow.lint` → (if env configured) `workflow.create` → `workflow.activate`.\r\n- *Audit a deployed workflow*: `workflow.list` → `workflow.get` → `workflow.lint`.\r\n- *Diagnose a failure*: `execution.list {status: \"error\"}` → pick one → `execution.list {includeData: true, ...}` → `execution.explain`.\r\n\r\n## When the user describes a flow\r\n\r\n1. Run `workflow.generate` with their description verbatim.\r\n2. Run `workflow.lint` on the result.\r\n3. If lint clean → return the JSON. If warnings → return JSON + a one-line summary of warnings. If errors → fix them (usually by editing the JSON inline or re-prompting the user) before returning.\r\n\r\n## When the user pastes execution data and says \"why is X empty?\"\r\n\r\n1. Run `execution.explain` with"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7ddzh9n30z2vfqejbderkbqn80mtyk\",\n  \"slug\": \"automatelab-n8n\",\n  \"version\": \"0.4.0\",\n  \"publishedAt\": 1780236968437\n}"},{"path":"skill-card.md","content":"## Description:\n\nUse when the user wants to build, debug, or extend an n8n workflow - generating workflow JSON from a description, scaffolding a custom TypeScript node, building an AI agent, iterating over items, writing Code-node JavaScript, linting an existing workflow, diagnosing a failed execution, or driving a live n8n instance via REST.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[automatelab](https://clawhub.ai/user/automatelab)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and automation engineers use this skill to generate, lint, debug, and deploy n8n workflows, including custom TypeScript nodes, Code-node JavaScript, AI-agent workflow clusters, and live-instance workflow operations.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The paired MCP server can create and activate workflows on a live n8n instance when API credentials are configured.\n\nMitigation: Use a dedicated least-privilege and revocable n8n API key, review generated workflow JSON before creation, and require explicit approval before activation on live or production instances.\n\nRisk: The recommended MCP setup runs a third-party npm package and may be installed without pinning a package version.\n\nMitigation: Prefer a pinned and reviewed package version before connecting it to sensitive n8n environments.\n\nRisk: Generated or modified workflows can contain incorrect logic, unsafe credentials usage, or unintended automation effects.\n\nMitigation: Run workflow linting, inspect credentials and node parameters, and test workflows in a non-production n8n environment before deployment.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/automatelab/skills/automatelab-n8n)\n- [Project homepage](https://github.com/ratamaha-git/n8n-mcp)\n- [AutomateLab publisher profile](https://clawhub.ai/user/automatelab)\n- [npm package @automatelab/n8n-mcp](https://www.npmjs.com/package/@automatelab/n8n-mcp)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with workflow JSON, JavaScript or TypeScript code, shell commands, and configuration snippets]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May include generated workflow JSON, lint findings, execution diagnostics, MCP setup configuration, and live n8n workflow management guidance.]\n\n## Skill Version(s):\n\n0.4.0 (source: server release and SKILL.md frontmatter)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Use when the user wants to build, debug, or extend an n8n workflow - generating workflow JSON from a description, scaffolding a custom TypeScript node, build... Skill: N8n Skill Owner: automatelab Summary: Use when the user wants to build, debug, or extend an n8n workflow - generating workflow JSON from a description, scaffolding a custom TypeScript node, build... Tags: latest:0.4.0 Version history: v0.4.0 | 2026-05-31T14:16:08.437Z | auto - Major update: Adds live n8n instance tooling, refines tool routing, and improves documentation structure. - Expanded from 3 to 9 tools,","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1258,"uniquenessScore":47,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T20:25:58.808Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T20:25:58.808Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-12T14:20:42.096Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}