mcp-k8s-context-server
MCP K8s Context Server
Ein FastMCP-Server, der Kubernetes als eine Reihe von schreibgeschützten Tools für LLMs bereitstellt, plus eine Analyseschicht für Pod-Health-Analyse und Ressourcentrend-Verfolgung.
Funktionen
Tool | Beschreibung |
| Listet Pods in einem Namespace mit Phase und Neustartinformationen auf |
| Detaillierter Pod-Status, Bedingungen und Containerzustände |
| Zeigt die letzten Pod-Logs an |
| Vollständige Deployment-Spezifikation als JSON |
| Analytik: Scannt Logs, erkennt Fehlermuster, bewertet fehlerhafte Pods |
| Analytik: CPU/Speicher aus der Metrics-API mit historischer SQLite-Persistenz |
Related MCP server: Kubernetes Read Only MCP Server
Projektstruktur
mcp-k8s-context-server/
├── k8s_mcp_server.py # FastMCP server (all tools)
├── requirements.txt # Python dependencies
├── Dockerfile # Container image definition
├── k8s/
│ ├── serviceaccount.yaml # ServiceAccount + Namespace
│ ├── role.yaml # Least-privilege ClusterRole (read-only)
│ ├── rolebinding.yaml # ClusterRoleBinding
│ └── deployment.yaml # Deployment + Service
└── .github/
└── workflows/
└── ci.yml # Build + kubeconform validationLokale Entwicklung
# Create and activate a virtual environment
python -m venv .venv && source .venv/bin/activate
# Install dependencies
pip install -r requirements.txt
# Run with local kubeconfig (falls back automatically from in-cluster config)
python k8s_mcp_server.pyIn-Cluster-Bereitstellung (minikube)
Voraussetzungen
# Install minikube, kubectl, docker
minikube version # >= 1.32
kubectl version # >= 1.28
docker version # >= 24Schritt 1 — minikube starten
minikube start --cpus=2 --memory=4096Schritt 2 — metrics-server aktivieren (erforderlich für get_resource_trends)
minikube addons enable metrics-serverSchritt 3 — Image erstellen und in minikube laden
# Build locally
docker build -t mcp-k8s-server:latest .
# Load into minikube's image registry (no registry push needed)
minikube image load mcp-k8s-server:latest
# Verify the image is available
minikube image ls | grep mcp-k8s-serverSchritt 4 — Kubernetes-Manifeste anwenden
# Apply in dependency order: SA → Role → Binding → Deployment
kubectl apply -f k8s/serviceaccount.yaml
kubectl apply -f k8s/role.yaml
kubectl apply -f k8s/rolebinding.yaml
kubectl apply -f k8s/deployment.yamlSchritt 5 — Überprüfen, ob der Pod läuft
kubectl get pods -n mcp-system
# Expected:
# NAME READY STATUS RESTARTS AGE
# mcp-k8s-server-xxxxxxxxx-xxxxx 1/1 Running 0 30s
kubectl logs -n mcp-system deploy/mcp-k8s-server
# Expected: "Using in-cluster Kubernetes config (ServiceAccount token)"Schritt 6 — Schreibgeschützte Tools im Cluster testen
# Port-forward to access the server from your laptop
kubectl port-forward -n mcp-system svc/mcp-k8s-server 8000:8000 &
# Create a test pod to query
kubectl run nginx-test --image=nginx --restart=Never
# Test list_pods
curl -s http://localhost:8000/tools/list_pods \
-H 'Content-Type: application/json' \
-d '{"namespace":"default"}' | jq .
# Test get_pod_logs
curl -s http://localhost:8000/tools/get_pod_logs \
-H 'Content-Type: application/json' \
-d '{"pod_name":"nginx-test","namespace":"default","tail_lines":20}' | jq .
# Test analyze_pod_health
curl -s http://localhost:8000/tools/analyze_pod_health \
-H 'Content-Type: application/json' \
-d '{"namespace":"default","hours":1}' | jq .Schritt 7 — Nachweisen, dass RBAC Schreiboperationen blockiert
# Exec into the pod and try to delete another pod using the SA token
MCP_POD=$(kubectl get pod -n mcp-system -l app=mcp-k8s-server -o jsonpath='{.items[0].metadata.name}')
kubectl exec -n mcp-system $MCP_POD -- \
kubectl delete pod nginx-test --namespace=default \
--token=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token) \
--server=https://kubernetes.default.svc \
--certificate-authority=/var/run/secrets/kubernetes.io/serviceaccount/ca.crtDas ServiceAccount hat keine Schreibverben. Um dies zu bestätigen:
Error from server (Forbidden): pods "nginx-test" is forbidden:
User "system:serviceaccount:mcp-system:mcp-server-sa" cannot delete
resource "pods" in API group "" in the namespace "default"Erwartete Ausgabe:
Error from server (Forbidden): pods is forbidden: User "system:serviceaccount:mcp-server:mcp-server-sa" cannot create resource "pods" in API group "" in the namespace "mcp-server"Diese 403 Forbidden-Antwort des API-Servers ist der lebende Beweis, dass die RBAC-Eingrenzung funktioniert – das ServiceAccount kann lesen, aber keine Ressource ändern.
RBAC-Design mit minimalen Rechten
Philosophie
Gewähre nur das Nötigste, verweigere explizit alles andere.
Der MCP-Server ist ein Observability-Tool – er liest den Cluster-Zustand, um Betreibern und KI-Systemen zu helfen, zu verstehen, was passiert. Er hat keinen legitimen Grund, Ressourcen zu erstellen, zu ändern oder zu löschen.
Was gewährt wird
Ressource | Verben | Grund |
|
|
|
|
|
|
|
|
|
|
|
|
Was explizit NICHT gewährt wird
Verb | Grund für den Ausschluss |
| Kein Tool erstellt eine Ressource |
| Kein Tool ändert eine Ressource |
| Katastrophal bei Missbrauch; kein Lesetool benötigt es |
| Verhindert Privilegieneskalation |
Das bedeutet, dass ein kompromittierter MCP-Server keine Pods löschen, Deployments auf Null herunterskalieren, Secrets ändern oder laufende Workloads beeinträchtigen kann. Der Schadensradius eines kompromittierten MCP-Servers ist auf das Lesen von Informationen beschränkt – nicht auf deren Störung.
Analyseschicht
analyze_pod_health
Listet alle Pods im Namespace auf.
Ruft bis zu 500 Logzeilen pro Pod ab.
Führt Musterabgleich gegen einen Katalog bekannter Fehlerindikatoren durch:
OOMKilled,CrashLoopBackOffPython/Java-Ausnahmen (Traceback, RuntimeError usw.)
Panic, SIGSEGV/SIGKILL, Verbindungsfehler, Permission denied
Fehler bei Liveness-/Readiness-Probes
Berechnet einen Health-Score pro Pod (niedriger = schlechter).
Gibt Pods sortiert nach schlechtestem zuerst mit Fehlerhäufigkeiten zurück.
Speichert Ergebnisse in SQLite für historische Analysen.
get_resource_trends
Löst den Pod-Selektor aus der Deployment-Spezifikation auf.
Liest Ressourcen-Limits aus den Pod-Spezifikationen.
Fragt die Kubernetes Metrics API (
metrics.k8s.io/v1beta1) nach aktueller CPU/Speicher ab.Berechnet: Durchschnitt, Spitze und % des Limits für CPU und Speicher.
Speichert jeden Snapshot in
mcp_analytics.db, sodass sich Trends über Aufrufe hinweg aufbauen.
Erfordert das
metrics-server-Addon:minikube addons enable metrics-server
CI / Continuous Integration
Der GitHub Actions-Workflow (.github/workflows/ci.yml) wird bei jedem Push und PR ausgeführt:
Docker Build – erstellt das Image ohne es zu pushen (validiert Dockerfile + Abhängigkeiten).
kubeconform – validiert alle
k8s/*.yaml-Manifeste gegen das Kubernetes 1.29-Schema im strikten Modus.ruff – lintet
k8s_mcp_server.pyauf Python-Fehler und Stil.
Umgebungsvariablen
Variable | Standard | Beschreibung |
|
| Pfad zur SQLite-Analyse-Datenbank |
Lizenz
MIT
This server cannot be deployed
Maintenance
Related MCP Connectors
Provides read access to your GKE and Kubernetes resources.
Fail-closed policy guardrails for AI agents running kubectl, terraform, helm, and argocd.
The Google GKE MCP server is a managed Model Context Protocol server that provides AI applications with tools to manage Google Kubernetes Engine (GKE) clusters and Kubernetes resources. It exposes a structured, discoverable interface that allows AI agents to interact with GKE and Kubernetes APIs, enabling them to inspect cluster configurations, retrieve Kubernetes resource YAMLs, monitor operations like cluster upgrades, diagnose issues, and optimize costs—all without needing to parse text output or use complex kubectl commands.
Read and write KukGit repositories, files, issues and pull requests from an AI assistant.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceProvides read-only access to Kubernetes clusters for AI assistants.24MIT
- AlicenseAqualityCmaintenanceEnables safe, read-only interaction with Kubernetes clusters, allowing users to list resources and fetch logs without any create/update/delete operations.116Apache 2.0
- FlicenseNot gradedqualityBmaintenanceProvides read-only Kubernetes cluster operations via MCP, enabling LLMs to query nodes, pods, logs, events, and watch real-time status for troubleshooting.2-
- AlicenseNot gradedqualityCmaintenanceLets AI agents inspect Kubernetes clusters in plain English, exposing read-only tools for pods, deployments, services, events, and logs, with mock and real backend support.MIT