MCP Kubernetes Server について
MCP Kubernetes Serverは、AIアシスタントやMCPクライアント向けに、Kubernetesクラスターの確認、操作、監視、分析機能を提供します。リソース管理ツールに加え、一般的な分析用プロンプトも備えています。
主な機能
- 01クラスターリソースの確認
- 02リソースの作成・更新・削除・スケール
- 03クラスターとリソースの状態監視
- 04ログ・イベント・メトリクスの確認
- 05リソース分析と推奨事項の提示
- 06Kubernetes分析用プロンプト
活用シーン
- 01Pod、Deployment、Serviceの詳細確認
- 02Deploymentのスケールや再起動
- 03クラスターの健全性とノード状態の確認
- 04リソースのログやイベントの調査
MCP 対応
Kubernetesリソースを`k8s://` URIとツールで公開し、MCPクライアントからの照会、監視、操作を可能にするMCPサーバーです。一般的なKubernetes分析用プロンプトも提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP Kubernetes サーバー
Kubernetes クラスターに関する情報の取得、操作の実行、ステータスの監視、リソースの分析を行うインターフェースを提供する、Kubernetes 管理用 MCP(Model Context Protocol)サーバーです。
機能
- クラスター情報:Kubernetes リソース(ポッド、デプロイメント、サービスなど)の詳細情報を取得します
- クラスター操作:Kubernetes リソースの操作(作成、更新、削除、スケーリングなど)を実行します
- 監視:Kubernetes クラスターとリソースのステータスを監視します
- 分析:Kubernetes リソースを分析し、推奨事項を提示します
- プロンプト:一般的な Kubernetes 分析タスク向けのプロンプトが含まれています
使用例
例1

例2

例3

インストール
ソースから
git clone https://github.com/yourusername/mcp-k8s-server.git
cd mcp-k8s-server
pip install -e .
pip を使用する
pip install mcp-k8s-server
使用方法
直接実行する
# Run with default settings
mcp-k8s-server
# Specify transport type
mcp-k8s-server --transport sse
# Specify port for SSE transport
mcp-k8s-server --port 8000
# Specify config file
mcp-k8s-server --config /path/to/config.yaml
Docker を使用する
Dockerfile では、コマンドと引数のパターンを使用してサーバーを実行します。
CMD ["python", "-m", "mcp_k8s_server.main", \
"--transport", "sse", \
"--port", "8000", \
"--host", "0.0.0.0", \
"--config", "/etc/rancher/rke2/rke2.yaml", \
"--debug"]
Docker コンテナをビルドして実行するには、次のようにします。
# Build the Docker image
docker build -t mcp-k8s-server .
# Run the Docker container
docker run -p 8000:8000 -v ~/.kube:/home/mcp/.kube mcp-k8s-server
または、付属のスクリプトを使用できます。
# Make the script executable
chmod +x docker-run.sh
# Run the script
./docker-run.sh
このスクリプトは Docker イメージをビルドし、必要なボリュームマウントを設定してコンテナを実行します。
Kubernetes へのデプロイ
# Apply the Kubernetes manifests
kubectl apply -f k8s/
Kubernetes にデプロイすると、サーバーはクラスター内設定を自動的に使用します。k8s/ ディレクトリ内の Kubernetes マニフェストでは、次のように設定されています。
- 適切な権限を持つ ServiceAccount を作成する
- サービスアカウントのトークンと証明書をマウントする
- コマンドライン引数を使ってサーバーを設定する
マニフェストを編集して、デプロイメントをカスタマイズできます。
# k8s/deployment.yaml (example)
apiVersion: apps/v1
kind: Deployment
metadata:
name: mcp-k8s-server
# ...
spec:
# ...
template:
# ...
spec:
serviceAccountName: mcp-k8s-server # Uses the ServiceAccount defined in rbac.yaml
containers:
- name: mcp-k8s-server
# ...
command:
- python
- -m
- mcp_k8s_server.main
args:
- --transport
- sse
- --port
- "8000"
- --host
- "0.0.0.0"
- --config
- "/app/config/config.yaml"
- --debug
この方法では、サーバーの設定にコマンドと引数のパターンを使用します。これは Kubernetes で一般的なパターンです。コマンドでは実行する実行可能ファイルを指定し、引数ではその実行可能ファイルに渡すコマンドライン引数を指定します。
KUBERNETES_SERVICE_HOST と KUBERNETES_SERVICE_PORT の環境変数は、ポッドの作成時に Kubernetes によって自動的に設定されるため、デプロイメントマニフェストで指定する必要はありません。
設定
サーバーは、YAML 設定ファイル、環境変数、またはコマンドライン引数を使用して設定できます。
クラスター内設定
Kubernetes クラスター内で実行する場合、サーバーはクラスター内設定を自動的に使用します。これは次の設定に依存します。
-
環境変数:
KUBERNETES_SERVICE_HOST:Kubernetes によって設定される、Kubernetes API サーバーの IP アドレスKUBERNETES_SERVICE_PORT:Kubernetes によって設定される、Kubernetes API サーバーのポート
-
サービスアカウントのトークンと証明書:
/var/run/secrets/kubernetes.io/serviceaccount/token:サービスアカウントのトークン/var/run/secrets/kubernetes.io/serviceaccount/ca.crt:CA 証明書
これらは、ポッド内で実行する際に Kubernetes によって自動的に設定されます。Kubernetes クラスター外でサーバーを実行しながらクラスター内設定をテストする場合は、これらの環境変数を手動で設定し、トークンと証明書のファイルを作成する必要があります。
クラスター外で実行する場合、サーバーは kubeconfig ファイルを使用します。
In-Cluster Configuration をローカルでテストする
Kubernetes クラスターの外部で、in-cluster configuration をローカルにテストする場合は、必要な環境変数とファイルを手動で設定できます。
-
環境変数を設定します。
export KUBERNETES_SERVICE_HOST=<kubernetes-api-server-ip> export KUBERNETES_SERVICE_PORT=<kubernetes-api-server-port>これらの値は、次のコマンドを実行すると取得できます。
kubectl cluster-info -
サービスアカウントトークンと証明書のディレクトリを作成します。
mkdir -p /var/run/secrets/kubernetes.io/serviceaccount/ -
Kubernetes 証明書をコピーし、トークンを作成します。
# Copy the CA certificate kubectl config view --raw -o jsonpath='{.clusters[0].cluster.certificate-authority-data}' | base64 -d > /var/run/secrets/kubernetes.io/serviceaccount/ca.crt # Create a token file (you can use a service account token or generate a temporary one) echo "your-service-account-token" > /var/run/secrets/kubernetes.io/serviceaccount/token
この方法では、/var/run/secrets/ にファイルを作成するために root 権限が必要です。代わりに、テスト用に別のパスを使用するようコードを変更することもできます。
設定ファイル
# config.yaml
server:
name: mcp-k8s-server
transport: both # stdio, sse, or both
port: 8000
host: 0.0.0.0
kubernetes:
config_path: ~/.kube/config
context: default
namespace: default
MCP リソース
サーバーは、Model Context Protocol(MCP)を通じて Kubernetes リソースへのアクセスを提供します。リソースは、k8s:// プロトコルに従った URI パターンで識別されます。
リソース URI パターン
リソースは階層構造で整理されています。
k8s://resources- 利用可能なすべての Kubernetes リソースの一覧k8s://namespaces- すべての Kubernetes 名前空間の一覧k8s:///{namespace}- 名前空間内のすべてのリソースの概要
名前空間スコープのリソース
-
k8s://{namespace}/{resource_type}- 名前空間内の特定の種類のリソース一覧- 例:
k8s://default/pods- 'default' 名前空間内のすべての Pod
- 例:
-
k8s://{namespace}/{resource_type}/{name}- 特定の名前空間スコープのリソースを取得- 例:
k8s://default/deployments/nginx- 'default' 名前空間内の 'nginx' デプロイメント
- 例:
サポートされているリソースの種類:
podsdeploymentsservicespersistentvolumeclaimsevents
クラスタースコープのリソース
-
k8s:///{resource_type}- 特定の種類のクラスタースコープリソース一覧- 例:
k8s:///nodes- クラスター内のすべてのノード
- 例:
-
k8s:///{resource_type}/{name}- 特定のクラスタースコープリソースを取得- 例:
k8s:///nodes/worker-1- 'worker-1' ノード
- 例:
サポートされているリソースの種類:
nodespersistentvolumesnamespaces
MCP ツール
サーバーは、次の MCP ツールを提供します。
リソース情報
get_resources:特定の種類のリソース一覧を取得get_resource:特定のリソースの詳細情報を取得get_resource_status:特定のリソースのステータスを取得get_resource_events:特定のリソースに関連するイベントを取得get_resource_logs:特定のリソースのログを取得
リソース操作
create_resource:新しいリソースを作成update_resource:既存のリソースを更新delete_resource:リソースを削除scale_deployment:デプロイメントをスケーリングrestart_deployment:デプロイメントを再起動execute_command:Pod 内でコマンドを実行
モニタリング
get_cluster_status:クラスター全体のステータスを取得get_node_status:クラスター内のノードのステータスを取得get_resource_metrics:特定のリソースのメトリクスを取得get_cluster_metrics:クラスター全体のメトリクスを取得check_cluster_health:クラスターの包括的なヘルスチェックを実行し、詳細な概要を取得
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。