Back to MCP Servers

Kom

Provides MCP multi-cluster Kubernetes management and operations. It can be integrated as an SDK into your own project and includes nearly 50 built-in tools covering common DevOps and development scenarios. Supports both standard and CRD resources.

cloud-platformskubernetes
By weibaohui
14935Updated 5 months agoGoMIT

Installation

npx -y kom

Configuration

{
  "mcpServers": {
    "kom": {
      "command": "npx",
      "args": ["-y", "kom"]
    }
  }
}

How to use

  1. Run the installation command above (if needed)
  2. Open your Claude Code settings file (~/.claude/settings.json)
  3. Add the configuration to the mcpServers section
  4. Restart Claude Code to apply changes

Kom - Kubernetes Operations Manager

English | 中文 kom FOSSA Status

简介

kom 是一个用于 Kubernetes 操作的工具,相当于SDK级的kubectl、client-go的使用封装。 它提供了一系列功能来管理 Kubernetes 资源,包括创建、更新、删除和获取资源。这个项目支持多种 Kubernetes 资源类型的操作,并能够处理自定义资源定义(CRD)。 通过使用 kom,你可以轻松地进行资源的增删改查和日志获取以及操作POD内文件等动作,甚至可以使用SQL语句来查询、管理k8s资源。

特点

  1. 简单易用:kom 提供了丰富的功能,包括创建、更新、删除、获取、列表等,包括对内置资源以及CRD资源的操作。
  2. 多集群支持:通过RegisterCluster,你可以轻松地管理多个 Kubernetes 集群,支持AWS EKS集群。
  3. MCP支持:支持多集群的MCP管理,同时支持stdio、sse两种模式,内置58种工具,支持SSE模式,支持私有化部署,多人共享。支持超过百种组合操作。
  4. 支持跨命名空间:通过kom.Namespace("default","kube-system").List(&items) 跨命名空间查询资源。
  5. 链式调用:kom 提供了链式调用,使得操作资源更加简单和直观。
  6. 支持自定义资源定义(CRD):kom 支持自定义资源定义(CRD),你可以轻松地定义和操作自定义资源。
  7. 支持回调机制,轻松拓展业务逻辑,而不必跟k8s操作强耦合。
  8. 支持POD内文件操作,轻松上传、下载、删除文件。
  9. 支持高频操作封装,如deployment的restart重启、scale扩缩容、启停等20余项操作功能。
  10. 支持SQL查询k8s资源。select * from pod where metadata.namespace='kube-system' or metadata.namespace='default' order by metadata.creationTimestamp desc
  11. 支持查询缓存,在高频、批量查询场景下,可设置缓存过期时间,提升查询性能。列表过滤条件不受缓存影响。
  12. 支持Prometheus查询,支持通过集群内的Prometheus服务或外部Prometheus地址进行监控数据查询,支持瞬时查询和区间查询,提供多种结果解析方式。

示例程序

k8m 是一个轻量级的 Kubernetes 管理工具,它基于kom、amis实现,单文件,支持多平台架构。

  1. 下载:从 https://github.com/weibaohui/k8m 下载最新版本。
  2. 运行:使用 ./k8m 命令启动,访问http://127.0.0.1:3618

安装

import (
    "github.com/weibaohui/kom"
    "github.com/weibaohui/kom/callbacks"
)
func main() {
    // 注册回调,务必先注册
    callbacks.RegisterInit()
    // 注册集群
	defaultKubeConfig := os.Getenv("KUBECONFIG")
	if defaultKubeConfig == "" {
		defaultKubeConfig = filepath.Join(homedir.HomeDir(), ".kube", "config")
	}
	_, _ = kom.Clusters().RegisterInCluster()
	_, _ = kom.Clusters().RegisterByPathWithID(defaultKubeConfig, "default")
	kom.Clusters().Show()
	// 其他逻辑
}

使用示例

0. 多集群 k8s MCP 支持

同时支持stdio、sse两种模式 支持多个tools 支持。包括对任意资源的查询列表删除描述操作,以及POD日志读取操作。

1.集成到代码中

// 一行代码启动MCP Server
mcp.RunMCPServer("kom mcp server", "0.0.1", 9096)


2. 编译

# 源码启动
go build main.go 
//编译为kom

3. 启动

启动后支持两种模式,一种为stdio,一种sse。 管理k8s默认使用KUBECONFIG env环境变量。

# 设置KUBECONFIG环境变量
export KUBECONFIG = /Users/xxx/.kube/config
# 运行
./kom 
# MCP Server 访问地址
http://IP:9096/sse

此时,编译得到的二进制文件,可当做stdio 模式使用。 http://IP:9096/sse 模式,可以当做sse 模式使用。

4. 集成到MCP工具中

支持stdio\sse 两种方式集成。 适合MCP工具集成,如Cursor、Claude Desktop(仅支持stdio模式)、Windsurf等,此外也可以使用这些软件的UI操作界面进行添加。

{
  "mcpServers": {
    "kom": {
      "type": "sse",
      "url": "http://IP:9096/sse"
    }
  }
}
{
    "mcpServers": {
        "k8m": {
            "command": "path/to/kom",
            "args": []
        }
    }
}

MCP工具列表(59种)

类别方法描述
集群管理(1)list_k8s_clusters列出所有已注册的Kubernetes集群
DaemonSet管理(1)restart_k8s_daemonset通过集群、命名空间和名称,重启DaemonSet
部署管理(12)scale_k8s_deployment通过集群、命名空间、名称 扩缩容Deployment,设置副本数
restart_k8s_deployment通过集群、命名空间和名称,重启Deployment
stop_k8s_deployment停止Deployment
restore_k8s_deployment恢复Deployment副本数
update_k8s_deployment_image_tag更新Deployment中容器的镜像Tag
get_k8s_deployment_rollout_history查询升级历史
undo_k8s_deployment_rollout回滚
pause_k8s_deployment_rollout暂停升级
resume_k8s_deployment_rollout恢复升级
get_k8s_deployment_rollout_status查询升级状态
get_k8s_deployment_hpa_list查询Deployment的HPA列表
list_k8s_deploy_event列出Deployment相关的事件
动态资源管理(含CRD,8)get_k8s_resource通过集群、命名空间和名称获取Kubernetes资源详情
describe_k8s_resource通过集群、命名空间和名称获取Kubernetes资源详情
delete_k8s_resource通过集群、命名空间和名称删除Kubernetes资源
list_k8s_resource按集群和资源类型列出Kubernetes资源
annotate_k8s_resource为Kubernetes资源添加或删除注解
label_k8s_resource为Kubernetes资源添加或删除标签
patch_k8s_resource通过集群、命名空间和名称更新Kubernetes资源
GetDynamicResource获取动态资源
节点管理(11)taint_k8s_node为节点添加污点
untaint_k8s_node为节点移除污点
cordon_k8s_node设置节点为不可调度状态
uncordon_k8s_node设置节点为可调度状态
drain_k8s_node清空节点上的Pod并防止新的Pod调度
get_k8s_node_ip_usage查询节点IP资源使用情况
list_k8s_node获取Node列表
get_k8s_top_node获取Node节点CPU和内存资源用量排名列表
get_k8s_pod_count_running_on_node查询某个节点上运行的Pod数量统计
get_k8s_node_resource_usage查询节点资源使用情况统计
TaintNodeTool为节点添加污点
事件管理(1)list_k8s_event按集群和命名空间列出Kubernetes事件
Ingress管理(1)set_default_k8s_ingressclass设置IngressClass为默认
Pod 管理(18)run_command_in_k8s_pod在Pod内执行命令
list_k8s_pod_event列出Pod相关的事件
list_files_in_k8s_pod获取Pod中指定路径下的文件列表
list_pod_all_files获取Pod中指定路径下的所有文件列表,包含子目录
delete_k8s_pod删除Pod
delete_pod_file删除Pod中的指定文件
get_k8s_pod_linked_env获取Pod运行时的环境变量信息
get_pod_linked_env_from_yaml通过Pod yaml 定义 获取Pod定义中的环境变量信息
get_k8s_pod_linked_services获取与Pod关联的Service
get_pod_linked_ingresses获取与Pod关联的Ingress
get_pod_linked_endpoints获取与Pod关联的Endpoints
list_k8s_pod获取Pod列表
get_k8s_top_pod获取Pod CPU 内存 资源用量排名 列表
ListPodFilesTool列出Pod文件
ListAllPodFilesTool列出Pod所有文件
DeletePodFileTool删除Pod文件
UploadPodFileTool上传Pod文件
GetPodLogsTool获取Pod日志
describe_k8s_pod描述Pod容器组
存储管理(3)set_k8s_default_storageclass设置StorageClass为默认
get_k8s_storageclass_pvc_count获取StorageClass下的PVC数量
get_k8s_storageclass_pv_count获取StorageClass下的PV数量
YAML管理(2)apply_k8s_yaml通过YAML创建或更新Kubernetes资源
delete_k8s_yaml通过YAML删除Kubernetes资源

启动命令

mcp.RunMCPServer("kom mcp server", "0.0.1", 3619)

AI工具集成

Claude Desktop
  1. 打开Claude Desktop设置面板
  2. 在API配置区域添加MCP Server地址
  3. 启用SSE事件监听功能
  4. 验证连接状态
{
  "mcpServers": {
    "k8m": {
      "command": "path/to/kom",
      "args": []
    }
  }
}
Cursor
  1. 进入Cursor设置界面
  2. 找到扩展服务配置选项
  3. 支持sse、stdio两种方式。sse 方式填写http://localhost:9096/sse,stdio方式填写kom的文件位置。
Windsurf
  1. 访问配置中心
  2. 设置API服务器地址
  3. 支持sse、stdio两种方式。sse 方式填写http://localhost:9096/sse,stdio方式填写kom的文件位置。

cherry studio

  1. 点击左下角设置
  2. 点击MCP 服务器
  3. 点击添加服务器
  4. 支持sse、stdio两种方式。sse 方式填写http://localhost:9096/sse,stdio方式填写kom的文件位置。

1. 多集群管理

注册多集群

// 注册InCluster集群,名称为InCluster
kom.Clusters().RegisterInCluster()
// 注册两个带名称的集群,分别名为orb和docker-desktop
kom.Clusters().RegisterByPathWithID("/Users/kom/.kube/orb", "orb")
kom.Clusters().RegisterByPathWithID("/Users/kom/.kube/config", "docker-desktop")
// 注册一个名为default的集群,那么kom.DefaultCluster()则会返回该集群。
kom.Clusters().RegisterByPathWithID("/Users/kom/.kube/config", "default")

注册AWS EKS集群

// 配置 EKS 集群信息
config := aws.EKSAuthConfig{
    AccessKey:       "XXX",        // AWS Access Key ID
    SecretAccessKey: "yyy",        // AWS Secret Access Key
    Region:          "us-east-1",  // AWS 区域
    ClusterName:     "k8m",        // EKS 集群名称
}

// 注册 AWS EKS 集群
_, err := kom.Clusters().RegisterAWSCluster(config)
if err != nil {
    fmt.Printf("注册 EKS 集群失败: %v", err)
    return
}

// 使用注册的 EKS 集群
var pods []corev1.Pod
clusterID := fmt.Sprintf("%s-%s", config.Region, config.ClusterName) // 集群ID格式: {Region}-{ClusterName}
err = kom.Cluster(clusterID).Resource(&corev1.Pod{}).Namespace("kube-system").List(&pods).Error

AWS EKS 集群注册说明:

  • AccessKey: AWS 访问密钥 ID
  • SecretAccessKey: AWS 秘密访问密钥
  • Region: AWS 区域,如 us-east-1ap-southeast-1
  • ClusterName

View source on GitHub