Tutoriel

Déployer un serveur MCP sur VPS auto-hébergé

Intelligence Artificielle8 min de lecture10 étapes

Le protocole MCP (Model Context Protocol) s'est imposé comme la couche standard pour connecter un agent IA à vos outils : bases de données, systèmes de fichiers, APIs internes. Héberger ce serveur sur votre propre VPS vous donne un contrôle total sur les données traitées, sur la latence et sur les coûts. Ce guide couvre l'installation, la sécurisation en production, l'intégration avec Claude Desktop et Cursor, et les erreurs les plus fréquentes.

Sommaire· Pourquoi héberger son propre serveur MCP1/11
  1. 01Pourquoi héberger son propre serveur MCP
  2. 02Ce que vous gagnez à auto-héberger
  3. 03Prérequis avant de commencer
  4. 04Déployer un serveur MCP en 10 étapes
  5. 05Activez systématiquement les journaux d'accès nginx pour votre serveur
  6. 06Serveurs MCP open source recommandés
  7. 07Sécuriser son serveur MCP en production
  8. 08Intégrer Claude Desktop et Cursor avec votre serveur MCP
  9. 09MCP vs API REST vs WebSocket pour agents IA
  10. 10Dépannage : 4 erreurs fréquentes
  11. 11Vers un environnement IA complet sur votre VPS

Pourquoi héberger son propre serveur MCP

Les services MCP hébergés chez un tiers introduisent une dépendance externe : vos données, vos prompts et vos contextes transitent par une infrastructure que vous ne contrôlez pas. Sur un VPS, le serveur MCP tourne dans votre réseau, avec vos règles d'accès et votre chaîne de confiance. C'est la même logique que d'auto-héberger un dépôt Git ou un registre Docker : l'autonomie prime sur la commodité.

Ce que vous gagnez à auto-héberger

  • Confidentialité des données : aucun contexte ne quitte votre infrastructure.
  • Pas de round-trip vers un tiers : le serveur MCP et votre application tournent sur le même réseau ou sur des VPS voisins.
  • Personnalisation totale : outils maison, connecteurs propriétaires, environnement d'exécution sur mesure.
  • Coût prévisible : un abonnement VPS fixe, sans facturation à l'appel.
  • Contrôle des versions : vous choisissez quand mettre à jour le serveur et ses dépendances.

Prérequis avant de commencer

Vous avez besoin d'un VPS avec accès root, d'une distribution Linux récente (Ubuntu 22.04 LTS ou Debian 12 sont recommandés), de Node.js 18+ ou Python 3.11+ selon l'implémentation choisie, et d'un nom de domaine pointant vers l'IP de votre serveur. Un plan avec au minimum 1 vCPU et 2 Go de RAM convient pour un serveur MCP à usage modéré. Pour des charges importantes ou plusieurs serveurs MCP en parallèle, prévoir 2 vCPU et 4 Go.

Déployer un serveur MCP en 10 étapes

  1. Mettre à jour le système et installer Node.js

    Connectez-vous en SSH avec votre clé et lancez apt update && apt upgrade -y. Installez Node.js via le dépôt officiel NodeSource : curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && apt install -y nodejs. Vérifiez avec node -v et npm -v.

  2. Créer un utilisateur dédié

    Ne faites jamais tourner le serveur MCP en root. Créez un utilisateur applicatif : useradd -m -s /bin/bash mcp && su - mcp. Toutes les commandes suivantes s'exécutent sous cet utilisateur.

  3. Cloner et installer le serveur MCP

    Choisissez votre implémentation (voir la section « Serveurs MCP open source recommandés » ci-dessous). Pour @modelcontextprotocol/server-filesystem : npm install -g @modelcontextprotocol/server-filesystem. Testez en local : npx @modelcontextprotocol/server-filesystem /tmp/test.

  4. Créer un fichier de service systemd

    Créez /etc/systemd/system/mcp-server.service avec les directives User=mcp, ExecStart=/usr/bin/npx @modelcontextprotocol/server-filesystem /home/mcp/data, Restart=always et Environment=NODE_ENV=production. Activez et démarrez : systemctl enable --now mcp-server.

  5. Installer nginx

    Nginx joue le rôle de reverse proxy devant votre serveur MCP. apt install -y nginx. Créez un vhost dans /etc/nginx/sites-available/mcp avec un location / qui fait proxy_pass http://127.0.0.1:3000; et les en-têtes proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr;. Activez : ln -s /etc/nginx/sites-available/mcp /etc/nginx/sites-enabled/ && nginx -t && systemctl reload nginx.

  6. Obtenir un certificat TLS avec Certbot

    apt install -y certbot python3-certbot-nginx && certbot --nginx -d votre-domaine.com. Certbot modifie automatiquement votre vhost nginx pour rediriger HTTP vers HTTPS et installe le renouvellement automatique. Vérifiez le renouvellement : certbot renew --dry-run.

  7. Activer l'authentification Bearer

    Éditez votre vhost nginx pour exiger un token dans l'en-tête HTTP : if ($http_authorization != 'Bearer VOTRE_TOKEN_SECRET') { return 401; }. Générez un token fort avec openssl rand -hex 32. Conservez ce token : il sera renseigné dans la configuration de votre client IA.

  8. Configurer le pare-feu

    Fermez tous les ports sauf 22, 80 et 443 : ufw allow 22/tcp && ufw allow 80/tcp && ufw allow 443/tcp && ufw enable. Le port interne du serveur MCP (3000 par défaut) ne doit jamais être exposé directement.

  9. Tester l'endpoint avec curl

    curl -H 'Authorization: Bearer VOTRE_TOKEN_SECRET' https://votre-domaine.com/health. Vous devez obtenir un JSON de statut. Une réponse 401 indique un token incorrect ; une réponse 502 indique que le service systemd ne tourne pas (systemctl status mcp-server).

  10. Activer les journaux d'accès nginx

    Ajoutez dans votre vhost : access_log /var/log/nginx/mcp_access.log; error_log /var/log/nginx/mcp_error.log warn;. Ces journaux sont indispensables pour détecter des appels non autorisés ou des boucles de requêtes. Tournez-les avec logrotate pour éviter de saturer le disque.

Activez systématiquement les journaux d'accès nginx pour votre serveur

Un serveur MCP reçoit des appels machine-to-machine : sans journaux, vous ne détectez ni les tentatives d'accès non autorisées ni les bugs d'intégration. Configurez aussi log_format pour enregistrer l'en-tête Authorization tronqué (les 8 premiers caractères suffisent à identifier l'origine sans exposer le token complet).

Serveurs MCP open source recommandés

  • @modelcontextprotocol/server-filesystem — accès contrôlé au système de fichiers, lecture et écriture de fichiers locaux. Idéal pour donner à un agent accès à un répertoire de travail.
  • @modelcontextprotocol/server-git — clone, log, diff, commit via un dépôt local. Permet à un agent de lire l'historique ou de créer des branches.
  • @modelcontextprotocol/server-fetch — délègue les requêtes HTTP sortantes au serveur MCP, en contournant les restrictions réseau du client.
  • @modelcontextprotocol/server-postgres — connexion à une base PostgreSQL : requêtes SELECT, schéma, describe table. Ne pas exposer en écriture sans audit des permissions.
  • @modelcontextprotocol/server-playwright — pilotage d'un navigateur Chromium headless depuis l'agent : screenshot, clic, remplissage de formulaire.
  • mcp-server-sqlite (communauté) — alternative légère pour des bases SQLite locales, sans dépendance PostgreSQL.
  • mcp-obsidian (communauté) — accès à un vault Obsidian, utile pour des bases de connaissance en Markdown.

Sécuriser son serveur MCP en production

Un serveur MCP exposé sur Internet est une surface d'attaque. Quatre mesures sont non négociables avant de connecter un client IA à ce serveur en production.

Authentification par token Bearer. Renseignez un token unique par client dans l'en-tête Authorization. Révoquez immédiatement un token compromis et générez-en un nouveau avec openssl rand -hex 32. Ne réutilisez pas le même token pour plusieurs clients : vous perdrez la traçabilité.

Rate-limiting nginx. Ajoutez dans votre vhost : limit_req_zone $binary_remote_addr zone=mcp:10m rate=30r/m; limit_req zone=mcp burst=10 nodelay;. Cela limite à 30 requêtes par minute par IP, avec un burst de 10. Ajustez selon votre usage réel.

HTTPS obligatoire et HSTS. Après l'installation de Certbot, ajoutez dans le bloc server HTTPS : add_header Strict-Transport-Security "max-age=31536000" always;. Cela interdit aux clients de se connecter en HTTP clair même s'ils le tentent.

Rotation des tokens. Planifiez une rotation tous les 90 jours via cron ou votre outil de secrets management. Documentez chaque token actif et son client associé dans un registre privé (pas dans le dépôt de code).

Intégrer Claude Desktop et Cursor avec votre serveur MCP

Une fois le serveur en ligne et sécurisé, la connexion depuis un client IA prend moins de deux minutes.

Claude Desktop. Ouvrez ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) ou %APPDATA%\Claude\claude_desktop_config.json (Windows). Ajoutez une entrée dans la clé mcpServers :

{
  "mcpServers": {
    "mon-vps": {
      "url": "https://votre-domaine.com",
      "headers": {
        "Authorization": "Bearer VOTRE_TOKEN_SECRET"
      }
    }
  }
}

Redémarrez Claude Desktop. Le serveur apparaît dans la liste des outils disponibles.

Cursor. Dans les paramètres (Cursor > Settings > MCP), cliquez sur « Add server », choisissez le type HTTP, renseignez l'URL et ajoutez l'en-tête Authorization. Cursor injecte automatiquement les outils MCP dans le contexte de chaque conversation.

Vérification. Demandez à l'agent de lister les outils disponibles. Si le serveur filesystem est actif, la réponse doit inclure read_file, write_file et list_directory. L'absence de ces outils indique une erreur de configuration — vérifiez les journaux nginx en premier.

MCP vs API REST vs WebSocket pour agents IA

Faites défiler le tableau

CritèreMCPAPI RESTWebSocket
Modèle de communicationAppels d'outils typés, découverte dynamique du schémaRequête/réponse HTTP stateless, contrat OpenAPICanal bidirectionnel persistant, événements temps réel
Intégration native avec les LLMNative : Claude, Cursor, Cline, Continue lisent le schéma MCP directementNécessite un wrapper function-calling ou un pluginNécessite un adapter côté agent
Complexité de déploiementFaible : un processus Node/Python, un vhost nginxFaible à moyenne : framework REST standardMoyenne à élevée : gestion des connexions, reconnexion, état
Convient pourOutils locaux, accès fichiers, bases de données, automatisation agentIntégrations tiers, webhooks, microservices existantsNotifications push, collaboration temps réel, streaming
Versioning et évolutionSchéma déclaré dans le serveur, auto-découvert par le clientVersioning explicite dans l'URL ou l'en-têteProtocole applicatif à gérer manuellement

Dépannage : 4 erreurs fréquentes

1. MCP transport error: Failed to fetch
Ce message apparaît dans Claude Desktop ou Cursor lorsque le client ne parvient pas à joindre l'URL configurée. Causes fréquentes : le service systemd ne tourne pas (systemctl status mcp-server), nginx n'est pas rechargé après modification du vhost (nginx -t && systemctl reload nginx), ou un pare-feu bloque le port 443 (ufw status).

2. Connection refused on 127.0.0.1:3000
Le serveur MCP ne s'est pas lancé ou a planté au démarrage. Consultez les journaux systemd : journalctl -u mcp-server -n 50. Les causes courantes sont un fichier de configuration JSON invalide, une dépendance npm manquante (npm install à relancer dans le répertoire du projet) ou un port déjà occupé (ss -tlnp | grep 3000).

3. Request timed out after 30000ms
Le serveur répond mais trop lentement. Sur un outil filesystem, cela arrive si le répertoire parcouru est trop large ou si le disque est saturé (df -h). Pour un outil postgres, vérifiez que la requête ne fait pas de full scan sur une table sans index. Augmentez le timeout nginx en dernier recours : proxy_read_timeout 120s;.

4. 401 Unauthorized systématique
Le token envoyé par le client ne correspond pas à celui attendu par nginx. Vérifiez l'exactitude du token dans la configuration du client (espace parasite, guillemets inclus par erreur). Si vous venez de renouveler le token côté serveur, redémarrez nginx et rechargez la configuration du client IA.

Vers un environnement IA complet sur votre VPS

Un serveur MCP est un composant parmi d'autres d'un environnement IA auto-hébergé. Sur le même VPS, vous pouvez faire tourner un modèle local via Ollama, une base vectorielle comme Qdrant ou Chroma, et un orchestrateur comme n8n ou Flowise — chacun connecté au serveur MCP via des outils dédiés. ServOrbit propose des templates VPS prêts à l'emploi pour ces environnements, installables en quelques clics depuis la Marketplace, sur une infrastructure hébergée en datacenters européens avec IPv4 dédiée et accès root.

Votre serveur MCP mérite une infrastructure fiable

Déployez votre serveur MCP sur un VPS ServOrbit : ressources dédiées, IPv4 fixe, snapshots à la demande. À partir de 99 DH/mois.

Besoin d'aide ?

Parcourez notre centre d'aide et notre FAQ, ou contactez notre équipe — rappel, WhatsApp ou e-mail. Support en français, anglais et arabe.

Écrire sur WhatsApps'ouvre dans un nouvel onglet