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: Kube MCP
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 installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityBmaintenanceProvides read-only access to Kubernetes clusters for AI assistants.23MIT
- AlicenseAqualityCmaintenanceEnables AI assistants to interact with and manage Kubernetes clusters, supporting operations on pods, deployments, services, configmaps, secrets, namespaces, metrics, and events with built-in safety features for destructive actions.9141MIT
- AlicenseAqualityAmaintenanceEnables safe, read-only interaction with Kubernetes clusters, allowing users to list resources and fetch logs without any create/update/delete operations.116Apache 2.0
- Flicense-qualityCmaintenanceExposes Kubernetes cluster management tools to LLMs, enabling querying pods, deployments, logs, metrics, and managing port forwards via natural language.1
Related MCP Connectors
Read-only bank access for your AI agent. Connects Claude, ChatGPT, Cursor, Gemini, Codex.
Read-only access to Auralogs production logs: search logs, inspect errors, review AI analyses.
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Krishna1704M/mcp-k8s-context-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server