k8s-mcp-server

Integrations

  • Provides a comprehensive interface for managing Kubernetes clusters, including resource discovery, listing, detailed inspection, log retrieval, metrics collection, event tracking, and resource creation through a standardized MCP protocol.

  • Supports creation of Kubernetes resources from YAML manifests, enabling deployment of complex resources through the createorUpdateResource tool.

Kubernetes MCP サーバー

標準化されたインターフェースを通じて Kubernetes クラスターと対話するためのツールを提供する Kubernetes Model Context Protocol (MCP) サーバー。

特徴

  • APIリソース検出:Kubernetesクラスターで利用可能なすべてのAPIリソースを取得します
  • リソース一覧: オプションの名前空間とラベルフィルタリングを使用して、あらゆるタイプのリソースを一覧表示します。
  • リソースの詳細: 特定の Kubernetes リソースに関する詳細情報を取得します
  • リソースの説明:Kubernetes リソースの包括的な説明を取得します
  • ポッドログ: 特定のポッドからログを取得する
  • ノードメトリック: 特定のノードのリソース使用率メトリックを取得します
  • ポッドメトリクス: 特定のポッドのCPUとメモリのメトリクスを取得します
  • イベント一覧: 名前空間内または特定のリソースのイベントを一覧表示します。
  • リソースの作成: マニフェストから新しい Kubernetes リソースを作成します。
  • 標準化されたインターフェース:MCPプロトコルを使用してツールの相互作用を一貫させます
  • 柔軟な構成: さまざまなKubernetesコンテキストとリソーススコープをサポート

前提条件

  • 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

local-only server

The server can only run on the client's local machine because it depends on local resources.

標準化されたインターフェースを通じて Kubernetes クラスターと対話するためのツールを提供する Kubernetes Model Context Protocol (MCP) サーバー。

  1. 特徴
    1. 前提条件
      1. インストール
        1. 使用法
          1. サーバーの起動
          2. 利用可能なツール
        2. 発達
          1. プロジェクト構造
          2. 新しいツールの追加
        3. 貢献
          1. ライセンス

            Related MCP Servers

            • -
              security
              A
              license
              -
              quality
              This project is intended as a both MCP server connecting to Kubernetes and a library to build more servers for any custom resources in Kubernetes.
              Last updated -
              267
              Go
              MIT License
              • Linux
              • Apple

            View all related MCP servers

            ID: 3a39wbpiwp