Back to MCP directory
publicPublicdnsLocal runtime

kubernetes-mcp

Kubernetes MCP服务器是一个提供安全只读访问Kubernetes资源的工具,用于调试和检查集群状态。支持多集群切换、CRD资源和智能资源发现,强调安全性和高性能。

article

README

🚀 Kubernetes MCP Server

Kubernetes MCP Server 是一个模型上下文协议(MCP)服务器,它为调试和检查提供了对 Kubernetes 资源的安全、只读访问。该服务器在设计时充分考虑了安全性,可在不具备修改功能的情况下,提供全面的集群可见性。

tests codecov License: MIT

https://github.com/user-attachments/assets/89df70b0-65d1-461c-b4ab-84b2087136fa

🚀 快速开始

前提条件

  • 拥有有效的 kubeconfig 文件,以访问 Kubernetes 集群。
  • 安装 Go 1.24 或更高版本(用于从源代码构建)。

安装选项

选项 1:使用 Go 安装(推荐)

go install github.com/kkb0318/kubernetes-mcp@latest

安装完成后,二进制文件将位于 $GOPATH/bin/kubernetes-mcp (若未设置 GOPATH,则位于 $HOME/go/bin/kubernetes-mcp)。

选项 2:从源代码构建

git clone https://github.com/kkb0318/kubernetes-mcp.git
cd kubernetes-mcp
go build -o kubernetes-mcp .

✨ 主要特性

  • 🔒 只读安全:可安全地检查 Kubernetes 资源,且不具备修改功能。
  • 🎯 支持自定义资源定义(CRD):可与集群中的任何自定义资源定义无缝协作。
  • 🌐 多集群支持:可在不同的 Kubernetes 上下文之间无缝切换。
  • 🔍 智能发现:可通过 API 组子字符串查找资源(例如,使用 "flux" 查找 FluxCD 资源,使用 "argo" 查找 ArgoCD 资源)。
  • ⚡ 高性能:通过过滤和分页实现高效的资源查询。
  • 🛠️ 综合工具集
    • list_resources:使用高级选项列出并过滤 Kubernetes 资源。
    • describe_resource:获取特定资源的详细信息。
    • get_pod_logs:使用复杂的过滤功能检索 Pod 日志。
    • list_events:列出并过滤 Kubernetes 事件,用于调试和监控。
    • list_contexts:从 kubeconfig 文件中列出所有可用的 Kubernetes 上下文。

📦 安装指南

MCP 服务器设置

将服务器添加到 MCP 配置中:

基本配置

自动使用 ~/.kube/config

{
  "mcpServers": {
    "kubernetes": {
      "command": "/path/to/kubernetes-mcp"
    }
  }
}

自定义 kubeconfig

{
  "mcpServers": {
    "kubernetes": {
      "command": "/path/to/kubernetes-mcp",
      "env": {
        "KUBECONFIG": "/path/to/your/kubeconfig"
      }
    }
  }
}

⚠️ 重要提示

请将 /path/to/kubernetes-mcp 替换为实际的二进制文件路径。

独立使用

# 使用默认 kubeconfig (~/.kube/config)
./kubernetes-mcp

# 使用自定义 kubeconfig 路径
KUBECONFIG=/path/to/your/kubeconfig ./kubernetes-mcp

⚠️ 重要提示

请确保对要检查的 Kubernetes 资源具有适当的读取权限。

💻 使用示例

list_resources

使用高级功能列出并过滤 Kubernetes 资源。

| 参数 | 类型 | 描述 | |------|------|------| | context | 可选 | kubeconfig 中的 Kubernetes 上下文名称(留空则使用当前上下文) | | kind | 必需 | 资源类型(Pod、Deployment、Service 等),或使用 "all" 进行发现 | | groupFilter | 可选 | 按 API 组子字符串过滤特定项目的资源 | | namespace | 可选 | 目标命名空间(默认为所有命名空间) | | labelSelector | 可选 | 按标签过滤(例如,"app=nginx") | | fieldSelector | 可选 | 按字段过滤(例如,"metadata.name=my-pod") | | limit | 可选 | 返回的最大资源数量 | | timeoutSeconds | 可选 | 请求超时时间(默认:30 秒) | | showDetails | 可选 | 返回完整的资源对象,而不是摘要 |

示例:

// 列出带有标签选择器的 Pod
{
  "kind": "Pod",
  "namespace": "default",
  "labelSelector": "app=nginx"
}

// 列出特定集群上下文中的 Pod
{
  "kind": "Pod",
  "context": "production-cluster",
  "namespace": "default"
}

// 发现 FluxCD 资源
{
  "kind": "all",
  "groupFilter": "flux"
}

describe_resource

获取特定 Kubernetes 资源的详细信息。

| 参数 | 类型 | 描述 | |------|------|------| | context | 可选 | kubeconfig 中的 Kubernetes 上下文名称(留空则使用当前上下文) | | kind | 必需 | 资源类型(Pod、Deployment 等) | | name | 必需 | 资源名称 | | namespace | 可选 | 目标命名空间 |

示例:

{
  "kind": "Pod",
  "name": "nginx-pod",
  "namespace": "default"
}

get_pod_logs

使用复杂的过滤选项检索 Pod 日志。

| 参数 | 类型 | 描述 | |------|------|------| | context | 可选 | kubeconfig 中的 Kubernetes 上下文名称(留空则使用当前上下文) | | name | 必需 | Pod 名称 | | namespace | 可选 | Pod 命名空间(默认为 "default") | | container | 可选 | 特定容器名称 | | tail | 可选 | 从末尾开始的行数(默认:100) | | since | 可选 | 持续时间(例如,"5s"、"2m"、"3h") | | sinceTime | 可选 | RFC3339 时间戳 | | timestamps | 可选 | 在输出中包含时间戳 | | previous | 可选 | 获取上一个容器实例的日志 |

示例:

{
  "name": "nginx-pod",
  "namespace": "default",
  "tail": 50,
  "since": "5m",
  "timestamps": true
}

list_events

使用高级过滤选项列出并过滤 Kubernetes 事件,用于调试和监控。

| 参数 | 类型 | 描述 | |------|------|------| | context | 可选 | kubeconfig 中的 Kubernetes 上下文名称(留空则使用当前上下文) | | namespace | 可选 | 目标命名空间(留空则为所有命名空间) | | object | 可选 | 按对象名称过滤(例如,Pod 名称、Deployment 名称) | | eventType | 可选 | 按事件类型过滤:"Normal" 或 "Warning"(不区分大小写) | | reason | 可选 | 按事件原因过滤(例如,"Pulled"、"Failed"、"FailedScheduling") | | since | 可选 | 持续时间(例如,"5s"、"2m"、"1h") | | sinceTime | 可选 | RFC3339 时间戳(例如,"2025-06-20T10:00:00Z") | | limit | 可选 | 返回的最大事件数量(默认:100) | | timeoutSeconds | 可选 | 请求超时时间(默认:30 秒) |

示例:

// 列出最近的警告事件
{
  "eventType": "Warning",
  "since": "30m"
}

// 列出特定 Pod 的事件
{
  "object": "nginx-pod",
  "namespace": "default"
}

// 列出调度失败的事件
{
  "reason": "FailedScheduling",
  "limit": 50
}

list_contexts

从 kubeconfig 文件中列出所有可用的 Kubernetes 上下文。

参数: 无 - 此工具不接受任何参数。

示例响应:

{
  "contexts": [
    {
      "name": "production-cluster",
      "is_current": false
    },
    {
      "name": "staging-cluster", 
      "is_current": true
    },
    {
      "name": "development-cluster",
      "is_current": false
    }
  ],
  "current_context": "staging-cluster",
  "total": 3
}

用例: 非常适合多集群工作流,您可以:

  • 发现可用的 Kubernetes 上下文。
  • 识别当前活动的上下文。
  • 规划跨多个集群的操作。

🌟 高级特性

🌐 多集群支持

通过上下文切换,可无缝地与多个 Kubernetes 集群协作:

  • 上下文参数:所有工具现在都支持可选的 context 参数,用于指定要查询的集群。
  • 自动发现:使用现有的 kubeconfig 文件,并自动发现可用的上下文。
  • 默认上下文:如果未指定上下文,则使用 kubeconfig 中的当前上下文。
  • 缓存连接:通过连接缓存有效地管理与多个集群的连接。

多集群示例:

// 查询生产集群
{
  "kind": "Pod",
  "context": "production-cluster",
  "namespace": "default"
}

// 获取暂存环境中的 Pod 日志
{
  "name": "api-server",
  "context": "staging-cluster",
  "namespace": "api"
}

// 跨环境比较资源(使用多次调用)
{
  "kind": "Deployment",
  "context": "production-cluster",
  "namespace": "app"
}

🎯 自定义资源定义(CRD)支持

可自动发现并与集群中的任何 CRD 协作。只需在 list_resourcesdescribe_resource 工具中使用 CRD 的 Kind 名称即可。

🔍 智能资源发现

使用 groupFilter 参数按 API 组子字符串发现资源:

| 过滤器 | 发现的资源 | 示例 | |--------|-----------|------| | "flux" | FluxCD 资源 | HelmReleases、Kustomizations、GitRepositories | | "argo" | ArgoCD 资源 | Applications、AppProjects、ApplicationSets | | "istio" | Istio 资源 | VirtualServices、DestinationRules、Gateways | | "cert-manager" | cert-manager 资源 | Certificates、Issuers、ClusterIssuers |

🔒 安全与保障

该服务器在设计时将安全作为首要考虑因素:

  • 只读访问 - 无法创建、修改或删除资源。
  • 适合生产环境 - 可安全地在生产环境中使用。
  • 最小权限 - 仅需要对集群资源的读取权限。
  • 无破坏性操作 - 不会对集群造成损害。

🤝 贡献

我们欢迎贡献!请确保所有更改都保持服务器的只读性质,并包含适当的测试。

📄 许可证

本项目采用 MIT 许可证 - 有关详细信息,请参阅 LICENSE 文件。

help

Runtime guide

cloud

Hosted runtime

Hosted servers run from a provider-managed environment. You usually connect the MCP client to the hosted endpoint or follow the provider's authorization flow, without keeping a local process alive

  1. Open provider connection page
  2. Authorize or copy endpoint
  3. Connect from your MCP client
terminal

Local runtime / other methods

Local servers run on your own machine or infrastructure. You normally copy the server_config into your MCP client, install the required package, and provide env variables from env_schema when needed

  1. Copy server_config
  2. Install required package
  3. Fill env variables and restart client