mcpField
M
mcp-kubernetes-server

mcp-kubernetes-server

本地服务
pypi.org云与基础设施2052 周前更新

关于 mcp-kubernetes-server

mcp-kubernetes-server 是一个 MCP 服务,让 AI 助手能够与 Kubernetes 集群交互。它将自然语言请求转换为 kubectl 或 Kubernetes API 操作,并返回结构化结果,适合需要通过 AI 助手管理和排查集群的用户。

主要功能

  1. 01查询 Kubernetes 资源与日志
  2. 02执行 kubectl 与 helm 命令
  3. 03读写分离,可禁用写入或删除操作
  4. 04支持 stdio、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

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

mcp-kubernetes-server

PyPI version License Build Status

mcp-kubernetes-server 是一个实现模型上下文协议(MCP)的服务,可让 AI 助手(例如 Claude、Cursor 和 GitHub Copilot)与 Kubernetes 集群交互。它充当桥梁,将这些助手发出的自然语言请求转换为 Kubernetes 操作,并返回结果。

它支持 AI 助手:

  • 查询 Kubernetes 资源
  • 执行 kubectl 命令
  • 通过自然语言交互管理 Kubernetes 集群
  • 诊断并解读 Kubernetes 资源的状态

工作原理

mcp-kubernetes-server 充当支持模型上下文协议的 AI 助手与 Kubernetes 集群之间的中间层。它接收这些助手发出的自然语言请求,将其转换为 kubectl 命令或直接的 Kubernetes API 调用,并在目标集群上执行。随后,服务会处理结果并返回结构化响应,让用户能够通过 AI 助手与 Kubernetes 环境无缝交互。

README 配图

安装方法

前提条件

安装 mcp-kubernetes-server 之前,请确保具备以下条件:

  • 一个可正常运行的 Kubernetes 集群。
  • 一个已正确配置、可访问 Kubernetes 集群的 kubeconfig 文件(服务需要使用此文件进行交互)。
  • 已安装并添加到系统 PATH 中的 kubectl 命令行工具(服务会使用它执行许多 Kubernetes 命令)。
  • 已安装并添加到系统 PATH 中的 helm 命令行工具(服务会使用它执行 Helm chart 操作)。
  • Python >= 3.11(如果计划使用 uvx 直接安装并运行服务,而不使用 Docker)。
Docker

获取 Kubernetes 集群的 kubeconfig 文件,并在 mcpServers 中进行配置(将 src 路径替换为你的 kubeconfig 路径):

{
  "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

要使用 uvx(uv 这个 Python 包管理器附带的工具)运行服务,请先确保已安装 uv:

安装 uv

如果尚未安装 uv,请安装它并将其添加到 PATH 中,例如使用 curl:

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

如果尚未安装 kubectl,请安装它并将其添加到 PATH 中,例如:

# 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"
安装 helm

如果尚未安装 helm,请安装它并将其添加到 PATH 中,例如:

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

在 Claude Desktop、Cursor、ChatGPT Copilot、Github Copilot 和其他受支持的 AI 客户端中配置 MCP 服务,例如:

{
  "mcpServers": {
    "kubernetes": {
      "command": "uvx",
      "args": [
        "mcp-kubernetes-server"
      ],
      "env": {
        "KUBECONFIG": "<your-kubeconfig-path>"
      }
    }
  }
}
MCP 服务选项
环境变量

环境变量:

  • KUBECONFIG:kubeconfig 文件的路径,例如 /home/<username>/.kube/config。
命令行参数

命令行参数:

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
## 用法

在 AI 客户端中安装并配置 mcp-kubernetes-server(使用“如何安装”部分提供的 Docker 或 UVX JSON 代码片段)后,你就可以通过自然语言与 Kubernetes 集群交互。例如,你可以询问:

What is the status of my Kubernetes cluster?

What is wrong with my nginx pod?

**验证服务:**如果你使用 stdio 传输方式运行服务(uvx 直接执行时常用),AI 客户端通常会启动并管理服务进程。对于 sse 或 streamable-http 传输方式,服务会独立运行。你需要手动启动它(例如,uvx mcp-kubernetes-server --transport sse),并且应该能在终端中看到服务正在运行的输出(例如,INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit))。如果 AI 客户端连接失败,也可以在服务终端中检查是否有错误消息。

可用工具

mcp-kubernetes-server 提供了一套全面的工具,用于与 Kubernetes 集群交互,并按操作类型分类:

命令工具
命令工具

这些工具提供通用的命令执行功能:

工具描述参数
kubectl运行任意 kubectl 命令并返回输出command (string)
helm运行任意 helm 命令并返回输出command (string)
读取工具
读取工具

这些工具提供对 Kubernetes 资源的只读访问:

工具描述参数
k8s_get将任意 Kubernetes 对象(或列表)作为 JSON 字符串获取resource (string), name (string), namespace (string)
k8s_describe显示特定资源或一组资源的详细信息resource_type (string), name (string, optional), namespace (string, optional), selector (string, optional), all_namespaces (boolean, optional)
k8s_logs打印 pod 中容器的日志pod_name (string), container (string, optional), namespace (string, optional), tail (integer, optional), previous (boolean, optional), since (string, optional), timestamps (boolean, optional), follow (boolean, optional)
k8s_events列出集群中的事件namespace (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_apis列出 Kubernetes 集群中所有可用的 API无
k8s_crds列出 Kubernetes 集群中的所有自定义资源定义(CRD)无
k8s_top_nodes显示节点的资源使用情况(CPU/内存)sort_by (string, optional)
k8s_top_pods显示 pod 的资源使用情况(CPU/内存)namespace (string, optional), all_namespaces (boolean, optional), sort_by (string, optional), selector (string, optional)
k8s_rollout_status获取 deployment、daemonset 或 statefulset 的滚动更新状态resource_type (string), name (string), namespace (string, optional)
k8s_rollout_history获取 deployment、daemonset 或 statefulset 的滚动更新历史记录resource_type (string), name (string), namespace (string, optional), revision (string, optional)
k8s_auth_can_i检查是否允许执行某项操作verb (string), resource (string), subresource (string, optional), namespace (string, optional), name (string, optional)
k8s_auth_whoami显示你当前通过身份验证的主体无
写入工具
写入工具

这些工具提供对 Kubernetes 资源的创建、更新或修补操作:

工具描述参数
k8s_create根据 YAML/JSON 内容创建 Kubernetes 资源yaml_content (string), namespace (string, optional)
k8s_apply根据文件名或标准输入将配置应用到资源yaml_content (string), namespace (string, optional)
k8s_expose将资源公开为新的 Kubernetes 服务resource_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_run在 Pod 中创建并运行指定镜像name (string), image (string), namespace (string, optional), command (array, optional), env (object, optional), labels (object, optional), restart (string, optional)
k8s_set_resources设置容器的资源限制和请求resource_type (string), resource_name (string), namespace (string, optional), containers (array, optional), limits (object, optional), requests (object, optional)
k8s_set_image设置容器的镜像resource_type (string), resource_name (string), container (string), image (string), namespace (string, optional)
k8s_set_env设置容器的环境变量resource_type (string), resource_name (string), container (string), env_dict (object), namespace (string, optional)
k8s_rollout_undo撤销 deployment、daemonset 或 statefulset 的发布resource_type (string), name (string), namespace (string, optional), to_revision (string, optional)
k8s_rollout_restart重启 deployment、daemonset 或 statefulset 的发布resource_type (string), name (string), namespace (string, optional)
k8s_rollout_pause暂停 deployment、daemonset 或 statefulset 的发布resource_type (string), name (string), namespace (string, optional)
k8s_rollout_resume恢复 deployment、daemonset 或 statefulset 的发布resource_type (string), name (string), namespace (string, optional)
k8s_scale扩缩资源resource_type (string), name (string), replicas (integer), namespace (string, optional)
k8s_autoscale对 deployment、replica set、stateful set 或 replication controller 进行自动扩缩resource_type (string), name (string), min (integer), max (integer), namespace (string, optional), cpu_percent (integer, optional)
k8s_cordon将节点标记为不可调度node_name (string)
k8s_uncordon将节点标记为可调度node_name (string)
k8s_drain为维护做准备,将节点上的工作负载迁出node_name (string), force (boolean, optional), ignore_daemonsets (boolean, optional), delete_local_data (boolean, optional), timeout (integer, optional)
k8s_taint更新一个或多个节点上的污点node_name (string), key (string), value (string, optional), effect (string)
k8s_untaint移除节点上的污点node_name (string), key (string), effect (string, optional)
k8s_exec_command在容器中执行命令pod_name (string), command (string), container (string, optional), namespace (string, optional), stdin (boolean, optional), tty (boolean, optional), timeout (integer, optional)
k8s_port_forward将一个或多个本地端口转发到 Podresource_type (string), name (string), ports (array), namespace (string, optional), address (string, optional)
k8s_cp在容器之间复制文件和目录src_path (string), dst_path (string), container (string, optional), namespace (string, optional)
k8s_patch更新资源的字段resource_type (string), name (string), patch (object), namespace (string, optional)
k8s_label更新资源上的标签resource_type (string), name (string), labels (object), namespace (string, optional), overwrite (boolean, optional)
k8s_annotate更新资源上的注解resource_type (string), name (string), annotations (object), namespace (string, optional), overwrite (boolean, optional)
删除工具
删除工具

这些工具可用于删除 Kubernetes 资源:

工具描述参数
k8s_delete按名称、标签选择器或删除命名空间中的所有资源resource_type (string), name (string, optional), namespace (string, optional), label_selector (string, optional), all_namespaces (boolean, optional), force (boolean, optional), grace_period (integer, optional)

开发

如何在本地运行项目:

uv run -m src.mcp_kubernetes_server.main

如何检查 MCP 服务的请求和响应:

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

故障排除

以下是使用 mcp-kubernetes-server 时的一些常见问题及其解决方案:

问题: mcp-kubernetes-server 无法连接到 Kubernetes 集群或报告身份验证错误。 解决方案:

  • 确保正确配置了 kubeconfig 文件,并且指向预期的集群。
  • 确认在 mcpServers 配置中正确指定了 kubeconfig 文件的路径(对于 Docker,请确保挂载路径正确;对于 uvx,请确保正确设置了 KUBECONFIG 环境变量)。
  • 检查 kubeconfig 中的凭据是否具备在集群上执行操作所需的权限。可以直接使用 kubectl 测试(例如,kubectl get pods)。

问题: kubectl 或 helm 命令返回类似 "command not found" 的错误,或被禁用。 解决方案:

  • 如果通过 uvx 运行,请确保系统已安装 kubectl 和/或 helm,并且它们位于 PATH 中。安装说明请参阅“先决条件”部分。
  • 如果看到类似 "Write operations are not allowed" 或 "Delete operations are not allowed" 的消息,则服务可能是通过 --disable-kubectl、--disable-helm、--disable-write 或 --disable-delete 等标志启动的。请检查服务的启动命令以及 README 中的“MCP 服务选项”部分,了解这些标志的详情。

问题: 如何查看 AI 客户端与 mcp-kubernetes-server 之间的原始请求和响应? 解决方案:

  • 可以使用“开发”部分提到的 @modelcontextprotocol/inspector 工具:npx @modelcontextprotocol/inspector uv run -m src.mcp_kubernetes_server.main。这将显示正在交换的 MCP 消息。

问题: 服务已启动,但 AI 客户端无法连接。 解决方案:

  • 如果使用 stdio 传输(uvx 直接执行时的默认方式),请确保 AI 客户端已正确配置为启动 mcp-kubernetes-server 命令。
  • 如果使用 sse 或 streamable-http 传输,请确保在 mcp-kubernetes-server 中配置的主机和端口(例如,--host 0.0.0.0 --port 8000)可从 AI 客户端所在位置访问。检查防火墙规则或网络配置是否存在问题。此外,请确认 AI 客户端配置了正确的服务 URL。

贡献

此项目在 GitHub 上开源,地址为 feiskyer/mcp-kubernetes-server,并采用 Apache License 许可。

如果您想为此项目做出贡献,请遵循以下指南:

  1. Fork 此仓库并将其克隆到本地计算机。
  2. 为您的更改创建一个新分支。
  3. 进行更改,并使用描述性提交消息提交。
  4. 将更改推送到您 Fork 的仓库。
  5. 向主仓库提交 Pull Request。

许可证

此项目采用 Apache License 2.0 许可。更多详情请参阅 LICENSE 文件。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。