OffshoreVps
Tutoriels6 oct. 20266 min de lecturePar l’équipe OffshoreVps

Comment héberger un serveur MCP sur un VPS

Faites tourner un serveur Model Context Protocol distant : local ou distant, un exemple en Python, un service systemd, HTTPS avec un jeton et une liste de contrôle de sécurité.

Le Model Context Protocol (MCP) permet aux assistants IA d’appeler des outils et de lire des données depuis des serveurs que vous faites tourner. De nombreux serveurs MCP tournent en local, mais un serveur distant sur un VPS est utile quand plusieurs personnes, outils ou agents doivent partager les mêmes capacités. Ce guide couvre les choix de configuration et une base sûre.

Fenêtre de terminal sur un VPS montrant les commandes utilisées pour héberger un serveur MCP, à commencer par « sudo adduser --disabled-password --gecos "" mcp »
Le type de commandes que vous exécuterez sur votre serveur dans ce guide.

MCP local ou distant ?

  • Local (stdio). Le client démarre le serveur comme processus enfant sur votre propre machine. Simple et privé, mais ne fonctionne que sur cette machine.
  • Distant (HTTP). Le serveur tourne sur un VPS et les clients se connectent en HTTPS. C’est ce que vous hébergez. Cela convient aux outils partagés, aux tâches de longue durée et aux outils qui ont besoin d’une IP fixe.

Consultez la spécification MCP actuelle pour le transport pris en charge par votre client. Streamable HTTP est le choix habituel pour les serveurs distants. Les tailles pour les charges de travail typiques se trouvent sur notre page d’hébergement de serveurs MCP.

Étape 1 : préparer le serveur

Utilisez un serveur Ubuntu LTS neuf et les étapes de comment sécuriser un nouveau VPS. Créez un utilisateur pour le service.

sudo adduser --disabled-password --gecos "" mcp

Étape 2 : lancer le serveur

Utilisez le SDK officiel ou un serveur existant. Cet exemple Python utilise l’assistant FastMCP du SDK MCP :

sudo -iu mcp
python3 -m venv ~/venv && . ~/venv/bin/activate
pip install "mcp[cli]"
# server.py
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("demo", host="127.0.0.1", port=8000)

@mcp.tool()
def add(a: int, b: int) -> int:
    """Add two numbers."""
    return a + b

if __name__ == "__main__":
    mcp.run(transport="streamable-http")
Les étapes de ce guide dans l’ordre : 1. MCP local ou distant ? ; 2. préparer le serveur ; 3. lancer le serveur ; 4. l’exécuter comme un service ; 5. HTTPS et authentification ; 6. Liste de contrôle de sécurité
Les étapes de ce guide, dans l’ordre.

Étape 3 : l’exécuter comme un service

[Unit]
Description=MCP server
After=network-online.target

[Service]
User=mcp
WorkingDirectory=/home/mcp
ExecStart=/home/mcp/venv/bin/python server.py
Restart=always

[Install]
WantedBy=multi-user.target

Enregistrez-le sous /etc/systemd/system/mcp.service et exécutez sudo systemctl enable --now mcp.

Étape 4 : HTTPS et authentification

Un serveur MCP peut exécuter du code et lire des données ; ne le laissez donc jamais ouvert. Placez-le derrière un reverse proxy avec TLS et exigez un jeton :

mcp.example.com {
  @noauth not header Authorization "Bearer YOUR_LONG_RANDOM_TOKEN"
  respond @noauth 401
  reverse_proxy 127.0.0.1:8000
}

Pour une configuration de production, utilisez OAuth comme décrit dans la spécification d’autorisation MCP plutôt qu’un jeton partagé unique.

Liste de contrôle de sécurité

  • Donnez aux outils le moins d’accès possible. Ne donnez pas d’accès shell à un outil, sauf si c’est justement le but.
  • Gardez les secrets dans des fichiers d’environnement avec chmod 600.
  • Journalisez les appels d’outils pour voir ce qui s’est passé.
  • Gardez le port lié à 127.0.0.1 et n’exposez que le proxy.