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)

分析: Metrics API からの CPU/メモリを、履歴 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 — Pod が実行中であることを確認

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"

API サーバーからのこの 403 Forbidden 応答は、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, 接続エラー, Permission denied

    • Liveness/Readiness プローブの失敗

  4. ポッドごとに ヘルススコア を計算します (低いほど悪い)。

  5. エラー頻度カウントとともに、最も悪いものから順にポッドを返します。

  6. 結果を SQLite に永続化し、履歴分析を可能にします。

  1. Deployment 仕様からポッドセレクターを解決します。

  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. ruffk8s_mcp_server.py を Python エラーとスタイルについて lint します。


環境変数

変数

デフォルト

説明

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