Skip to main content

n8n-troubleshoot

Troubleshoot n8n workflow development issues. Use when encountering MCP connection errors, API authentication failures, workflow execution problems, expression errors, node configuration issues, or any n8n-related error. Also use when asking about "n8n error", "n8n not working", "debug n8n", "fix n8n".

Source facts

Repository
Agents-Store/opencode-plugins
Last source activity
October 3, 2026 at 23:16
Detected SKILL.md language
English
Stars
0
Forks
0

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
n8n-troubleshoot
description
Troubleshoot n8n workflow development issues. Use when encountering MCP connection errors, API authentication failures, workflow execution problems, expression errors, node configuration issues, or any n8n-related error. Also use when asking about "n8n error", "n8n not working", "debug n8n", "fix n8n".
# n8n Troubleshooting Guide Every `curl` below builds its path from `N8N_BASE`, the instance root. `N8N_API_URL` may hold the root or already end in `/api/v1`, so derive it first: ```bash N8N_BASE="${N8N_API_URL%/}"; N8N_BASE="${N8N_BASE%/api/v1}" ``` ## MCP Connection Issues ### External MCP Server (n8n-mcp-external) **"Connection refused" or "ECONNREFUSED"** - Cause: n8n instance is not reachable at the configured URL - Fix: 1. Verify `N8N_API_URL` is correct and includes the protocol (e.g., `https://n8n.example.com`) 2. Confirm n8n is running: `curl -s $N8N_BASE/healthz` 3. Check firewall rules — the MCP server must be able to reach n8n's port 4. If using Docker, ensure the container is on the correct network **"401 Unauthorized"** - Cause: Invalid or expired API key - Fix: 1. Verify `N8N_API_KEY` is set correctly 2. Regenerate the API key in n8n: Settings → n8n API → Create an API key 3. Check that the key has not been revoked 4. Test directly: `curl -H "X-N8N-API-KEY: $N8N_API_KEY" "$N8N_BASE/api/v1/workflows?limit=1"` **"Timeout" or hanging requests** - Cause: Network latency or n8n overloaded - Fix: 1. Check n8n instance health and resource usage 2. Verify there is no proxy or load balancer dropping connections 3. Try a simple health check: `curl -m 5 $N8N_BASE/healthz` ### Native MCP Server (n8n-native-mcp) **"Failed to connect" or "Connection error"** - Cause: Wrong URL format for the native MCP endpoint, or MCP is not enabled - Fix: 1. URL must end with `/mcp-server/http` (e.g., `https://n8n.example.com/mcp-server/http`) — copy it from Settings → Instance-level MCP → Connect → Server URL 2. Do NOT include `/api/v1` in the native MCP URL 3. Verify MCP is enabled: Settings → Instance-level MCP → Enable MCP access (instance owner or admin). `N8N_DISABLED_MODULES=mcp` removes the feature entirely. **"Invalid token" or "Authentication failed"** - Cause: Wrong or missing MCP token - Fix: 1. Check `N8N_MCP_TOKEN` environment variable 2. Regenerate the token: Settings → Instance-level MCP → Connect → **API key** tab (generating a new one revokes the old one; update every client) 3. Ensure the token is passed in the Authorization header as `Bearer <token>` 4. Or switch to OAuth: `claude mcp add --transport http n8n-native-mcp https://<n8n-host>/mcp-server/http`, then `/mcp` **A tool answers for some workflows but refuses others** - Cause: instance-level MCP is per workflow — a workflow must be **Available in MCP**, and only published workflows with a webhook, form, schedule or chat trigger are eligible. `search_workflows` is the exception: it shows previews of every workflow the user can see. - Fix: enable the workflow (workflow menu → Settings → Available in MCP, or Settings → Instance-level MCP → Workflows exposed). Agents are exposed the same way (**Agents exposed**). **`NOT_CONFIGURED` from `n8n_test_workflow`, `n8n_manage_agents`, `n8n_explore_node_resources` or `n8n_workflow_versions` (`source: "native"`)** - Cause: these external tools go through the instance-level MCP and need `N8N_MCP_ACCESS_TOKEN` in the `n8n-mcp-external` server's `env` (n8n 2.34+) - Fix: set it (Settings → Instance-level MCP → Connect → API key); it is a separate secret from `N8N_API_KEY` ### Diagnostic Steps Run the health check tool to diagnose MCP connectivity: ``` mcp__n8n-mcp-external__n8n_health_check({mode: "diagnostic"}) ``` This will test: - API connectivity - Authentication - Available features and tool status - `mcpVersion` and `versionCheck` (is `n8n-mcp` itself up to date) `n8nVersion` is usually absent from the answer — n8n stopped exposing its version to API clients in 1.119.0, and `n8nVersionNote` says so. That is not an error. --- ## API Authentication Errors ### Error Code Reference | Status | Meaning | Solution | |--------|---------|----------| | 401 | Invalid or missing API key | Check `X-N8N-API-KEY` header. Regenerate key if needed. | | 403 | Insufficient permissions | User role lacks permission for this operation. Check role in Settings → Users. | | 404 | Wrong URL or missing resource | Verify `N8N_API_URL` and endpoint path. Resource may have been deleted. | | 429 | Rate limited | Add delays between requests. Reduce batch sizes. | ### Quick Authentication Test ```bash # Test API key validity curl -s -o /dev/null -w "%{http_code}" \ -H "X-N8N-API-KEY: $N8N_API_KEY" \ "$N8N_BASE/api/v1/workflows?limit=1" ``` Expected output: `200`. Any other code indicates a problem. ### Common Authentication Mistakes 1. **Missing protocol in URL:** Use `https://n8n.example.com`, not `n8n.example.com` 2. **Doubled path:** `$N8N_API_URL/api/v1/workflows` returns 404 when `N8N_API_URL` already ends in `/api/v1` (or `/`) — use `$N8N_BASE`, derived above 3. **Wrong header name:** Must be `X-N8N-API-KEY`, not `Authorization` or `X-Api-Key` 4. **Key from wrong instance:** Ensure the key was generated on the instance you are targeting --- ## Workflow Validation Issues ### Stuck in Validation Loop If a workflow keeps failing validation after multiple fix attempts: 1. Use `n8n_autofix_workflow` to auto-fix common structural issues: ``` mcp__n8n-mcp-external__n8n_autofix_workflow({id: "workflow-id"}) ``` 2. If autofix does not resolve it, export the workflow JSON and manually inspect the structure 3. Check for circular connections — n8n does not support them ### Expression Format Errors - Expressions must be wrapped in `{{ }}` double curly braces - Inside `{{ }}`, use standard JavaScript - Outside Code nodes, always use `{{ }}` for dynamic values - Common mistake: `$json.field` without braces — must be `{{ $json.field }}` See the `n8n-expression-syntax` skill for detailed expression guidance. ### Node Type Version Mismatch When a workflow references a node version that does not exist: - Use `n8n_autofix_workflow` with typeversion correction - Manually update the `typeVersion` field in the workflow JSON - Check available versions: `mcp__n8n-mcp-external__get_node({nodeType: "nodes-base.httpRequest", mode: "versions"})` ### Connection Errors in Workflow Definition - Node names in connections must match **exactly** (case-sensitive) - A connection references a node by its `name` field, not its `type` - Verify all connection targets exist in the workflow's `nodes` array - Orphaned connections (pointing to deleted nodes) cause validation failures --- ## Expression Errors ### "Cannot read property 'X' of undefined" - **Cause:** The data path does not exist in the incoming data - **Fix:** Check the actual data structure from the previous node - **Debug:** Add a Set node before the failing node to inspect `{{ JSON.stringify($json) }}` - **Common issue:** Accessing nested properties without null checks — use `{{ $json.parent?.child?.value }}` ### Webhook Data Not Accessible - Webhook body data is at `{{ $json.body.field }}` in the node immediately after the Webhook - Headers are at `{{ $json.headers['header-name'] }}` - Query parameters are at `{{ $json.query.param }}` - If the Webhook is not the immediate predecessor, use `{{ $('Webhook').item.json.body.field }}` ### Expression Shows as Literal Text - Missing `{{ }}` — the value is being treated as a static string - Check for invisible characters or copy-paste issues - Ensure the field accepts expressions (not all fields do) ### Expression in Code Node - Code nodes use **direct JavaScript**, not `{{ }}` expression syntax - Access input data with `$input.all()`, `$input.first()`, `$input.item` - Access specific node output with `$('NodeName').all()` - Use `return` to output data (Run Once mode) or work with `$input.item` (Run Once for Each Item) --- ## Node Configuration Errors ### "Missing required field" - Different operations require different fields - Check the node documentation or use `get_node` to see required parameters: ``` mcp__n8n-mcp-external__get_node({nodeType: "nodes-base.httpRequest", detail: "full"}) ``` - Required fields change based on the selected operation/resource ### Wrong nodeType Format Two naming conventions are used in different contexts: | Context | Format | Example | |---------|--------|---------| | Searching/validating nodes | `nodes-base.*` | `nodes-base.httpRequest` | | Workflow JSON definitions | `n8n-nodes-base.*` | `n8n-nodes-base.httpRequest` | Using the wrong prefix is a frequent source of "node not found" errors. ### AI Node Connection Type Errors n8n has 8 AI connection types. Using the wrong one causes silent failures: 1. `ai_agent` — Main AI agent connection 2. `ai_chain` — Chain connection 3. `ai_document` — Document loader 4. `ai_embedding` — Embedding model 5. `ai_languageModel` — LLM connection (most common) 6. `ai_memory` — Memory/context 7. `ai_outputParser` — Output parser 8. `ai_tool` — Tool for AI agent 9. `ai_vectorStore` — Vector store Check the `n8n-node-configuration` skill for detailed AI node wiring guidance. --- ## Execution Failures ### Timeout - **Symptom:** Execution stops with a timeout error - **Fix:** Increase `executionTimeout` in workflow settings - **Global setting:** Set `EXECUTIONS_TIMEOUT` and `EXECUTIONS_TIMEOUT_MAX` environment variables - **Per-workflow:** Workflow Settings → Timeout After (seconds) ### Memory Issues / Out of Memory - **Symptom:** n8n crashes or execution killed by OS - **Fix:** 1. Use **Split In Batches** node for large datasets — process 50-100 items at a time 2. Avoid storing large binary data in workflow items 3. Increase Node.js memory: set `NODE_OPTIONS=--max-old-space-size=4096` 4. Enable `EXECUTIONS_DATA_SAVE_ON_ERROR=none` to reduce memory pressure ### Rate Limiting from External Services - **Symptom:** 429 errors from APIs called by workflow nodes - **Fix:** 1. Add **Wait** nodes between API calls (1-2 seconds) 2. Use **Split In Batches** with smaller batch sizes 3. Enable retry on the HTTP Request node (Settings → Retry On Fail) 4. Set retry count and wait between retries ### Check Execution Logs ``` # List recent failed executions mcp__n8n-mcp-external__n8n_executions({action: "list", status: "error", limit: 5}) # Get details of a specific execution mcp__n8n-mcp-external__n8n_executions({action: "get", id: "exec-id", mode: "error"}) ``` --- ## Common Error Messages | Error Message | Cause | Fix | |---------------|-------|-----| | "Node not found" | Wrong nodeType prefix in tool calls | Use `nodes-base.*` for search/validate tools, `n8n-nodes-base.*` in workflow JSON | | "Workflow could not be activated" (n8n 2.x calls it publishing) | No trigger node in workflow, or the publish permission is missing (`PUBLISH_FORBIDDEN`, n8n 2.39+) | Add a trigger node (Webhook, Schedule Trigger, etc.) as the entry point; for the permission, the API key needs the `workflow:activate` scope and the user `workflow:publish` | | "Invalid expression" | Syntax error inside `{{ }}` | Check brackets, quotes, variable names. Validate with expression tester. | | "Credential not found" | Missing or wrong credential ID | List credentials first with API or MCP tool. Use the correct ID. | | "Connection refused" | n8n instance not reachable | Check `N8N_API_URL`, firewall, container status, DNS | | "Duplicate node name" | Two nodes have the same name | Rename one of the duplicate nodes — names must be unique | | "Unknown node type" | Community node not installed | Install the package via n8n Settings → Community Nodes | | "Workflow data too large" | Workflow JSON exceeds size limit | Remove unnecessary data, simplify large expressions, reduce node count | | "SQLITE_BUSY" | SQLite database locked | Switch to PostgreSQL for production, or reduce concurrent executions | | "No encryption key found" | Missing `N8N_ENCRYPTION_KEY` | Set the environment variable. Required for credential encryption. | --- ## Diagnostic Commands ### MCP Tool Diagnostics ``` # Full health check mcp__n8n-mcp-external__n8n_health_check({mode: "diagnostic"}) # Native MCP: is the server reachable and the token valid? mcp__n8n-native-mcp__search_workflows({limit: 1}) # Quick connectivity test — list a few workflows mcp__n8n-mcp-external__n8n_list_workflows({limit: 5}) # Check for recent errors mcp__n8n-mcp-external__n8n_executions({action: "list", status: "error", limit: 5}) # Validate a specific workflow mcp__n8n-mcp-external__n8n_validate_workflow({id: "workflow-id"}) # Validate workflow JSON directly mcp__n8n-mcp-external__validate_workflow({workflow: {...}}) ``` ### CLI Diagnostics ```bash # Check n8n version n8n --version # Run security audit n8n audit # Check license n8n license:info ``` ### curl Diagnostics ```bash # Health check curl -s "$N8N_BASE/healthz" # API access test curl -s -H "X-N8N-API-KEY: $N8N_API_KEY" "$N8N_BASE/api/v1/workflows?limit=1" | jq '.data | length' # Check execution queue curl -s -H "X-N8N-API-KEY: $N8N_API_KEY" "$N8N_BASE/api/v1/executions?status=running&limit=10" | jq '.data | length' ``` --- ## Related Skills For deeper investigation of specific issue categories: - **n8n-validation-expert** — Deep dive into validation errors, profiles, and fix strategies
View on GitHub
This SKILL.md is very large, so SkillsMP previews the first section here. View on GitHub