Site icon

Connecter Claude Code, Cursor ou Codex à une infra Linux avec MCP

Claude Code, Cursor et Codex connectés à une infrastructure Linux via MCP

MCP sert de passerelle contrôlée entre les agents IA et les outils d’infrastructure Linux.

Guide DevOps / IA

Claude Code MCPCursor MCPCodex MCPInfra Linux

MCP permet à un agent IA de dialoguer avec des outils internes sans copier-coller de logs, d’inventaires ou de sorties de supervision dans un chat. Claude Code, Cursor et Codex sont des exemples courants, mais l’approche vaut pour tout agent compatible MCP. Bien conçu, un serveur MCP devient une passerelle contrôlée entre l’assistant IA et l’infrastructure Linux : accès limités, commandes explicites, journalisation et révocation simple.

Objectif : connecter des agents IA à une infra Linux via MCP, sans leur donner un accès SSH libre ni exposer des secrets en clair. Claude Code, Cursor et Codex servent ici d’exemples concrets, mais la logique vaut pour tout client ou agent compatible MCP.

Position recommandée : commencer en local avec un serveur MCP read-only, transport stdio, outils allowlistés, puis envisager Streamable HTTP uniquement si plusieurs utilisateurs doivent y accéder.

Claude Code, Cursor et Codex connectés à une infrastructure Linux via MCP
MCP sert de passerelle contrôlée entre les agents IA et les outils d’infrastructure Linux.
1. MCP n’est pas un tunnel magique
Le protocole expose des outils, ressources et prompts. La sécurité dépend surtout de ce que le serveur autorise réellement.
2. Stdio d’abord
Pour un usage local avec Claude Code, Cursor ou Codex, stdio réduit la surface réseau et simplifie le rollback.
3. Pas de shell libre
Un serveur MCP infra doit exposer des actions précises : état d’un service, lecture d’un inventaire, requête monitoring, jamais “exécute cette commande”.

Ce que MCP apporte à Claude Code, Cursor et Codex

Le Model Context Protocol est un standard ouvert qui permet à une application IA de se connecter à des systèmes externes : outils, APIs, bases, fichiers ou workflows. Si tu veux d’abord le contexte général, l’article Model Context Protocol : guide complet pour Devs et Ops pose les bases ; ici, on se concentre sur l’usage concret côté infra Linux, avec Claude Code, Cursor et Codex comme exemples de clients MCP.

Dans un contexte DevOps, l’intérêt est concret : l’assistant peut lire un inventaire, vérifier l’état d’un service, interroger une métrique ou récupérer un runbook sans que l’utilisateur colle manuellement des sorties terminal dans la conversation.

Les docs officielles convergent sur les mêmes bases : MCP utilise JSON-RPC encodé en UTF-8, expose notamment des tools, des resources et des prompts, et s’appuie aujourd’hui surtout sur deux transports standards : stdio et Streamable HTTP. SSE existe encore dans certains clients, mais doit être considéré comme legacy pour les nouveaux déploiements.

Architecture recommandée pour une infra Linux

Le piège consiste à brancher un agent IA directement sur SSH ou sur une API d’administration trop permissive. La bonne approche est de placer MCP comme une couche de contrôle.

Important : l’article ne limite pas MCP à Claude Code, Cursor ou Codex. Ces outils sont utilisés comme exemples parce qu’ils sont bien documentés et recherchés, mais l’architecture s’applique à tous les agents IA compatibles MCP : IDE assistés, agents CLI, assistants internes, orchestrateurs ou interfaces métier.
1Claude Code
Cursor
Codex
2Serveur MCP
local
3Outils
allowlistés
4Infra Linux
monitoring
5Logs
audit
⚠️

Point de vigilance

Ne transforme pas MCP en passerelle SSH générique. Un agent IA doit appeler des outils bornés, pas décider librement de commandes shell à exécuter.

Pour une première version, je recommande :

  • transport stdio : le client lance le serveur localement, sans port réseau ouvert ;
  • outils read-only : inventaire, statut de services, lecture de runbooks, requêtes métriques ;
  • allowlist stricte : pas de commande arbitraire fournie par le modèle ;
  • logs sur stderr ou fichier : en stdio, stdout est réservé aux messages MCP ;
  • secrets hors code : variables d’environnement, fichier local protégé, ou intégration secret manager.

Mini-lab : serveur MCP read-only en Python

Ce mini-lab montre une base volontairement limitée : un serveur MCP expose deux outils, l’un pour lire un inventaire statique, l’autre pour vérifier l’état de quelques services autorisés sur la machine locale. Il ne donne jamais de shell libre à l’agent IA.

Pré-requis

✅ Pré-requis du mini-lab

  • Python 3.10 ou plus récent ;
  • uv installé ;
  • une machine Linux de test, pas une production client ;
  • un client compatible MCP : Claude Code, Cursor, Codex ou autre agent compatible.
mkdir mcp-infra-readonly
cd mcp-infra-readonly
uv init
uv add "mcp[cli]"

Créer le serveur MCP

Crée un fichier infra_mcp.py :

import json
import logging
import subprocess
from pathlib import Path

from mcp.server.fastmcp import FastMCP

logging.basicConfig(level=logging.INFO)
mcp = FastMCP("infra-readonly")

ALLOWED_SERVICES = {"ssh", "nginx", "docker", "cron"}
INVENTORY_FILE = Path(__file__).with_name("inventory.json")


@mcp.tool()
def get_inventory() -> str:
    """Retourne l'inventaire Linux de test au format JSON."""
    if not INVENTORY_FILE.exists():
        return json.dumps({"hosts": [], "warning": "inventory.json absent"})
    return INVENTORY_FILE.read_text(encoding="utf-8")


@mcp.tool()
def get_service_status(service: str) -> str:
    """Vérifie l'état read-only d'un service systemd autorisé.

    Args:
        service: Nom du service parmi ssh, nginx, docker ou cron.
    """
    if service not in ALLOWED_SERVICES:
        return json.dumps({
            "service": service,
            "allowed": False,
            "error": "service non autorisé"
        })

    result = subprocess.run(
        ["systemctl", "is-active", service],
        text=True,
        capture_output=True,
        timeout=5,
        check=False,
    )
    return json.dumps({
        "service": service,
        "allowed": True,
        "active_state": result.stdout.strip() or result.stderr.strip(),
        "returncode": result.returncode,
    })


if __name__ == "__main__":
    mcp.run(transport="stdio")

Ajoute un inventaire de test :

cat > inventory.json <<'JSON'
{
  "hosts": [
    {
      "name": "dev-linux",
      "role": "test",
      "os": "Debian",
      "environment": "sandbox",
      "criticality": "low"
    }
  ]
}
JSON

Test local sans client IA

Le serveur MCP parle sur stdin/stdout, donc le test manuel brut n’est pas pratique. Le test minimal consiste d’abord à vérifier qu’il démarre sans écrire de logs sur stdout :

uv run infra_mcp.py

Résultat attendu : le processus attend des messages MCP. Aucun texte applicatif ne doit s’afficher sur stdout. Arrête avec Ctrl+C.

Configuration Claude Code, Cursor et Codex

Claude Code, Cursor et Codex supportent MCP, mais leur configuration diffère. Ce ne sont pas les seuls : le même principe s’applique à tout agent IA ou IDE capable de consommer un serveur MCP. Les références utiles sont les docs officielles Claude Code MCP, Cursor MCP et Codex MCP. Garde le même serveur Python et adapte seulement la déclaration côté client.

Claude Code

Claude Code permet d’ajouter un serveur MCP local en stdio avec la CLI :

claude mcp add --transport stdio infra-readonly -- \
  uv --directory /chemin/absolu/mcp-infra-readonly run infra_mcp.py

Dans Claude Code, vérifie ensuite l’état via :

/mcp

Prompt de test :

Utilise le serveur MCP infra-readonly pour lire l'inventaire, puis vérifie l'état du service ssh. Ne tente aucune action corrective.

Cursor

Dans Cursor, crée une configuration projet .cursor/mcp.json :

{
  "mcpServers": {
    "infra-readonly": {
      "type": "stdio",
      "command": "uv",
      "args": [
        "--directory",
        "/chemin/absolu/mcp-infra-readonly",
        "run",
        "infra_mcp.py"
      ]
    }
  }
}

Cursor demande une approbation avant l’usage des outils MCP par défaut. C’est souhaitable pour une première intégration infra.

Codex

Codex configure les serveurs MCP dans ~/.codex/config.toml ou dans un .codex/config.toml projet si le projet est approuvé.

[mcp_servers.infra-readonly]
command = "uv"
args = [
  "--directory",
  "/chemin/absolu/mcp-infra-readonly",
  "run",
  "infra_mcp.py"
]
startup_timeout_sec = 10
tool_timeout_sec = 30
enabled = true
default_tools_approval_mode = "prompt"

Dans le TUI Codex, utilise /mcp pour vérifier que le serveur est actif.

💡

Cas AWS associé

Si ton sujet est surtout l’accès cloud, lis aussi AWS MCP : connecter vos outils IA à AWS sans exposer vos accès.

Sécurité, vérification et rollback

Un serveur MCP infra doit être traité comme une interface d’administration. Même read-only, il peut exposer des informations sensibles : noms de serveurs, topologie, versions, erreurs, chemins internes.

Checklist sécurité avant usage équipe

  • Pas d’outil “run_command” ou “exec shell” générique ;
  • allowlist de services, hôtes, fichiers ou requêtes ;
  • timeouts courts sur les appels système et réseau ;
  • sorties bornées pour éviter de renvoyer 50 000 lignes de logs ;
  • pas de secret dans les réponses MCP ;
  • validation des paramètres côté serveur, jamais seulement dans le prompt ;
  • journalisation des appels outil : nom, paramètres filtrés, durée, statut ;
  • approbation manuelle côté client pour les outils sensibles.

Bonne pratique

Garde stdio pour les premiers tests locaux. Passe à Streamable HTTP seulement quand tu as un besoin multi-utilisateur et une vraie couche d’authentification.

Et si on veut du HTTP ?

Streamable HTTP devient utile pour un serveur MCP partagé par plusieurs utilisateurs ou hébergé sur une plateforme interne. Dans ce cas, applique au minimum :

  • bind local ou exposition derrière reverse proxy authentifié ;
  • validation de l’en-tête Origin pour limiter les risques de DNS rebinding ;
  • authentification OAuth ou bearer token selon le client ;
  • TLS, logs d’accès, rate limiting ;
  • segmentation réseau : le serveur MCP ne doit voir que ce dont il a besoin.

Rollback

Le rollback doit rester trivial :

# Claude Code
claude mcp remove infra-readonly

# Cursor
rm .cursor/mcp.json

# Codex
# supprimer ou désactiver le bloc [mcp_servers.infra-readonly]

Côté serveur, supprime le dossier de test si aucun secret n’y a été stocké :

cd ..
rm -rf mcp-infra-readonly

Sur une infra réelle, préfère désactiver la configuration client avant de supprimer les fichiers serveur. Cela évite les erreurs de démarrage répétées côté IDE ou CLI.

Erreurs fréquentes

Logger sur stdout
En transport stdio, stdout transporte les messages MCP. Les logs doivent aller sur stderr ou dans un fichier.
Exposer SSH tel quel
Un wrapper SSH générique transforme l’agent IA en opérateur shell. Il faut exposer des actions bornées.
Confondre MCP et politique d’accès
MCP transporte les appels ; il ne remplace pas IAM, sudoers, RBAC, Vault ou les revues d’accès.
Commencer par un serveur distant
HTTP est pratique, mais ajoute auth, TLS, Origin, logs, reverse proxy et durcissement réseau.

FAQ

Claude Code MCP, Cursor MCP et Codex MCP utilisent-ils le même protocole ?
Oui. Ils s’appuient sur MCP, mais chaque client garde sa propre configuration, ses transports supportés, son système d’authentification et ses mécanismes d’approbation. Le même raisonnement vaut pour d’autres agents IA compatibles MCP.
Faut-il utiliser stdio ou Streamable HTTP ?
Pour un usage local ou un premier test, stdio est généralement le choix le plus simple : pas de port réseau ouvert et rollback rapide. Streamable HTTP devient pertinent pour un serveur partagé, à condition d’ajouter authentification, TLS, validation Origin et logs.
Peut-on donner un accès SSH à un agent IA via MCP ?
Techniquement oui, mais ce n’est pas recommandé sous forme de shell libre. Il vaut mieux exposer des outils limités : état d’un service, lecture d’un inventaire, requête Prometheus ou consultation d’un runbook.
MCP suffit-il à sécuriser une intégration IA/infrastructure ?
Non. MCP structure l’intégration, mais la sécurité dépend des permissions système, de la validation des entrées, de la gestion des secrets, des logs, des approbations côté client et du périmètre réseau.
Pourquoi garder Claude Code, Cursor et Codex dans le titre ?
Parce que ce sont des recherches concrètes avec volume SEO et une intention claire. Dans le contenu, ils servent d’exemples : l’architecture reste applicable à tout agent ou IDE compatible MCP.

Besoin de connecter des agents IA à vos outils DevOps sans ouvrir toute l’infra ?

Linux-Man peut cadrer une architecture MCP read-only, auditer les risques d’accès et construire un premier serveur interne adapté à vos runbooks, métriques ou inventaires.

Demander un cadrage MCP infra →

Quitter la version mobile