Vous avez un Synology qui traîne sous le bureau et vous aimeriez bien que Claude puisse créer des automatisations dessus, genre surveiller un flux RSS, balancer des alertes dans Slack ou sauvegarder une base de données... le tout en langage naturel ? C'est exactement ce qu'on va mettre en place ici.
À la fin de ce tuto, vous aurez :
n8n qui tourne sur votre Synology (le moteur d'automatisation)
Nginx Proxy Manager comme reverse proxy (pour accéder à tout proprement)
Claude Desktop ET Claude Code qui pilotent n8n depuis votre ordi via MCP
En gros, vous dites à Claude « crée-moi un workflow qui fait X » et il le déploie directement dans n8n sur le Synology. Pas de clic dans une interface, pas de drag-and-drop... juste du texte.
Ah et comme Patreon c'est de la merde pour la mise en page, je vous ai mis un PDF un peu mieux formaté en téléchargement à la fin.
Architecture
Le serveur MCP tourne en local sur l'ordi et communique avec l'API n8n sur le Synology via le réseau local. Rien ne sort de chez vous.
1. Préparer le Synology
1.1 Se connecter en SSH
Première chose, il va falloir activer le SSH sur le Synology si ce n'est pas déjà fait. Rendez-vous dans DSM > Panneau de configuration > Terminal & SNMP > Activer SSH.
Ensuite, depuis votre ordi :
ssh user@IP_SYNOLOGY
Et on vérifie que Docker est bien installé :
sudo docker --version # Docker version 24.x ou 20.x (selon la version de DSM) sudo docker compose version # Docker Compose version v2.x
Note DSM 7.2+ : Container Manager utilise docker compose (v2, sans tiret). Si vous êtes sur une version plus ancienne de DSM, c'est peut-être docker-compose (v1). Dans la suite du tuto, j'utilise docker compose. À vous d'adapter si besoin.
1.2 Créer l'arborescence
# Créer le dossier principal sudo mkdir -p /volume1/docker/n8n-stack # Créer les sous-dossiers sudo mkdir -p /volume1/docker/n8n-stack/n8n-data sudo mkdir -p /volume1/docker/n8n-stack/npm-data sudo mkdir -p /volume1/docker/n8n-stack/npm-letsencrypt sudo mkdir -p /volume1/docker/n8n-stack/npm-db # Donner les bons droits à n8n (il tourne en user 1000:1000 dans le container) sudo chown -R 1000:1000 /volume1/docker/n8n-stack/n8n-data
Pourquoi tous ces dossiers ? Chacun a son rôle : n8n-data contient vos workflows, credentials et la config n8n (tout ce qui doit persister entre les redémarrages). npm-data stocke la configuration de Nginx Proxy Manager. npm-letsencrypt accueille les certificats SSL. Et npm-db héberge la base SQLite de NPM.
1.3 Connaître l'IP locale du Synology
ip addr show | grep "inet " | grep -v "127.0.0.1" # Cherchez la ligne avec votre IP locale, genre 192.168.1.xx ou 192.168.68.xx
Notez bien cette IP, vous en aurez besoin un peu partout dans la suite. Je l'appelle IP_SYNOLOGY dans le reste du tuto.
Attention sur Synology : l'interface réseau ne s'appelle pas forcément eth0 comme sur un Linux classique. Ça peut être ovs_eth0, bond0 ou autre chose selon votre modèle et votre config. D'où le ip addr show sans préciser d'interface. Chez moi c'est ovs_eth0 par exemple.
2. Déployer la stack Docker
2.1 Créer le docker-compose.yml
sudo nano /volume1/docker/n8n-stack/docker-compose.yml
Collez le contenu suivant :
services:# ============================================# Nginx Proxy Manager - Reverse Proxy# ============================================npm:image: jc21/nginx-proxy-manager:latestcontainer_name: npmrestart: unless-stoppedports:- "80:80" # HTTP- "443:443" # HTTPS- "81:81" # Panel admin NPMvolumes:- /volume1/docker/n8n-stack/npm-data:/data- /volume1/docker/n8n-stack/npm-letsencrypt:/etc/letsencryptnetworks:- proxy-network# ============================================# n8n - Moteur d'automatisation# ============================================n8n:image: docker.n8n.io/n8nio/n8ncontainer_name: n8nrestart: unless-stoppedenvironment:- N8N_HOST=n8n.local- N8N_PORT=5678- N8N_PROTOCOL=http- WEBHOOK_URL=http://n8n.local# Activer l'API REST (indispensable pour n8n MCP)- N8N_PUBLIC_API_DISABLED=false- GENERIC_TIMEZONE=Europe/Paris- TZ=Europe/Paris# Sécurité basique- N8N_SECURE_COOKIE=falsevolumes:- /volume1/docker/n8n-stack/n8n-data:/home/node/.n8nnetworks:- proxy-networkports:- "5678:5678"networks:proxy-network:name: proxy-networkdriver: bridge
Alors pourquoi garder le port 5678 exposé ? Hé bien en théorie, avec NPM devant, on n'en a pas besoin, mais pendant le setup initial et pour le debug, c'est bien pratique d'avoir un accès direct sans passer par le reverse proxy. Vous pourrez toutefois le retirer plus tard quand tout sera en place...
Concernant le paramètre N8N_SECURE_COOKIE=false, c'est nécessaire si vous accédez à n8n en HTTP sur le LAN. Sans ça, les cookies de session ne fonctionneront pas et vous vous ferez déconnecter à chaque clic. Pas idéal en production, mais pour un usage local c'est le bon réglage.
2.2 Lancer la stack
cd /volume1/docker/n8n-stack sudo docker compose up -d
Ça va alors télécharger les images dockers nécessaire à tout ce bazar et ensuite, vous devriez voir quelque chose comme ça :
[+] Running 3/3 ✔ Network proxy-network Created ✔ Container npm Started ✔ Container n8n Started
Si ça crache avec une erreur du style : "Error response from daemon: driver failed" c'est probablement parce qu'un port est déjà utilisé. Donc éditer le fichier Docker Compose et changez le port. Par exemple, moi j'ai eu le souci avec plusieurs ports déjà occupés, donc j'ai mis ça :
ports: - "9880:80" - "9443:443" - "9881:81"
On vérifie que tout tourne correctement :
sudo docker compose ps # Vous devez voir : # NAME IMAGE STATUS PORTS # n8n docker.n8n.io/n8nio/n8n Up 30 seconds 0.0.0.0:5678->5678/tcp # npm jc21/nginx-proxy-manager:latest Up 30 seconds 0.0.0.0:80->80/tcp, ...
Les deux containers doivent être en status "Up". Si l'un est en "Restarting", direction la section Troubleshooting en fin d'article.
3. Configurer Nginx Proxy Manager
3.1 Premier login NPM
Depuis votre ordi, ouvrez dans le navigateur :
http://IP_SYNOLOGY:81 (ou :9881 pour moi)
A partir de là, crééez vous un compte. Si vous voulez plus d'infos sur l'installation de Nginx Proxy Manager, j'ai fait un article entièrement dédié à cet outil.
3.2 Ajouter n8n comme Proxy Host
Dans NPM, allez dans Dashboard > Proxy Hosts > Add Proxy Host.
Onglet Details :
Domain Names : n8n.local (ou n8n.votredomaine.com si vous avez un nom de domaine)
Scheme : http
Forward Hostname / IP : n8n (c'est le nom du container Docker, résolu automatiquement parce qu'ils sont sur le même réseau)
Forward Port : 5678
Cocher : Websockets Support (n8n en a besoin pour son éditeur de workflows)
Cocher : Block Common Exploits
Onglet SSL (optionnel pour le LAN à la maison) : si vous avez un vrai nom de domaine, demandez un certificat Let's Encrypt. Si c'est juste en local chez vous, laissez vide, on s'en passera pour le moment. Vous le ferez plus tard.
Cliquez sur Save et on continue.
3.3 Configurer le DNS local (sur votre ordi)
Pour que n8n.local pointe vers votre Synology, on va ajouter une entrée dans le fichier hosts :
sudo nano /etc/hosts
Ajoutez cette ligne à la fin :
192.168.x.x n8n.local npm.local
(Remplacez 192.168.x.x par l'IP réelle de votre Synology, celle qu'on a récupérée à l'étape 1.3)
On teste que ça fonctionne :
ping n8n.local
Option alternative : si vous avez la chance d'avoir un Pi-hole ou AdGuard Home sur votre réseau, vous pouvez aussi ajouter l'entrée DNS là-bas. L'avantage, c'est que TOUS les appareils du réseau y auront accès, et pas juste votre ordi.
3.4 Tester l'accès via NPM
Ouvrez ensuite dans le navigateur : http://n8n.local/ (ou pour moi sur :9880)
Vous devez voir la page de setup de n8n. Si c'est le cas, c'est que NPM fait bien son boulot de reverse proxy. Sinon, testez d'abord l'accès direct via http://IP_SYNOLOGY:5678. Si ça marche en direct mais pas via NPM, c'est un problème de config côté NPM (vérifiez le hostname "n8n" et le port 5678 dans le Proxy Host).
4. Premier lancement de n8n
4.1 Créer votre compte admin
Une fois sur l'interface, n8n affiche un formulaire de création de compte. Remplissez-le avec votre email et un mot de passe solide. n8n va ensuite vous poser quelques questions sur votre expérience, vos cas d'usage... Vous pouvez tout passer, c'est juste pour leurs stats internes. Et truc intéressant, n8n vous propose d'obtenir une clé de licence. C'est optionnel, ça leur permet de récupérer votre mail mais ça vous donne le droit à quelques fonctionnalités supplémentaires.
4.2 Vérifier que l'interface marche
Vous arriverez ensuite sur le dashboard de n8n. Vous devez voir un bouton "Start from scratch" en haut et un menu à gauche avec Workflows, Credentials, etc. Si vous êtes là, c'est que n8n est opérationnel. On peut passer à la suite.
5. Générer la clé API n8n
C'est L'ETAPE critique car sans cette clé API, le serveur MCP n8n ne peut pas communiquer avec votre instance. Pas de clé, pas de pilotage depuis Claude.
5.1 Créer la clé
Cliquez sur la petite roue crantée en bas à gauche
Settings
Dans le menu gauche : n8n API
Cliquez sur "Create an API Key", choisissez sa durée de vie, donnez lui un petit nom.
Et copiez la clé dans un endroit sûr.
Gardez cette clé précieusement, vous en aurez besoin pour la suite.
5.2 Tester la clé API
Depuis votre ordi, ouvrez un terminal et lancez (gaffe au port dans l'URL si vous en savez mis un) :
curl -s -H "X-N8N-API-KEY: VOTRE_CLE_API_ICI" \ http://n8n.local/api/v1/workflows | python3 -m json.tool
Si tout va bien, vous devriez voir :
{ "data": [], "nextCursor": null }
C'est une liste vide, et c'est normal car vous n'avez pas encore de workflows. L'important c'est que ça réponde sans erreur. Si vous avez une erreur 401 ou 403, la clé est mauvaise ou l'API n'est pas activée (vérifiez que N8N_PUBLIC_API_DISABLED=false est bien dans le docker-compose !).
6. Configurer n8n MCP sur l'ordi
Le principe est super simple. En fait le serveur MCP n8n tourne en local sur votre ordinateur (via npx) et se connecte à l'API n8n sur le Synology (ou votre serveur) via le réseau local. C'est lui qui fait le pont entre Claude et vos workflows.
6.1 Prérequis
# Vérifier Node.js node --version # Doit être v18.0.0 ou supérieur # Si pas installé : brew install node # Vérifier npx npx --version
6.2 Tester n8n MCP en standalone
Avant de brancher Claude, on vérifie d'abord que le serveur MCP arrive à causer avec n8n :
N8N_API_URL=http://n8n.local \ N8N_API_KEY=VOTRE_CLE_ICI \ npx n8n-mcp
La première fois, npx va télécharger le package (comptez une trentaine de secondes). Ensuite le serveur démarre. Ctrl+C pour quitter. Si ça marche sans erreur, on passe à la config Claude. Profitez en aussi pour désactiver leur télémétrie de merde :
npx n8n-mcp telemetry disable
Et puis pour des questions de sécurité, on va mettre la clé API dans un .env dans notre projet pour l'utiliser ensuite :
echo 'N8N_API_KEY=votre_cle_ici' >> .env
Ou alors en export dans votre .zshrc ou équivalent :
export N8N_API_KEY="votre_cle_ici"
Puis pour recharger l'environnement :
source ~/.zshrc
6.3 Configurer Claude Desktop
Créez ensuite le fichier de config s'il n'existe pas et ouvrez le :
macOS : ~/Library/Application Support/Claude/claude_desktop_config.json
Windows : %APPDATA%\Claude\claude_desktop_config.json
Linux : ~/.config/Claude/claude_desktop_config.json
Si vous avez la flemme, vous pouvez toujours demander à Claude Code de s'occuper de tout ça. Vous copiez collez ce petit chapitre 6.3 ou 6.4 et vous lui donnez. Sinon, bah on va faire ça à la main...
Si le fichier est vide ou n'existe pas, collez ceci dedans :
{"mcpServers": {"n8n-mcp": {"command": "npx","args": ["n8n-mcp"], "env": { "MCP_MODE": "stdio", "LOG_LEVEL": "error", "DISABLE_CONSOLE_OUTPUT": "true", "N8N_API_URL": "http://n8n.local", "N8N_API_KEY": "${N8N_API_KEY}" }}}}
Si le fichier contient déjà d'autres serveurs MCP, ajoutez le bloc n8n-mcp dans le mcpServers existant. Faites attention aux virgules, le JSON est chatouilleux là-dessus.
N'oubliez pas de remplacer n8n.local par votre URL:PORT si besoin et VOTRE_CLE_ICI par vos vraies valeurs.
Relancez Claude Desktop complètement (Cmd+Q, pas juste fermer la fenêtre). Ouvrez une nouvelle conversation et cliquez sur l'icône marteau (outils) en bas. Vous devez voir n8n-mcp dans la liste. Si c'est le cas, c'est gagné.
6.4 Configurer Claude Code
nano .claude/settings.json
Ajoutez le serveur MCP dans la section mcpServers :
{"mcpServers": {"n8n-mcp": {"command": "npx","args": ["n8n-mcp"],"env": {"MCP_MODE": "stdio", "LOG_LEVEL": "error", "DISABLE_CONSOLE_OUTPUT": "true", "N8N_API_URL": "http://n8n.local", "N8N_API_KEY": "${N8N_API_KEY}"}}}}
Attention : si vous avez déjà des settings dans ce fichier, intégrez le bloc n8n-mcp dans le mcpServers existant. Ne remplacez pas tout le fichier ! Et sinon, pour info, moi j'ai tout mis là dedans : ~/.claude/.mcp.json et j'ai bien mis mon port 9880 à moi...
Relancez Claude Code (nouvelle session) et tapez /mcp pour vérifier que n8n-mcp est bien connecté.
7. Premier workflow !
Allez, c'est le moment de vérité !!! On va demander à Claude de créer des workflows dans n8n, directement depuis notre ordinateur.
7.1 Test de connexion
Dans Claude Desktop ou Claude Code, tapez simplement :
Liste tous mes workflows n8n
Réponse attendue : une liste vide (normal, vous venez de tout installer). L'important c'est que Claude arrive à interroger n8n sans erreur. Si c'est le cas, la connexion Ordi → Synology via MCP fonctionne.
7.2 Workflow simple
On commence doucement. Demandez à Claude :
Crée un workflow n8n qui toutes les heures fait un HTTP GET sur https://korben.info/feed (flux RSS) et envoie les 3 derniers titres par email à [email protected]
Claude va chercher les nœuds disponibles, construire le workflow et le déployer dans votre n8n sur le Synology. Allez vérifier dans le navigateur : http://n8n.local > Workflows. Vous devriez le voir apparaître.
Avant de l'activer, 2 choses à faire quand même dans l'UI n8n :
Configurer les credentials SMTP sur le noeud "Envoyer email" (Gmail, Sendgrid, ou le SMTP de votre choix)
Et activer le workflow (il est créé inactif par défaut)
7.3 Workflow avancé : RSS + résumé IA + Slack
Allez, on monte d'un cran :
Crée un workflow n8n :
1. Toutes les heures, lire le flux RSS https://korben.info/feed
2. Filtrer : ne garder que les articles publiés dans les 2 dernières heures
3. Pour chaque article, utiliser un nœud HTTP Request vers l'API OpenAI (gpt-4o-mini) pour générer un résumé en 2 phrases
4. Envoyer chaque résumé + lien dans un canal Slack via webhook URL webhook : https://hooks.slack.com/services/XXX/YYY/ZZZ
7.4 Modifier un workflow existant
Et le plus cool, c'est qu'on peut aussi modifier un workflow déjà en place :
Modifie le dernier workflow : ajoute un nœud IF après le RSS qui filtre les articles dont le titre contient "IA" ou "sécurité"
Le système de mises à jour différentielles de n8n MCP n'envoie que le diff, ce qui économise 80-90% de tokens par rapport au renvoi complet du workflow. Malin.
8. Aller plus loin
8.1 Ajouter des credentials dans n8n
n8n MCP crée la structure des workflows mais les authentifications (clés API, OAuth...) doivent se configurer directement dans n8n :
Rendez-vous sur http://n8n.local > Credentials (menu gauche)
Add Credential > choisissez le type (OpenAI, Slack, Gmail, etc.)
Remplissez les champs demandés
Une fois les credentials enregistrées, les futurs workflows créés par Claude pourront les utiliser automatiquement.
8.2 Ajouter d'autres services derrière NPM
Votre Nginx Proxy Manager peut bien sûr servir de porte d'entrée pour tout ce qui tourne en Docker sur le Synology. La procédure est toujours la même :
Dans le docker-compose.yml, ajoutez le service au même proxy-network
Dans NPM : Proxy Hosts > Add > mettez le nom du container + port
Dans /etc/hosts sur l'ordi : ajoutez le sous-domaine
Par exemple, on pourrait faire ça pour portainer.local → Portainer (port 9000), uptime.local → Uptime Kuma (port 3001), ou encore grafana.local → Grafana (port 3000).
8.3 Mettre à jour la stack
Pour mettre à jour ce qu'on vient de faire, rien de plus simple :
cd /volume1/docker/n8n-stack sudo docker compose pull sudo docker compose up -d
Ça télécharge les dernières images et relance les containers. Vos données sont préservées dans les volumes, donc y'a pas de souci à se faire.
8.4 Backup
Les données importantes sont dans deux dossiers :
/volume1/docker/n8n-stack/n8n-data/ (workflows, credentials, config)
/volume1/docker/n8n-stack/npm-data/ (config du reverse proxy)
Donc assurez-vous que ces dossiers sont bien inclus dans vos backups Synology (Hyper Backup ou équivalent). Car perdre ses workflows n8n, c'est bien relou !
9. Et si y'a des problèmes ?
Container n8n en "Restarting"
sudo docker logs n8n --tail 50
Les causes les plus courantes :
Permission denied sur le volume → sudo chown -R 1000:1000 /volume1/docker/n8n-stack/n8n-data
Port 5678 déjà pris → sudo netstat -tlnp | grep 5678 pour trouver qui bloque, puis arrêtez le process en question
n8n MCP ne se connecte pas à n8n
# Depuis l'ordinateur, tester la connectivité curl -s http://IP_SYNOLOGY:5678/api/v1/workflows \ -H "X-N8N-API-KEY: n8n_api_VOTRE_CLE_ICI"
Connection refused : n8n ne tourne pas, ou le firewall Synology bloque le port. Allez dans DSM > Panneau de configuration > Sécurité > Pare-feu et autorisez le port 5678.
401 Unauthorized : la clé API est incorrecte. Régénérez-la dans n8n.
404 : l'API n'est peut-être pas activée. Vérifiez que N8N_PUBLIC_API_DISABLED=false est bien dans le docker-compose.
Claude Desktop ne voit pas n8n-mcp
Vérifiez que Node.js 18+ est installé : node --version
Vérifiez que votre JSON est valide : python3 -m json.tool < ~/Library/Application\ Support/Claude/claude_desktop_config.json
Relancez COMPLÈTEMENT Claude Desktop (Cmd+Q, pas juste fermer la fenêtre — c'est pas pareil !)
Testez npx directement : npx n8n-mcp --help
"JSON parse error" dans Claude Desktop
C'est un classique : le serveur MCP envoie des logs sur stdout qui polluent le protocole MCP. Vérifiez que ces 3 variables sont bien présentes dans votre config :
"MCP_MODE": "stdio", "LOG_LEVEL": "error", "DISABLE_CONSOLE_OUTPUT": "true"
Sans elles, le serveur MCP bavarde trop et Claude ne comprend plus les réponses.
NPM ne résout pas le hostname "n8n"
Les deux containers doivent être sur le même réseau Docker. Vérifiez avec :
sudo docker network inspect proxy-network
Vous devez voir n8n et npm dans la section "Containers". Si l'un des deux manque, le docker-compose n'a pas mis les deux sur le même réseau.
Origin header does NOT match (port non-standard)
Si vous accedez a n8n via NPM sur un port non-standard (genre 9880 au lieu de 80), vous allez voir ce message en boucle dans les logs :
Origin header does NOT match the expected origin. (Origin: "http://n8n.local:9880" -> "n8n.local:9880", Expected: "n8n.local" -> "n8n.local")
Le navigateur envoie n8n.local:9880 dans le header Origin (parce que le port n'est pas standard), mais n8n compare avec N8N_HOST qui ne contient que le hostname sans le port. Et non, mettre le port dans N8N_HOST ne marche pas, n8n le strip.
Le fix : il faut editer directement le fichier de config Nginx genere par NPM (pas via l'UI "Advanced", ca ne marche pas a cause de l'heritage Nginx). Trouvez le fichier :
ls /volume1/docker/n8n-stack/npm-data/nginx/proxy_host/
Editez le .conf correspondant, et ajoutez cette ligne dans le bloc location / {, avec les autres proxy_set_header :
proxy_set_header Origin "http://n8n.local";
Puis rechargez Nginx :
docker exec npm nginx -s reload
Pourquoi l'UI NPM ne suffit pas : le champ "Custom Nginx Configuration" de l'onglet Advanced injecte au niveau du bloc server. Mais NPM genere ses propres proxy_set_header dans le bloc location. En Nginx, quand un bloc location contient des proxy_set_header, il ecrase tous ceux herites du server. Votre directive custom est donc ignoree.
Attention : si vous modifiez le proxy host via l'UI NPM par la suite, le fichier sera regenere et votre modification perdue. Pensez a la re-ajouter.
Espaces dans les variables d'environnement
Piege classique du docker-compose : NODE_FUNCTION_ALLOW_BUILTIN = crypto (avec des espaces autour du =) ne marche pas. Docker cree une variable avec un espace dans le nom qui n'est jamais reconnue par n8n.
Toujours ecrire sans espaces : NODE_FUNCTION_ALLOW_BUILTIN=crypto.
Webhooks n8n ne fonctionnent pas
Si vous créez des workflows avec des webhooks, vérifiez que WEBHOOK_URL dans le docker-compose pointe vers la bonne URL :
En local : http://n8n.local (si NPM est configuré)
Avec un domaine : https://n8n.votredomaine.com
4 prompts prêts à l'emploi
Et pour finir, voici quelques prompts que vous pouvez copier-coller directement dans Claude Desktop ou Claude Code une fois n8n-mcp configuré. Remplacez les valeurs entre crochets par les vôtres.
Backup auto BDD + S3
Crée un workflow n8n : tous les jours à 3h du matin, exécuter une commande via le nœud SSH "pg_dump [NOM_BASE] > /tmp/backup.sql" sur le serveur [IP_SERVEUR], puis uploader le fichier sur S3 dans le bucket "[NOM_BUCKET]/backups/daily/".
Monitoring site + alerte email
Crée un workflow n8n : toutes les 5 minutes, faire un HTTP GET sur [URL_SITE]. Si le status code n'est pas 200 ou si le temps de réponse dépasse 3 secondes, envoyer un email d'alerte à [VOTRE_EMAIL].
Nouveau commit GitHub + deploy
Crée un workflow n8n : configurer un webhook qui écoute les push events de GitHub. Quand un nouveau commit arrive sur la branche "main", faire un HTTP POST vers [URL_DEPLOY_STAGING] avec le hash du commit.
Formulaire contact + Notion + Slack
Crée un workflow n8n : configurer un webhook qui reçoit des données de formulaire (nom, email, message). Créer une page dans la base Notion [ID_DATABASE] avec ces infos, puis envoyer une notification Slack via webhook [URL_WEBHOOK].
Voilà, maintenant il n'y a plus que votre imagination et votre bagou qui fera le travail ^^.
Amusez-vous bien !