mcpField
K
Kubernetes Read Only MCP Server

Kubernetes Read Only MCP Server

本地服务
github.com/your-ko云与基础设施11 天前更新

关于 Kubernetes Read Only MCP Server

Kubernetes Read Only MCP Server 是一个 Go 服务,可让 Claude 查询 Kubernetes 集群。它仅提供只读操作、屏蔽密钥,并将每个实例固定到一个上下文。

主要功能

  1. 01列出并描述 Kubernetes 资源
  2. 02获取 Pod 日志和集群事件
  3. 03查看 Pod 与节点的 CPU 和内存
  4. 04屏蔽响应中的密钥值
  5. 05固定到启动时的上下文

适用场景

  1. 01值班时检查资源状态
  2. 02查看崩溃容器的日志
  3. 03检查集群容量和近期事件

MCP 相关

它通过 stdio 与 MCP 客户端通信,并提供只读 Kubernetes 工具。每个实例使用启动时生效的 kubeconfig 上下文。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"k8s-ro": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"KUBECONFIG",
"ghcr.io/your-ko/mcp-k8s-ro:1.2.1"
],
"env": {
"KUBECONFIG": "<KUBECONFIG>"
}
}
}
}
启动命令docker run -i --rm -e KUBECONFIG ghcr.io/your-ko/mcp-k8s-ro:1.2.1
需要配置的环境变量
KUBECONFIGPath to the kubeconfig file. Defaults to ~/.kube/config.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocighcr.io/your-ko/mcp-k8s-ro:1.2.1

工具

还没有获取到工具列表

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

详细介绍

Main golangci-lint Link validation

mcp-k8s-ro

一款只读 MCP 服务,可让 Claude 访问 Kubernetes 集群。使用 Go 构建,通过 stdio 使用 MCP 协议进行通信。

设计

  • 只读 — 仅支持 get、describe、logs 和 top 等操作。不支持创建、更新或删除。如果需要执行变更操作,服务会输出对应的 kubectl 命令,供你手动运行。适合夜间值班时安全使用:即使提示词疲劳,Claude 也绝不会意外修改你的集群。
  • 安全处理 Secret — 在将 Secret 值发送给模型前会对其进行掩码处理,避免因配置错误或提示词注入导致 Secret 泄露。
  • 节省 Token — 响应只包含相关字段(名称、状态、重启次数等),而非原始 Kubernetes API 对象,从而减少上下文用量。
  • 感知集群信息 — 每条响应都包含当前上下文和集群名称,因此 Claude 始终知道自己正在与哪个集群交互。
  • 固定上下文 — 服务启动时会锁定当前活动的 kubeconfig 上下文。在另一个终端切换上下文不会影响正在运行的服务。
  • 无需额外基础设施 — 可作为本地二进制文件或 Docker 容器运行,并连接到启动时处于活动状态的 kubeconfig 上下文。

已脱敏字段

对象/字段原因
Secret.data防止 Secret 泄露
Secret.stringData防止 Secret 泄露
CertificateSigningRequest.spec.request大型 base64 PEM 数据块,没有诊断价值,可节省 Token
Certificate (cert-manager) .spec.keystores证书链 PEM 数据块,没有诊断价值,可节省 Token
Certificate (cert-manager) status.conditions[].message证书链 PEM 数据块,没有诊断价值,可节省 Token
*.managedFields没有诊断价值,可节省 Token

工具

工具描述
k8s_list_resources按名称列出任意资源类型,例如 Pod、Deployment、CRD 等。可选择按命名空间筛选。根据资源类型返回名称、状态、就绪情况、重启次数、节点、IP 等信息。
k8s_describe_resource返回单个资源的完整 YAML。Secret 数据会被屏蔽。
k8s_list_resource_types通过发现 API 列出所有可用资源类型。可选择按 API 组筛选。
k8s_get_logs获取 Pod 日志。支持容器选择器、尾部行数,以及用于崩溃容器的 --previous。
k8s_get_events列出某个命名空间或整个集群的 Kubernetes 事件,并按最近时间排序。
k8s_top_pods显示每个 Pod 的 CPU 和内存使用情况,并按容器细分。需要 metrics-server。
k8s_top_nodes显示每个节点的 CPU 和内存使用情况,以及占可分配容量的百分比。需要 metrics-server。

配置

环境变量默认值描述
KUBECONFIG~/.kube/configkubeconfig 文件路径

在 Claude 中使用

Docker(推荐)
claude mcp add --scope user --transport stdio k8s-ro \
  -- docker run --rm -i -v ~/.kube:/home/nonroot/.kube:ro ghcr.io/your-ko/mcp-k8s-ro:latest

建议在生产环境中固定使用特定版本(查看最新版本):

claude mcp add --scope user --transport stdio k8s-ro \
  -- docker run --rm -i -v ~/.kube:/home/nonroot/.kube:ro ghcr.io/your-ko/mcp-k8s-ro:1.1.0
二进制文件

从 GitHub Releases 下载预构建的二进制文件:

# macOS Apple Silicon — change ARCH for other platforms: darwin-amd64, linux-amd64, linux-arm64
ARCH=darwin-arm64
VERSION=$(curl -fsSL https://api.github.com/repos/your-ko/mcp-k8s-ro/releases/latest | grep tag_name | cut -d'"' -f4)
curl -fsSL "https://github.com/your-ko/mcp-k8s-ro/releases/download/${VERSION}/mcp-k8s-ro-${VERSION}-${ARCH}" -o ~/.local/bin/mcp-k8s-ro
chmod +x ~/.local/bin/mcp-k8s-ro
xattr -d com.apple.quarantine ~/.local/bin/mcp-k8s-ro 2>/dev/null  # macOS only: remove Gatekeeper quarantine
claude mcp add --scope user --transport stdio k8s-ro ~/.local/bin/mcp-k8s-ro

macOS Gatekeeper:该二进制文件未经代码签名,因此 macOS 会阻止运行。 上面的 xattr 命令会移除隔离标记。或者,在首次被阻止后,前往“系统设置”→“隐私与安全性”,然后点击“仍要允许”。 img.png

也可以从源代码构建:

make build
claude mcp add --scope user --transport stdio k8s-ro ./bin/mcp-k8s-ro
自定义 kubeconfig 位置

如果你的 kubeconfig 不在 ~/.kube/config,请设置 KUBECONFIG 环境变量:

# Binary
claude mcp add --scope user --transport stdio -e KUBECONFIG=/path/to/kubeconfig k8s-ro ~/.local/bin/mcp-k8s-ro

# Docker
claude mcp add --scope user --transport stdio k8s-ro \
  -- docker run --rm -i -e KUBECONFIG=/config/kubeconfig -v /path/to/kubeconfig:/config/kubeconfig:ro ghcr.io/your-ko/mcp-k8s-ro:latest

单集群设计

该服务有意只使用一个 kubeconfig 上下文运行,并且不提供可在运行时切换集群的工具。原因如下:

  • 提示词注入隔离——一个集群资源中的恶意值(例如 Pod 注释)无法指使 Claude 转向其他集群,包括生产集群。
  • 明确的审计边界——每个工具响应都会包含上下文和集群名称,因此查询的是哪个集群始终清晰明确。

若要将服务指向其他集群,请停止服务、切换上下文,然后重启:

kubectl config use-context my-other-cluster
# then restart the MCP server / reload Claude Desktop

若要同时使用多个集群,请在 MCP 配置中为每个集群注册一个单独的服务实例:

{
  "mcpServers": {
    "k8s-staging": {
      "type": "stdio",
      "command": "/path/to/bin/mcp-k8s-ro",
      "env": { "KUBECONFIG": "/path/to/.kube/config" }
    },
    "k8s-prod": {
      "type": "stdio",
      "command": "/path/to/bin/mcp-k8s-ro",
      "env": { "KUBECONFIG": "/path/to/.kube/config-prod" }
    }
  }
}

Claude 会按名称调用每个服务,并且每个实例只能访问自己的集群。

MCP 注册表

此服务已发布在 registry.modelcontextprotocol.io

评论

支持 Markdown

第一次接触 MCP?

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

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