After migrating from n8n Cloud to self-hosted, MCP settings do not persist when configured through the UI. This affects both:
-
Instance-level MCP (Settings → Instance-level MCP): I can enable MCP access, but after navigating away and returning, the toggle is reset to off.
-
Workflow-level MCP (Workflow Settings → “Available in MCP”): I can toggle it on, but after saving/publishing and reopening the workflow, the setting reverts to off.
Even re-publishing a workflow causes MCP access to be lost and it cannot be re-enabled because the setting won’t persist.
Important: Writing the MCP settings directly to the database via terminal does work, which confirms it’s a UI persistence issue, not a backend/database problem. However, this workaround is impractical because every workflow change requires manual database edits and container restarts.
Steps to reproduce
-
Go to Settings → Instance-level MCP
-
Enable MCP access → toggle turns on
-
Navigate away from the page
-
Return to Settings → Instance-level MCP → toggle is off again
Same behavior for workflow-level:
-
Open a workflow → Settings → toggle “Available in MCP” on
-
Save/publish the workflow
-
Close and reopen the workflow → toggle is off again
Expected behavior
MCP settings should persist after being toggled on, both at instance level and per workflow, without requiring direct database manipulation.
What is the error message (if any)?
No error message is shown. The UI accepts the toggle change without any visible error, but the setting simply doesn’t persist.
Information on your n8n setup
-
n8n version: 2.8.3
-
Database: SQLite (default)
-
Running n8n via: Docker (docker-compose)
-
Operating system: Ubuntu (VPS)
-
Reverse proxy: Caddy
Docker-compose environment variables
yaml
environment:
- N8N_HOST=<my-domain>
- N8N_PORT=5678
- N8N_PROTOCOL=https
- NODE_ENV=production
- WEBHOOK_URL=https://<my-domain>/
- GENERIC_TIMEZONE=Europe/Amsterdam
- N8N_PROXY_HOPS=1
- N8N_DEFAULT_LOCALE=nl
- EXECUTIONS_DATA_MAX_AGE=168
- EXECUTIONS_DATA_PRUNE=true
- N8N_RUNNERS_MODE=internal
- N8N_RUNNERS_MAX_CONCURRENCY=5
- NODE_OPTIONS=--max-old-space-size=1024
No MCP-related environment variables are set (confirmed via docker exec env | grep -i mcp). N8N_DISABLED_MODULES is not set.
Additional context
-
Migrated from n8n Cloud (where MCP worked perfectly) to self-hosted
-
All workflows were exported from Cloud and imported into self-hosted
-
This appears to be the same issue reported by another user: Workflows not appearing in Instance-level MCP table after selection
-
Instance-level MCP is still labeled as Beta, so this may be a known limitation