n8n Integration
The n8n-nodes-decoupled-io community node brings Decoupled.io into the n8n workflow editor. Drop it into a flow, paste your PAT, and you have typed actions for spaces, content, and content types — backed by the same Decoupled.io MCP server the dashboard uses.
Status: Phase 1 ships now. Trigger node + Taxonomy + Environment Tier resources land in Phase 2.
What you can do
- List, fetch, and bulk-import content in any space — wired through Drupal's GraphQL/JSON:API surface.
- Discover the content model — list content types, get field schemas — so downstream nodes know what fields exist.
- Manage spaces — list, get details, generate one-time login URLs, fetch OAuth credentials, check usage.
- Type-safe dropdowns — pick spaces and content types from menus loaded live from your account, not by hand-typing UUIDs.
Common workflows the node unlocks today:
| Workflow | Trigger | Action(s) |
|---|---|---|
| Daily content digest | Cron (9am) | List content updated in last 24h → format → email |
| AI-enriched republish | Manual | List articles → OpenAI summarize → bulk-import back as updates |
| Slack on-demand publishing | Slack webhook | Decoupled bulk-import → respond to thread |
| Cross-system content sync | Cron (hourly) | List Decoupled content → upsert to Notion/Airtable |
| AI content seeding | Manual | Prompt → Groq → bulk-import structured paragraphs |
Install
On self-hosted n8n (any version 1.x+)
-
Open n8n in your browser → Settings → Community Nodes.
-
Click Install a community node.
-
Enter the package name:
n8n-nodes-decoupled-io -
Check the "I understand the risks" box and click Install. After ~30 seconds the package appears in your list with a green check.
-
In any workflow, click + to add a node and search for Decoupled — pick Decoupled Drupal from the picker.
On n8n Cloud
n8n Cloud only allows verified community nodes. We've submitted for verification — once approved (typically 2-4 weeks), you'll be able to install with the same flow above. Until then, use a self-hosted instance (the Docker quickstart below takes 60 seconds).
Run n8n locally with Docker
If you don't already have n8n running:
docker run -d --name n8n -p 5678:5678 \
-e N8N_RUNNERS_ENABLED=true \
-v n8n_data:/home/node/.n8n \
docker.n8n.io/n8nio/n8n
Open http://localhost:5678, complete the first-time setup, then follow the install steps above.
Authenticate
The node uses Personal Access Tokens — dc_tok_... strings issued from your dashboard.
- Go to https://dashboard.decoupled.io/organization/tokens.
- Click Create new token — name it something like
n8n integration. - Pick the scopes you actually need (read-only is enough for
List/Getoperations; full-access enablesImport+Create). - Copy the token immediately — it's only shown once.
- In n8n, when you add the Decoupled Drupal node, click Set up credential, paste the token in API Token, and save. The credential test pings
mcp.decoupled.ioto verify the token; if it goes green you're connected.
The token is encrypted at rest in your n8n instance. The dashboard never sees it; the MCP server validates each call individually.
Multiple environments? Create one credential per PAT — typically one for production and one for staging. Each node can pick which credential to use, so a single workflow can promote content between tiers.
Operations reference (v0.1)
Space
| Operation | What it does | Required input |
|---|---|---|
| List | Returns all spaces in the organization | (none) |
| Get | Returns one space's full record | Space (dropdown) |
| Get login link | Generates a one-time login URL into the Drupal admin | Space (dropdown) |
| Get OAuth credentials | Returns client_id + client_secret for the space (for frontend .env files) |
Space (dropdown) |
| Get usage | Returns space-level usage statistics | Space (dropdown) |
Content
| Operation | What it does | Required input |
|---|---|---|
| List | Paginated content items of a given type | Space, Content Type, Limit |
| Get | Single content item by UUID | Space, Content Type, UUID |
| Import | Bulk-import content from a JSON payload (handles nested paragraphs, taxonomies, references) | Space, Payload (JSON) |
The Import operation is the recommended way to write content from n8n. Build the payload as a JSON object matching the import_content shape — supports nested paragraphs, term references, and media URLs.
Content Type
| Operation | What it does | Required input |
|---|---|---|
| List | All content types in the space | Space (dropdown) |
| Describe | Field schema for one content type | Space, Content Type (dropdown) |
The Describe operation returns the field list with types — useful as a discovery step before building an Import payload, or in workflows that branch based on which fields a content type has.
Three example workflows
1. Slack notification on every published article
Until the Trigger node ships in Phase 2, simulate this with a Cron trigger that polls every 15 minutes:
[Cron: */15 minutes]
↓
[Decoupled Drupal: List content]
Resource: Content
Operation: List
Space: ${YOUR_SPACE}
Content Type: article
↓
[Filter: created in last 15 min]
↓
[Slack: Send message]
Channel: #content
Text: 📝 New article: {{ $json.title }} — {{ $json.path }}
2. AI summary + republish
[Cron: hourly]
↓
[Decoupled Drupal: List content]
Type: article, Limit: 10
↓
[Function: filter where summary is empty]
↓
[OpenAI / Groq: Generate summary from $json.body]
↓
[Decoupled Drupal: Import]
Payload: { content: [{ uuid: $json.uuid, summary: $output.summary }] }
3. Manual content seed from a prompt
[Manual Trigger]
↓
[Set: prompt = "Write 3 blog posts about React Server Components"]
↓
[OpenAI / Groq: Generate JSON matching content shape]
↓
[Decoupled Drupal: Import]
Resource: Content, Operation: Import
Troubleshooting
"Authorization failed - please check your credentials" — The PAT was rejected by mcp.decoupled.io. Re-issue from the dashboard. If you regenerated the token, update the credential.
Empty spaces: [] array on List — The PAT is valid but the organization it belongs to has no spaces. Either create one in the dashboard, or the PAT was issued from a different organization than the one with your spaces.
"Couldn't connect with these settings" — Network can't reach mcp.decoupled.io. If you're on a corporate network, allowlist the host. Check the MCP URL field in the credential's advanced settings if you're running a staging server.
Dropdown stays empty after picking a space — The space loaded but the dependent dropdown (content types) didn't populate. Usually means that space has no content types yet, or the PAT lacks read permission. Check by running Content Type: List as a one-off.
Source + roadmap
- npm: https://www.npmjs.com/package/n8n-nodes-decoupled-io
- GitHub: https://github.com/nextagencyio/n8n-nodes-decoupled-io
- Roadmap (Trigger node, ACF, WooCommerce, environment tiers): N8N-NODE-PLAN.md
Found a bug? Want a missing operation? Open an issue on the GitHub repo or contact us.