Kubernetes MCP サーバー
標準化されたインターフェースを通じて Kubernetes クラスターと対話するためのツールを提供する Kubernetes Model Context Protocol (MCP) サーバー。
特徴
APIリソース検出:Kubernetesクラスターで利用可能なすべてのAPIリソースを取得します
リソース一覧: オプションの名前空間とラベルフィルタリングを使用して、あらゆるタイプのリソースを一覧表示します。
リソースの詳細: 特定の Kubernetes リソースに関する詳細情報を取得します
リソースの説明:Kubernetes リソースの包括的な説明を取得します
ポッドログ: 特定のポッドからログを取得する
ノードメトリック: 特定のノードのリソース使用率メトリックを取得します
ポッドメトリクス: 特定のポッドのCPUとメモリのメトリクスを取得します
イベント一覧: 名前空間内または特定のリソースのイベントを一覧表示します。
リソースの作成: マニフェストから新しい Kubernetes リソースを作成します。
標準化されたインターフェース:MCPプロトコルを使用してツールの相互作用を一貫させます
柔軟な構成: さまざまなKubernetesコンテキストとリソーススコープをサポート
Related MCP server: MCP Server
前提条件
Go 1.20以降
Kubernetes クラスターへのアクセス
適切なクラスターアクセスが設定された
kubectl
インストール
リポジトリをクローンします。
git clone https://github.com/reza-gholizade/k8s-mcp-server.git
cd k8s-mcp-server依存関係をインストールします:
go mod downloadサーバーを構築します。
go build -o k8s-mcp-server main.go使用法
サーバーの起動
サーバーを実行します。
./k8s-mcp-serverサーバーが起動し、stdin/stdout で MCP プロトコル メッセージをリッスンします。
利用可能なツール
1. getAPIResources
Kubernetes クラスター内で利用可能なすべての API リソースを取得します。
パラメータ:
includeNamespaceScoped(boolean): 名前空間スコープのリソースを含めるかどうか (デフォルトは true)includeClusterScoped(ブール値): クラスタースコープのリソースを含めるかどうか (デフォルトは true)
例:
{
"jsonrpc": "2.0",
"id": 1,
"method": "getAPIResources",
"params": {
"arguments": {
"includeNamespaceScoped": true,
"includeClusterScoped": true
}
}
}2. listResources
特定のリソース タイプのインスタンスをすべて一覧表示します。
パラメータ:
Kind(文字列、必須): リストするリソースの種類(例:「Pod」、「Deployment」)namespace(文字列): リソースを一覧表示する名前空間 (省略した場合は、名前空間付きリソースのすべての名前空間を一覧表示します)labelSelector(文字列): ラベルセレクターでリソースをフィルタリングする
例:
{
"jsonrpc": "2.0",
"id": 1,
"method": "listResources",
"params": {
"arguments": {
"Kind": "Pod",
"namespace": "default",
"labelSelector": "app=nginx"
}
}
}3. getResource
特定のリソースに関する詳細情報を取得します。
パラメータ:
kind(文字列、必須): 取得するリソースの種類 (例: "Pod"、"Deployment")name(文字列、必須): 取得するリソースの名前namespace(文字列): リソースの名前空間 (名前空間付きリソースの場合)
例:
{
"jsonrpc": "2.0",
"id": 1,
"method": "getResource",
"params": {
"arguments": {
"kind": "Pod",
"name": "nginx-pod",
"namespace": "default"
}
}
}4. describeResource
kubectl describeと同様に、指定された種類と名前に基づいて Kubernetes クラスター内のリソースについて説明します。
パラメータ:
Kind(文字列、必須): 記述するリソースの種類(例:「ポッド」、「デプロイメント」)name(文字列、必須): 記述するリソースの名前namespace(文字列): リソースの名前空間 (名前空間付きリソースの場合)
例:
{
"jsonrpc": "2.0",
"id": 1,
"method": "describeResource",
"params": {
"arguments": {
"Kind": "Pod",
"name": "nginx-pod",
"namespace": "default"
}
}
}5. getPodsLogs
Kubernetes クラスター内の特定のポッドのログを取得します。
パラメータ:
Name(文字列、必須): ログを取得するポッドの名前。namespace(文字列): ポッドの名前空間 (名前空間リソースの場合)。
例:
{
"jsonrpc": "2.0",
"id": 1,
"method": "getPodsLogs",
"params": {
"arguments": {
"Name": "my-app-pod-12345",
"namespace": "production"
}
}
}6. getNodeMetrics
Kubernetes クラスター内の特定のノードのリソース使用状況メトリックを取得します。
パラメータ:
Name(文字列、必須): メトリックを取得するノードの名前。
例:
{
"jsonrpc": "2.0",
"id": 1,
"method": "getNodeMetrics",
"params": {
"arguments": {
"Name": "worker-node-1"
}
}
}7. getPodMetrics
Kubernetes クラスター内の特定のポッドの CPU およびメモリのメトリックを取得します。
パラメータ:
namespace(文字列、必須): ポッドの名前空間。podName(文字列、必須): ポッドの名前。
例:
{
"jsonrpc": "2.0",
"id": 1,
"method": "getPodMetrics",
"params": {
"arguments": {
"namespace": "default",
"podName": "my-app-pod-67890"
}
}
}8. getEvents
Kubernetes クラスター内の特定の名前空間またはリソースのイベントを取得します。
パラメータ:
namespace(文字列): イベントを取得する名前空間。省略した場合、すべての名前空間のイベントが考慮されます(RBACで許可されている場合)。resourceName(文字列): イベントをフィルタリングする特定のリソースの名前 (例: Pod 名)。resourceKind(文字列):resourceNameが指定されている場合の特定のリソースの種類 (例: "Pod")。
例 (名前空間イベント):
{
"jsonrpc": "2.0",
"id": 1,
"method": "getEvents",
"params": {
"arguments": {
"namespace": "default"
}
}
}例 (リソース イベント):
{
"jsonrpc": "2.0",
"id": 1,
"method": "getEvents",
"params": {
"arguments": {
"namespace": "production",
"resourceName": "my-app-pod-12345",
"resourceKind": "Pod"
}
}
}9. createorUpdateResource
YAML または JSON マニフェストから Kubernetes クラスターに新しいリソースを作成します。
パラメータ:
manifest(文字列、必須): 作成するリソースの YAML または JSON マニフェスト。namespace(文字列、オプション): リソースを作成する名前空間。マニフェストに名前空間が含まれている場合、このパラメータは省略するか、上書きすることができます(動作はサーバーの実装によって異なる場合があります)。
例:
{
"jsonrpc": "2.0",
"id": 1,
"method": "createResource",
"params": {
"arguments": {
"namespace": "default",
"manifest": "apiVersion: v1\nkind: Pod\nmetadata:\n name: my-new-pod\nspec:\n containers:\n - name: nginx\n image: nginx:latest"
}
}
}発達
プロジェクト構造
.
├── handlers/ # Tool handlers
│ └── handlers.go # Implementation of MCP tools
├── pkg/ # Internal packages
│ └── k8s/ # Kubernetes client implementation
├── main.go # Server entry point
├── go.mod # Go module definition
└── go.sum # Go module checksums新しいツールの追加
新しいツールを追加するには:
handlers/handlers.goに新しいツール定義関数 (例:MyNewTool() mcp.Tool) を作成します。ツールハンドラー関数(例:
MyNewHandler(client *k8s.Client) func(...))をhandlers/handlers.goに実装します。s.AddTool()を使用して、main.goにツールとそのハンドラーを登録します。
貢献
貢献を歓迎します!このプロジェクトへの貢献方法の詳細については、 CONTRIBUTING.mdをご覧ください。
ライセンス
このプロジェクトは MIT ライセンスに基づいてライセンスされています - 詳細についてはLICENSEファイルを参照してください。