Kubernetes MCP Server
✨ Features | 🚀 Getting Started | 🎥 Demos | ⚙️ Configuration | 🛠️ Tools | 🧑💻 Development
https://github.com/user-attachments/assets/be2b67b3-fc1c-4d11-ae46-93deba8ed98e
✨ Features
一个强大且灵活的 Kubernetes 模型上下文协议 (MCP) 服务器实现,支持 Kubernetes 和 OpenShift。
- ✅ 配置:
- 自动检测 Kubernetes 配置的变化并更新 MCP 服务器。
- 查看和管理当前的 Kubernetes
.kube/config或集群内配置。
- ✅ 通用 Kubernetes 资源: 对 任何 Kubernetes 或 OpenShift 资源执行操作。
- 任何 CRUD 操作(创建或更新、获取、列出、删除)。
- ✅ Pods: 执行 Pod 特定操作。
- 列出所有命名空间中的 Pod 或特定命名空间中的 Pod。
- 获取指定命名空间中按名称的 Pod。
- 删除指定命名空间中按名称的 Pod。
- 显示指定命名空间中按名称的 Pod 日志。
- Top 获取指定命名空间中所有 Pod 或特定 Pod 的资源使用指标。
- Exec 进入 Pod 并运行命令。
- 运行 Pod 中的容器镜像,并可选择暴露。
- ✅ Namespaces: 列出 Kubernetes 命名空间。
- ✅ Events: 查看所有命名空间或特定命名空间中的 Kubernetes 事件。
- ✅ Projects: 列出 OpenShift 项目。
- ☸️ Helm:
- 在当前或提供的命名空间中安装 Helm 图表。
- 列出所有命名空间或特定命名空间中的 Helm 发布。
- 在当前或提供的命名空间中卸载 Helm 发布。
与其他 Kubernetes MCP 服务器实现不同,这个 不是 仅围绕 kubectl 或 helm 命令行工具的包装。
它是一个基于 Go 的原生实现,直接与 Kubernetes API 服务器交互。
无需在系统上安装外部依赖项或工具。 如果您使用的是原生二进制文件,则无需在系统上安装 Node 或 Python。
- ✅ 轻量级: 服务器作为一个原生二进制文件分发,支持 Linux、macOS 和 Windows。
- ✅ 高性能 / 低延迟: 直接与 Kubernetes API 服务器交互,无需调用和等待外部命令的开销。
- ✅ 跨平台: 可作为原生二进制文件(支持 Linux、macOS 和 Windows)、npm 包、Python 包以及容器/Docker 镜像提供。
- ✅ 可配置: 支持 命令行参数 来配置服务器行为。
- ✅ 经过充分测试: 服务器具有广泛的测试套件,以确保其在不同的 Kubernetes 环境中的可靠性和正确性。
🚀 Getting Started
要求
- 可以访问 Kubernetes 集群。
Claude Desktop
使用 npx
如果您已安装 npm,这是开始使用 kubernetes-mcp-server 在 Claude Desktop 上最快的办法。
打开您的 claude_desktop_config.json 并将 MCP 服务器添加到 mcpServers 列表中:
{
"mcpServers": {
"kubernetes": {
"command": "npx",
"args": [
"-y",
"kubernetes-mcp-server@latest"
]
}
}
}
VS Code / VS Code Insiders
通过按下以下链接在 VS Code Insiders 中安装 Kubernetes MCP 服务器扩展:
或者,您可以通过运行以下命令手动安装扩展:
# For VS Code
code --add-mcp '{"name":"kubernetes","command":"npx","args":["kubernetes-mcp-server@latest"]}'
# For VS Code Insiders
code-insiders --add-mcp '{"name":"kubernetes","command":"npx","args":["kubernetes-mcp-server@latest"]}'
Goose CLI
Goose CLI 是开始使用人工智能 (AI) 代理最容易(且最便宜)的方式。
使用 npm
如果您已安装 npm,这是开始使用 kubernetes-mcp-server 最快的方式。
打开您的 goose config.yaml 并将 MCP 服务器添加到 mcpServers 列表中:
extensions:
kubernetes:
command: npx
args:
- -y
- kubernetes-mcp-server@latest
🎥 Demos
诊断和自动修复 OpenShift 部署
演示如何利用 Kubernetes MCP 服务器帮助 Claude Desktop 自动诊断和修复 OpenShift 中的部署,无需任何用户协助。
https://github.com/user-attachments/assets/a576176d-a142-4c19-b9aa-a83dc4b8d941
Vibe Coding 一个简单的游戏并将其部署到 OpenShift
在这个演示中,我将带您了解如何使用 VS Code 进行 Vibe Coding 来创建一个简单的游戏,以及如何利用 Podman MCP 服务器 和 Kubernetes MCP 服务器将其部署到 OpenShift。
Supercharge GitHub Copilot with Kubernetes MCP Server in VS Code - One-Click Setup!
在这个演示中,我将向您展示如何只需点击一个链接即可在 VS code 中设置 Kubernetes MCP 服务器。
⚙️ Configuration
Kubernetes MCP 服务器可以使用命令行 (CLI) 参数进行配置。
您可以通过使用 npx、uvx 或下载 最新发布二进制文件 来运行 CLI 可执行文件。
# 使用 npx 运行 Kubernetes MCP 服务器(如果您已安装 npm 和 node)
npx kubernetes-mcp-server@latest --help
# 使用 uvx 运行 Kubernetes MCP 服务器(如果您已安装 uv 和 python)
uvx kubernetes-mcp-server@latest --help
# 使用最新发布二进制文件运行 Kubernetes MCP 服务器
./kubernetes-mcp-server --help
配置选项
| 选项 | 描述 |
|---|---|
--http-port | 以 Streamable HTTP 模式启动 MCP 服务器并监听指定端口(路径 /mcp)。已弃用:请使用 --port。 |
--sse-port | 以 Server-Sent Event (SSE) 模式启动 MCP 服务器并监听指定端口(路径 /sse)。已弃用:请使用 --port。 |
--log-level | 设置日志级别(值 0-9)。类似于 kubectl 日志级别。 |
--kubeconfig | Kubernetes 配置文件的路径。如果未提供,它将尝试解析配置(集群内、默认位置等)。 |
--list-output | 资源列表操作的输出格式(之一:yaml、table)(默认 "table") |
--read-only | 如果设置,MCP 服务器将以只读模式运行,这意味着它将不允许对 Kubernetes 集群进行任何写入操作(创建、更新、删除)。这对于调试或检查集群而不进行更改非常有用。 |
--disable-destructive | 如果设置,MCP 服务器将禁用 Kubernetes 集群上的所有破坏性操作(删除、更新等)。这对于调试或检查集群而不会意外更改非常有用。此选项在 --read-only 使用时无效。 |
🛠️ Tools
configuration_view
获取当前的 Kubernetes 配置内容作为 kubeconfig YAML
参数:
minified(boolean, 可选, 默认:true)- 返回配置的精简版本
- 如果
true,仅保留当前上下文和相关配置部分 - 如果
false,返回所有上下文、集群、auth-infos 和用户
events_list
列出当前集群中所有命名空间中的 Kubernetes 事件
参数:
namespace(string, 可选)- 从其中检索事件的命名空间。如果未提供,将列出所有命名空间中的事件
helm_install
在当前或提供的命名空间中安装提供的名称和图表的 Helm 图表
参数:
chart(string, 必填)- 要安装的 Helm 图表的名称
- 可以是本地路径或远程 URL
- 示例:
./my-chart.tgz或https://example.com/my-chart.tgz
values(object, 可选)- 传递给 Helm 图表的值
- 示例:
{"key": "value"}
name(string, 可选)- Helm 发布的名称
- 如果未提供,将随机命名
namespace(string, 可选)- 安装 Helm 图表的命名空间
- 如果未提供,将使用配置的命名空间
helm_list
列出当前或提供的命名空间(或指定所有命名空间)中的所有 Helm 发布
参数:
namespace(string, 可选)- 从其中列出 Helm 发布的命名空间
- 如果未提供,将使用配置的命名空间
all_namespaces(boolean, 可选)- 如果
true,将列出所有命名空间中的 Helm 发布 - 如果
false,将列出指定命名空间中的 Helm 发布
- 如果
helm_uninstall
在当前或提供的命名空间中卸载提供的名称的 Helm 发布
参数:
name(string, 必填)- 要卸载的 Helm 发布的名称
namespace(string, 可选)- 从其中卸载 Helm 发布的命名空间
- 如果未提供,将使用配置的命名空间
namespaces_list
列出当前集群中的所有 Kubernetes 命名空间
参数: 无
pods_delete
在当前或提供的命名空间中删除提供的名称的 Kubernetes Pod
参数:
name(string, 必填)- 要删除的 Pod 的名称
namespace(string, 必填)- 从其中删除 Pod 的命名空间
pods_exec
在当前或提供的命名空间中按提供的名称和命令执行 Kubernetes Pod 中的命令
参数:
command(string[], 必填)- 在 Pod 容器中执行的命令
- 第一个元素是命令,其余是参数
- 示例:
["ls", "-l", "/tmp"]
name(string, 必填)- Pod 的名称
namespace(string, 必填)- Pod 的命名空间
container(string, 可选)- 要获取日志的 Pod 容器的名称
pods_get
获取当前或提供的命名空间中按提供的名称的 Kubernetes Pod
参数:
name(string, 必填)- Pod 的名称
namespace(string, 必填)- 从其中获取 Pod 的命名空间
pods_list
列出当前集群中所有命名空间的所有 Kubernetes Pod
参数:
labelSelector(string, 可选)- Kubernetes 标签选择器(例如 'app=myapp,env=prod' 或 'app in (myapp,yourapp))。使用此选项按标签过滤 Pod
pods_list_in_namespace
列出当前集群中指定命名空间的所有 Kubernetes Pod
参数:
namespace(string, 必填)- 从其中列出 Pod 的命名空间
labelSelector(string, 可选)- Kubernetes 标签选择器(例如 'app=myapp,env=prod' 或 'app in (myapp,yourapp))。使用此选项按标签过滤 Pod
pods_log
获取当前或提供的命名空间中按提供的名称的 Kubernetes Pod 的日志
参数:
name(string, 必填)- 要获取日志的 Pod 的名称
namespace(string, 必填)- 从其中获取 Pod 日志的命名空间
container(string, 可选)- 要获取日志的 Pod 容器的名称
pods_run
在当前或提供的命名空间中按提供的容器镜像和可选名称运行 Kubernetes Pod
参数:
image(string, 必填)- 在 Pod 中运行的容器镜像
namespace(string, 必填)- 运行 Pod 的命名空间
name(string, 可选)- Pod 的名称(如果未提供,将随机命名)
port(number, 可选)- 从 Pod 容器暴露的 TCP/IP 端口
- 如果未提供,则不暴露端口
pods_top
列出指定 Kubernetes Pod 在所有命名空间、提供的命名空间或当前命名空间中的资源消耗(CPU 和内存),这些资源消耗由 Kubernetes Metrics Server 记录
参数:
all_namespaces(boolean, 可选, 默认:true)- 如果
true,将列出所有命名空间中 Pod 的资源消耗 - 如果
false,将列出指定命名空间中 Pod 的资源消耗
- 如果
namespace(string, 可选)- 从其中列出 Pod 资源的命名空间
- 如果未提供,将列出配置命名空间(如果 all_namespaces 为 false)中的 Pod
name(string, 可选)- 要获取资源消耗的 Pod 的名称
- 如果未提供,将列出适用命名空间(中的)所有 Pod 的资源消耗
label_selector(string, 可选)- Kubernetes 标签选择器(例如 'app=myapp,env=prod' 或 'app in (myapp,yourapp)),当您想按标签过滤 Pod 时使用此选项(可选,仅在 name 未提供时适用)
projects_list
列出当前集群中的所有 OpenShift 项目
resources_create_or_update
通过提供 Kubernetes 资源的 YAML 或 JSON 表示来创建或更新当前集群中的 Kubernetes 资源
参数:
resource(string, 必填)- 包含 Kubernetes 资源表示的 JSON 或 YAML
- 应包括顶级字段,如 apiVersion、kind、metadata 和 spec
常见的 apiVersion 和 kind 包括:
- v1 Pod
- v1 Service
- v1 Node
- apps/v1 Deployment
- networking.k8s.io/v1 Ingress
resources_delete
删除当前集群中的 Kubernetes 资源
参数:
apiVersion(string, 必填)- 资源的 apiVersion(例如,
v1、apps/v1、networking.k8s.io/v1)
- 资源的 apiVersion(例如,
kind(string, 必填)- 资源的 kind(例如,
Pod、Service、Deployment、Ingress)
- 资源的 kind(例如,
name(string, 必填)- 资源的名称
namespace(string, 可选)- 从其中删除命名空间资源的命名空间
- 忽略集群范围资源
- 如果未提供,将使用配置的命名空间
resources_get
获取当前集群中的 Kubernetes 资源
参数:
apiVersion(string, 必填)- 资源的 apiVersion(例如,
v1、apps/v1、networking.k8s.io/v1)
- 资源的 apiVersion(例如,
kind(string, 必填)- 资源的 kind(例如,
Pod、Service、Deployment、Ingress)
- 资源的 kind(例如,
name(string, 必填)- 资源的名称
namespace(string, 可选)- 从其中检索命名空间资源的命名空间
- 忽略集群范围资源
- 如果未提供,将使用配置的命名空间(如果 all_namespaces 为 false)
labelSelector(string, 可选)- Kubernetes 标签选择器(例如 'app=myapp,env=prod' 或 'app in (myapp,yourapp))。使用此选项按标签过滤 Pod。
resources_list
列出当前集群中的 Kubernetes 资源和对象
参数:
apiVersion(string, 必填)- 资源的 apiVersion(例如,
v1、apps/v1、networking.k8s.io/v1)
- 资源的 apiVersion(例如,
kind(string, 必填)- 资源的 kind(例如,
Pod、Service、Deployment、Ingress)
- 资源的 kind(例如,
namespace(string, 可选)- 从其中检索命名空间资源的命名空间
- 忽略集群范围资源
- 如果未提供,将列出所有命名空间中的资源
labelSelector(string, 可选)- Kubernetes 标签选择器(例如 'app=myapp,env=prod' 或 'app in (myapp,yourapp))。使用此选项按标签过滤 Pod。
🧑💻 Development
使用 mcp-inspector 运行
编译项目并使用 mcp-inspector 运行 Kubernetes MCP 服务器以检查 MCP 服务器。
# 编译项目
make build
# 使用 mcp-inspector 运行 Kubernetes MCP 服务器
npx @modelcontextprotocol/inspector@latest $(pwd)/kubernetes-mcp-server