
N8n Subworkflows
Build reusable, composable n8n sub-workflows.
Install
npx skills add czlonkowski/n8n-mcp --skill n8n-subworkflows -g -a claude-code -y- Repository
- czlonkowski/n8n-mcp23.2k
- Category
- Design
- Updated
- 8d ago
- License
- MIT
- Context cost
- Mediumabout 3,000 tokens
- Runs scripts
- No, instructions only
What it does
Build reusable, composable n8n sub-workflows. Use when extracting shared logic, building anything multi-step or reused across workflows, or any workflow over ~10 nodes, and whenever the user mentions sub-workflows, Execute Workflow, reuse, shared/common logic, modular workflows, "Define Below" inputs, waitForSubWorkflow, mode each vs all, or exposing a workflow as an agent tool. Covers typed sub-workflow inputs, all-vs-each execution, verb-first naming for discovery, stateless vs stateful design, and splitting by input shape.
n8n Sub-workflows
A sub-workflow is a reusable function. An Execute Workflow Trigger declares typed inputs, the body does the work, and the last node returns the output. A caller invokes it through an Execute Workflow node like any other step.
That framing buys you the things functions buy you everywhere: encapsulation, reuse, testability, replaceability. It's the primary reuse mechanism in n8n, and it's badly underused. Without it, the same logic gets copy-pasted across workflows, then a bug gets fixed in two places, the third copy gets missed, and your "identical" copies quietly drift apart.
This skill is about when to reach for a sub-workflow, how to define its input/output contract so callers (and agents) can actually use it, how to call it correctly (all vs each, blocking vs fire-and-forget), and how to name it so it gets found instead of rebuilt.
The two non-negotiables
Everything else is judgement. These two are not.
1. Search before you build
Before you write logic for a generic problem, check whether a sub-workflow already does it. The community MCP can't filter workflows by tag, so the name is the discovery surface:
n8n_list_workflows() # scan the library
n8n_get_workflow({ id: "<candidate>" }) # read its inputs/outputs + body
If something fits, use it and tell the user ("I found Subworkflow: Parse RFC2822 date, using that"). If nothing fits, build it with a discoverable name so the next search finds it. The discovery convention (verb-first prefixes) lives in NAMING_AND_DISCOVERY.md.


