Skip to main content
Glama

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

インストール

  1. リポジトリをクローンします。

git clone https://github.com/reza-gholizade/k8s-mcp-server.git cd k8s-mcp-server
  1. 依存関係をインストールします:

go mod download
  1. サーバーを構築します。

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

新しいツールの追加

新しいツールを追加するには:

  1. handlers/handlers.goに新しいツール定義関数 (例: MyNewTool() mcp.Tool ) を作成します。

  2. ツールハンドラー関数(例: MyNewHandler(client *k8s.Client) func(...) )をhandlers/handlers.goに実装します。

  3. s.AddTool()を使用して、 main.goにツールとそのハンドラーを登録します。

貢献

貢献を歓迎します!このプロジェクトへの貢献方法の詳細については、 CONTRIBUTING.mdをご覧ください。

ライセンス

gholizade.net@gmail.com

このプロジェクトは MIT ライセンスに基づいてライセンスされています - 詳細についてはLICENSEファイルを参照してください。

-
security - not tested
A
license - permissive license
-
quality - not tested

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/reza-gholizade/k8s-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server