Skip to main content
Glama
Krishna1704M

mcp-k8s-context-server

by Krishna1704M

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

list_pods(namespace)

Listet Pods in einem Namespace mit Phase und Neustartinformationen auf

get_pod_status(pod_name, namespace)

Detaillierter Pod-Status, Bedingungen und Containerzustände

get_pod_logs(pod_name, namespace, tail_lines)

Zeigt die letzten Pod-Logs an

get_deployment_manifest(deployment_name, namespace)

Vollständige Deployment-Spezifikation als JSON

analyze_pod_health(namespace, hours)

Analytik: Scannt Logs, erkennt Fehlermuster, bewertet fehlerhafte Pods

get_resource_trends(deployment_name, namespace)

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 validation

Lokale 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.py

In-Cluster-Bereitstellung (minikube)

Voraussetzungen

# Install minikube, kubectl, docker
minikube version   # >= 1.32
kubectl version    # >= 1.28
docker version     # >= 24

Schritt 1 — minikube starten

minikube start --cpus=2 --memory=4096

Schritt 2 — metrics-server aktivieren (erforderlich für get_resource_trends)

minikube addons enable metrics-server

Schritt 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-server

Schritt 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.yaml

Schritt 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.crt

Das 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

pods

get, list, watch

list_pods, get_pod_status, analyze_pod_health

pods/log

get, list, watch

get_pod_logs, analyze_pod_health

deployments

get, list, watch

get_deployment_manifest, get_resource_trends

metrics.k8s.io/pods

get, list

get_resource_trends (Metrics-API)

Was explizit NICHT gewährt wird

Verb

Grund für den Ausschluss

create

Kein Tool erstellt eine Ressource

update / patch

Kein Tool ändert eine Ressource

delete / deletecollection

Katastrophal bei Missbrauch; kein Lesetool benötigt es

escalate / bind

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

  1. Listet alle Pods im Namespace auf.

  2. Ruft bis zu 500 Logzeilen pro Pod ab.

  3. Führt Musterabgleich gegen einen Katalog bekannter Fehlerindikatoren durch:

    • OOMKilled, CrashLoopBackOff

    • Python/Java-Ausnahmen (Traceback, RuntimeError usw.)

    • Panic, SIGSEGV/SIGKILL, Verbindungsfehler, Permission denied

    • Fehler bei Liveness-/Readiness-Probes

  4. Berechnet einen Health-Score pro Pod (niedriger = schlechter).

  5. Gibt Pods sortiert nach schlechtestem zuerst mit Fehlerhäufigkeiten zurück.

  6. Speichert Ergebnisse in SQLite für historische Analysen.

  1. Löst den Pod-Selektor aus der Deployment-Spezifikation auf.

  2. Liest Ressourcen-Limits aus den Pod-Spezifikationen.

  3. Fragt die Kubernetes Metrics API (metrics.k8s.io/v1beta1) nach aktueller CPU/Speicher ab.

  4. Berechnet: Durchschnitt, Spitze und % des Limits für CPU und Speicher.

  5. 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:

  1. Docker Build – erstellt das Image ohne es zu pushen (validiert Dockerfile + Abhängigkeiten).

  2. kubeconform – validiert alle k8s/*.yaml-Manifeste gegen das Kubernetes 1.29-Schema im strikten Modus.

  3. ruff – lintet k8s_mcp_server.py auf Python-Fehler und Stil.


Umgebungsvariablen

Variable

Standard

Beschreibung

MCP_DB_PATH

mcp_analytics.db

Pfad zur SQLite-Analyse-Datenbank


Lizenz

MIT

F
license - not found
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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