Haciendo del Desarrollo y la Arquitectura Web, ciencia y pasión.

Conexion entre n8n y Claude code

Hoy hemos venido a jugar con n8n el gestor de flujos de trabajo. N8n es una plataforma de automatización de flujos de trabajo desarrollada por la empresa berlinesa n8n GmbH. Permite construir automatizaciones conectando aplicaciones, servicios y modelos de IA mediante un editor visual basado en nodos, con la opción de escribir JavaScript o Python.

Podríamos tirar de un contenedor y salir del paso en dos minutos, pero vamos a hacerlo un poco más interesante, lo vamos a montar nativo con npm, dejarlo corriendo como un servicio de systemd de verdad, podremos lanzar un systemctl status como cualquier otro demonio del sistema para ver el estado, despues  habilitaremos el servidor MCP que trae de serie para que, desde Claude Code, poder crear y modificar flujos escribiendo lo que quieres que haga el flujo. Super interesante.

Bien, pues vamos alla. Para poder instalar n8n es necesario cumplir unos requisitos minimos de version de Node. N8n pide entre 20.19 y 24.x, ambas incluidas. No pasarse de la 24 ni te quedes por debajo de la 20.19.

lanzamos el comando:

sudo npm install -g n8n

Tarda bastante por que tiene un millon de dependencias, eso que tiene node, que para hacer un hola mundo te baja 2000 paquetes.

Bueno podemos lanzar n8n, pero lo suyo es dejar como dije, corriendo en un demonio. Editamos el siguiente archivo para crear el servicio:

sudo nano /etc/systemd/system/n8n.service

Y le damos el siguiente contenido:


```ini
[Unit]
Description=n8n workflow automation
After=network.targe

[Service]
Type=simple
User=n8n
Group=n8n
ExecStart=/usr/bin/n8n start
Restart=always
RestartSec=5
Environment=N8N_HOST=0.0.0.0
Environment=N8N_PORT=5678
Environment=N8N_PROTOCOL=http
Environment=GENERIC_TIMEZONE=Europe/Madrid
Environment=N8N_RUNNERS_ENABLED=true
Environment=NODE_ENV=production
# Necesario para que Claude/MCP pueda modificar los flujos publicados:
Environment=N8N_USER_FOLDER=/home/daniel/.n8n

[Install]
WantedBy=multi-user.target
```

Como ves el host estara escuchando 0.0.0.0 por el puerto 5678, cambiar el timezone si no estais en Madrid, entorno. Ojo al user folder, ahi instalará cosas importantes como la base de datos sqlite.

Perfecto ahora hay que habilitar el servicio para que arranque en el boot de la maquina:

sudo systemctl daemon-reload
sudo systemctl enable --now n8n

y finalmente podemos hacer un:


sudo systemctl status n8n

Y deberiamos ver algo como:


daniel@dockerserver  ~  sudo systemctl status n8n
[sudo] password for daniel:
● n8n.service - n8n workflow automation
Loaded: loaded (/etc/systemd/system/n8n.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2026-07-05 17:22:38 CEST; 6 days ago
Main PID: 1907956 (node)
Tasks: 19 (limit: 6950)
Memory: 639.0M
CPU: 17min 38.853s
CGroup: /system.slice/n8n.service
├─1907956 node /usr/local/bin/n8n
└─1907994 node --disallow-code-generation-from-strings --disable-proto=delete /usr/local/lib/node_mod

Jul 11 07:42:31 dockerserver env[1907956]: Blocked GET /robots.txt for "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_>
Jul 11 17:22:49 dockerserver env[1907956]: Pruning old insights data
Jul 11 22:04:32 dockerserver env[1907956]: Skipping execution data push: unable to resolve user for redaction
Jul 11 22:04:53 dockerserver env[1907956]: Skipping execution data push: unable to resolve user for redaction
Jul 11 22:05:17 dockerserver env[1907956]: Skipping execution data push: unable to resolve user for redaction
Jul 11 22:10:49 dockerserver env[1907956]: Skipping execution data push: unable to resolve user for redaction
Jul 11 22:17:02 dockerserver env[1907956]: Skipping execution data push: unable to resolve user for redaction
Jul 11 22:18:05 dockerserver env[1907956]: Skipping execution data push: unable to resolve user for redaction

Perfecto en este momento el servidor ya podria atender en 0.0.0.0:5678, pero lo suyo seria poder usarlo desde fuera de la maquina con su dominio y su certificado vamos con ello:

lo primero seria disponer de un proxy inverso, para dirigir el trafico, Nginx, Caddy, Traefic. Yo voy a usar apache.

He creado mi archivo de configuracion:

daniel@dockerserver  /etc/apache2/sites-available > cat n8n.dg-le-ssl.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName n8n.midominio.com
 
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/n8n.midominio.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/n8n.midominio.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
 
ServerAdmin daniel.gimeno@gmail.com
 
SSLEngine On
SSLProxyEngine On
ProxyRequests Off
ProxyPreserveHost On
TimeOut 600
KeepAliveTimeout 600
 
 
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
 
<Proxy *>
Require all granted
</Proxy>
 
RewriteEngine On
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /(.*) ws://localhost:5678/$1 [P,L]
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
RewriteRule /(.*) http://localhost:5678/$1 [P,L]
ProxyPassReverse / http://n8n.midominio.com
 
ErrorLog ${APACHE_LOG_DIR}/n8n.midominio.com.error.log
CustomLog ${APACHE_LOG_DIR}/n8n.midominio.com.access.log combined
</VirtualHost>
</IfModule>

realmente este es el generado automaticamente por certbot para poder disponer de un certificado https y no tener problemas:

sudo certbot --apache -d n8n.midominio.com

para ello podeis tener un dominio dedicado o un subdominio tipo: n8n.midominio.com

perfecto ahora vamos con la parte de cliente, donde instalaremos claude code:


curl -fsSL https://claude.ai/install.sh| bash
Setting up Claude Code...
✅Claude Code successfully installed!
Version: 2.1.201
Location: ~/.local/bin/claude
Next: Run claude --help to get started
⚠ Setup notes:
● Native installation exists but ~/.local/bin is not in your PATH. 
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc && source ~/.zshrc
✅Installation complete!

Claude Code es la herramienta de programación agéntica de Anthropic. La idea clave está en la palabra agéntica: no es un autocompletado ni un chatbot al uso, en una pestaña lateral al que le copias y pegas código. Es un agente que lee tu código, edita archivos, ejecuta comandos y se integra con tus herramientas de desarrollo, tomando acciones reales sobre tu proyecto.

Tras la primera ejecucion del script una serie de preguntas sobre la confugracion de claude code tendran lugar, localizacion, team de escritorio claro u oscuro, y la suscripcion a claude.ai

Una vez instalado Claude ya podemos empezar a trabajar con el, pero antes es preciso una ultima accion en nuestro n8n, para que Claude sea capaz de dialogar con el.

Lo primero es irse a tu instalacion de n8n y arrancar el acceso MCP, en el menu de settings. MCP significa Model Context Protocol, se trata de un estándar abierto, impulsado por la propia Anthropic, que define una forma común de conectar modelos de IA con herramientas y fuentes de datos externas. La idea es que, en lugar de que cada integración sea un apaño distinto, cualquier asistente compatible (Claude Code, Cursor, Codex...) pueda "enchufarse" a un servicio a través de este protocolo.

Tambien necesitaremos una apikey para poder acceder a n8n. En la seccion settings, iremos a n8n api y crearemos una nueva:

Copiamos la api y la conservamos por que no la volveremos a ver. Bien pues con esos dos datos nos vamos a nuestro claude e instalamos servidor MCP.

Podríamos instalarlo directamente con el siguiente comando de forma inmediata:

claude mcp add n8n-mcp \
-e MCP_MODE=stdio \
-e LOG_LEVEL=error \
-e DISABLE_CONSOLE_OUTPUT=true \
-e N8N_API_URL=https://tu-dominio.com
-e N8N_API_KEY=tu-api-key
-- npx n8n-mcp

pero como tenemos nuestro asistente claude se lo vamos a pedir directamente a Claude que lo haga por nosotros:

Ahora nos hará una serie de preguntas solicitando la url y la api-key, y finalmente, nos indicará que ha conectado con nuestro servicio n8n:

Perfecto estamos listos para conectarnos y empezar a pedir nuevos flujos. Le pediremos que use una API de internet, adviceslip.com, que nos dará un consejillo y este, una ve recuperado nos lo enviará por telegram:

Si ahora nos vamos a n8n veremos que ya tenemos un flujo:

Ahora podemos dar al boton ejecutar el workflow, si nos vamos a mi telegram hemos recibido un consejo por cada ejecucion.

A partir de aqui las posibilidades son todas, le damos a n8n la tarea del qué y cuando y claude code cómo, podemos conectar un flujo de entrada con Jira, que por ejemplo conecte via otro agente para enriquecer una tarea, con explicaciones, con documentacion extra, con aprobacion de diferentes roles, y mandar la tarea a Claude para que la desarrolle. Atrás quedo el tiempo en que me daban las tareas para hacer en un post-it en el pasillo.

Bueno espero que os haya resultado tan interesante como a mi, y oye, todos los dias a las 11 tendrás un consejo de vida. 

Un Saludo, Daniel.