效率翻倍:基于 MCP 协议打造自动化排查 Skills,实现线上 Bug 并行诊断
痛点
- 在面对如多组织升版、项目升版,往往会有一堆禅道bug提给你,打开禅道就是一页bug。一个一个bug的排查解决太慢了,如果使用claude code+skills,可以并行解决多个bug。
- 或者你在开发一个新功能,测试or产品or实施找到你,让你看线上bug。此时你就可以把线上报错给到cc,让它加载skill去排查,不用打断开发新功能的思路。
- 这个 Skill 解决的场景,就是你手上 Bug 很多,或者你手上有其他事,但同时还有 Bug 需要处理的时候。
需要注意的是,如果这个 Bug 很紧急,那么最好是手动去排查,或者采用“手动加 AI”的方式。
因为使用 Claude 去排查错误,速度可能还是会比手动处理稍微慢一点。
什么是 MCP?
MCP(Model Context Protocol,模型上下文协议),你可以把它理解成:
👉 让 AI “接入外部世界”的接口标准
我们平时用 AI,会发现一个问题:
AI 虽然很聪明,但它其实是“瞎的”和“聋的” 它看不到你的日志、访问不了你的数据库、也不知道你系统里发生了什么
这时候就需要 MCP。MCP是真正的工具能力,能让 Claude 访问本地文件、浏览器、外部 API、第三方工具。
什么是 Skill?
如果说 MCP 解决的是“能不能做”,那 Skill 解决的是:
👉 “应该怎么做”
Skill 本质上就是一套固定流程(Workflow)+经验沉淀。
Skills是封装好的提示词 / 标准化工作流,让 Claude 变成特定领域的专业人士,本质是让 AI 更懂怎么干。
举个真实场景
比如你把一段报错直接丢给 AI:
- 没有 Skill 时:
- AI 可能直接看代码 → 猜原因 → 给结论(有时不准)
- 有 Skill 时:
- AI 会严格按照流程: - 去服务器拉完整日志 - 分析错误上下文 - 再去看相关代码 - 必要时查数据库数据 - 最后输出诊断报告
👉 每一次排查,步骤一致、结果更稳定、更可靠
案例 自定义skill diag 排查错误
如下图,点击选择客户的接口报错。能拿到错误信息,发现是数据库字段不对。一般的排除流程,是去服务器上看具体那个sql查询那个表字段的问题,然后再去数据库比对。
这里我自己定义了一个skill diag,作用就是专门排除线上错误给出诊断报告。
定义了一个流程
- 去服务器拉完整日志
- 分析错误上下文
- 再去看相关代码
- 必要时查数据库数据
- 最后输出诊断报告
下图也展示了配置了mcp的cc的,能去查看日志和数据库了。
多个bug
这样并行解决多个bug,最后去验收诊断报告就可以了。并且诊断完还可以让cc直接帮你修改。
怎么使用与安装
页面接口弹出了报错信息,/diag + 报错信息 就行了。或者直接 /diag 给我查询服务器上最新的错误
配置涉及到的文件都在这个仓库里 Liuuuuuuux/diag-skills
如果后面有空我可能会补充一下github仓库里,直接一键安装吧。
MCP配置
直接将下面这段复制给cc or codex 让它给你配置就好了。请在项目路径下打开cc 再输入下面这段话。请根据项目具体在那个服务器以及数据库来配置,下面的账号信息配置好了,再复制给AI。关于账号看下面MCP账号。
给我安装全局的mcp npm install -g mcp-server-mysql mcp-server-ssh,并配置当前项目的mcp-server-mysql与mcp-server-ssh。参考如下。将下面配置到项目的.mcp.json中
{
"mcpServers": {
"mysql": {
"command": "mcp-server-mysql",
"args": [],
"env": {
"MYSQL_HOST": "<MYSQL_HOST>",
"MYSQL_PORT": "<MYSQL_PORT>",
"MYSQL_USER": "<MYSQL_USER>",
"MYSQL_PASS": "<MYSQL_PASS>",
"MYSQL_DB": "<MYSQL_DB>"
}
},
"ssh": {
"command": "mcp-server-ssh",
"args": [],
"env": {
"SSH_HOST": "<SSH_HOST>",
"SSH_PORT": "<SSH_PORT>",
"SSH_USER": "<SSH_USER>",
"SSH_PASS": "<SSH_PASS>"
}
}
}
}
MCP账号
-
数据库账号
-- MariaDB 创建用户语法
CREATE USER 'mcp_readonly'@'%' IDENTIFIED BY 'Mcp123456';
-- 授予只读权限
GRANT SELECT ON *.* TO 'mcp_readonly'@'%';
-- 刷新权限
FLUSH PRIVILEGES;
-- 验证用户创建成功
SELECT user, host, plugin FROM mysql.user WHERE user = 'mcp_readonly';
-
服务器账号
这个脚本是创建一个只能查看服务器上日志的账号,并通过添加日志地址来授权。没有任何编辑删除的权限。 在第二个红框上累加上不同项目的日志地址就好了。
建议将这个文件维护到每个服务器上固定位置,如果有新增权限直接下载下来修改上传上去,或者直接在服务器上修改。
添加过日志地址上以后,按照下面的命令执行一下就好了。
bash create_readonly_user.sh
配置服务器信息地址
在当前项目下打开的cc。
具体的服务器路径、日志文件叫什么名字,请根据不同项目来进行不同的配置。
将下面的内容配置到当前项目中的.claude/Memory.md中
# 项目 Memory
## 服务器配置
### 开发环境服务器
- **服务器路径**: `放日志的路径`
- **日志文件**:
- `admin-3603.log`
SKILL安装
直接将下面这段话复制给cc or codex。
请给我将下面的 Skill 给我安装到全局
---
name: diag
description: 诊断服务器错误 - 先查服务器日志找到错误,再定位代码和数据库
triggers:
- 当用户报告服务器错误时
- 当需要诊断线上问题时
- 当用户提到"diag"、"服务器报错"、"线上"时
---
先查服务器日志,找到错误后再排查代码和数据库。
<CRITICAL>
必须严格遵守以下步骤顺序,禁止跳过任何步骤。
禁止在没有日志证据的情况下直接搜索代码。
</CRITICAL>
## 执行步骤
### 第一步:连接服务器(必须)
1. **检查现有连接**:调用 `mcp__ssh__ssh_list_connections`
2. **如果没有连接**:
- 读取当前项目根目录下的 `.mcp.json` 获取 SSH 连接信息
- 如果当前项目没有 `.mcp.json`,立即询问用户提供服务器连接信息(host、username、password/key)
- 调用 `mcp__ssh__ssh_connect` 建立连接
### 第二步:查询服务器日志(必须)
读取配置:
- 只读取当前项目根目录下的 `.claude/MEMORY.md` 获取日志目录
- 如果当前项目不存在 `.claude/MEMORY.md`,立即询问用户提供日志目录或相关配置
连接服务器,获取日志中的错误:
```bash
# 直接查看指定日志文件的错误(最常用)
grep -A 30 "ERROR" /日志目录/日志文件.log | tail -n 200
# 查看日志最后 200 行(了解最新状态)
tail -n 200 /日志目录/日志文件.log
# 如果日志路径不确定,先列出目录内容
ls -la /日志目录/
```
有参数时搜索关键词,无参数时搜索最近错误。
**必须展示日志内容**,确认错误发生的具体时间和上下文。没有展示日志前,禁止进入下一步。
### 第三步:定位代码
根据堆栈信息在本地代码中定位文件和行号。
### 第四步:查询数据库(如需要)
使用 `mcp__mysql__mysql_query` 查询相关数据。
### 第五步:输出诊断报告
错误概述、原因、代码位置、修复建议。
## 禁止事项
- 禁止在没有日志证据的情况下直接搜索代码
- 禁止跳过服务器连接检查步骤
- 禁止假设错误原因,必须以日志为准
如果全局的.claude的skills 目录下多了一个diag文件夹并且多了一个SKILL.md格式的文档。就说明已经安装成功了,重启cc就好了。
安全
使用这个 Skill,不用担心会误删除数据或服务器上的重要信息。我已经做了一定束缚:
- 在服务器上写一个脚本,创建一个“只供 AI 查看日志”的权限角色。
- 数据库的 MCP 也是同样的逻辑。尽管该 MCP 已经限制了只能查询,但我给数据库相应角色配置的也是只读权限,没有提供任何其他权限。
包括如果说你们写其他的 Skill 的时候,也一定要注意。尽管现在cc权限控制做得已经很好了,当然,比如说当你设置完全权限的话,通常情况下只有删除文件才会触发拦截,但是也有可能会出现误结算或误处理文件的情况。
为了预防这种情况,你必须先预先去制止它、去约束它,确保它使用的是没有多余权限的账号。 此外如果是在生产环境在向 AI 传输日志时,建议预先在脚本层面脱敏处理,避免泄露银行账号、金额或客户敏感身份信息。
我的 Skill 设计想法
我首先来分享一下,我是怎么想到写一个排查报错的 Skill 的。
因为我日常经常会直接将服务器上的报错交给 AI,让它告诉我哪个类、哪个服务、第几行代码出了问题,因为我比较懒得自己去看日志、去翻代码。
因为我经常这么操作,所以我就想,能不能直接让 AI 帮我全自动排查错误出现的根源,并直接分析代码。
其实线上的很多错误主要归纳为几种情况:
-
数据不一致:
-
代码逻辑与数据的综合分析
AI 可以结合数据库里的实际数据和你的代码逻辑,通过关联分析找出错误原因。
通过这种方式,AI 生成的诊断报告通常是比较准确的。当然,偶尔也会出现不准确的情况(比如它获取的信息不全),这时你可以手动补充一些背景信息。基本上,AI 出具的诊断报告 90% 以上都是正确的。
以上就是我如何使用 AI,并发现 AI 可以自动排查错误的一个想法。其实写一个 Skill,重要的是想法。即便你完全不懂 Skill 该怎么写(比如应该放在哪个目录、用什么 Markdown 格式来输出会比较好),其实都没关系。
只要你有了想法,就可以先创建一个 Skill。如果发现哪里不对,你可以让 Claude 去慢慢迭代、优化;发现逻辑不通了,就让它去修改。包括你最初创建这个 Skill 的时候,也可以直接把想法告诉它。比如跟它说:“我要在一个场景中干什么干什么,为了实现这个目标,我需要你做什么,最后给我一份什么样的结果。”
你只需要把这些想法和背景都灌输给 AI,让 AI 去帮你写出一个 Skill。
其实从头到尾这个 Skill 也都是我让 Claude 帮我写的。这个skill也是,让 Claude 不断去给我优化完成。
包括我们现在写的这个 Skill,其实很多时候是给 AI 一个约束,让他分步骤执行。比如:
- 第一步干什么
- 第二步干什么
- 第三步干什么
并且让他不能直接给我猜想和结论,其实很大一部分工作就是约束 AI。
这篇文章只是分析一下,我是如何使用skills的。不过现在似乎也有现成的skill集成了类似的功能,例如我搜到的这个,虽然我没用过生产事件调试器 - Claude 代码技能 。而且这个文章大概3月份就写得七七八八了,现在五一才改了发出来,虽然感觉也还不完善,但是感觉不能再拖了。给大家一个参考,平时工作中可以怎么写skills。欢迎大家多多交流,平时如何使用AI的。