/ Annuaire / Playground / Kubernetes MCP Server
● Communauté containers 🔑 Nécessite votre clé

Kubernetes MCP Server

par containers · containers/kubernetes-mcp-server

kubectl piloté par Claude — utilise votre kubeconfig + RBAC, supporte tout cluster (vanilla k8s, OpenShift, EKS, GKE, AKS, k3s).

kubernetes-mcp-server (org containers) est un binaire Go unique qui communique avec n'importe quel serveur API Kubernetes en utilisant votre kubeconfig existant. Il expose les verbes standard (list/get/apply/delete/log/exec) comme outils MCP tout en respectant votre RBAC — le principe du moindre privilège fonctionne donc toujours. Supporte également les extensions OpenShift.

Pourquoi l'utiliser

Fonctionnalités clés

Démo en direct

Aperçu en pratique

kubernetes-mcp-containers.replay ▶ prêt
0/0

Installer

Choisissez votre client

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "kubernetes-mcp-containers": {
      "command": "npx",
      "args": [
        "-y",
        "kubernetes-mcp-server@latest"
      ],
      "env": {
        "KUBECONFIG": "${HOME}/.kube/config"
      }
    }
  }
}

Ouvrez Claude Desktop → Settings → Developer → Edit Config. Redémarrez après avoir enregistré.

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "kubernetes-mcp-containers": {
      "command": "npx",
      "args": [
        "-y",
        "kubernetes-mcp-server@latest"
      ],
      "env": {
        "KUBECONFIG": "${HOME}/.kube/config"
      }
    }
  }
}

Cursor utilise le même schéma mcpServers que Claude Desktop. La config projet l'emporte sur la globale.

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "kubernetes-mcp-containers": {
      "command": "npx",
      "args": [
        "-y",
        "kubernetes-mcp-server@latest"
      ],
      "env": {
        "KUBECONFIG": "${HOME}/.kube/config"
      }
    }
  }
}

Cliquez sur l'icône MCP Servers dans la barre latérale Cline, puis "Edit Configuration".

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "kubernetes-mcp-containers": {
      "command": "npx",
      "args": [
        "-y",
        "kubernetes-mcp-server@latest"
      ],
      "env": {
        "KUBECONFIG": "${HOME}/.kube/config"
      }
    }
  }
}

Même format que Claude Desktop. Redémarrez Windsurf pour appliquer.

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "kubernetes-mcp-containers",
      "command": "npx",
      "args": [
        "-y",
        "kubernetes-mcp-server@latest"
      ]
    }
  ]
}

Continue utilise un tableau d'objets serveur plutôt qu'une map.

~/.config/zed/settings.json
{
  "context_servers": {
    "kubernetes-mcp-containers": {
      "command": {
        "path": "npx",
        "args": [
          "-y",
          "kubernetes-mcp-server@latest"
        ]
      }
    }
  }
}

Ajoutez dans context_servers. Zed recharge à chaud à la sauvegarde.

claude mcp add kubernetes-mcp-containers -- npx -y kubernetes-mcp-server@latest

Une seule ligne. Vérifiez avec claude mcp list. Supprimez avec claude mcp remove.

Cas d'usage

Usages concrets : Kubernetes MCP Server

Trier un incident de production sur Kubernetes

👤 SREs / ingénieurs plateforme ⏱ ~10 min intermediate

Quand l'utiliser : Une application se comporte mal en prod et vous devez regarder les pods, les événements, les logs sans alt-tab.

Prérequis
  • kubeconfig avec accès au cluster — Standard aws eks update-kubeconfig ou équivalent
Déroulement
  1. Trouver les pods en mauvais état
    k8s : dans le contexte prod-us-east, namespace checkout, liste les pods qui ne sont pas en état Running. Inclus la raison + le nombre de redémarrages.✓ Copié
    → Pods affichés avec état, raison, redémarrages
  2. Récupérer les événements
    Récupère les événements dans ce namespace depuis les 30 dernières minutes, triés par heure.✓ Copié
    → Liste d'événements ; OOMKilled ou ImagePullBackOff visible si présent
  3. Récupérer les logs
    Pour le pod au redémarrage le plus récent, récupère les logs du conteneur précédent (200 dernières lignes).✓ Copié
    → Stack trace / cause visible
  4. Diagnostiquer
    Synthèse : quelle est la cause racine probable et que doit-on faire ? Soyez précis.✓ Copié
    → Prochaine étape concrète (ex. augmenter la limite mémoire + déployer)

Résultat : Triage en moins de 5 minutes avec noms de pods + lignes de logs cités.

Pièges
  • Les logs d'un conteneur précédent manquant ne sont pas disponibles — Si le pod n'a redémarré qu'une fois, vérifiez les logs du conteneur actuel et du précédent seulement s'il a crashé
  • Mauvais contexte — Spécifiez toujours le contexte par appel ; ne vous fiez pas à la dérive du current-context
Combiner avec : sentry · github

Rédiger un Deployment en utilisant le contexte du cluster

👤 Développeurs d'applications écrivant des manifestes ⏱ ~20 min intermediate

Quand l'utiliser : Vous avez besoin d'un nouveau Deployment et voulez qu'il corresponde aux conventions du cluster.

Déroulement
  1. Inspecter l'existant
    k8s : récupère un Deployment existant en exemple dans le namespace apps. Je veux correspondre à ses labels, security context, ressources.✓ Copié
    → Retourne un YAML de Deployment représentatif
  2. Rédiger le nouveau
    Écris maintenant un nouveau Deployment pour image-resizer:1.2.0, 2 répliques, port 8080, en respectant les conventions.✓ Copié
    → YAML respectant les conventions du cluster
  3. Dry-run apply
    Apply avec --dry-run=server. Signale toute erreur de validation.✓ Copié
    → Validation côté serveur réussit ; pas de dérive ApplyConfiguration

Résultat : Manifeste correspondant aux idiomes du cluster du premier coup.

Pièges
  • Oublier les labels PSA — Lisez d'abord les labels pod-security du namespace
Combiner avec : filesystem · github

Auditer les releases Helm à travers les namespaces

👤 Équipe plateforme ⏱ ~25 min intermediate

Quand l'utiliser : Trimestriel : trouver les versions de charts obsolètes dans toute la flotte.

Déroulement
  1. Lister toutes les releases
    k8s/Helm : liste toutes les releases dans tous les namespaces. Inclus chart + version + appVersion.✓ Copié
    → Tableau complet des releases
  2. Mettre en évidence les obsolètes
    Pour chacune, comparez avec la dernière version du chart (vous pouvez rechercher). Signalez les releases avec plus de 2 versions mineures de retard.✓ Copié
    → Ensemble signalé avec version actuelle vs dernière

Résultat : Backlog de mises à jour avec ordre de priorité.

Pièges
  • Restes Helm 2 mélangés — Filtrez sur les releases v3 ; le MCP ne gère que Helm 3

Combinaisons

Associez-le à d'autres MCPs pour un effet X10

kubernetes-mcp-containers + sentry

Corréler les erreurs avec les redémarrages de pods

Sentry : pic d'erreurs à 14h00. k8s : des redémarrages de pods dans le ns checkout à ce moment ?✓ Copié
kubernetes-mcp-containers + github

Ouvrir une PR avec le correctif du manifeste

k8s : identifie la mauvaise limite mémoire. GitHub : ouvre une PR l'augmentant dans helm/values.yaml.✓ Copié
kubernetes-mcp-containers + mcp-grafana

Recouper l'état k8s avec Prometheus

k8s : le pod redémarre. Grafana : récupère l'historique d'utilisation mémoire de ce pod.✓ Copié

Outils

Ce que ce MCP expose

OutilEntréesQuand appelerCoût
list_resources context?, namespace?, kind: str, label_selector? Découverte 1 appel API
get_resource context?, namespace?, kind, name Inspecter un élément spécifique 1 appel
apply_yaml context?, yaml: str, dry_run?: bool Créer ou mettre à jour 1 appel
delete_resource context?, namespace?, kind, name Supprimer 1 appel
get_logs context?, namespace, pod, container?, previous?, tail? Inspecter le runtime 1 appel
exec context?, namespace, pod, container?, command: str[] Diagnostiquer à l'intérieur d'un conteneur 1 appel
list_events context?, namespace, since? Chercher OOMKilled/ImagePullBackOff 1 appel
list_helm_releases context?, namespace? Audit Helm 1 appel

Coût et limites

Coût d'exécution

Quota d'API
Lié au QPS du kube-apiserver (défaut ~50)
Tokens par appel
200–8000 (logs/yaml peuvent être volumineux)
Monétaire
OSS gratuit ; facturation du cluster applicable
Astuce
Utilisez --tail sur les logs agressivement ; ne faites jamais get pods -o yaml -A sur de gros clusters

Sécurité

Permissions, secrets, portée

Portées minimales : ce que votre utilisateur kubeconfig a — RBAC appliqué côté serveur
Stockage des identifiants : Fichier kubeconfig ; à renouveler via votre fournisseur cloud
Sortie de données : Uniquement votre endpoint kube API
Ne jamais accorder : cluster-admin pour un kubeconfig utilisé avec un LLM

Dépannage

Erreurs courantes et correctifs

Unauthorized / 403

Le RBAC refuse le verbe ; vérifiez kubectl auth can-i pour cet utilisateur

Vérifier : kubectl auth can-i get pods -n checkout
Connexion refusée

VPN non actif, ou le contexte pointe vers le mauvais endpoint ; vérifiez kubectl cluster-info

Apply rejeté : erreur de validation

Lancez d'abord avec dry_run=server ; faites remonter l'erreur exacte

Logs trop volumineux

Utilisez le paramètre tail ; le défaut est le log entier

Alternatives

Kubernetes MCP Server vs autres

AlternativeQuand l'utiliserCompromis
kubectl-mcp (autres forks)Vous préférez un binaire différentMoins activement maintenu
Lens / k9sVous voulez une interface interactive, pas un LLMPas de couche d'automatisation
Argo CD MCPVous êtes en GitOps uniquementIndirect ; déploie via Git, pas l'API directe

Plus

Ressources

📖 Lire le README officiel sur GitHub

🐙 Voir les issues ouvertes

🔍 Parcourir les 400+ serveurs MCP et Skills