/ ディレクトリ / プレイグラウンド / Kubernetes MCP Server
● コミュニティ containers 🔑 自分のキーが必要

Kubernetes MCP Server

作者 containers · containers/kubernetes-mcp-server

Claudeが操作するkubectl — あなたのkubeconfig+RBACを使用し、任意のクラスター(バニラk8s・OpenShift・EKS・GKE・AKS・k3s)をサポート。

kubernetes-mcp-server(containers org)は、既存のkubeconfigを使って任意のKubernetes APIサーバーと通信する単一のGoバイナリです。標準の動詞(list/get/apply/delete/log/exec)をMCPツールとして公開しながら、RBACを尊重するため最小権限の原則が引き続き機能します。OpenShiftの拡張機能もサポートしています。

なぜ使うのか

主な機能

ライブデモ

実際の動作

kubernetes-mcp-containers.replay ▶ 準備完了
0/0

インストール

クライアントを選択

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "kubernetes-mcp-containers": {
      "command": "npx",
      "args": [
        "-y",
        "kubernetes-mcp-server@latest"
      ],
      "env": {
        "KUBECONFIG": "${HOME}/.kube/config"
      }
    }
  }
}

Claude Desktop → Settings → Developer → Edit Config を開く。保存後、アプリを再起動。

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "kubernetes-mcp-containers": {
      "command": "npx",
      "args": [
        "-y",
        "kubernetes-mcp-server@latest"
      ],
      "env": {
        "KUBECONFIG": "${HOME}/.kube/config"
      }
    }
  }
}

Cursor は Claude Desktop と同じ mcpServers スキーマを使用。プロジェクト設定はグローバルより優先。

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "kubernetes-mcp-containers": {
      "command": "npx",
      "args": [
        "-y",
        "kubernetes-mcp-server@latest"
      ],
      "env": {
        "KUBECONFIG": "${HOME}/.kube/config"
      }
    }
  }
}

Cline サイドバーの MCP Servers アイコンをクリックし、"Edit Configuration" を選択。

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "kubernetes-mcp-containers": {
      "command": "npx",
      "args": [
        "-y",
        "kubernetes-mcp-server@latest"
      ],
      "env": {
        "KUBECONFIG": "${HOME}/.kube/config"
      }
    }
  }
}

Claude Desktop と同じ形式。Windsurf を再起動して反映。

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "kubernetes-mcp-containers",
      "command": "npx",
      "args": [
        "-y",
        "kubernetes-mcp-server@latest"
      ]
    }
  ]
}

Continue はマップではなくサーバーオブジェクトの配列を使用。

~/.config/zed/settings.json
{
  "context_servers": {
    "kubernetes-mcp-containers": {
      "command": {
        "path": "npx",
        "args": [
          "-y",
          "kubernetes-mcp-server@latest"
        ]
      }
    }
  }
}

context_servers に追加。保存時に Zed がホットリロード。

claude mcp add kubernetes-mcp-containers -- npx -y kubernetes-mcp-server@latest

ワンライナー。claude mcp list で確認、claude mcp remove で削除。

ユースケース

実用的な使い方: Kubernetes MCP Server

Kubernetes上の本番インシデントをトリアージする

👤 SRE/プラットフォームエンジニア ⏱ ~10 min intermediate

使うタイミング: 本番でアプリが不調;ウィンドウを切り替えずにPod・イベント・ログを確認したい場合。

前提条件
  • クラスターへのアクセス権を持つkubeconfig — 標準の aws eks update-kubeconfig または相当コマンド
フロー
  1. 異常なPodを探す
    k8s: in context prod-us-east, namespace checkout, list pods not in Running state. Include reason + restart count.✓ コピーしました
    → 状態・理由・再起動回数付きのPod一覧
  2. イベントを取得
    Get events in that namespace from the last 30 minutes, sorted by time.✓ コピーしました
    → イベント一覧;OOMKilledやImagePullBackOffが存在すれば確認できる
  3. ログを取得
    For the pod with the most recent restart, tail the previous container's logs (last 200 lines).✓ コピーしました
    → スタックトレース/原因が確認できる
  4. 診断
    Synthesize: what's the likely root cause and what should we do? Be specific.✓ コピーしました
    → 具体的な次のステップ(例:メモリ制限の引き上げ+ロールアウト)

結果: Pod名+ログ行を引用した5分以内のトリアージ。

注意点
  • 前のコンテナのログが利用できない — Podが1回しか再起動していない場合は、現在のコンテナのログを確認し、クラッシュした場合のみprevious containerを確認する
  • コンテキストが間違っている — 呼び出しごとにコンテキストを明示する;current-contextのドリフトに依存しない
組み合わせ: sentry · github

クラスターのコンテキストを使ってDeploymentを書く

👤 マニフェストを書くアプリ開発者 ⏱ ~20 min intermediate

使うタイミング: 新しいDeploymentが必要でクラスターの慣習に合わせたい場合。

フロー
  1. 既存のDeploymentを調査
    k8s: get a sample existing Deployment in apps namespace. I want to match its labels, security context, resources.✓ コピーしました
    → 代表的なDeployment YAMLが返される
  2. 新しいDeploymentを作成
    Now write a new Deployment for image-resizer:1.2.0, 2 replicas, port 8080, matching the conventions.✓ コピーしました
    → クラスターの慣習に従ったYAML
  3. ドライランでapply
    Apply with --dry-run=server. Report any validation errors.✓ コピーしました
    → サーバーサイドのバリデーションが通過;ApplyConfigurationのドリフトなし

結果: 初回でクラスターの慣用句に合ったマニフェスト。

注意点
  • PSAラベルを忘れる — まずnamespaceのpod-securityラベルを読む
組み合わせ: filesystem · github

ネームスペース横断でHelmリリースを監査する

👤 プラットフォームチーム ⏱ ~25 min intermediate

使うタイミング: 四半期ごと:フリート全体で古いチャートバージョンを見つける場合。

フロー
  1. 全リリースを一覧
    k8s/Helm: list every release in every namespace. Include chart + version + appVersion.✓ コピーしました
    → 完全なリリーステーブル
  2. 古くなったものをハイライト
    For each, compare against the latest chart version (you can search). Flag releases >2 minor versions behind.✓ コピーしました
    → 現在版と最新版のフラグ付きセット

結果: 優先順位付きのアップグレードバックログ。

注意点
  • Helm 2の残骸が混在している — v3リリースにフィルタする;MCPはHelm 3のみ処理

組み合わせ

他のMCPと組み合わせて10倍の力を

kubernetes-mcp-containers + sentry

エラーとPodの再起動を相関させる

Sentry: error spike at 14:00. k8s: any pod restarts in checkout ns at that time?✓ コピーしました
kubernetes-mcp-containers + github

マニフェストの修正をPRで提出する

k8s: identify the bad memory limit. GitHub: open a PR raising it in helm/values.yaml.✓ コピーしました
kubernetes-mcp-containers + mcp-grafana

k8sの状態とPrometheusをクロスリファレンスする

k8s: pod is restarting. Grafana: pull memory usage history for that pod.✓ コピーしました

ツール

このMCPが提供する機能

ツール入力呼び出すタイミングコスト
list_resources context?, namespace?, kind: str, label_selector? ディスカバリ 1 API call
get_resource context?, namespace?, kind, name 特定のアイテムの調査 1 call
apply_yaml context?, yaml: str, dry_run?: bool 作成または更新 1 call
delete_resource context?, namespace?, kind, name 削除 1 call
get_logs context?, namespace, pod, container?, previous?, tail? ランタイムの調査 1 call
exec context?, namespace, pod, container?, command: str[] コンテナ内からの診断 1 call
list_events context?, namespace, since? OOMKilled/ImagePullBackOffを探す 1 call
list_helm_releases context?, namespace? Helm監査 1 call

コストと制限

運用コスト

APIクォータ
kube-apiserverのQPSに依存(デフォルト約50)
呼び出しあたりのトークン
200〜8000(ログ/yamlは大きくなる場合あり)
金額
OSS無料;クラスターの費用は適用される
ヒント
logsには積極的に--tailを使う;巨大なクラスターで get pods -o yaml -A は絶対に実行しないこと

セキュリティ

権限、シークレット、影響範囲

最小スコープ: whatever your kubeconfig user has — RBAC enforced server-side
認証情報の保管: kubeconfigファイル;クラウドプロバイダー経由でローテーション
データ送信先: 自分のkube APIエンドポイントのみ
絶対に付与しない: cluster-admin to a kubeconfig used with an LLM

トラブルシューティング

よくあるエラーと対処法

Unauthorized / 403

RBACがその動詞を拒否している;そのユーザーで kubectl auth can-i を確認

確認: kubectl auth can-i get pods -n checkout
Connection refused

VPNが未接続、またはコンテキストが間違ったエンドポイントを指している;kubectl cluster-info を確認

Apply rejected: validation error

まずdry_run=serverで実行;正確なエラーを表示させる

Logs too large

tailパラメーターを使用;デフォルトは全ログ

代替案

Kubernetes MCP Server 他との比較

代替案代わりに使う場面トレードオフ
kubectl-mcp (other forks)別のバイナリを好む場合メンテナンスが少ない
Lens / k9sLLMではなくインタラクティブUIが欲しい場合自動化層なし
Argo CD MCPGitOps専用の場合間接的;直接APIではなくGit経由でデプロイ

その他

リソース

📖 GitHub の公式 README を読む

🐙 オープンな issue を見る

🔍 400以上のMCPサーバーとSkillsを見る