[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-n8n-n8n-extending-mcp-official":3,"mdc--6al58u-key":33,"related-repo-n8n-n8n-extending-mcp-official":718,"related-org-n8n-n8n-extending-mcp-official":824},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":31,"mdContent":32},"n8n-extending-mcp-official","expose n8n workflows as MCP tools","Use when you want to expose an n8n workflow as a tool the coding agent can call. Two cases. (1) Wrap n8n API capabilities the MCP doesn't natively expose: folder CRUD, tag rename\u002Fdelete, instance metadata, credential creation. (2) Expose a general-purpose workflow as an agent tool: a workflow that calls a third-party API, runs business logic, or does any task you want the agent to invoke. Triggers on \"expose as MCP tool\", \"build a tool for my agent\", \"I need to know X\" where X isn't an MCP tool, \"create folder\", \"rename tag\", or any capability gap.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},"n8n","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fn8n.png","n8n-io",[12,14,17,20],{"name":8,"slug":8,"type":13},"tag",{"name":15,"slug":16,"type":13},"MCP","mcp",{"name":18,"slug":19,"type":13},"API Development","api-development",{"name":21,"slug":22,"type":13},"Workflow Automation","workflow-automation",319,"https:\u002F\u002Fgithub.com\u002Fn8n-io\u002Fskills","2026-07-08T05:44:58.475261",null,30,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":26},[],"https:\u002F\u002Fgithub.com\u002Fn8n-io\u002Fskills\u002Ftree\u002FHEAD\u002Fskills\u002Fn8n-extending-mcp-official","---\nname: n8n-extending-mcp-official\ndescription: 'Use when you want to expose an n8n workflow as a tool the coding agent can call. Two cases. (1) Wrap n8n API capabilities the MCP doesn''t natively expose: folder CRUD, tag rename\u002Fdelete, instance metadata, credential creation. (2) Expose a general-purpose workflow as an agent tool: a workflow that calls a third-party API, runs business logic, or does any task you want the agent to invoke. Triggers on \"expose as MCP tool\", \"build a tool for my agent\", \"I need to know X\" where X isn''t an MCP tool, \"create folder\", \"rename tag\", or any capability gap.'\n---\n\n\u003C!-- TEMPORARY: update whenever n8n mcp capacities are added. a lot of listed functionalities missing are coming soon -->\n# n8n Extending MCP\n\nAny n8n workflow with MCP access enabled becomes a tool the coding agent can call by name. Two common cases:\n\n1. **Wrap n8n capabilities the MCP doesn't expose.** The MCP covers workflow CRUD, validation, execution, data tables, credential listing, execution search, folder\u002Fproject listing, tag listing and attach\u002Fdetach. Still missing: folder CRUD, tag rename\u002Fdelete, instance metadata, credential creation. Build a workflow that hits the n8n API and exposes the result as an agent tool.\n2. **Expose a general-purpose workflow as a tool.** A workflow that has nothing to do with n8n itself (calls a third-party API, runs internal business logic, looks something up in a private system) can be MCP-callable. Lets the agent invoke real operations during a coding session.\n\nThe MCP calls your workflow as if it were a native tool: input from the `Execute Workflow Trigger`, output from the workflow's last node.\n\n## When to reach for this\n\nCase 1 (wrap n8n capability):\n\n- Folder CRUD (create, rename, move, delete): REST API exists, no MCP tool yet.\n- Tag rename\u002Fdelete: the MCP lists tags (`list_tags`) and attaches\u002Fdetaches them (`update_workflow` `addTags`\u002F`removeTags`, auto-creating unknown names), but can't rename or delete tag entities. REST API exists for those.\n- Instance metadata (limits, plan info, configured integrations): no MCP tool.\n- Credential creation: REST API exists (`POST \u002Fcredentials`), no MCP tool yet.\n- Any n8n API operation the MCP doesn't natively expose.\n\nCase 2 (general agent tool):\n\n- A recurring agent task you'd rather codify than re-explain (lookup, format, send).\n- An action against a system the agent doesn't have direct access to (private API, internal service, third-party integration).\n- Anything you want a future session to invoke without re-deriving the implementation.\n\nDon't reach for this for:\n\n- One-off questions, ask the user directly.\n- Things the MCP already exposes natively.\n\n## Non-negotiables\n\n1. **Ask the user before building.** This creates a workflow on their instance, with credentials. They need to OK it explicitly.\n2. **Credentials via credential, never text field.** Same rule as everywhere else in n8n. See `n8n-credentials-and-security-official`.\n\n## Protocol\n\n- **Search for existing wrappers first.** `search_workflows({ tags: ['tool'] })` and a capability keyword search. If something matches, use it instead of duplicating.\n- **For case 1, build as a stateless, queryable utility.** Takes input, calls n8n's API, returns the result. No side effects. Case 2 may legitimately have side effects (sending, writing); name them in the tool description.\n- **Offer to edit the agent's context file yourself** (CLAUDE.md, AGENTS.md, GEMINI.md, whatever the user's agent reads on session start) to add an entry for the new tool. You have Edit\u002FWrite tools, so there's no reason to make the user paste a snippet manually. Ask first since it's their config file, then edit it directly when they say yes.\n\n## The pattern, end to end\n\n```\n1. User asks for a capability (missing MCP feature, or a workflow they want\n   the agent to be able to invoke).\n2. You: \"I can build a workflow that exposes this as a tool the MCP can call.\n   Want me to create it?\"\n3. User: yes.\n4. You build the workflow:\n   - Trigger: Execute Workflow Trigger with declared inputs.\n   - Body: whatever logic the tool needs (HTTP Request to n8n's API, a\n     third-party call, internal computation).\n   - Output: structured response.\n5. Validate, test, publish.\n6. Ask the user if you can add an entry for this tool to their agent context\n   file (CLAUDE.md \u002F AGENTS.md \u002F etc.) so future sessions know to search for\n   it by name. Edit the file directly when they say yes.\n7. The workflow is immediately callable: agent-created workflows have `availableInMCP: true` set by default.\n```\n\n## Common case-1 wrappers (missing MCP capabilities)\n\nMost common patterns, by usefulness. Case 2 (general agent tools) is whatever your project needs, no canonical examples.\n\n> **n8n REST API reference:** https:\u002F\u002Fdocs.n8n.io\u002Fapi\u002Fapi-reference\u002F. Start here for any case-1 wrap. Find the endpoint, then wrap it with an HTTP Request node + `n8nApi` credential. Self-hosted instances expose this at `\u003Cinstance-url>\u002Fapi\u002Fv1\u002F`.\n\n### 1. Folder management\n\nThe MCP can place workflows into existing folders but can't create, rename, move, or delete them. n8n's REST API has a [Folders endpoint](https:\u002F\u002Fdocs.n8n.io\u002Fapi\u002Fapi-reference\u002F#tag\u002Ffolders), so a one-time wrap solves this for users who organize folders frequently.\n\n```\nTool: create folder\nInput: { projectId: string, name: string, parentFolderId?: string }\nOutput: { id, name, projectId, parentFolderId? }\n```\n\n### 2. Instance metadata\n\nVersion, configured integrations, environment info. Useful for the SessionStart drift check or adapting workflows to instance capabilities.\n\n```\nTool: get instance info\nInput: {}\nOutput: { version, edition, integrations: [...], limits: {...} }\n```\n\n\n## How the agent invokes a tool workflow\n\nThe MCP **doesn't register each tool-flagged workflow as a separately-named MCP tool.** Discovery and invocation are two steps:\n\n1. **Discover** via `search_workflows({ query: '\u003Ckeyword>' })`. Workflows with MCP access on return `availableInMCP: true`. Filter for that.\n2. **Invoke** via `execute_workflow({ workflowId, inputs })`. Read the input schema first with `get_workflow_details`. The `Execute Workflow Trigger` defines typed fields.\n\nOutput is whatever the workflow's last node returns.\n\n**MCP access defaults:** Agent-created workflows default to `availableInMCP: true`. UI-created workflows may default off, in which case the user has to toggle MCP access on in the workflow's settings before it appears in search results. Either way, the user can flip it off later to restrict access.\n\n**This is why the agent-context-file snippet (CLAUDE.md \u002F AGENTS.md \u002F etc.) matters.** Future sessions don't auto-enumerate tool workflows. The snippet tells them the tool exists by name, so they search for it instead of re-deriving the implementation.\n\n## Anti-patterns\n\n| Anti-pattern | What goes wrong | Fix |\n|---|---|---|\n| Building an MCP-extension workflow without asking the user | Surprise creation of workflows on their instance with credentials | Always ask permission first |\n| Not documenting the new tool in the agent's context file | Future sessions don't auto-enumerate tool workflows. Without a hint they'll re-derive the implementation. | Ask the user, then edit CLAUDE.md \u002F AGENTS.md \u002F whichever file their agent reads, directly. Don't make them paste a snippet. |\n| Hardcoding the n8n API token in the HTTP Request node | Token leak when the workflow is exported or copied | Use a credential of type `n8nApi` or appropriate header auth |\n| Side-effecting tool with no mention of side effects in its name\u002Fdescription | Agent invokes thinking it's a read, ends up sending real messages or writing real data | Name and describe the side effect explicitly (e.g., `Tool: send Slack message`). Read-only is the safer default for case-1 wrappers. |\n| Wrapper that does bulk or destructive ops (archive, delete) with no dry-run | One bug touches many workflows | Strong explicit opt-in per call, plus a dry-run mode that lists targets without acting |\n| Wrapper returns credential *values* | Token leak via tool output | Return IDs, names, types only. Never the secret. |\n| Skipping the validate + verify + test cycle on the wrapper | The \"tool\" itself is broken, manifests as confusing tool-not-found or empty-response errors | Same lifecycle as any workflow: see `n8n-workflow-lifecycle-official` |\n\n",{"data":34,"body":35},{"name":4,"description":6},{"type":36,"children":37},"root",[38,47,53,79,93,100,105,174,179,197,202,215,221,252,258,298,304,316,322,327,365,372,386,395,401,406,415,421,433,494,499,516,526,532],{"type":39,"tag":40,"props":41,"children":43},"element","h1",{"id":42},"n8n-extending-mcp",[44],{"type":45,"value":46},"text","n8n Extending MCP",{"type":39,"tag":48,"props":49,"children":50},"p",{},[51],{"type":45,"value":52},"Any n8n workflow with MCP access enabled becomes a tool the coding agent can call by name. Two common cases:",{"type":39,"tag":54,"props":55,"children":56},"ol",{},[57,69],{"type":39,"tag":58,"props":59,"children":60},"li",{},[61,67],{"type":39,"tag":62,"props":63,"children":64},"strong",{},[65],{"type":45,"value":66},"Wrap n8n capabilities the MCP doesn't expose.",{"type":45,"value":68}," The MCP covers workflow CRUD, validation, execution, data tables, credential listing, execution search, folder\u002Fproject listing, tag listing and attach\u002Fdetach. Still missing: folder CRUD, tag rename\u002Fdelete, instance metadata, credential creation. Build a workflow that hits the n8n API and exposes the result as an agent tool.",{"type":39,"tag":58,"props":70,"children":71},{},[72,77],{"type":39,"tag":62,"props":73,"children":74},{},[75],{"type":45,"value":76},"Expose a general-purpose workflow as a tool.",{"type":45,"value":78}," A workflow that has nothing to do with n8n itself (calls a third-party API, runs internal business logic, looks something up in a private system) can be MCP-callable. Lets the agent invoke real operations during a coding session.",{"type":39,"tag":48,"props":80,"children":81},{},[82,84,91],{"type":45,"value":83},"The MCP calls your workflow as if it were a native tool: input from the ",{"type":39,"tag":85,"props":86,"children":88},"code",{"className":87},[],[89],{"type":45,"value":90},"Execute Workflow Trigger",{"type":45,"value":92},", output from the workflow's last node.",{"type":39,"tag":94,"props":95,"children":97},"h2",{"id":96},"when-to-reach-for-this",[98],{"type":45,"value":99},"When to reach for this",{"type":39,"tag":48,"props":101,"children":102},{},[103],{"type":45,"value":104},"Case 1 (wrap n8n capability):",{"type":39,"tag":106,"props":107,"children":108},"ul",{},[109,114,151,156,169],{"type":39,"tag":58,"props":110,"children":111},{},[112],{"type":45,"value":113},"Folder CRUD (create, rename, move, delete): REST API exists, no MCP tool yet.",{"type":39,"tag":58,"props":115,"children":116},{},[117,119,125,127,133,135,141,143,149],{"type":45,"value":118},"Tag rename\u002Fdelete: the MCP lists tags (",{"type":39,"tag":85,"props":120,"children":122},{"className":121},[],[123],{"type":45,"value":124},"list_tags",{"type":45,"value":126},") and attaches\u002Fdetaches them (",{"type":39,"tag":85,"props":128,"children":130},{"className":129},[],[131],{"type":45,"value":132},"update_workflow",{"type":45,"value":134}," ",{"type":39,"tag":85,"props":136,"children":138},{"className":137},[],[139],{"type":45,"value":140},"addTags",{"type":45,"value":142},"\u002F",{"type":39,"tag":85,"props":144,"children":146},{"className":145},[],[147],{"type":45,"value":148},"removeTags",{"type":45,"value":150},", auto-creating unknown names), but can't rename or delete tag entities. REST API exists for those.",{"type":39,"tag":58,"props":152,"children":153},{},[154],{"type":45,"value":155},"Instance metadata (limits, plan info, configured integrations): no MCP tool.",{"type":39,"tag":58,"props":157,"children":158},{},[159,161,167],{"type":45,"value":160},"Credential creation: REST API exists (",{"type":39,"tag":85,"props":162,"children":164},{"className":163},[],[165],{"type":45,"value":166},"POST \u002Fcredentials",{"type":45,"value":168},"), no MCP tool yet.",{"type":39,"tag":58,"props":170,"children":171},{},[172],{"type":45,"value":173},"Any n8n API operation the MCP doesn't natively expose.",{"type":39,"tag":48,"props":175,"children":176},{},[177],{"type":45,"value":178},"Case 2 (general agent tool):",{"type":39,"tag":106,"props":180,"children":181},{},[182,187,192],{"type":39,"tag":58,"props":183,"children":184},{},[185],{"type":45,"value":186},"A recurring agent task you'd rather codify than re-explain (lookup, format, send).",{"type":39,"tag":58,"props":188,"children":189},{},[190],{"type":45,"value":191},"An action against a system the agent doesn't have direct access to (private API, internal service, third-party integration).",{"type":39,"tag":58,"props":193,"children":194},{},[195],{"type":45,"value":196},"Anything you want a future session to invoke without re-deriving the implementation.",{"type":39,"tag":48,"props":198,"children":199},{},[200],{"type":45,"value":201},"Don't reach for this for:",{"type":39,"tag":106,"props":203,"children":204},{},[205,210],{"type":39,"tag":58,"props":206,"children":207},{},[208],{"type":45,"value":209},"One-off questions, ask the user directly.",{"type":39,"tag":58,"props":211,"children":212},{},[213],{"type":45,"value":214},"Things the MCP already exposes natively.",{"type":39,"tag":94,"props":216,"children":218},{"id":217},"non-negotiables",[219],{"type":45,"value":220},"Non-negotiables",{"type":39,"tag":54,"props":222,"children":223},{},[224,234],{"type":39,"tag":58,"props":225,"children":226},{},[227,232],{"type":39,"tag":62,"props":228,"children":229},{},[230],{"type":45,"value":231},"Ask the user before building.",{"type":45,"value":233}," This creates a workflow on their instance, with credentials. They need to OK it explicitly.",{"type":39,"tag":58,"props":235,"children":236},{},[237,242,244,250],{"type":39,"tag":62,"props":238,"children":239},{},[240],{"type":45,"value":241},"Credentials via credential, never text field.",{"type":45,"value":243}," Same rule as everywhere else in n8n. See ",{"type":39,"tag":85,"props":245,"children":247},{"className":246},[],[248],{"type":45,"value":249},"n8n-credentials-and-security-official",{"type":45,"value":251},".",{"type":39,"tag":94,"props":253,"children":255},{"id":254},"protocol",[256],{"type":45,"value":257},"Protocol",{"type":39,"tag":106,"props":259,"children":260},{},[261,278,288],{"type":39,"tag":58,"props":262,"children":263},{},[264,269,270,276],{"type":39,"tag":62,"props":265,"children":266},{},[267],{"type":45,"value":268},"Search for existing wrappers first.",{"type":45,"value":134},{"type":39,"tag":85,"props":271,"children":273},{"className":272},[],[274],{"type":45,"value":275},"search_workflows({ tags: ['tool'] })",{"type":45,"value":277}," and a capability keyword search. If something matches, use it instead of duplicating.",{"type":39,"tag":58,"props":279,"children":280},{},[281,286],{"type":39,"tag":62,"props":282,"children":283},{},[284],{"type":45,"value":285},"For case 1, build as a stateless, queryable utility.",{"type":45,"value":287}," Takes input, calls n8n's API, returns the result. No side effects. Case 2 may legitimately have side effects (sending, writing); name them in the tool description.",{"type":39,"tag":58,"props":289,"children":290},{},[291,296],{"type":39,"tag":62,"props":292,"children":293},{},[294],{"type":45,"value":295},"Offer to edit the agent's context file yourself",{"type":45,"value":297}," (CLAUDE.md, AGENTS.md, GEMINI.md, whatever the user's agent reads on session start) to add an entry for the new tool. You have Edit\u002FWrite tools, so there's no reason to make the user paste a snippet manually. Ask first since it's their config file, then edit it directly when they say yes.",{"type":39,"tag":94,"props":299,"children":301},{"id":300},"the-pattern-end-to-end",[302],{"type":45,"value":303},"The pattern, end to end",{"type":39,"tag":305,"props":306,"children":310},"pre",{"className":307,"code":309,"language":45},[308],"language-text","1. User asks for a capability (missing MCP feature, or a workflow they want\n   the agent to be able to invoke).\n2. You: \"I can build a workflow that exposes this as a tool the MCP can call.\n   Want me to create it?\"\n3. User: yes.\n4. You build the workflow:\n   - Trigger: Execute Workflow Trigger with declared inputs.\n   - Body: whatever logic the tool needs (HTTP Request to n8n's API, a\n     third-party call, internal computation).\n   - Output: structured response.\n5. Validate, test, publish.\n6. Ask the user if you can add an entry for this tool to their agent context\n   file (CLAUDE.md \u002F AGENTS.md \u002F etc.) so future sessions know to search for\n   it by name. Edit the file directly when they say yes.\n7. The workflow is immediately callable: agent-created workflows have `availableInMCP: true` set by default.\n",[311],{"type":39,"tag":85,"props":312,"children":314},{"__ignoreMap":313},"",[315],{"type":45,"value":309},{"type":39,"tag":94,"props":317,"children":319},{"id":318},"common-case-1-wrappers-missing-mcp-capabilities",[320],{"type":45,"value":321},"Common case-1 wrappers (missing MCP capabilities)",{"type":39,"tag":48,"props":323,"children":324},{},[325],{"type":45,"value":326},"Most common patterns, by usefulness. Case 2 (general agent tools) is whatever your project needs, no canonical examples.",{"type":39,"tag":328,"props":329,"children":330},"blockquote",{},[331],{"type":39,"tag":48,"props":332,"children":333},{},[334,339,340,348,350,356,358,364],{"type":39,"tag":62,"props":335,"children":336},{},[337],{"type":45,"value":338},"n8n REST API reference:",{"type":45,"value":134},{"type":39,"tag":341,"props":342,"children":346},"a",{"href":343,"rel":344},"https:\u002F\u002Fdocs.n8n.io\u002Fapi\u002Fapi-reference\u002F",[345],"nofollow",[347],{"type":45,"value":343},{"type":45,"value":349},". Start here for any case-1 wrap. Find the endpoint, then wrap it with an HTTP Request node + ",{"type":39,"tag":85,"props":351,"children":353},{"className":352},[],[354],{"type":45,"value":355},"n8nApi",{"type":45,"value":357}," credential. Self-hosted instances expose this at ",{"type":39,"tag":85,"props":359,"children":361},{"className":360},[],[362],{"type":45,"value":363},"\u003Cinstance-url>\u002Fapi\u002Fv1\u002F",{"type":45,"value":251},{"type":39,"tag":366,"props":367,"children":369},"h3",{"id":368},"_1-folder-management",[370],{"type":45,"value":371},"1. Folder management",{"type":39,"tag":48,"props":373,"children":374},{},[375,377,384],{"type":45,"value":376},"The MCP can place workflows into existing folders but can't create, rename, move, or delete them. n8n's REST API has a ",{"type":39,"tag":341,"props":378,"children":381},{"href":379,"rel":380},"https:\u002F\u002Fdocs.n8n.io\u002Fapi\u002Fapi-reference\u002F#tag\u002Ffolders",[345],[382],{"type":45,"value":383},"Folders endpoint",{"type":45,"value":385},", so a one-time wrap solves this for users who organize folders frequently.",{"type":39,"tag":305,"props":387,"children":390},{"className":388,"code":389,"language":45},[308],"Tool: create folder\nInput: { projectId: string, name: string, parentFolderId?: string }\nOutput: { id, name, projectId, parentFolderId? }\n",[391],{"type":39,"tag":85,"props":392,"children":393},{"__ignoreMap":313},[394],{"type":45,"value":389},{"type":39,"tag":366,"props":396,"children":398},{"id":397},"_2-instance-metadata",[399],{"type":45,"value":400},"2. Instance metadata",{"type":39,"tag":48,"props":402,"children":403},{},[404],{"type":45,"value":405},"Version, configured integrations, environment info. Useful for the SessionStart drift check or adapting workflows to instance capabilities.",{"type":39,"tag":305,"props":407,"children":410},{"className":408,"code":409,"language":45},[308],"Tool: get instance info\nInput: {}\nOutput: { version, edition, integrations: [...], limits: {...} }\n",[411],{"type":39,"tag":85,"props":412,"children":413},{"__ignoreMap":313},[414],{"type":45,"value":409},{"type":39,"tag":94,"props":416,"children":418},{"id":417},"how-the-agent-invokes-a-tool-workflow",[419],{"type":45,"value":420},"How the agent invokes a tool workflow",{"type":39,"tag":48,"props":422,"children":423},{},[424,426,431],{"type":45,"value":425},"The MCP ",{"type":39,"tag":62,"props":427,"children":428},{},[429],{"type":45,"value":430},"doesn't register each tool-flagged workflow as a separately-named MCP tool.",{"type":45,"value":432}," Discovery and invocation are two steps:",{"type":39,"tag":54,"props":434,"children":435},{},[436,462],{"type":39,"tag":58,"props":437,"children":438},{},[439,444,446,452,454,460],{"type":39,"tag":62,"props":440,"children":441},{},[442],{"type":45,"value":443},"Discover",{"type":45,"value":445}," via ",{"type":39,"tag":85,"props":447,"children":449},{"className":448},[],[450],{"type":45,"value":451},"search_workflows({ query: '\u003Ckeyword>' })",{"type":45,"value":453},". Workflows with MCP access on return ",{"type":39,"tag":85,"props":455,"children":457},{"className":456},[],[458],{"type":45,"value":459},"availableInMCP: true",{"type":45,"value":461},". Filter for that.",{"type":39,"tag":58,"props":463,"children":464},{},[465,470,471,477,479,485,487,492],{"type":39,"tag":62,"props":466,"children":467},{},[468],{"type":45,"value":469},"Invoke",{"type":45,"value":445},{"type":39,"tag":85,"props":472,"children":474},{"className":473},[],[475],{"type":45,"value":476},"execute_workflow({ workflowId, inputs })",{"type":45,"value":478},". Read the input schema first with ",{"type":39,"tag":85,"props":480,"children":482},{"className":481},[],[483],{"type":45,"value":484},"get_workflow_details",{"type":45,"value":486},". The ",{"type":39,"tag":85,"props":488,"children":490},{"className":489},[],[491],{"type":45,"value":90},{"type":45,"value":493}," defines typed fields.",{"type":39,"tag":48,"props":495,"children":496},{},[497],{"type":45,"value":498},"Output is whatever the workflow's last node returns.",{"type":39,"tag":48,"props":500,"children":501},{},[502,507,509,514],{"type":39,"tag":62,"props":503,"children":504},{},[505],{"type":45,"value":506},"MCP access defaults:",{"type":45,"value":508}," Agent-created workflows default to ",{"type":39,"tag":85,"props":510,"children":512},{"className":511},[],[513],{"type":45,"value":459},{"type":45,"value":515},". UI-created workflows may default off, in which case the user has to toggle MCP access on in the workflow's settings before it appears in search results. Either way, the user can flip it off later to restrict access.",{"type":39,"tag":48,"props":517,"children":518},{},[519,524],{"type":39,"tag":62,"props":520,"children":521},{},[522],{"type":45,"value":523},"This is why the agent-context-file snippet (CLAUDE.md \u002F AGENTS.md \u002F etc.) matters.",{"type":45,"value":525}," Future sessions don't auto-enumerate tool workflows. The snippet tells them the tool exists by name, so they search for it instead of re-deriving the implementation.",{"type":39,"tag":94,"props":527,"children":529},{"id":528},"anti-patterns",[530],{"type":45,"value":531},"Anti-patterns",{"type":39,"tag":533,"props":534,"children":535},"table",{},[536,560],{"type":39,"tag":537,"props":538,"children":539},"thead",{},[540],{"type":39,"tag":541,"props":542,"children":543},"tr",{},[544,550,555],{"type":39,"tag":545,"props":546,"children":547},"th",{},[548],{"type":45,"value":549},"Anti-pattern",{"type":39,"tag":545,"props":551,"children":552},{},[553],{"type":45,"value":554},"What goes wrong",{"type":39,"tag":545,"props":556,"children":557},{},[558],{"type":45,"value":559},"Fix",{"type":39,"tag":561,"props":562,"children":563},"tbody",{},[564,583,601,626,652,670,694],{"type":39,"tag":541,"props":565,"children":566},{},[567,573,578],{"type":39,"tag":568,"props":569,"children":570},"td",{},[571],{"type":45,"value":572},"Building an MCP-extension workflow without asking the user",{"type":39,"tag":568,"props":574,"children":575},{},[576],{"type":45,"value":577},"Surprise creation of workflows on their instance with credentials",{"type":39,"tag":568,"props":579,"children":580},{},[581],{"type":45,"value":582},"Always ask permission first",{"type":39,"tag":541,"props":584,"children":585},{},[586,591,596],{"type":39,"tag":568,"props":587,"children":588},{},[589],{"type":45,"value":590},"Not documenting the new tool in the agent's context file",{"type":39,"tag":568,"props":592,"children":593},{},[594],{"type":45,"value":595},"Future sessions don't auto-enumerate tool workflows. Without a hint they'll re-derive the implementation.",{"type":39,"tag":568,"props":597,"children":598},{},[599],{"type":45,"value":600},"Ask the user, then edit CLAUDE.md \u002F AGENTS.md \u002F whichever file their agent reads, directly. Don't make them paste a snippet.",{"type":39,"tag":541,"props":602,"children":603},{},[604,609,614],{"type":39,"tag":568,"props":605,"children":606},{},[607],{"type":45,"value":608},"Hardcoding the n8n API token in the HTTP Request node",{"type":39,"tag":568,"props":610,"children":611},{},[612],{"type":45,"value":613},"Token leak when the workflow is exported or copied",{"type":39,"tag":568,"props":615,"children":616},{},[617,619,624],{"type":45,"value":618},"Use a credential of type ",{"type":39,"tag":85,"props":620,"children":622},{"className":621},[],[623],{"type":45,"value":355},{"type":45,"value":625}," or appropriate header auth",{"type":39,"tag":541,"props":627,"children":628},{},[629,634,639],{"type":39,"tag":568,"props":630,"children":631},{},[632],{"type":45,"value":633},"Side-effecting tool with no mention of side effects in its name\u002Fdescription",{"type":39,"tag":568,"props":635,"children":636},{},[637],{"type":45,"value":638},"Agent invokes thinking it's a read, ends up sending real messages or writing real data",{"type":39,"tag":568,"props":640,"children":641},{},[642,644,650],{"type":45,"value":643},"Name and describe the side effect explicitly (e.g., ",{"type":39,"tag":85,"props":645,"children":647},{"className":646},[],[648],{"type":45,"value":649},"Tool: send Slack message",{"type":45,"value":651},"). Read-only is the safer default for case-1 wrappers.",{"type":39,"tag":541,"props":653,"children":654},{},[655,660,665],{"type":39,"tag":568,"props":656,"children":657},{},[658],{"type":45,"value":659},"Wrapper that does bulk or destructive ops (archive, delete) with no dry-run",{"type":39,"tag":568,"props":661,"children":662},{},[663],{"type":45,"value":664},"One bug touches many workflows",{"type":39,"tag":568,"props":666,"children":667},{},[668],{"type":45,"value":669},"Strong explicit opt-in per call, plus a dry-run mode that lists targets without acting",{"type":39,"tag":541,"props":671,"children":672},{},[673,684,689],{"type":39,"tag":568,"props":674,"children":675},{},[676,678],{"type":45,"value":677},"Wrapper returns credential ",{"type":39,"tag":679,"props":680,"children":681},"em",{},[682],{"type":45,"value":683},"values",{"type":39,"tag":568,"props":685,"children":686},{},[687],{"type":45,"value":688},"Token leak via tool output",{"type":39,"tag":568,"props":690,"children":691},{},[692],{"type":45,"value":693},"Return IDs, names, types only. Never the secret.",{"type":39,"tag":541,"props":695,"children":696},{},[697,702,707],{"type":39,"tag":568,"props":698,"children":699},{},[700],{"type":45,"value":701},"Skipping the validate + verify + test cycle on the wrapper",{"type":39,"tag":568,"props":703,"children":704},{},[705],{"type":45,"value":706},"The \"tool\" itself is broken, manifests as confusing tool-not-found or empty-response errors",{"type":39,"tag":568,"props":708,"children":709},{},[710,712],{"type":45,"value":711},"Same lifecycle as any workflow: see ",{"type":39,"tag":85,"props":713,"children":715},{"className":714},[],[716],{"type":45,"value":717},"n8n-workflow-lifecycle-official",{"items":719,"total":823},[720,734,749,765,782,797,810],{"slug":721,"name":721,"fn":722,"description":723,"org":724,"tags":725,"stars":23,"repoUrl":24,"updatedAt":733},"n8n-agents-official","build AI agents in n8n","Use when building or editing any AI feature in n8n: AI Agents, Text Classifier, Information Extractor, Sentiment Analysis, Summarization Chain, Basic LLM Chain, embeddings, vector stores, single one-shot LLM calls, or AI media generation (image \u002F audio \u002F video) via the native LangChain provider nodes. Triggers on any `@n8n\u002Fn8n-nodes-langchain.*` node, \"agent\", \"chat assistant\", \"LLM with tools\", \"tool calling\", \"fromAi\", \"system prompt\", \"memory window\", \"structured output\", \"outputParser\", \"function calling\", \"RAG\", \"vector store\", \"embeddings\", \"classify with AI\", \"extract fields with LLM\", \"sentiment analysis\", \"summarize with LLM\", \"single LLM call\", chat triggers with files, AI image \u002F video \u002F audio generation, or any multi-turn or one-shot LLM behavior.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[726,729,732],{"name":727,"slug":728,"type":13},"Agents","agents",{"name":730,"slug":731,"type":13},"LLM","llm",{"name":21,"slug":22,"type":13},"2026-07-08T05:44:47.938896",{"slug":735,"name":735,"fn":736,"description":737,"org":738,"tags":739,"stars":23,"repoUrl":24,"updatedAt":748},"n8n-binary-and-data-official","handle binary data and files in n8n","Use when handling files, images, attachments, or binary data in n8n, OR when an AI agent needs to take a user-uploaded file as tool input or return a generated file. For Data Tables (schemas, dedup, persistent state), see the separate n8n-data-tables-official skill. Triggers on \"file\", \"image\", \"PDF\", \"attachment\", \"binary\", \"upload\", \"download\", chat trigger with files, agent tool that needs a file, vision\u002Fmultimodal, or any handling of non-JSON file data.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[740,743,746,747],{"name":741,"slug":742,"type":13},"Automation","automation",{"name":744,"slug":745,"type":13},"File Uploads","file-uploads",{"name":8,"slug":8,"type":13},{"name":21,"slug":22,"type":13},"2026-07-08T05:45:01.884342",{"slug":750,"name":750,"fn":751,"description":752,"org":753,"tags":754,"stars":23,"repoUrl":24,"updatedAt":764},"n8n-code-nodes-official","write custom logic in n8n","Use when the user reaches for a Code node, mentions writing JavaScript or Python in n8n, or any custom logic comes up in workflow design. Triggers on \"Code node\", \"Code\", \"JavaScript\", \"Python\", \"custom logic\", \"transform data\", \"$input\", \"$json transformation\", \"loop in code\", \"write a function\", or any time the obvious answer seems to be \"just put it in code.\"",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[755,758,761],{"name":756,"slug":757,"type":13},"Engineering","engineering",{"name":759,"slug":760,"type":13},"JavaScript","javascript",{"name":762,"slug":763,"type":13},"Python","python","2026-07-08T05:44:49.656127",{"slug":249,"name":249,"fn":766,"description":767,"org":768,"tags":769,"stars":23,"repoUrl":24,"updatedAt":781},"manage credentials and security in n8n","Use when handling any auth, API keys, tokens, OAuth, bearer tokens, basic auth, or secret values in n8n workflows. Triggers on \"API key\", \"token\", \"bearer\", \"OAuth\", \"secret\", \"auth\", \"credentials\", \"Authorization header\", \"x-api-key\", or any node configuration that mentions a third-party service.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[770,773,774,775,778],{"name":771,"slug":772,"type":13},"Authentication","authentication",{"name":741,"slug":742,"type":13},{"name":8,"slug":8,"type":13},{"name":776,"slug":777,"type":13},"OAuth","oauth",{"name":779,"slug":780,"type":13},"Security","security","2026-07-08T05:45:07.766252",{"slug":783,"name":783,"fn":784,"description":785,"org":786,"tags":787,"stars":23,"repoUrl":24,"updatedAt":796},"n8n-data-tables-official","manage n8n Data Tables","Use when working with n8n's built-in Data Tables, designing schemas, inserting\u002Fupdating\u002Fupserting rows, deduping, or querying. Triggers on \"Data Table\", \"data table\", `n8n-nodes-base.dataTable`, \"dedup\", \"idempotency\", \"lookup\", \"persistent state\", \"store across executions\", or any schema design discussion inside n8n.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[788,791,794,795],{"name":789,"slug":790,"type":13},"Data Modeling","data-modeling",{"name":792,"slug":793,"type":13},"Database","database",{"name":8,"slug":8,"type":13},{"name":21,"slug":22,"type":13},"2026-07-08T05:44:52.048039",{"slug":798,"name":798,"fn":799,"description":800,"org":801,"tags":802,"stars":23,"repoUrl":24,"updatedAt":809},"n8n-debugging-official","debug and fix n8n workflow errors","Use when an n8n workflow isn't working, errors appear, results don't match what was expected, or the user says \"this isn't working.\" Triggers on errors, unexpected output, \"it's not working\", \"why is this happening\", \"the workflow stopped\", failure investigation, or any debugging context.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[803,804,807,808],{"name":741,"slug":742,"type":13},{"name":805,"slug":806,"type":13},"Debugging","debugging",{"name":8,"slug":8,"type":13},{"name":21,"slug":22,"type":13},"2026-07-08T05:45:05.897341",{"slug":811,"name":811,"fn":812,"description":813,"org":814,"tags":815,"stars":23,"repoUrl":24,"updatedAt":822},"n8n-error-handling-official","implement error handling in n8n","Use when building any webhook-triggered workflow, scheduled\u002Fproduction-bound workflow, wiring a per-node error output, or any workflow where silent failure would drop user-visible work. Triggers on \"webhook\", \"respond to webhook\", \"API\", \"production\", \"error\", \"failure\", \"5xx\", \"try\u002Fcatch\", \"error workflow\", \"onError\", \"continueErrorOutput\", \"error branch\", \"node error output\", \"output(1)\", \"main[1]\", \"scheduled\", or any workflow that runs unattended.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[816,817,818,821],{"name":805,"slug":806,"type":13},{"name":8,"slug":8,"type":13},{"name":819,"slug":820,"type":13},"Operations","operations",{"name":21,"slug":22,"type":13},"2026-07-08T05:44:59.710099",14,{"items":825,"total":965},[826,843,856,867,877,888,901,918,927,939,949,959],{"slug":827,"name":827,"fn":828,"description":829,"org":830,"tags":831,"stars":840,"repoUrl":841,"updatedAt":842},"config-evals","configure workflow evaluations","Builds and maintains configuration-based evaluations on a workflow with the eval-config tool. Use when the user asks to set up, add, view, change, or remove an evaluation, score, grade, or judge a workflow's output, or measure answer quality against a test dataset. This is the only eval form Instance AI handles — it does not touch on-canvas evaluation nodes.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[832,835,836,839],{"name":833,"slug":834,"type":13},"Evals","evals",{"name":8,"slug":8,"type":13},{"name":837,"slug":838,"type":13},"Testing","testing",{"name":21,"slug":22,"type":13},198156,"https:\u002F\u002Fgithub.com\u002Fn8n-io\u002Fn8n","2026-07-24T05:37:07.398695",{"slug":844,"name":844,"fn":845,"description":846,"org":847,"tags":848,"stars":840,"repoUrl":841,"updatedAt":855},"credential-setup-with-computer-use","configure n8n credentials via browser","Guides n8n credential setup through Computer Use browser tools. Use when a user needs OAuth apps, API keys, client IDs, client secrets, or other credential values from an external service console.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[849,850,853,854],{"name":741,"slug":742,"type":13},{"name":851,"slug":852,"type":13},"Configuration","configuration",{"name":8,"slug":8,"type":13},{"name":776,"slug":777,"type":13},"2026-06-30T07:40:45.54",{"slug":857,"name":857,"fn":784,"description":858,"org":859,"tags":860,"stars":840,"repoUrl":841,"updatedAt":866},"data-table-manager","Load before calling data-tables or parse-file. Use for natural standalone requests like \"what data tables do I have?\", \"show\u002Flist my tables\", or \"what columns are in this table?\", and whenever the user asks to list, show, create, inspect, import, seed, query, update, clean up, rename columns in, or delete data tables and rows, especially from CSV\u002FXLSX\u002FJSON attachments. Also load before building or planning workflows that create or write to Data Tables (then load workflow-builder before build-workflow).",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[861,864,865],{"name":862,"slug":863,"type":13},"Data Engineering","data-engineering",{"name":792,"slug":793,"type":13},{"name":8,"slug":8,"type":13},"2026-07-27T06:07:14.648144",{"slug":868,"name":868,"fn":869,"description":870,"org":871,"tags":872,"stars":840,"repoUrl":841,"updatedAt":855},"debugging-executions","debug failed n8n workflow executions","Debug failed or wrong-output workflow executions using executions tools. Load when the user reports execution failures, unexpected node output, empty parameter values after a successful run, or a node showing a red or failed expression error.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[873,874,875,876],{"name":741,"slug":742,"type":13},{"name":805,"slug":806,"type":13},{"name":8,"slug":8,"type":13},{"name":21,"slug":22,"type":13},{"slug":878,"name":878,"fn":879,"description":880,"org":881,"tags":882,"stars":840,"repoUrl":841,"updatedAt":887},"intent-recognition","classify automation requests by control flow","Classifies automation requests using two decisions: anchor (which primitive owns the top-level control flow — workflow-anchored, agent-anchored, needs-clarification, or out-of-scope) and embeds_other (whether the other primitive appears embedded inside — an agent step inside a workflow, or a workflow invoked as an agent tool). Must be used before deciding the intent of any automation request, including compound requests with multiple independent automations, mid-build extensions to an existing workflow or agent, one-off questions or reports that need external systems you cannot query directly, and requests that need clarification before an anchor can be chosen, before choosing workflow-builder, planning, or an agent-oriented design.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[883,884,885,886],{"name":727,"slug":728,"type":13},{"name":741,"slug":742,"type":13},{"name":8,"slug":8,"type":13},{"name":21,"slug":22,"type":13},"2026-07-30T05:30:06.772347",{"slug":889,"name":889,"fn":890,"description":891,"org":892,"tags":893,"stars":840,"repoUrl":841,"updatedAt":900},"n8n-cli","manage n8n workflows from the CLI","Use the n8n CLI to manage workflows, credentials, executions, and more on an n8n instance. Use when the user asks to interact with n8n, automate workflows, manage credentials, or operate their instance from the command line.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[894,895,898,899],{"name":741,"slug":742,"type":13},{"name":896,"slug":897,"type":13},"CLI","cli",{"name":8,"slug":8,"type":13},{"name":21,"slug":22,"type":13},"2026-04-06T18:38:40.360123",{"slug":902,"name":902,"fn":903,"description":904,"org":905,"tags":906,"stars":840,"repoUrl":841,"updatedAt":917},"n8n-docs-assistant","retrieve n8n documentation and guidance","Answers n8n product, setup, credential, node, hosting, API, and usage questions from current n8n docs. Load n8n-docs via load_tool before calling it (search \"n8n docs\" if not visible). Use when the user asks how to configure, set up, troubleshoot, or understand n8n behavior, especially credential setup questions opened from the credential modal.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[907,910,911,914],{"name":908,"slug":909,"type":13},"Documentation","documentation",{"name":8,"slug":8,"type":13},{"name":912,"slug":913,"type":13},"Reference","reference",{"name":915,"slug":916,"type":13},"Search","search","2026-07-27T06:07:15.692906",{"slug":919,"name":919,"fn":920,"description":921,"org":922,"tags":923,"stars":840,"repoUrl":841,"updatedAt":855},"planned-task-runtime","manage n8n task runtimes","Handles system follow-up turns: planned-task-follow-up (synthesize, replan, build-workflow, checkpoint), background-task-completed, running-tasks context, and create-tasks silence rules. Load whenever any of these tags appear or after calling create-tasks.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[924,925,926],{"name":741,"slug":742,"type":13},{"name":8,"slug":8,"type":13},{"name":21,"slug":22,"type":13},{"slug":928,"name":928,"fn":929,"description":930,"org":931,"tags":932,"stars":840,"repoUrl":841,"updatedAt":938},"planning","coordinate multi-artifact workflows","ONLY for coordinated multi-artifact work: multiple workflows with dependencies, shared data-table schema\u002Fmigration across tasks, or the user explicitly asked to review a plan first. Load create-tasks via load_tool before calling it (search \"create tasks\" if not visible). Do NOT use for new one-off workflows, single-workflow edits, verification-only requests, or standalone data-table ops — use workflow-builder or data-table-manager instead.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[933,934,935,937],{"name":741,"slug":742,"type":13},{"name":8,"slug":8,"type":13},{"name":936,"slug":928,"type":13},"Planning",{"name":21,"slug":22,"type":13},"2026-07-27T06:07:16.673218",{"slug":940,"name":940,"fn":941,"description":942,"org":943,"tags":944,"stars":840,"repoUrl":841,"updatedAt":948},"post-build-flow","verify and set up n8n workflows","Handles workflow verification and setup after build-workflow succeeds, or when the message contains workflow-verification-follow-up or workflow-setup-required. Load after direct builds, when verificationReadiness requires action, or on orchestrator verify\u002Fsetup follow-up turns.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[945,946,947],{"name":741,"slug":742,"type":13},{"name":8,"slug":8,"type":13},{"name":21,"slug":22,"type":13},"2026-07-24T05:37:08.421329",{"slug":950,"name":950,"fn":951,"description":952,"org":953,"tags":954,"stars":840,"repoUrl":841,"updatedAt":958},"workflow-builder","build and edit n8n workflows","Load before calling build-workflow. Default path for all single-workflow work: new one-off workflows, existing-workflow edits, verification repairs, and workflow-local data tables. Write or edit a workspace source file, then call build-workflow with filePath. When the workflow creates or writes Data Tables, load data-table-manager first, then this skill. Do not load planning or create-tasks first. Load planning only when multiple coordinated workflows or shared cross-task data tables require a dependency-aware task graph.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[955,956,957],{"name":741,"slug":742,"type":13},{"name":8,"slug":8,"type":13},{"name":21,"slug":22,"type":13},"2026-07-30T05:30:07.798011",{"slug":721,"name":721,"fn":722,"description":723,"org":960,"tags":961,"stars":23,"repoUrl":24,"updatedAt":733},{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[962,963,964],{"name":727,"slug":728,"type":13},{"name":730,"slug":731,"type":13},{"name":21,"slug":22,"type":13},25]