用 Cursor+Harvester MCP做智能运维:在编辑器里“聊天看集群”

!! 大家好,我是wanger,一个爱折腾的运维工程,一个睡觉都被自己丑醒的云原生爱好者。
作者:wanger
公众号:运维开发故事
博客:https://devopstory.cn

最近 MCP(Model Context Protocol)很火,简单说就是:
让大模型“通过工具”直接访问你的系统——数据库、Git 仓库、K8s 集群、Harvester 虚拟化……
这篇文章记录一下我自己在 Windows + Cursor + Harvester 集群 上的折腾过程:
MCP / Harvester MCP 是什么
如何在本机用 Go 安装 harvester-mcp-server
在 Cursor 里配置 MCP
实际使用时能做什么、暂时还不能做什么(比如目前还没 HTTP 访问,只能本地 stdio)
希望能给你一点思路:不用切来切去,只在一个编辑器里就能一边看代码一边“问”集群。
一、MCP & Harvester MCP 简介

  1. MCP 是什么?
    MCP(Model Context Protocol)是 Anthropic 提出的一个协议,用来把 大模型 ↔ 外部系统 之间的交互标准化。
    一端是 MCP Server:封装了你的业务系统(Harvester、Kubernetes、Git、DB……)
    另一端是 MCP Client:比如 Claude Desktop、Cursor、VSCode 插件
    模型通过 MCP 暴露的 tools / resources 来“看”和“操作”你的系统
    好处就是:
    你写(或者用别人的)一个 MCP Server,任何支持 MCP 的客户端都能接进去用。
  2. Harvester MCP 是干嘛的?
    Harvester 本质是一个基于 Kubernetes + KubeVirt 的超融合平台,用来管理虚拟机、镜像、网络等。
    社区有人做了一个 Harvester MCP Server,作用大致是:
    通过 kubeconfig 连接你的 Harvester 集群
    向上暴露一组 MCP 工具:
    列表 / 查看:Nodes、Namespaces、Pods
    Harvester 资源:虚拟机(VirtualMachine)、Images、Volumes、Networks 的 List / Get
    目前这个 MCP 的定位更偏向 “可观测 + 查询”:
    ✅ 能列出节点 / 虚拟机 / 镜像 / 网络等信息
    ❌ 对虚拟机的 创建 / 开关机 / 删除还没有真正实现写操作
    ❌ MCP Server 只有 stdio 模式,没有 HTTP/SSE 接口(不能直接给 Dify 这类 HTTP 客户端用)
    也就是说,现在它更适合做“运维信息面板 + YAML/命令生成器”,不是一键自动化的控制台。
    二、前置条件准备
    我这边的环境大致是:
    一套 Harvester 集群(可以通过浏览器访问管理界面)
    一台 Windows 开发机:
    已安装 Cursor(带 MCP 支持)
    安装了 Go(1.20+)
  3. 在 Windows 上安装 Go
    这里略过详细安装步骤,只提醒两点:
    PATH 里要有你的 Go 安装路径,比如:
    D:\Program Files\Go\bin
    建议设置好代理和 module 模式(在 CMD / PowerShell):
    go env -w GO111MODULE=on
    go env -w GOPROXY=https://goproxy.cn,direct
    方便后面拉 Go 模块,不然国内网络会各种超时。
    三、用 Go 安装 Harvester MCP Server
  4. 一条命令安装(推荐)
    在 PowerShell 或 CMD 中执行:
    go install github.com/starbops/harvester-mcp-server/cmd/harvester-mcp-server@latest
    注意这里的包路径要带/cmd/harvester-mcp-server,不然会报 “module found but does not contain package” 的错误。
    装完之后,看看 GOPATH:
    go env GOPATH
    dir “$(go env GOPATH)\bin”
    你应该能在 GOPATH\bin 里看到:
    harvester-mcp-server.exe
    这个 exe 就是待会 Cursor 要调用的 MCP Server。
  5. 手动编译(备选方案)
    如果网络比较差,也可以先 clone 再 build:
    git clone https://github.com/starbops/harvester-mcp-server.git
    cd harvester-mcp-server
    go build -o harvester-mcp-server.exe .\cmd\harvester-mcp-server
    就会在当前目录生成一个 harvester-mcp-server.exe,放到你喜欢的路径,然后记住这个路径即可。

四、准备 Harvester 的 kubeconfig
MCP Server 是靠 kubeconfig 去连 Harvester 集群的。Windows 上常见有两种来源:

  1. 从 Harvester Web UI 下载
    这是最推荐的方式:
    打开 Harvester 管理页面 → 登录
    在右上角用户菜单 / Support 里,一般会有一个 “Download kubeconfig” 的按钮
    下载后的文件保存到本机,比如:
    C:\Users\<你的用户名>.kube\harvester.yaml
    通常这份 kubeconfig 会把 server 设置成集群对外可访问的地址,不需要你改 127.0.0.1。
  2. 从节点上拷贝 rke2.yaml
    在 Harvester 管理节点上,默认 kubeconfig 一般在:
    /etc/rancher/rke2/rke2.yaml
    将文件拷备到本机后需要注意:
    里面的 server 默认是 https://127.0.0.1:6443,在你本机上直接用会连不到:
    要么改成 https://:6443
    要么在本机做 SSH 隧道:ssh -L 6443:127.0.0.1:6443 root@<节点IP>
    如果 IP 不在证书里,可能需要在 kubeconfig 的 cluster 段里加:
    insecure-skip-tls-verify: true
    生产环境要注意安全,这种更适合内网/测试环境。
    五、在 Cursor 中配置 MCP(stdio 模式)
    Cursor 支持 MCP,通过一个 mcp.json 文件来配置。
  3. 打开全局 MCP 配置
    在 Cursor 里:
    打开 Settings
    在左侧找到 MCP
    点击“Open global mcp.json”(或者 “Add new global MCP server”,它会帮你打开文件)
    会看到类似这样的结构(如果没有就新建一个):
    {
    “mcpServers”: {
    }
    }
  4. 添加 Harvester MCP 的配置
    假设:
    harvester-mcp-server.exe 在:D:\go\bin\harvester-mcp-server.exe
    kubeconfig 在:D:\go\bin\rke2.yaml
    我们在 mcpServers 下添加一段,cursor里文件路径要写双斜线:
    {
    “mcpServers”: {
    “harvester”: {
    “type”: “stdio”,
    “command”: “D:\go\bin\harvester-mcp-server.exe”,
    “args”: [
    “–kubeconfig”, “D:\go\bin\rke2.yaml”,
    “–log-level”, “info”
    ]
    }
    }
    }
    保存后,回到 Settings → MCP 把这个 harvester server 打开(Enable)。
    此时:
    Cursor 启动某个 Agent 时,会在你本机起一个 harvester-mcp-server.exe 进程
    这个进程通过指定的 kubeconfig 连到 Harvester 集群
    对话里提到 Harvester 相关的问题时,模型就可以调用这个 MCP server 暴露的工具了
    六、在 Cursor 里“聊天看集群”
    配置完成后,你可以新建一个聊天,提示下模型你有 Harvester 工具,例如:
    “你可以通过 Harvester MCP 访问我的集群。
    帮我先列一下所有虚拟机和所在的 namespace。”
    常见能做的事情有:
    查看节点:
    “列出集群所有节点,以及 CPU / 内存资源情况。”
    查看某个 namespace 下的 VM:
    “列一下 default 命名空间所有虚拟机和它们的运行状态。”
    查看单个 VM 的 YAML:
    “把名为 test-wanger 的虚拟机完整 YAML 输出给我,我要对比一下。”
    生成操作命令 / YAML:
    “根据现在的 test-wanger,帮我生成一个副本 test-wanger2 的 VirtualMachine YAML,放在 randd 命名空间。”
    在这些场景下,Harvester MCP 的表现还是很不错的:
    它能从集群里拉真实数据给模型看,而不是“盲猜”。

七、一个容易踩的坑:为什么“关机 / 开机 / 创建虚拟机”没生效?

  1. 现象
    在 Cursor 里对 Harvester 说:
    “在 default 命名空间创建一台 2C4G 的 Ubuntu 虚拟机。”
    模型会很爽快地回复一堆内容,包括:
    一段 VirtualMachine 的 YAML 示例
    一行“等价的”命令,比如:
    kubectl patch vm test-wanger -n default –type merge -p ‘{“spec”:{“runStrategy”:”RerunOnFailure”}}’
    甚至还会说:“我已帮你执行了开机命令……”
    但是切回 Harvester 的 Web 页面一看:
    虚拟机并没有创建/开机。
  2. 真相:Harvester MCP 目前几乎是“只读”的
    回头看 Harvester MCP 的 README,可以看到 Feature 列表里 虚拟机只支持 List / Get:
    Pods:List / Get / Delete
    VM:List / Get
    Image:List
    Volume:List
    Network:List
    没有 VM 的 Create / Patch / Delete 工具。
    所以现在的行为其实是:
    MCP 能够帮模型 读 到 VM 的真实状态;
    模型会根据这些信息,帮你生成 kubectl 命令和 YAML;
    但 MCP 里 没有真正执行 patch / create 的逻辑,
    那些命令只是一种“说明文字”,方便你 copy 到自己的终端去跑。
    换句话说:
    Cursor 说“已执行开机命令”,其实只是‘我打算这么做’,真正没有动你的集群。
  3. 怎么办?
    目前比较现实的用法是:
    用 Cursor + Harvester MCP 看信息 + 生成命令:
    让它列 VM、看 YAML、帮你写好 kubectl patch / kubectl apply 命令;
    把这些命令/YAML 复制到一个有 kubectl + 管理员 kubeconfig 的终端里自己执行:
    比如 ssh 登录 Harvester 节点跑:
    kubectl patch vm test-wanger -n default –type merge -p ‘{“spec”:{“runStrategy”:”RerunOnFailure”}}’
    等未来有时间/精力,可以 fork 这个 MCP,自己加上:
    start_vm / stop_vm:修改 spec.runStrategy(Halted / RerunOnFailure)
    create_vm_from_yaml:直接把 YAML apply 到集群里
    这样就能真正做到一句话开关机/创建 VM 了。
    八、关于“没有 HTTP 访问”的一点说明
    最后再强调一下你可能会关心的一点:
    当前这个 Harvester MCP 仅支持 stdio 模式,不开放 HTTP/SSE。
    这意味着:
    它的典型用法是给 桌面/IDE 客户端 用,比如 Cursor / Claude Desktop / VSCode 插件:
    客户端在本机起一个 MCP 进程,通过 stdin/stdout 和它对话;
    它不能直接当成一个 http://…/sse 的远程 MCP server:
    所以像 Dify 这种只支持 HTTP/SSE MCP 的平台,没法直接连这个 Harvester MCP;
    如果想给 Dify 用,需要再加一层“转接头”(如 supergateway),把 stdio MCP 转成 HTTP/SSE,这个就属于下一阶段的折腾了。
    对于个人开发者/运维来说,本机 + Cursor + stdio MCP 已经足够把很多日常查阅类的工作收拢到一个界面里了。
    九、结语
    现在的 Cursor + Harvester MCP,更像是一个“会写代码、会看集群状态的运维顾问”:
    它能读真实数据,不再是纯脑补
    能帮你生成 kubectl 命令和 VM YAML,少查文档少打字
    但真正“动手”的那一下——创建 / 开关机 VM,还需要你在终端按回车
    等社区把 Harvester MCP 的写操作补上、再加一个 HTTP 网关,
    未来我们完全可以想象这样的体验:
    在编辑器里写着业务代码,顺手问一句:
    “帮我把 randd 命名空间的测试虚拟机全部关机,只保留 prod 开头的。”
    → MCP 解释计划 → 你确认
    → 集群里真实生效。
    在那之前,这篇文章希望能先帮你把“第一步”走通:
    把 Harvester 接进 Cursor,让模型真的“看见”你的集群。
    如果你在实操过程中遇到什么奇怪的报错,也欢迎继续来交流。

最后,求关注。如果你还想看更多优质原创文章,欢迎关注我们的公众号「运维开发故事」。

如果我的文章对你有所帮助,还请帮忙点赞、在看、转发一下,你的支持会激励我输出更高质量的文章,非常感谢!

你还可以把我的公众号设为「星标」,这样当公众号文章更新时,你会在第一时间收到推送消息,避免错过我的文章更新。

我是 wanger,《运维开发故事》公众号团队中的一员,一线运维农民工,云原生实践者,这里不仅有硬核的技术干货,还有我们对技术的思考和感悟,欢迎关注我们的公众号,期待和你一起成长!

声明:来自运维开发故事,仅代表创作者观点。链接:http://eyangzhen.com/4557.html

运维开发故事的头像运维开发故事

相关推荐

关注我们
关注我们
购买服务
购买服务
返回顶部