关于 mcp-kubernetes-server
mcp-kubernetes-server 是一个 MCP 服务,让 AI 助手能够与 Kubernetes 集群交互。它将自然语言请求转换为 kubectl 或 Kubernetes API 操作,并返回结构化结果,适合需要通过 AI 助手管理和排查集群的用户。
主要功能
- 01查询 Kubernetes 资源与日志
- 02执行 kubectl 与 helm 命令
- 03读写分离,可禁用写入或删除操作
- 04支持 stdio、sse 与 streamable-http 传输
- 05提供扩缩容、滚动更新与节点维护工具
适用场景
- 01通过自然语言查询集群与 Pod 状态
- 02排查异常 Pod 并查看日志与事件
- 03在受控权限下执行部署与扩缩容操作
MCP 相关
该项目是 MCP 服务,向 Claude、Cursor、GitHub Copilot 等支持 MCP 的客户端暴露一组 Kubernetes 工具,包括只读、写入和删除类工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
docker run -i --rm ghcr.io/feiskyer/mcp-kubernetes-server本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
ghcr.io/feiskyer/mcp-kubernetes-serverstdio工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
mcp-kubernetes-server
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 环境无缝交互。

安装方法
前提条件
安装 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 | 将一个或多个本地端口转发到 Pod | resource_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 许可。
如果您想为此项目做出贡献,请遵循以下指南:
- Fork 此仓库并将其克隆到本地计算机。
- 为您的更改创建一个新分支。
- 进行更改,并使用描述性提交消息提交。
- 将更改推送到您 Fork 的仓库。
- 向主仓库提交 Pull Request。
许可证
此项目采用 Apache License 2.0 许可。更多详情请参阅 LICENSE 文件。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。