# Error Tracker MCP Server
基于 Model Context Protocol (MCP) 的错误追踪服务器,自动化处理代码错误:查找代码责任人(Bitbucket)→ 获取 PR 信息 → 创建 JIRA 任务。
## 快速开始
### 1. 安装与编译
```bash
npm install
npm run build
```
### 2. 配置环境变量
创建 `.env` 文件(参考 `.env.example`):
```bash
# 服务器配置
HTTP_PORT=3000 # HTTP 模式端口(默认 3000)
COMPATIBLE_PORT=3001 # 兼容模式端口(默认 3001)
DEFAULT_BRANCH=main # 默认调查分支(默认 main)
# Bitbucket 配置
BITBUCKET_USERNAME=your_username
BITBUCKET_PASSWORD=your_password
BITBUCKET_BASE_URL=https://your-bitbucket-server.com
BITBUCKET_PROJECT=your_project
BITBUCKET_REPO=your_repo
PR_TARGET_BRANCH=main # PR 目标分支过滤(默认 main)
# JIRA 配置
JIRA_USERNAME=your_username
JIRA_PASSWORD=your_password
JIRA_BASE_URL=https://your-jira-server.com
JIRA_PROJECT_KEY=YOUR_PROJECT
JIRA_ISSUE_TYPE_ID=10101
JIRA_PRIORITY_ID=10000
JIRA_COMPONENT_ID=12505
```
### 3. 选择运行模式
| 模式 | 适用场景 | 启动命令 |
|------|---------|----------|
| **stdio** | 本地使用(Claude Desktop) | `npm start` |
| **HTTP** | 远程部署(新客户端) | `npm run start:http` |
| **兼容** | 远程部署(新旧客户端) | `npm run start:compatible` |
## 核心功能
| 工具 | 功能说明 |
|------|----------|
| `find_code_owner` | 通过文件路径和行号查找代码最后修改者 |
| `get_pull_request` | 根据 commit ID 查找相关 Pull Request |
| `get_commits_by_path` | 获取指定目录路径的提交记录(支持时间范围、分支过滤),返回作者、时间、提交ID等信息 |
| `get_method_code` | 获取错误行所在的完整方法代码,为 AI 提供上下文用于根因分析(自动识别方法边界,支持多层堆栈智能定位) |
| `investigate_error` | 自动调查错误(查找责任人 + PR 信息) |
| `create_jira_ticket` | 基于调查结果创建并分配 JIRA 任务 |
| `track_error_full` | 完整流程:调查 → 分析 → 创建 JIRA(一键完成) |
## 客户端配置
### 方式一:stdio 模式(本地使用 - Claude Desktop)
编辑配置文件:
- **MacOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
- **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
```json
{
"mcpServers": {
"error-tracker": {
"command": "node",
"args": ["-r", "dotenv/config", "/绝对路径/error/build/index.js"]
}
}
}
```
> 💡 需在项目根目录创建 `.env` 文件配置环境变量
### 方式二:HTTP 模式(远程服务器)
#### Streamable HTTP (推荐 - 新协议)
适用于支持 MCP 2025-03-26 协议的客户端:
```json
{
"mcpServers": {
"error-tracker": {
"url": "http://localhost:3000/mcp"
}
}
}
```
#### SSE 模式(兼容 - 旧协议)
适用于仅支持 MCP 2024-11-05 协议的客户端:
```json
{
"mcpServers": {
"error-tracker": {
"url": "http://localhost:3000/sse"
}
}
}
```
**端口说明**:
- HTTP 模式默认端口:`3000`(通过 `.env` 中 `HTTP_PORT` 配置)
- 兼容模式默认端口:`3001`(通过 `.env` 中 `COMPATIBLE_PORT` 配置)
- 启动命令:`npm run start:http`(仅新协议)或 `npm run start:compatible`(新旧协议都支持)
**协议选择**:
- 新客户端 → 使用 `/mcp` 端点(Streamable HTTP)
- 旧客户端 → 使用 `/sse` 端点(传统 SSE)
- 不确定 → 使用兼容模式服务器(`npm run start:compatible`)同时支持两种
## 使用示例
### 场景1:查找代码责任人
```
请帮我查找这个文件第161行是谁写的:
src/main/java/com/example/service/UserService.java
```
### 场景2:获取错误上下文代码
```
请获取这个错误行所在方法的完整代码:
文件: src/main/java/com/example/service/UserService.java
行号: 161
```
### 场景3:分析模块最近变更
```
请分析理算模块最近7天的提交记录:
目录: cbs_claim_catalog/cbs_claim/src/main/java/cbs/claim/application/settlement
我需要看到最近有哪些人修改过这个模块,以及提交的时间范围。
```
### 场景4:完整错误追踪
```
我遇到空指针异常:
文件: src/main/java/com/example/service/UserService.java
行号: 161
错误信息:
java.lang.NullPointerException: Cannot invoke method on null object
at UserService.checkUser(UserService.java:161)
请创建 JIRA 任务,标题"修复空指针异常",标签 "bug" "urgent"
```
## 使用场景与轻量提示
JIRA 相关参数通常在 `.env` 中配置,日常使用只需给出最少的上下文即可。把错误堆栈直接粘贴给 AI,模型会自动识别并调用合适的工具。
提示约定:除非你明确提供标题,模型会基于错误上下文自动生成合适的 JIRA 标题与描述。
### 快速一键闭环(不需要分析)
示例提示:
```
我这有个错误,请你直接完成责任人定位、关联 PR 并创建 JIRA:
文件: src/main/java/com/example/service/UserService.java
行号: 161
错误堆栈:
java.lang.NullPointerException: Cannot invoke method on null object
at UserService.checkUser(UserService.java:161)
JIRA:标题「修复空指针异常」,标签「bug」「urgent」。
```
说明:模型会自动进行代码所有者定位和 PR 检索,并用 `.env` 中的 JIRA 配置创建任务,无需显式写出工具名称。
### 先让模型分析,再落任务
示例提示:
```
请先根据下面的错误做简要原因分析与修复建议,然后帮我创建一个 JIRA:
文件: src/main/java/com/example/service/UserService.java
行号: 161
错误堆栈:
java.lang.NullPointerException: Cannot invoke method on null object
at UserService.checkUser(UserService.java:161)
JIRA:标题「修复空指针异常(含原因分析)」即可。
```
说明:模型会输出结构化的分析结论(原因/影响/建议)并在创建 JIRA 时自动带上摘要;无需指定工具名,模型会自行选择步骤。
### 深度分析错误上下文
示例提示:
```
我需要分析这个异常的根本原因,请先获取完整方法代码:
文件: src/main/java/com/example/service/UserService.java
行号: 161
然后分析可能的异常原因并给出修复建议。
```
说明:模型会自动调用 `get_method_code` 工具获取完整方法代码,然后基于完整上下文进行分析,比仅有堆栈信息更准确。
### 智能分析堆栈定位根本原因
示例提示:
```
这是一个完整的错误堆栈,请逐层获取错误行所在方法的完整代码:
java.lang.NullPointerException: Cannot invoke method on null object
at com.example.utils.StringUtil.isEmpty(StringUtil.java:45)
at com.example.service.UserService.validateUser(UserService.java:161)
at com.example.controller.LoginController.login(LoginController.java:89)
at com.example.gateway.ApiGateway.handleRequest(ApiGateway.java:203)
找到最可能的位置后,对错误进行调查,然后结合代码对错误进行分析,最后创建 JIRA。
```
说明:模型会智能分析堆栈:
1. 自动获取堆栈中多层方法的完整代码
2. 结合代码逻辑判断根本原因(调用者参数不合规 vs 工具类缺陷)
3. 定位到最可能出错的业务代码层,而非最底层的工具方法
4. 余下步骤参见"先让模型分析,再落任务"
### 其他常见场景
- 多文件/多位置排查(模块级):
```
用户登录偶发失败,请按模块排查并指出最可能的改动来源:
模块: auth、session、gateway
错误堆栈(多段粘贴即可):
...
```
- 批量错误收敛并统一创建任务:
```
我有三处相似的 NPE,请合并分析并创建一个总任务,附上三个具体文件与行号作为子任务描述:
1) auth/UserService.java:161
2) session/SessionManager.java:45
3) gateway/LoginController.java:102
错误堆栈已在上文粘贴。
```
- 只分派给代码责任人(不创建 JIRA):
```
请定位这段错误的代码责任人并把结论返回给我,不需要创建 JIRA:
文件: src/main/java/com/example/service/UserService.java
行号: 161
错误堆栈:...
```
## 远程部署
### Docker 部署
```dockerfile
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
EXPOSE 3000
CMD ["node", "-r", "dotenv/config", "build/compatible-server.js"]
```
```bash
docker build -t error-tracker-mcp .
docker run -d -p 3000:3000 --env-file .env error-tracker-mcp
```
### PM2 部署
```bash
pm2 start npm --name "error-tracker" -- run start:compatible
pm2 save && pm2 startup
```
## 故障排除
| 问题 | 解决方案 |
|------|----------|
| 认证失败 | 检查 `.env` 文件中的用户名和密码 |
| 找不到文件 | 确保文件路径相对于仓库根目录,检查 `DEFAULT_BRANCH` 配置 |
| 端口占用 | 修改 `.env` 中的 `HTTP_PORT` 或 `COMPATIBLE_PORT` |
## 技术架构
- **传输模式**:stdio / Streamable HTTP / 兼容模式(详见 [ARCHITECTURE.md](./ARCHITECTURE.md))
- **开发调试**:调试技巧和贡献指南见 [DEVELOPMENT.md](./DEVELOPMENT.md)
- **技术栈**:TypeScript + MCP SDK + Express + Axios
## 未来功能规划 (TODO)
### 🎯 深度分析增强
- [ ] **trace_error_root_cause_chain** - 错误根因链追踪
- 场景:深度追踪多层调用链,找到真正的根源而非表面现象
- 功能:
- 解析完整堆栈的每一层方法代码
- AI 分析每层的职责和可能的问题点
- 定位最初的根因(如参数来源、数据状态异常)
- 生成分层分析报告,标注真正的 root cause
- 价值:避免只看最底层错误行,找到业务逻辑层的源头问题
### 🤖 自动化修复增强
- [ ] **auto_fix_and_commit** - 自动修复代码并提交
- 场景:AI 分析错误后自动生成修复代码,创建 PR 并指派给代码责任人
- 完整流程:
1. 调用 `get_method_code` 获取错误代码上下文
2. 调用 `investigate_error` 定位代码责任人
3. AI 生成修复代码(基于 errorAnalysis 中的 codeExample)
4. AI 生成对应的单元测试代码
5. 自动创建特性分支(如 `fix/NPE-UserService-161`)
6. 修改源文件和测试文件并提交到新分支
7. 创建 Pull Request,指定 reviewer 为代码责任人
8. PR 描述自动关联 JIRA 工单号
- 价值:端到端自动化(发现问题 → 修复 → 测试 → 代码审查),大幅减少人工介入
### 📊 智能辅助功能
- [ ] **analyze_business_error_by_changes** - 业务错误代码变更分析
- 场景:无堆栈信息的业务逻辑错误(如理算金额错误、数据不一致),通过分析最近代码变更定位问题
- 典型流程:
1. 业务人员发现异常(如:某客户理算金额少了 100 元)
2. 运维描述现象给 AI:"理算模块最近出现金额计算错误,折扣未正确应用"
3. AI 自动分析指定业务模块的最近提交记录(可自定义时间范围,默认 7 天)
4. 对比代码变更点与业务现象的关联性
5. 输出可疑提交列表 + 责任人 + 变更说明
- 价值:解决无堆栈信息的业务逻辑问题,特别适合数据计算、状态流转等隐性错误
- [ ] **batch_analyze_errors** - 批量错误分析
- 一次性分析多个相关错误,判断是否同一根因
### 📈 运营分析功能
- [ ] **analyze_error_trends** - 错误趋势分析
- 场景:按产品线/模块/时间维度统计错误趋势,发现高风险区域
- 分析维度:
- 按产品线统计(寿险、财险、健康险各自的错误率)
- 按业务模块统计(承保、理赔、保全的错误热点)
- 按时间趋势统计(版本发布后的错误激增)
- 输出:可视化报表 + 高风险模块预警 + 重构建议
- 价值:指导资源投入方向,提前预防高风险区域
- [ ] **build_error_knowledge_base** - 错误知识库沉淀
- 场景:自动沉淀常见保险业务错误的解决方案
- 功能:
- 自动分类错误类型(费率应用错误、年龄校验错误等)
- 关联历史修复方案和PR
- AI总结通用解决模式
- 生成新人培训案例库
- 价值:避免重复踩坑,加速新人成长
### �🔧 现有工具增强
- [ ] **get_method_code** 增强
- 支持 `includeCallers`: 同时返回调用该方法的代码
- 支持 `contextLevel`: 控制上下文深度(1-3层)
- [ ] **investigate_error** 增强
- 支持 `blameFullMethod`: 对整个方法进行 blame
- 支持 `includeRecentContributors`: 返回该文件近期所有贡献者
## 许可证
MIT