Le premier serveur MCP que j'ai déployé chez un client, c'était pour lui faire gagner du temps sur du reporting. J'ai d'abord mis le serveur sur la même machine qu'un docker de test, port ouvert, token en dur dans un fichier. Ça a fonctionné 20 minutes, puis j'ai eu un sentiment de gêne en regardant le code. Depuis, voici la procédure propre que j'applique. 30 minutes, un VPS, et un serveur MCP correctement sécurisé.
Avant de commencer
Un serveur qui fait tourner les connecteurs MCP (VPS ou machine locale), avec Docker installé et Node.js 18+.
Pour les tests, un client MCP : Claude Desktop, Cursor, ou Copilot.
Le docker-compose de base
version: '3.8'
services:
mcp-server:
image: mcp/server-everything:latest
restart: always
ports:
- "127.0.0.1:3000:3000"
environment:
- MCP_AUTH_TOKEN=votre_token_securise
volumes:
- mcp-data:/data
volumes:
mcp-data:
Le 127.0.0.1:3000:3000 n'est pas un détail. Le port reste interne, et c'est Nginx qui expose en HTTPS.
La configuration de sécurité qui fait la différence
Je la détaille pour deux raisons : d'abord parce que les serveurs MCP exposent des outils métier à une IA, et ensuite parce que c'est la partie que les tutos oublient.
HTTPS : Let's Encrypt + Nginx en reverse proxy. Sans ça, les tokens transitent en clair.
Authentification : OAuth 2.1 pour les connexions externes, ou token à usage unique pour les clients internes. Un token très long, généré par openssl rand -hex 32.
Restriction IP : n'autorisez que les IP de votre environnement (ou les comptes de vos équipes).
Journalisation : chaque appel enregistré avec l'utilisateur, la date, l'outil appelé. C'est non négociable si un jour vous devez comprendre ce que l'IA a fait.
Connexion à Claude Desktop ou Cursor
Claude Desktop :
{
"mcpServers": {
"mon-entreprise": {
"url": "https://mcp.mondomaine.fr/sse",
"headers": {
"Authorization": "Bearer votre_token"
}
}
}
}
Cursor : la même structure dans les paramètres MCP. L'IA se connecte et apparaissent des outils. Plus besoin d'utiliser les actions du menu.
Créer un outil métier simple : le CA mensuel
L'exemple classique, avec FastMCP en Python et PostgreSQL :
from fastmcp import FastMCP
import psycopg2
mcp = FastMCP("mon-erp")
@mcp.tool()
def chiffre_affaires_mois() -> str:
conn = psycopg2.connect("dbname=erp user=admin")
cur = conn.cursor()
cur.execute("SELECT SUM(montant) FROM factures WHERE date > DATE_TRUNC('month', NOW())")
return f"CA du mois : {cur.fetchone()[0]} €"
if __name__ == "__main__":
mcp.run()
L'IA peut maintenant répondre "quel est mon CA ce mois-ci ?" en allant chercher la réponse elle-même.
Les pièges que j'ai rencontrés
Le serveur qui expose trop. Mon premier projet exposait les données de tous les clients. Mauvais. Il faut définir des permissions par outil et par utilisateur, avant la mise en production.
Les logiciels qui ne surveillent rien. Sans monitorage, un serveur MCP qui plante passe inaperçu. Configurez des logs et une alerte.
La mauvaise idée du tout-en-un. J'ai vu un serveur MCP branché au cycle de production. Il faut un serveur de test, des étapes de validation, et typiquement un environnement de production isolé derrière un proxy.
Oublier la rotation des tokens. Les tokens ont une date de rotation, sinon le serveur devient une backdoor. Ajoutez une règle de rotation trimestrielle.
Ce que ça représente en temps et en budget
Une trentaine de minutes pour une première mise en place technique. Comptez 2 à 5 jours pour un déploiement complet avec des connecteurs métier, tests, formation des équipes et documentation.
Si vous préférez qu'on le fasse plutôt que de passer vos week-ends sur les logs, notre offre MCP Server couvre le déploiement, la sécurité, les connecteurs métier et le suivi, depuis Lille.

