n8n-mcp: how to reach a private-network n8n (self-signed HTTPS) past the SSRF block?
Using n8n-mcp (czlonkowski/n8n-mcp) with Claude Code, I need to connect to a self-hosted n8n instance on the same private network (LXC on Proxmox). The server uses HTTPS with a self-signed certificate, and the SSRF protection blocks the connection. How do I configure the MCP server to reach an RFC1918 private address and handle the self-signed cert in this non-production setup? The thread does not state a specific version or the exact error message.
Originally asked on GitHub: https://github.com/czlonkowski/n8n-mcp/issues/832
4 answers
Still open as an accepted docs task, but the maintainer confirmed the behavior and the reporter got the setup working.
The SSRF gate (
src/utils/ssrf-protection.ts) is controlled byWEBHOOK_SECURITY_MODE(defaultstrict). Instrictmode it blocks localhost, RFC1918 private IPs (like10.x,192.168.x,172.16–31.x), and cloud metadata.moderateallows localhost but still blocks RFC1918 private ranges and cloud metadata.permissiveallows localhost and RFC1918 private IPs, but still blocks cloud metadata endpoints (169.254.169.254,metadata.google.internal, etc.). So for a private-network n8n instance reachable on10.x/192.168.x/172.16–31.x,moderateis not enough — you needWEBHOOK_SECURITY_MODE=permissive. The reporter confirmed their service would not work in moderate mode.The maintainer agreed
docs/SELF_HOSTING.mdonly documented themoderatecase (localhost /host.docker.internal) and did not cover the private-network case or self-signed TLS. The thread mentionsNODE_TLS_REJECT_UNAUTHORIZEDin that context, but it does not describe the reporter's exact TLS setup. As general advice,NODE_TLS_REJECT_UNAUTHORIZED=0makes Node skip TLS verification entirely; only use it in a non-production testing environment.A docs inconsistency also remains open: the reporter noted several repo pages claim
moderateallows RFC1918, while the maintainer says that is not the case.If you installed via the
.mcpbbundle (for example for Claude Desktop), there is no UI toggle forWEBHOOK_SECURITY_MODE; one user set the env var by editingmanifest.jsonin the plugin directory.Did this work for you?What @openclaw1reaperhammer tried on GitHub (Worked)
The reporter found that WEBHOOK_SECURITY_MODE=permissive was the required setting; their setup did not work with moderate mode. Comment 3 confirms the reporter got it working.
Source: https://github.com/czlonkowski/n8n-mcp/issues/832#issuecomment-4621898218 (opens external site)
Did this work for you?What a GitHub user tried on GitHub (Didn't work)
The reporter connected from Claude Code to a private-network n8n instance (LXC on Proxmox, HTTPS with a self-signed cert) on the same private network and was stopped by the SSRF block. No exact error or config was given in the issue.
Source: https://github.com/czlonkowski/n8n-mcp/issues/832 (opens external site)
Did this work for you?What @w-marco tried on GitHub (Outcome unclear)
Another user, using the .mcpb bundle with Claude Desktop, manually edited manifest.json in the plugin directory to set the WEBHOOK_SECURITY_MODE env var because a UI toggle is missing. No result was confirmed.
Source: https://github.com/czlonkowski/n8n-mcp/issues/832#issuecomment-4804727604 (opens external site)
Did this work for you?
Related questions
- n8n-MCP: complex Claude Desktop workflows won't open in n8n UI — 'propertyValues is not iterable'?
- n8n-mcp partial update fails: 'Cannot convert undefined or null to object' (Claude Desktop/Cursor)
- n8n-mcp n8n_update_partial_workflow updateNode fails with "Cannot convert undefined or null to object"
- n8n-mcp Docker: missing BACKEND_SUPABASE_URL after pulling latest image
- n8n_update_partial_workflow fails: "settings must NOT have additional properties"