mcpField
M
mcp-kubernetes-server

mcp-kubernetes-server

ローカル
pypi.orgクラウド・インフラ2052 週間前に更新

mcp-kubernetes-server について

mcp-kubernetes-server は、AI アシスタントから Kubernetes クラスターを操作するための MCP サーバーです。自然言語の要求を kubectl や Kubernetes API の操作に変換し、構造化された結果を返します。AI アシスタントを通じてクラスターを管理・調査したいユーザーに向けたプロジェクトです。

主な機能

  1. 01Kubernetes リソースと Pod ログの取得
  2. 02kubectl と helm コマンドの実行
  3. 03フラグによる書き込み・削除操作の無効化
  4. 04stdio・SSE・streamable-http のトランスポート対応
  5. 05スケーリング、ロールアウト、ノード保守用のツール

活用シーン

  1. 01自然言語によるクラスターと Pod の状態確認
  2. 02ログとイベントを使った障害Podの調査
  3. 03権限を制御した上でのデプロイとスケーリング

MCP 対応

本プロジェクトは MCP サーバーであり、Claude、Cursor、GitHub Copilot などの MCP 対応クライアントに、読み取り・書き込み・削除に分類された Kubernetes ツール群を提供します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"kubernetes-server": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/feiskyer/mcp-kubernetes-server"
]
}
}
}
起動コマンドdocker run -i --rm ghcr.io/feiskyer/mcp-kubernetes-server

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
ocighcr.io/feiskyer/mcp-kubernetes-server

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

README(原文)English

プロジェクトの README より

この README の日本語訳はまだありません。以下は英語の原文です。日本語の紹介はページ上部をご覧ください。

mcp-kubernetes-server

PyPI version License Build Status

The mcp-kubernetes-server is a server implementing the Model Context Protocol (MCP) to enable AI assistants (such as Claude, Cursor, and GitHub Copilot) to interact with Kubernetes clusters. It acts as a bridge, translating natural language requests from these assistants into Kubernetes operations and returning the results.

It allows AI assistants to:

  • Query Kubernetes resources
  • Execute kubectl commands
  • Manage Kubernetes clusters through natural language interactions
  • Diagnose and interpret the states of Kubernetes resources

How It Works

The mcp-kubernetes-server acts as an intermediary between AI assistants (that support the Model Context Protocol) and your Kubernetes cluster. It receives natural language requests from these assistants, translates them into kubectl commands or direct Kubernetes API calls, and executes them against the target cluster. The server then processes the results and returns a structured response, enabling seamless interaction with your Kubernetes environment via the AI assistant.

README の画像

How To Install

Prerequisites

Before installing mcp-kubernetes-server, ensure you have the following:

  • A working Kubernetes cluster.
  • A kubeconfig file correctly configured to access your Kubernetes cluster (the server requires this file for interaction).
  • The kubectl command-line tool installed and in your system's PATH (used by the server to execute many Kubernetes commands).
  • The helm command-line tool installed and in your system's PATH (used by the server for Helm chart operations).
  • Python >= 3.11, if you plan to install and run the server directly using uvx (without Docker).
Docker

Get your kubeconfig file for your Kubernetes cluster and setup in the mcpServers (replace src path with your kubeconfig path):

{
  "mcpServers": {
    "kubernetes": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "--mount", "type=bind,src=/home/username/.kube/config,dst=/home/mcp/.kube/config",
        "ghcr.io/feiskyer/mcp-kubernetes-server"
      ]
    }
  }
}
UVX

To run the server using uvx (a tool included with uv, the Python packager), first ensure uv is installed:

Install uv

Install uv if it's not installed yet and add it to your PATH, e.g. using curl:

# For Linux and MacOS
curl -LsSf https://astral.sh/uv/install.sh | sh
Install kubectl

Install kubectl if it's not installed yet and add it to your PATH, e.g.

# For Linux
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

# For MacOS
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl"
Install helm

Install helm if it's not installed yet and add it to your PATH, e.g.

curl -sSL https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

Config your MCP servers in Claude Desktop, Cursor, ChatGPT Copilot, Github Copilot and other supported AI clients, e.g.

{
  "mcpServers": {
    "kubernetes": {
      "command": "uvx",
      "args": [
        "mcp-kubernetes-server"
      ],
      "env": {
        "KUBECONFIG": "<your-kubeconfig-path>"
      }
    }
  }
}
MCP Server Options
Environment Variables

Environment variables:

  • KUBECONFIG: Path to your kubeconfig file, e.g. /home/<username>/.kube/config.
Command line arguments

Command-line Arguments:

usage: main.py [-h] [--disable-kubectl] [--disable-helm] [--disable-write]
               [--disable-delete] [--transport {stdio,sse,streamable-http}]
               [--host HOST] [--port PORT]

MCP Kubernetes Server

options:
  -h, --help            show this help message and exit
  --disable-kubectl     Disable kubectl command execution
  --disable-helm        Disable helm command execution
  --disable-write       Disable write operations
  --disable-delete      Disable delete operations
  --transport {stdio,sse,streamable-http}
                        Transport mechanism to use (stdio or sse or streamable-http)
  --host HOST           Host to use for sse or streamable-http server
  --port PORT           Port to use for sse or streamable-http server

Usage

Once the mcp-kubernetes-server is installed and configured in your AI client (using the JSON snippets provided in the 'How to install' section for Docker or UVX), you can start interacting with your Kubernetes cluster through natural language. For example, you can ask:

What is the status of my Kubernetes cluster?

What is wrong with my nginx pod?

Verifying the server: If you're running the server with stdio transport (common for uvx direct execution), the AI client will typically start and manage the server process. For sse or streamable-http transports, the server runs independently. You would have started it manually (e.g., uvx mcp-kubernetes-server --transport sse) and should see output in your terminal indicating it's running (e.g., INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)). You can also check for any error messages in the server terminal if the AI client fails to connect.

Available Tools

The mcp-kubernetes-server provides a comprehensive set of tools for interacting with Kubernetes clusters, categorized by operation type:

Command Tools
Command Tools

These tools provide general command execution capabilities:

ToolDescriptionParameters
kubectlRun any kubectl command and return the outputcommand (string)
helmRun any helm command and return the outputcommand (string)
Read Tools
Read Tools

These tools provide read-only access to Kubernetes resources:

ToolDescriptionParameters
k8s_getFetch any Kubernetes object (or list) as JSON stringresource (string), name (string), namespace (string)
k8s_describeShow detailed information about a specific resource or group of resourcesresource_type (string), name (string, optional), namespace (string, optional), selector (string, optional), all_namespaces (boolean, optional)
k8s_logsPrint the logs for a container in a podpod_name (string), container (string, optional), namespace (string, optional), tail (integer, optional), previous (boolean, optional), since (string, optional), timestamps (boolean, optional), follow (boolean, optional)
k8s_eventsList events in the clusternamespace (string, optional), all_namespaces (boolean, optional), field_selector (string, optional), resource_type (string, optional), resource_name (string, optional), sort_by (string, optional), watch (boolean, optional)
k8s_apisList all available APIs in the Kubernetes clusternone
k8s_crdsList all Custom Resource Definitions (CRDs) in the Kubernetes clusternone
k8s_top_nodesDisplay resource usage (CPU/memory) of nodessort_by (string, optional)
k8s_top_podsDisplay resource usage (CPU/memory) of podsnamespace (string, optional), all_namespaces (boolean, optional), sort_by (string, optional), selector (string, optional)
k8s_rollout_statusGet the status of a rollout for a deployment, daemonset, or statefulsetresource_type (string), name (string), namespace (string, optional)
k8s_rollout_historyGet the rollout history for a deployment, daemonset, or statefulsetresource_type (string), name (string), namespace (string, optional), revision (string, optional)
k8s_auth_can_iCheck whether an action is allowedverb (string), resource (string), subresource (string, optional), namespace (string, optional), name (string, optional)
k8s_auth_whoamiShow the subject that you are currently authenticated asnone
Write Tools
Write Tools

These tools provide create, update or patch operations to Kubernetes resources:

ToolDescriptionParameters
k8s_createCreate a Kubernetes resource from YAML/JSON contentyaml_content (string), namespace (string, optional)
k8s_applyApply a configuration to a resource by filename or stdinyaml_content (string), namespace (string, optional)
k8s_exposeExpose a resource as a new Kubernetes serviceresource_type (string), name (string), port (integer), target_port (integer, optional), namespace (string, optional), protocol (string, optional), service_name (string, optional), labels (object, optional), selector (string, optional), type (string, optional)
k8s_runCreate and run a particular image in a podname (string), image (string), namespace (string, optional), command (array, optional), env (object, optional), labels (object, optional), restart (string, optional)
k8s_set_resourcesSet resource limits and requests for containersresource_type (string), resource_name (string), namespace (string, optional), containers (array, optional), limits (object, optional), requests (object, optional)
k8s_set_imageSet the image for a containerresource_type (string), resource_name (string), container (string), image (string), namespace (string, optional)
k8s_set_envSet environment variables for a containerresource_type (string), resource_name (string), container (string), env_dict (object), namespace (string, optional)
k8s_rollout_undoUndo a rollout for a deployment, daemonset, or statefulsetresource_type (string), name (string), namespace (string, optional), to_revision (string, optional)
k8s_rollout_restartRestart a rollout for a deployment, daemonset, or statefulsetresource_type (string), name (string), namespace (string, optional)
k8s_rollout_pausePause a rollout for a deployment, daemonset, or statefulsetresource_type (string), name (string), namespace (string, optional)
k8s_rollout_resumeResume a rollout for a deployment, daemonset, or statefulsetresource_type (string), name (string), namespace (string, optional)
k8s_scaleScale a resourceresource_type (string), name (string), replicas (integer), namespace (string, optional)
k8s_autoscaleAutoscale a deployment, replica set, stateful set, or replication controllerresource_type (string), name (string), min (integer), max (integer), namespace (string, optional), cpu_percent (integer, optional)
k8s_cordonMark a node as unschedulablenode_name (string)
k8s_uncordonMark a node as schedulablenode_name (string)
k8s_drainDrain a node in preparation for maintenancenode_name (string), force (boolean, optional), ignore_daemonsets (boolean, optional), delete_local_data (boolean, optional), timeout (integer, optional)
k8s_taintUpdate the taints on one or more nodesnode_name (string), key (string), value (string, optional), effect (string)
k8s_untaintRemove the taints from a nodenode_name (string), key (string), effect (string, optional)
k8s_exec_commandExecute a command in a containerpod_name (string), command (string), container (string, optional), namespace (string, optional), stdin (boolean, optional), tty (boolean, optional), timeout (integer, optional)
k8s_port_forwardForward one or more local ports to a podresource_type (string), name (string), ports (array), namespace (string, optional), address (string, optional)
k8s_cpCopy files and directories to and from containerssrc_path (string), dst_path (string), container (string, optional), namespace (string, optional)
k8s_patchUpdate fields of a resourceresource_type (string), name (string), patch (object), namespace (string, optional)
k8s_labelUpdate the labels on a resourceresource_type (string), name (string), labels (object), namespace (string, optional), overwrite (boolean, optional)
k8s_annotateUpdate the annotations on a resourceresource_type (string), name (string), annotations (object), namespace (string, optional), overwrite (boolean, optional)
Delete Tools
Delete Tools

These tools provide delete operations to Kubernetes resources:

ToolDescriptionParameters
k8s_deleteDelete resources by name, label selector, or all resources in a namespaceresource_type (string), name (string, optional), namespace (string, optional), label_selector (string, optional), all_namespaces (boolean, optional), force (boolean, optional), grace_period (integer, optional)

Development

How to run the project locally:

uv run -m src.mcp_kubernetes_server.main

How to inspect MCP server requests and responses:

npx @modelcontextprotocol/inspector uv run -m src.mcp_kubernetes_server.main

Troubleshooting

Here are some common issues and their solutions when working with mcp-kubernetes-server:

Issue: mcp-kubernetes-server cannot connect to the Kubernetes cluster or reports authentication errors. Solution:

  • Ensure your kubeconfig file is correctly configured and points to the intended cluster.
  • Verify that the path to your kubeconfig file is correctly specified in the mcpServers configuration (for Docker, ensure the mount path is correct; for uvx, ensure the KUBECONFIG environment variable is set correctly).
  • Check that the credentials in your kubeconfig have the necessary permissions to perform operations on the cluster. You can test this with kubectl directly (e.g., kubectl get pods).

Issue: kubectl or helm commands return an error like "command not found" or are disabled. Solution:

  • If running via uvx, ensure kubectl and/or helm are installed on your system and available in your PATH. Refer to the "Prerequisites" section for installation guidance.
  • If you see a message like "Write operations are not allowed" or "Delete operations are not allowed", the server might have been started with flags like --disable-kubectl, --disable-helm, --disable-write, or --disable-delete. Check the server's startup command and the "MCP Server Options" section in the README for details on these flags.

Issue: How can I see the raw requests and responses between my AI client and the mcp-kubernetes-server? Solution:

  • You can use the @modelcontextprotocol/inspector tool as mentioned in the "Development" section: npx @modelcontextprotocol/inspector uv run -m src.mcp_kubernetes_server.main. This will show you the MCP messages being exchanged.

Issue: The server starts but the AI client cannot connect. Solution:

  • If using stdio transport (default for uvx direct execution), ensure your AI client is configured to launch the mcp-kubernetes-server command correctly.
  • If using sse or streamable-http transport, ensure the host and port configured in the mcp-kubernetes-server (e.g., --host 0.0.0.0 --port 8000) are reachable from where your AI client is running. Check for firewall rules or network configuration issues. Also, verify the AI client is configured with the correct URL for the server.

Contribution

This project is open source, available on GitHub at feiskyer/mcp-kubernetes-server and licensed under the Apache License.

If you would like to contribute to the project, please follow these guidelines:

  1. Fork the repository and clone it to your local machine.
  2. Create a new branch for your changes.
  3. Make your changes and commit them with a descriptive commit message.
  4. Push your changes to your forked repository.
  5. Open a pull request to the main repository.

LICENSE

The project is licensed under the Apache License 2.0. See the LICENSE file for more details.

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。