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.

A two-node n8n workflow with a Manual Trigger feeding into a Decoupled Drupal 'List spaces' node, both showing green completion checks.

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+)

  1. Open n8n in your browser → Settings → Community Nodes.

  2. Click Install a community node.

  3. Enter the package name:

    n8n-nodes-decoupled-io
    
  4. Check the "I understand the risks" box and click Install. After ~30 seconds the package appears in your list with a green check.

  5. 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.

  1. Go to https://dashboard.decoupled.io/organization/tokens.
  2. Click Create new token — name it something like n8n integration.
  3. Pick the scopes you actually need (read-only is enough for List/Get operations; full-access enables Import + Create).
  4. Copy the token immediately — it's only shown once.
  5. 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.io to 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

Found a bug? Want a missing operation? Open an issue on the GitHub repo or contact us.