Skip to main content
Glama
Krishna1704M

mcp-k8s-context-server

by Krishna1704M

MCP K8s Context Server

FastMCP-сервер, который предоставляет Kubernetes в виде набора инструментов только для чтения, доступных для LLM, а также слой аналитики для анализа состояния подов и отслеживания трендов ресурсов.


Возможности

Инструмент

Описание

list_pods(namespace)

Список подов в пространстве имен с информацией о фазе и перезапусках

get_pod_status(pod_name, namespace)

Детальный статус пода, условия и состояния контейнеров

get_pod_logs(pod_name, namespace, tail_lines)

Хвост последних логов пода

get_deployment_manifest(deployment_name, namespace)

Полная спецификация развертывания в формате JSON

analyze_pod_health(namespace, hours)

Аналитика: сканирование логов, обнаружение шаблонов ошибок, ранжирование нездоровых подов

get_resource_trends(deployment_name, namespace)

Аналитика: CPU/память из Metrics API с постоянным хранением исторических данных в SQLite


Related MCP server: Kube MCP

Структура проекта

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

Локальная разработка

# 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

Развертывание в кластере (minikube)

Предварительные требования

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

Шаг 1 — Запуск minikube

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

Шаг 2 — Включение metrics-server (требуется для get_resource_trends)

minikube addons enable metrics-server

Шаг 3 — Сборка и загрузка образа в minikube

# 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

Шаг 4 — Применение манифестов Kubernetes

# 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

Шаг 5 — Проверка работы пода

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)"

Шаг 6 — Тестирование инструментов только для чтения в кластере

# 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 .

Шаг 7 — Доказательство блокировки операций записи RBAC

У ServiceAccount нет глаголов записи. Чтобы подтвердить это:

# 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

Ожидаемый вывод:

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"

Этот ответ 403 Forbidden от сервера API является прямым доказательством того, что область действия RBAC работает — ServiceAccount может читать, но не может изменять ни один ресурс.


Дизайн минимальных привилегий RBAC

Философия

Предоставляйте только то, что необходимо, явно отказывайте во всем остальном.

Сервер MCP — это инструмент наблюдения — он читает состояние кластера, чтобы помочь операторам и AI-системам понять, что происходит. У него нет законных оснований создавать, изменять или удалять какие-либо ресурсы.

Что предоставлено

Ресурс

Глаголы

Причина

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)

Что явно НЕ предоставлено

Глагол

Причина исключения

create

Ни один инструмент не создает никаких ресурсов

update / patch

Ни один инструмент не изменяет никаких ресурсов

delete / deletecollection

Катастрофично при неправильном использовании; ни одному инструменту чтения это не нужно

escalate / bind

Предотвращает повышение привилегий

Это означает, что скомпрометированный сервер MCP не может удалять поды, масштабировать развертывания до нуля, изменять секреты или влиять на любую выполняемую рабочую нагрузку. Радиус поражения скомпрометированного сервера MCP ограничен чтением информации, а не ее нарушением.


Слой аналитики

analyze_pod_health

  1. Выводит список всех подов в пространстве имен.

  2. Извлекает до 500 строк логов на под.

  3. Сопоставляет с шаблонами по каталогу известных индикаторов сбоев:

    • OOMKilled, CrashLoopBackOff

    • Исключения Python/Java (Traceback, RuntimeError и т.д.)

    • Panic, SIGSEGV/SIGKILL, Ошибки соединения, Отказано в доступе

    • Сбои проверок Liveness/Readiness

  4. Вычисляет оценку здоровья для каждого пода (ниже = хуже).

  5. Возвращает поды, отсортированные от худших к лучшим, с подсчетом частоты ошибок.

  6. Сохраняет результаты в SQLite для исторического анализа.

  1. Разрешает селектор подов из спецификации развертывания.

  2. Считывает лимиты ресурсов из спецификаций подов.

  3. Запрашивает Kubernetes Metrics API (metrics.k8s.io/v1beta1) для получения текущих данных CPU/памяти.

  4. Вычисляет: среднее, пиковое значение и процент от лимита как для CPU, так и для памяти.

  5. Сохраняет каждый снимок в mcp_analytics.db, чтобы тренды накапливались между вызовами.

Требуется аддон metrics-server: minikube addons enable metrics-server


CI / Непрерывная интеграция

Рабочий процесс GitHub Actions (.github/workflows/ci.yml) запускается при каждом пуше и PR:

  1. Docker Build — собирает образ без отправки (проверяет Dockerfile + зависимости).

  2. kubeconform — проверяет все манифесты k8s/*.yaml на соответствие схеме Kubernetes 1.29 в строгом режиме.

  3. ruff — проверяет k8s_mcp_server.py на ошибки Python и стиль.


Переменные окружения

Переменная

По умолчанию

Описание

MCP_DB_PATH

mcp_analytics.db

Путь к базе данных SQLite аналитики


Лицензия

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