transform-ia/mcp-n8n-chart
If you are the rightful owner of mcp-n8n-chart and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to dayong@mcphub.com.
The MCP n8n Chart is a Helm chart designed to deploy an n8n MCP server for integrating workflow automation with Claude Code through the Model Context Protocol.
n8n MCP Server Helm Chart
Helm chart for deploying the n8n MCP (Model Context Protocol) server for Claude Code integration.
Overview
This chart deploys an n8n MCP server that provides workflow automation capabilities to Claude Code through the Model Context Protocol. The server connects to an n8n instance and exposes MCP endpoints for Claude to interact with workflows, executions, and automation tasks.
Prerequisites
- Kubernetes 1.19+
- Helm 3.0+
- An n8n instance with API access
- n8n API key with appropriate permissions
Installation
From OCI Registry (Recommended)
helm install mcp-n8n oci://ghcr.io/transform-ia/charts/mcp-n8n \
--namespace claude \
--create-namespace \
--set n8n.apiUrl="https://your-n8n-instance.com" \
--set n8n.apiKey="your-api-key" \
--set auth.token="your-auth-token"
From Git Repository
git clone https://github.com/transform-ia/mcp-n8n-chart
cd mcp-n8n-chart
helm install mcp-n8n . -n claude --create-namespace \
--set n8n.apiUrl="https://your-n8n-instance.com" \
--set n8n.apiKey="your-api-key" \
--set auth.token="your-auth-token"
Using Values File
Create a my-values.yaml:
n8n:
apiUrl: "https://n8n.robotinfra.com"
apiKey: "your-n8n-api-key"
auth:
token: "your-mcp-auth-token"
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 500m
memory: 512Mi
Install with values file:
helm install mcp-n8n oci://ghcr.io/transform-ia/charts/mcp-n8n \
-n claude --create-namespace \
-f my-values.yaml
Configuration
Image Settings
| Parameter | Description | Default |
|---|---|---|
image.repository | n8n MCP server image repository | ghcr.io/czlonkowski/n8n-mcp |
image.tag | Image tag (defaults to chart appVersion) | "2.22.18" |
image.pullPolicy | Image pull policy | IfNotPresent |
MCP Server Configuration
| Parameter | Description | Default |
|---|---|---|
mcpServer.mode | MCP server mode (http, stdio) | "http" |
mcpServer.logLevel | Log level (debug, info, warn, error) | "info" |
mcpServer.disableConsoleOutput | Disable console output | true |
mcpServer.port | MCP server port | 3000 |
n8n Integration
| Parameter | Description | Default |
|---|---|---|
n8n.apiUrl | n8n instance API URL | "https://n8n.robotinfra.com" |
n8n.apiKey | n8n API key (required) | "" |
Authentication
| Parameter | Description | Default |
|---|---|---|
auth.token | MCP authentication token (required) | "" |
Service Configuration
| Parameter | Description | Default |
|---|---|---|
service.type | Kubernetes service type | ClusterIP |
service.port | Service port | 3000 |
service.targetPort | Container target port | http |
Secret Management
| Parameter | Description | Default |
|---|---|---|
secret.create | Create secret for credentials | true |
secret.name | Secret name | "mcp-n8n-secrets" |
Security Context
| Parameter | Description | Default |
|---|---|---|
securityContext.fsGroup | Filesystem group | 1000 |
securityContext.seccompProfile.type | Seccomp profile | RuntimeDefault |
containerSecurityContext.allowPrivilegeEscalation | Allow privilege escalation | false |
containerSecurityContext.readOnlyRootFilesystem | Read-only root filesystem | false |
containerSecurityContext.runAsNonRoot | Run as non-root user | true |
containerSecurityContext.runAsUser | User ID | 1000 |
containerSecurityContext.runAsGroup | Group ID | 1000 |
Service Account
| Parameter | Description | Default |
|---|---|---|
serviceAccount.create | Create service account | false |
serviceAccount.name | Service account name | "claude-code" |
serviceAccount.automountServiceAccountToken | Auto-mount service account token | true |
Network Policies
| Parameter | Description | Default |
|---|---|---|
networkPolicies.enabled | Enable network policies | true |
networkPolicies.allowDNS | Allow DNS resolution | true |
networkPolicies.allowHTTPSEgress | Allow HTTPS egress | true |
networkPolicies.allowIngressFrom | Pods allowed to connect | [{podSelector: {matchLabels: {app: claude-code}}}] |
Resource Limits
| Parameter | Description | Default |
|---|---|---|
resources.requests.cpu | CPU request | 100m |
resources.requests.memory | Memory request | 128Mi |
resources.limits.cpu | CPU limit | 500m |
resources.limits.memory | Memory limit | 512Mi |
Global Settings
| Parameter | Description | Default |
|---|---|---|
global.namespace | Deployment namespace | "claude" |
replicaCount | Number of replicas | 1 |
Network Policies
This chart includes three network policies when networkPolicies.enabled: true:
-
DNS Resolution (
networkpolicy-dns.yaml)- Allows DNS queries to kube-system namespace
- Permits UDP/TCP port 53 traffic
-
HTTPS Egress (
networkpolicy-egress.yaml)- Allows HTTPS (443) and HTTP (80) to external destinations
- Blocks internal cluster IP ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)
- Prevents lateral movement within the cluster
-
Ingress from Claude Code (
networkpolicy-ingress.yaml)- Allows incoming connections only from pods with label
app: claude-code - Restricts access to port 3000
- Allows incoming connections only from pods with label
Usage
Once deployed, the MCP server is available at:
http://mcp-n8n.claude.svc.cluster.local:3000/mcp
Configure Claude Code to use this endpoint in /home/code/.claude.json:
{
"mcpServers": {
"n8n": {
"url": "http://mcp-n8n.claude.svc.cluster.local:3000/mcp",
"transport": "http"
}
}
}
Monitoring
Check deployment status:
kubectl get pods -n claude -l app=mcp-n8n
View logs:
kubectl logs -n claude -l app=mcp-n8n
Check service:
kubectl get svc -n claude mcp-n8n
Troubleshooting
Pod not starting
Check pod events:
kubectl describe pod -n claude -l app=mcp-n8n
Connection issues
Verify network policies:
kubectl get networkpolicies -n claude
kubectl describe networkpolicy mcp-n8n-allow-ingress -n claude
Authentication errors
Verify secret contents:
kubectl get secret mcp-n8n-secrets -n claude -o jsonpath='{.data}'
Development
Local Testing
Test chart rendering:
helm template mcp-n8n . --debug
Lint chart:
helm lint .
CI/CD
This chart uses GitHub Actions for:
- Linting: YAML and Markdown validation on PRs
- Publishing: Automatic packaging and push to GHCR on version tags
To release a new version:
# Update Chart.yaml version
git tag v0.1.1
git push origin v0.1.1
License
Apache 2.0
Maintainers
- Transform IA bruno.clermont@gmail.com