1. 为什么要在 Cursor 里接 Nightingale MCP Server
Nightingale(夜莺)是国内不少团队在用的开源监控告警系统,v8.0.0 之后官方放出了 n9e-mcp-server,把夜莺的 HTTP API 封装成了一套 MCP 工具。MCP 是 Model Context Protocol,你可以把它理解成「给 AI 助手插的一根数据线」——插上之后,Cursor 里的 AI 就能直接调用夜莺的接口,而不是靠你复制粘贴告警列表再让它分析。
这件事解决的真实痛点很具体:值班的时候告警在夜莺里刷屏,你想快速知道「过去 24 小时有哪些 P1 告警」「哪几台机器离线超过 5 分钟」,传统做法是打开 Web 界面一层层点筛选。接上 MCP Server 之后,你直接在 Cursor 对话框里用中文问,AI 帮你调list_active_alerts、list_targets这些工具,把结果整理好给你。适合谁?适合已经在用夜莺做监控、同时日常在 Cursor 里写代码或做运维脚本的同学。它不替代夜莺 Web 界面,而是给 AI 助手开了一个只读或可写的操作入口。
我试过把这套配置跑通,中间踩了几个坑,下面把可复制的骨架和排障过程完整写出来。
2. 前置准备:夜莺侧要开 TokenAuth,TaoToken 侧拿 Key
2.1 夜莺开启 HTTP Token 认证
MCP Server 走的是夜莺的 HTTP API,所以第一步是确认夜莺的config.toml里启用了 Token 认证。找到这段配置:
[HTTP.TokenAuth] Enable = true如果原来是false,改成true后重启夜莺服务。这一步不做,后面 MCP Server 拿 Token 请求会直接 401。
2.2 在夜莺里创建 API Token
登录夜莺 Web 界面,路径是「个人设置 > 个人信息 > Token 管理」,新建一个 Token。权限按最小必要原则给:如果你只想让 AI 查数据,就别给写权限;如果要让它创建屏蔽规则,再放开对应权限。
注意:Token 等同于账号凭证,别提交到 Git 仓库。用环境变量或者密钥管理工具存。
2.3 用 TaoToken 统一管理模型侧 Key
Cursor 里的 AI 助手要能对话,本身需要一个模型服务的 Key。我这边习惯用 TaoToken 把模型调用统一管起来,官网入口是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 地址是 https://taotoken.net/api 。在控制台里创建一个 API Key,后面填到 Cursor 的模型配置里。这样夜莺的 Token 管夜莺,模型的 Key 管模型,两边职责分开,排查问题时不会混。
创建 Key 的入口在控制台的 API Keys 页面,具体路径是 https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。拿到 Key 之后先放着,下一节一起写进配置。
3. 可复制配置:mcp.json 与 Cursor settings.json 片段
3.1 写 ~/.cursor/mcp.json
Cursor 的 MCP 配置放在用户目录下的.cursor/mcp.json。最小可用骨架如下:
{ "mcpServers": { "nightingale": { "command": "npx", "args": ["-y", "@n9e/n9e-mcp-server", "stdio"], "env": { "N9E_TOKEN": "your-api-token", "N9E_BASE_URL": "http://your-n9e-server:17000" } } } }几个字段说明:command用npx是为了免全局安装,-y表示自动确认下载@n9e/n9e-mcp-server;stdio是传输方式,Cursor 通过标准输入输出和这个进程通信。N9E_BASE_URL填你夜莺的实际地址和端口,默认是 17000。
3.2 按需裁剪工具集,省上下文
默认会启用全部工具集,工具数量多,塞进 AI 的上下文窗口会占不少 token。如果你只关心告警和监控目标,可以这样收窄:
{ "mcpServers": { "nightingale": { "command": "npx", "args": ["-y", "@n9e/n9e-mcp-server", "stdio"], "env": { "N9E_TOKEN": "your-api-token", "N9E_BASE_URL": "http://your-n9e-server:17000", "N9E_TOOLSETS": "alerts,targets" } } } }可用工具集有 alerts、targets、datasource、mutes、busi_groups、notify_rules、alert_subscribes、event_pipelines、users。逗号分隔,写几个就只暴露几个。
3.3 只读模式:生产环境强烈建议
如果你只是想让 AI 查,不想让它误操作创建屏蔽规则,加一个环境变量:
"N9E_READ_ONLY": "true"开了之后所有写操作工具(比如create_mute、update_mute)会被禁用。生产环境我建议先只读跑一段时间,确认 AI 的调用行为符合预期,再考虑放开写。
3.4 Cursor 模型侧配置片段
Cursor 的模型配置在 settings 里,把 TaoToken 的 API 地址和 Key 填进去。对应的 settings.json 片段大致是这样:
{ "cursor.ai.apiKey": "your-taotoken-api-key", "cursor.ai.baseUrl": "https://taotoken.net/api" }不同 Cursor 版本字段名可能略有差异,以你本地设置界面为准。填完之后 Cursor 的对话走 TaoToken,MCP 工具走夜莺,两条链路独立。
4. 验证连接:从重启到自然语言指令生效
4.1 重启 Cursor 并确认 MCP 进程
改完mcp.json后,完全退出 Cursor 再打开(不是关窗口,是退出进程)。Cursor 启动时会去拉起 MCP Server。你可以在 Cursor 的 MCP 面板里看到nightingale这个 server 的状态,正常应该是绿色或显示已连接。
如果状态是红的,先别急着改配置,往下看第 5 节的排障。
4.2 用一句自然语言验证
连接成功后,在 Cursor 对话框里输入:
显示过去 24 小时内所有紧急告警AI 应该会调用list_active_alerts或list_history_alerts,把结果整理成列表返回。如果它回复「我没有相关工具」,说明 MCP 没挂上;如果回复「调用失败 401」,说明 Token 或 TokenAuth 有问题。
再试一条涉及监控目标的:
列出所有离线超过 5 分钟的监控目标这条会走list_targets,带过滤条件。能正常返回主机列表,就说明读链路通了。
4.3 验证写操作(只读模式下会失败,属正常)
如果你没开只读,可以试:
由于维护原因,为 service=api 的告警创建一个 2 小时的屏蔽规则AI 会调create_mute。执行成功的话,你去夜莺 Web 界面的屏蔽规则列表里能看到这条新记录。如果开了N9E_READ_ONLY=true,这里会返回写操作被禁用的提示,这是预期行为。
4.4 验证工具集裁剪是否生效
如果你配了N9E_TOOLSETS=alerts,targets,然后问:
运维团队有哪些成员?AI 应该会说没有list_users这个工具,因为 users 工具集没启用。这反过来证明裁剪配置生效了。
5. 本篇常见错排查
5.1 npx 拉包失败或超时
现象:Cursor MCP 面板显示 server 启动失败,日志里有npm ERR或超时。原因通常是网络到 npm registry 不通。可以先在终端手动跑一遍:
npx -y @n9e/n9e-mcp-server stdio看能不能正常启动。如果卡在下载,检查你的 npm 源配置。能手动跑通,Cursor 里一般也能跑通。
5.2 401 Unauthorized
现象:AI 调用工具返回 401。排查顺序:先确认夜莺config.toml里[HTTP.TokenAuth] Enable = true且已重启;再确认N9E_TOKEN填的是夜莺里创建的那个 Token,没有多余空格;最后确认这个 Token 对应的账号有访问目标业务组的权限。
5.3 连接被拒或超时
现象:N9E_BASE_URL填的地址连不上。先在你本机终端 curl 一下:
curl -H "Authorization: Bearer your-api-token" http://your-n9e-server:17000/api/n9e/alert-cur-events如果 curl 也不通,说明是网络或地址问题,跟 MCP 无关。注意N9E_BASE_URL不要带尾部斜杠,也不要带/api路径,MCP Server 会自己拼。
5.4 AI 说没有工具可用
现象:对话正常,但一问监控数据就说没有相关工具。原因通常是mcp.json改完没重启 Cursor,或者 JSON 格式有语法错误(比如多了个逗号)。用 JSON 校验工具过一遍,然后彻底退出 Cursor 重开。
5.5 工具太多导致上下文被挤爆
现象:对话变慢,或者 AI 开始「忘记」前面的内容。这是工具集全开、工具描述占满上下文导致的。解决办法就是第 3.2 节的N9E_TOOLSETS,只留你真正要用的那几个。
6. 后续怎么用:把 MCP 接进日常运维流
配置跑通只是起点。实际用起来,我建议把常用查询固化成几个提示词模板,比如「每日早会前拉一遍过去 12 小时 P1 告警」「发版前查一遍目标离线情况」。这些查询走 MCP 工具,比手动点界面快。
如果你后面想让 AI 在编码场景里长期挂着这套能力,比如写告警处理脚本时随时查线上状态,可以考虑用 Coding Plan 把模型调用和 MCP 工具串起来,入口在 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。模型对话的调试入口在 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。夜莺侧的 MCP Server 源码和工具清单在官方仓库,工具集和参数以仓库 README 为准,版本升级后字段可能有变化,升级前先看 changelog。
最后提醒一句:生产环境先开N9E_READ_ONLY=true跑一周,观察 AI 实际调了哪些工具、返回了什么,确认没有误操作风险,再决定要不要放开写权限。这一步别省。