效率翻倍:基于 MCP 协议打造自动化排查 Skill,实现线上 Bug 并行诊断

45 阅读10分钟

效率翻倍:基于 MCP 协议打造自动化排查 Skills,实现线上 Bug 并行诊断

痛点

  1. 在面对如多组织升版、项目升版,往往会有一堆禅道bug提给你,打开禅道就是一页bug。一个一个bug的排查解决太慢了,如果使用claude code+skills,可以并行解决多个bug。
  2. 或者你在开发一个新功能,测试or产品or实施找到你,让你看线上bug。此时你就可以把线上报错给到cc,让它加载skill去排查,不用打断开发新功能的思路。
  3. 这个 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,作用就是专门排除线上错误给出诊断报告。

定义了一个流程

  1. 去服务器拉完整日志
  2. 分析错误上下文
  3. 再去看相关代码
  4. 必要时查数据库数据
  5. 最后输出诊断报告

下图也展示了配置了mcp的cc的,能去查看日志和数据库了。

image-20260505182730210.png

image-20260505182849860.png

image-20260505183036869.png

image-20260505183241208.png

多个bug

这样并行解决多个bug,最后去验收诊断报告就可以了。并且诊断完还可以让cc直接帮你修改。

image-20260505183530864.png

怎么使用与安装

页面接口弹出了报错信息,/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账号

  1. 数据库账号

-- 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';
  1. 服务器账号

这个脚本是创建一个只能查看服务器上日志的账号,并通过添加日志地址来授权。没有任何编辑删除的权限。 在第二个红框上累加上不同项目的日志地址就好了。

建议将这个文件维护到每个服务器上固定位置,如果有新增权限直接下载下来修改上传上去,或者直接在服务器上修改。

添加过日志地址上以后,按照下面的命令执行一下就好了。

bash create_readonly_user.sh

image.png

配置服务器信息地址

在当前项目下打开的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就好了。

image-20260505231106255.png

安全

使用这个 Skill,不用担心会误删除数据或服务器上的重要信息。我已经做了一定束缚:

  1. 在服务器上写一个脚本,创建一个“只供 AI 查看日志”的权限角色。
  2. 数据库的 MCP 也是同样的逻辑。尽管该 MCP 已经限制了只能查询,但我给数据库相应角色配置的也是只读权限,没有提供任何其他权限。

包括如果说你们写其他的 Skill 的时候,也一定要注意。尽管现在cc权限控制做得已经很好了,当然,比如说当你设置完全权限的话,通常情况下只有删除文件才会触发拦截,但是也有可能会出现误结算或误处理文件的情况。

为了预防这种情况,你必须先预先去制止它、去约束它,确保它使用的是没有多余权限的账号。 此外如果是在生产环境在向 AI 传输日志时,建议预先在脚本层面脱敏处理,避免泄露银行账号、金额或客户敏感身份信息。

我的 Skill 设计想法

我首先来分享一下,我是怎么想到写一个排查报错的 Skill 的。

因为我日常经常会直接将服务器上的报错交给 AI,让它告诉我哪个类、哪个服务、第几行代码出了问题,因为我比较懒得自己去看日志、去翻代码。

因为我经常这么操作,所以我就想,能不能直接让 AI 帮我全自动排查错误出现的根源,并直接分析代码。

其实线上的很多错误主要归纳为几种情况:

  1. 数据不一致

  2. 代码逻辑与数据的综合分析

    AI 可以结合数据库里的实际数据和你的代码逻辑,通过关联分析找出错误原因。

通过这种方式,AI 生成的诊断报告通常是比较准确的。当然,偶尔也会出现不准确的情况(比如它获取的信息不全),这时你可以手动补充一些背景信息。基本上,AI 出具的诊断报告 90% 以上都是正确的。

以上就是我如何使用 AI,并发现 AI 可以自动排查错误的一个想法。其实写一个 Skill,重要的是想法。即便你完全不懂 Skill 该怎么写(比如应该放在哪个目录、用什么 Markdown 格式来输出会比较好),其实都没关系。

只要你有了想法,就可以先创建一个 Skill。如果发现哪里不对,你可以让 Claude 去慢慢迭代、优化;发现逻辑不通了,就让它去修改。包括你最初创建这个 Skill 的时候,也可以直接把想法告诉它。比如跟它说:“我要在一个场景中干什么干什么,为了实现这个目标,我需要你做什么,最后给我一份什么样的结果。”

你只需要把这些想法和背景都灌输给 AI,让 AI 去帮你写出一个 Skill。

其实从头到尾这个 Skill 也都是我让 Claude 帮我写的。这个skill也是,让 Claude 不断去给我优化完成。

包括我们现在写的这个 Skill,其实很多时候是给 AI 一个约束,让他分步骤执行。比如:

  1. 第一步干什么
  2. 第二步干什么
  3. 第三步干什么

并且让他不能直接给我猜想和结论,其实很大一部分工作就是约束 AI。

这篇文章只是分析一下,我是如何使用skills的。不过现在似乎也有现成的skill集成了类似的功能,例如我搜到的这个,虽然我没用过生产事件调试器 - Claude 代码技能 。而且这个文章大概3月份就写得七七八八了,现在五一才改了发出来,虽然感觉也还不完善,但是感觉不能再拖了。给大家一个参考,平时工作中可以怎么写skills。欢迎大家多多交流,平时如何使用AI的。