mcpField
K
Kubeview Mcp

Kubeview Mcp

本地服务
github.com云与基础设施52 周前更新

关于 Kubeview Mcp

Kubeview Mcp 是面向 Kubernetes 诊断的只读 MCP 服务,供需要检查集群、Helm 和可用 Argo 能力的 Agent 使用。它默认通过沙箱 TypeScript 执行组合查询,减少中间数据进入模型上下文,并对 Pod 执行操作设置审批门槛。

主要功能

  1. 01以沙箱 TypeScript 组合查询
  2. 02诊断工作负载并关联事件与日志
  3. 03读取 Kubernetes、Helm 和可用 Argo 数据
  4. 04按集群上下文筛选访问范围
  5. 05通过渐进发现查找工具能力
  6. 06Pod 执行需逐次审批

适用场景

  1. 01排查工作负载状态与失败原因
  2. 02关联事件、日志和 Helm 状态
  3. 03同时检查多个 Kubernetes 集群
  4. 04在审批控制下执行 Pod 命令

MCP 相关

MCP 服务默认公开 `run_code` 与需审批的 `kube_pod_exec`;可通过 `MCP_MODE=tools`切换为独立工具面。沙箱内的工具发现与调用可访问 Kubernetes、Helm 及检测到的 Argo 能力。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"kubeview": {
"command": "npx",
"args": [
"-y",
"kubeview-mcp"
],
"env": {
"KUBECONFIG": "<KUBECONFIG>",
"MCP_TRANSPORT": "<MCP_TRANSPORT>",
"MCP_MODE": "<MCP_MODE>",
"MCP_CODE_MODE_DISABLED_TOOLS": "<MCP_CODE_MODE_DISABLED_TOOLS>",
"MCP_ARGO_TOOLS": "<MCP_ARGO_TOOLS>",
"MCP_ARGOCD_TOOLS": "<MCP_ARGOCD_TOOLS>",
"MCP_LOG_LEVEL": "<MCP_LOG_LEVEL>",
"MCP_KUBE_CONTEXT": "<MCP_KUBE_CONTEXT>",
"MCP_K8S_SKIP_TLS_VERIFY": "<MCP_K8S_SKIP_TLS_VERIFY>",
"MCP_HIDE_SENSITIVE": "<MCP_HIDE_SENSITIVE>",
"MCP_TIMEOUT": "<MCP_TIMEOUT>",
"MCP_HTTP_HOST": "<MCP_HTTP_HOST>",
"MCP_HTTP_PORT": "<MCP_HTTP_PORT>",
"MCP_HTTP_PATH": "<MCP_HTTP_PATH>",
"MCP_HTTP_JSON_RESPONSE": "<MCP_HTTP_JSON_RESPONSE>",
"MCP_APPROVAL_STATE_SECRET": "<MCP_APPROVAL_STATE_SECRET>",
"MCP_APPROVAL_REPLAY_DIR": "<MCP_APPROVAL_REPLAY_DIR>",
"MCP_ALLOWED_HOSTS": "<MCP_ALLOWED_HOSTS>",
"MCP_ALLOWED_ORIGINS": "<MCP_ALLOWED_ORIGINS>",
"KUBE_MCP_FORCE_VM_SANDBOX": "<KUBE_MCP_FORCE_VM_SANDBOX>",
"MCP_DISABLE_KUBERNETES_PLUGIN": "<MCP_DISABLE_KUBERNETES_PLUGIN>",
"MCP_DISABLE_HELM_PLUGIN": "<MCP_DISABLE_HELM_PLUGIN>",
"MCP_DISABLE_ARGO_PLUGIN": "<MCP_DISABLE_ARGO_PLUGIN>",
"MCP_DISABLE_ARGOCD_PLUGIN": "<MCP_DISABLE_ARGOCD_PLUGIN>"
}
}
}
}
启动命令npx -y kubeview-mcp
需要配置的环境变量
KUBECONFIGPath to kubeconfig file; defaults to ~/.kube/config if unset.
MCP_TRANSPORTTransport mode: 'stdio' (default) or 'http'. The published package metadata still targets stdio by default.
MCP_MODEServer mode: 'code' (default), compatibility alias 'all', or direct 'tools'.
MCP_CODE_MODE_DISABLED_TOOLSComma-separated configurable denials inside run_code. Environment overrides JSON; an empty value enables all configurable capabilities.
MCP_ARGO_TOOLSArgo Workflows capability override: auto, on, or off. Auto uses Kubernetes API discovery.
MCP_ARGOCD_TOOLSArgo CD capability override: auto, on, or off. Auto uses Kubernetes API discovery or explicit remote configuration.
MCP_LOG_LEVELLogging level: 'error', 'warn', 'info' (default), or 'debug'.
MCP_KUBE_CONTEXTKubernetes context name to use. If unset, uses the current context from kubeconfig.
MCP_K8S_SKIP_TLS_VERIFYSkip TLS certificate verification for Kubernetes API (use 'true' or '1'). Not recommended for production.
MCP_HIDE_SENSITIVEEnable global sensitive data masking. Set to 'true' or '1' to mask sensitive values in responses.
MCP_TIMEOUTDefault timeout in milliseconds for operations. If unset, uses plugin-specific defaults.
MCP_HTTP_HOSTHTTP bind host when MCP_TRANSPORT=http. Defaults to 127.0.0.1.
MCP_HTTP_PORTHTTP port when MCP_TRANSPORT=http. Defaults to 3000.
MCP_HTTP_PATHHTTP endpoint path when MCP_TRANSPORT=http. Defaults to /mcp.
MCP_HTTP_JSON_RESPONSEPrefer JSON responses over SSE in HTTP mode. Set to 'true' or '1' to enable.
MCP_APPROVAL_STATE_SECRET密钥Shared secret of at least 32 bytes for signing approval state. Required in HTTP mode and identical across replicas.
MCP_APPROVAL_REPLAY_DIRAbsolute directory on writable storage shared by every HTTP replica, used to atomically prevent approval replay.
MCP_ALLOWED_HOSTSComma-separated Host allowlist for HTTP mode. Required when binding to 0.0.0.0 or ::.
MCP_ALLOWED_ORIGINSComma-separated Origin allowlist for HTTP mode.
KUBE_MCP_FORCE_VM_SANDBOXForce the standalone code-mode runtime to use node:vm instead of isolated-vm. Set to '1' to enable.
MCP_DISABLE_KUBERNETES_PLUGINDisable Kubernetes plugin. Set to 'true' or '1' to disable.
MCP_DISABLE_HELM_PLUGINDisable Helm plugin. Set to 'true' or '1' to disable.
MCP_DISABLE_ARGO_PLUGINDeprecated alias for MCP_ARGO_TOOLS=off.
MCP_DISABLE_ARGOCD_PLUGINDeprecated alias for MCP_ARGOCD_TOOLS=off.

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

安装包
npmkubeview-mcp2.3.0

工具

2

收录的工具列表 · 更新于 2 周前

参数类型必填说明
codestring是要通过沙箱运行时执行的 TypeScript 代码。支持顶层 await。
inputstring否脚本可用的可选输入负载。

详细介绍

KubeView MCP

npm version License: MIT Node.js MCP

用于 Kubernetes 诊断的只读 Model Context Protocol 服务。它不暴露数十种工具,而是为 Agent 提供一个沙盒化的 TypeScript 运行时:一次 run_code 调用即可查询 Kubernetes、Helm、Argo Workflows 和 Argo CD,关联结果,并仅返回答案。中间载荷不会经过模型的上下文窗口。基于 code execution with MCP 模式。

背景介绍:Evicting MCP tool calls from your Kubernetes cluster

工作原理

v2 仅发布两个公开工具:run_code 和受审批门控的 kube_pod_exec。其他所有内容都通过 tools.list()、tools.search() 和 tools.help() 在沙盒中发现,遵循 MCP 的渐进式发现与程序化调用指南。

run_code 使用顶层 await 执行受限的 TypeScript。一次调用即可列出工作负载、关联事件、获取日志并比较 Helm 状态,而无需将中间载荷传回模型:

const pods = await tools.kubernetes.list({ namespace: 'payments' });
const unhealthy = pods.items.filter((p) => p.status?.phase !== 'Running');

return Promise.all(
  unhealthy.map(async (pod) => ({
    pod: pod.metadata?.name,
    logs: await tools.kubernetes.logs({
      namespace: 'payments',
      podName: pod.metadata?.name,
      tailLines: 100,
    }),
  })),
);
  • 敏感操作隔离 — 沙盒代码无法访问 kube_pod_exec。顶层 exec 需要 MCP 征询授权,绑定到参数摘要,10 分钟后过期,并采用默认拒绝策略。kube_port_forward 从不作为顶层工具提供,且默认在代码模式下被拒绝。tools.disabled() 会报告是哪项策略阻止了某项能力,以及该拒绝是否可配置。
  • 由 API 驱动的发现 — Argo Workflows 和 Argo CD 会通过 Kubernetes API 检测,限定在当前 kube 上下文范围内,并缓存 60 秒。可选 API 不可用时,不会阻止启动。
  • 原生读取 — 资源、指标、日志、事件和网络探测均通过 Kubernetes API 获取。Helm 发布版本通过集群 Secrets 或 ConfigMaps 解析;本地 helm 二进制只是后备方案,并非必需。

快速开始

前提条件: Node.js ≥ 22,并且可以访问集群(KUBECONFIG 或集群内服务账户)。

npx -y kubeview-mcp

# Claude Code
claude mcp add kubernetes -- npx kubeview-mcp
{
  "mcpServers": {
    "kubeview": {
      "command": "npx",
      "args": ["-y", "kubeview-mcp"]
    }
  }
}

在 Cursor 中,/kubeview/code-mode 会将类型化 API 注入上下文。

配置

集群
变量描述默认值
KUBECONFIGKubeconfig 路径;多个文件会像 kubectl 一样合并~/.kube/config
MCP_KUBE_CONTEXT默认上下文(名称或别名);默认为当前活动上下文未设置
MCP_KUBE_CONTEXTS上下文允许列表和别名,例如 dev,staging-*,prod=arn:…/prod(详情)所有上下文
MCP_K8S_SKIP_TLS_VERIFY跳过 Kubernetes API 的 TLS 验证(true/1)false
MCP_TIMEOUT默认操作超时时间,单位为 ms插件默认值
MCP_HIDE_SENSITIVE全局屏蔽敏感数据false
MCP_DISABLE_KUBERNETES_PLUGIN禁用 Kubernetes 插件(true/1)未设置
MCP_DISABLE_HELM_PLUGIN禁用 Helm 插件(true/1)未设置
模式和功能
变量描述默认值
MCP_MODEcode(默认)、all(别名)或 toolscode
MCP_CODE_MODE_DISABLED_TOOLS以逗号分隔的代码模式禁用项;留空则启用全部工具JSON/默认值
MCP_ARGO_TOOLSArgo 覆盖选项:auto、on、offauto
MCP_ARGOCD_TOOLSArgo CD 覆盖选项:auto、on、offauto
MCP_LOG_LEVELerror、warn、info、debuginfo
KUBE_MCP_FORCE_VM_SANDBOX在独立运行时中强制使用 node:vm未设置
HTTP 传输
变量描述默认值
MCP_TRANSPORTstdio 或 httpstdio
MCP_HTTP_HOST / _PORTHTTP 绑定地址(当 MCP_TRANSPORT=http 时)127.0.0.1:3000
MCP_HTTP_PATHStreamable HTTP 端点路径/mcp
MCP_HTTP_JSON_RESPONSE优先使用 JSON 而非 SSE(会丢弃调用过程中的通知)false
MCP_ALLOWED_HOSTS主机允许列表(绑定到 0.0.0.0/:: 时必需)本地默认值
MCP_ALLOWED_ORIGINSHTTP 的来源允许列表未设置
MCP_APPROVAL_STATE_SECRET共享的 32+ 字节签名密钥;HTTP 审批必需临时值(stdio)
MCP_APPROVAL_REPLAY_DIR用于一次性 HTTP 审批的绝对共享卷目录未设置
mkdir -p /tmp/kubeview-mcp-approvals
MCP_APPROVAL_STATE_SECRET='replace-with-at-least-32-random-bytes' \
MCP_APPROVAL_REPLAY_DIR=/tmp/kubeview-mcp-approvals \
MCP_TRANSPORT=http MCP_HTTP_HOST=127.0.0.1 MCP_HTTP_PORT=3000 npx -y kubeview-mcp

端点:http://127.0.0.1:3000/mcp。HTTP 遵循 MCP 2026-07-28 无状态核心:每个请求都会创建一个全新的服务,不使用 initialize,也不使用 Mcp-Session-Id。每个请求都会在 _meta 中携带协议版本、客户端身份和能力。现代请求会添加 Mcp-Method/Mcp-Name,用于网关路由。2025 年的客户端会在同一端点使用 SDK 的无状态回退机制。需要在调用之间保留的状态必须作为工具参数或句柄传递。

如果未设置两个审批变量,HTTP 模式将拒绝启动。多副本部署需要使用相同的密钥和可写的共享重放目录;/tmp 示例仅适用于单个进程。已发布的 MCP 注册表条目仍以 stdio 为目标。

工具接口

MCP_MODE已公开的工具
未设置 / code / allrun_code、kube_pod_exec
toolskube_list、kube_get、kube_logs、kube_contexts、helm、kube_pod_exec,以及检测到的 argo 和 argocd

领域工具使用 operation 判别符:

  • helm — list | get | debug
  • argo — list | get | logs | cron_list(可发现 Workflow 或 CronWorkflow 时)
  • argocd — list | get | resources | logs | history | status(可发现 Application 时,或设置了 ARGOCD_SERVER + ARGOCD_AUTH_TOKEN 时)

发现结果会按 kube 上下文缓存 60 s。缺少可选 API 时会省略,而不会导致失败。如果默认上下文中存在 API,或者 MCP_KUBE_CONTEXTS 中列出的任意精确上下文名称中存在 API,则会注册 argo 和 argocd。

多集群

每个集群工具都接受可选的 context 参数(kubeconfig 上下文名称或 MCP_KUBE_CONTEXTS 别名);kube_contexts 会列出可作为目标的上下文。不指定时,调用行为与之前相同:先使用 MCP_KUBE_CONTEXT,再使用 kubeconfig 的 current-context。上下文按调用设置,而非按会话设置,因此 HTTP 模式保持无状态,并允许一个脚本并发查询多个集群。

MCP_KUBE_CONTEXTS 是逗号分隔的列表。普通条目是上下文名称,可包含 * 通配符;alias=context 条目则将短名称映射到真实上下文。设置后,只能访问匹配的上下文、别名目标和 MCP_KUBE_CONTEXT;这也适用于 Helm/Argo/Argo CD CLI 回退调用,它们会收到已解析上下文对应的 --kube-context/--context。添加 * 可在定义别名的同时保留所有上下文。

MCP_KUBE_CONTEXT=dev \
MCP_KUBE_CONTEXTS='dev,staging-*,prod=arn:aws:eks:eu-west-1:123456789012:cluster/prod' \
npx -y kubeview-mcp

在 run_code 中,可通过 context 参数为整个脚本设置默认上下文,或使用 tools.withContext() 限定作用范围;单次调用的 context 始终优先:

const staging = tools.withContext('staging-eu');
const [stagingApi, prodApi] = await Promise.all([
  staging.kubernetes.diagnose({ resourceType: 'deployment', name: 'api', namespace: 'shop' }),
  tools.kubernetes.diagnose({ resourceType: 'deployment', name: 'api', namespace: 'shop', context: 'prod' }),
]);
return { staging: stagingApi.summary, prod: prodApi.summary };

kube_pod_exec 会在请求批准前解析上下文;批准提示会显示该上下文,且批准仅对该上下文有效。

代码模式

代码模式为默认模式(MCP_MODE=code)。Agent 会针对类型化的 tools 全局对象编写简短的 TypeScript 代码,而不是调用几十个 MCP 工具。

在 run_code 中:

  • 用于 Kubernetes、Helm 及检测到的任何 Argo 功能的类型化 tools 命名空间,根据实时架构生成,因此参数不会凭空捏造。
  • 渐进式发现:tools.list()、tools.search()、tools.help() 和 tools.disabled()(最后一个会说明功能被阻止的原因)。
  • 多集群访问:tools.kubernetes.contexts()、tools.withContext(name) 和按调用设置的 context 参数(参见多集群)。
  • 受限运行时,作用域内仅有 console 和 tools——没有文件系统、网络或 process。
功能在 run_code 中顶层工具
kube_pod_exec永远不可用每次调用都需要用户批准(10 min,与参数绑定)
kube_port_forward默认拒绝(可配置)永不公开
其他所有功能可用仅当 MCP_MODE=tools 时

Pod exec 批准通过 MCP elicitation 实现,并采取默认拒绝策略。独立的 npm run code-mode 启动器没有受信任的批准界面,因此始终拒绝 Pod exec。

工作负载诊断

在一次代码模式调用中诊断 Pods、Deployments、StatefulSets、DaemonSets、ReplicaSets、Jobs 和 CronJobs:

return await tools.kubernetes.diagnose({
  resourceType: 'deployment',
  name: 'payments-api',
  namespace: 'payments',
  includeLogs: true,
});

资源类型默认为 pod,并接受不区分大小写的单数或复数名称。命名空间默认为当前上下文中的命名空间,然后是 default。诊断会按 UID 追踪控制器所有权,并关联状态、事件、必需配置键、镜像拉取 Secrets、PVC 和失败容器日志。不会返回配置和 Secret 值。日志和事件文本遵循 MCP_HIDE_SENSITIVE 的设置。

要通过 CLI 诊断 Pod:

npm run command -- kube_diagnose --name monitor-eks-aid-847484f765-4hwzz

诊断控制器时,添加 --resourceType deployment(或其他受支持的类型)。如果工作负载不在当前命名空间中,则添加 --namespace。

结果包含 target、context、observedAt、health、summary、findings、evidence 和 coverage。发现项会引用证据,并区分历史故障与当前问题;可能的原因与观察到的事实分开列出。缺少可选配置属于预期情况。禁止、不可用或缺失的必需读取会保留在 coverage.errors 中;截断和跳过的读取会显示在 coverage.truncations 中。健康状态为 healthy、degraded 或 unknown;即使信息收集不完整,仍可报告已确认的故障。

自定义拒绝规则

MCP_CODE_MODE_DISABLED_TOOLS(逗号分隔)用于控制在 run_code 中屏蔽哪些功能。解析顺序:

  1. MCP_CODE_MODE_DISABLED_TOOLS 环境变量
  2. kube-mcp.code-mode.json 中的 disabledTools
  3. 默认值:["kube_port_forward"]

空环境变量值会清空列表。无法添加 kube_pod_exec——它始终处于屏蔽状态。

协议

MCP 2026-07-28:

  • 使用 JSON Schema 2020-12 定义输入/输出契约,并在服务端进行验证
  • 提供机器可读的 structuredContent,并支持文本回退
  • 准确标注 read-only、destructive、idempotent 和 open-world
  • 工具按确定顺序排列,并为固定和依赖发现的表面提供缓存提示
  • 无状态 HTTP,支持发现功能和基于标头的路由(Mcp-Method、Mcp-Name)
  • 执行失败作为工具错误返回;协议错误仅用于格式错误的请求

本地开发

git clone https://github.com/mikhae1/kubeview-mcp.git
cd kubeview-mcp && npm install

npm run build      # compile
npm start          # build + run
npm test           # jest suite
npm run typecheck  # tsc --noEmit

# Invoke a tool directly
npm run command -- kube_list --namespace=default

协议测试将 SDK v2 客户端固定到 2026-07-28,并在进程内通过服务端处理程序路由(不开放端口):

npm test -- --runInBand \
  tests/server/StreamableHttpTransport.integration.test.ts \
  tests/server/StreamableHttpRuntime.test.ts \
  tests/server/TransportConfig.test.ts \
  tests/compat/McpSdkCompatibility.test.ts

贡献

欢迎贡献!请随时提交问题或拉取请求。

许可证

MIT © mikhae1

评论

支持 Markdown

第一次接触 MCP?

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

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