前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片NEW
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 业务场景题真实业务问题与追问
  • 查漏补缺常见问题解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
    • AI 定制路线NEW按你的简历现排
    • AI 知识地图NEW串起全站知识点
  • 动态
    • AI 热点NEWAI 每日动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
AI 助手NEW
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片NEW
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 业务场景题真实业务问题与追问
  • 查漏补缺常见问题解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
    • AI 定制路线NEW按你的简历现排
    • AI 知识地图NEW串起全站知识点
  • 动态
    • AI 热点NEWAI 每日动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
AI 助手NEW
旧版

AI Agent 直连禅道 bug 平台的完整链路实战

首页2026-05-17 14:30:00Front-End
MCP禅道AI AgentBug 流程Node.js

文章首发于: https://feinterview.poetries.top/blog/ai-agent-zentao-bug-mcp-integration

用一份自建 MCP Server 把禅道 bug 流程接入 Claude / Cursor / Codex,文章配套完整的分步落地方案:5 分钟跑通最小版本、关键模块代码、Token 缓存、多形态 bug 列表回退、截图落档与归档 SKILL,照着做就能把团队的禅道 bug 流程接到 AI Agent 上。

在本篇文章中,我们将从浅入深,和大家一起学习以下知识:

  • 为什么不要让 AI Agent 直接「裸调」禅道 REST API
  • 用 Node.js 18+ 实现一份纯 stdio 的 MCP Server 的完整步骤
  • Token 缓存、HTTPS 强约束、相对路径白名单等安全护栏
  • 「我的 bug / 产品 bug / 项目集 bug」三种视角的回退策略
  • bug 详情里 HTML 描述、内嵌截图、动态时间线的解析与脱敏裁剪
  • 配套 SKILL 把 bug 上下文按日期 + 经办人沉淀到本地工作目录
  • 生产环境上线前的安全 checklist

# 痛点与解决方案

在一些以禅道(ZenTao)为唯一 bug 平台的团队里,常见的协作节奏是:测试在禅道里提 bug → 开发翻邮件或 IM 提醒 → 进禅道复制描述、下载截图、看历史动态 → 拉本地分支修 → 回禅道点「解决」并写说明。这个流程的核心矛盾不在禅道本身,而在「bug 上下文是网页里的活数据,AI Agent 看不见」:你让 Cursor / Claude 帮你定位代码,它最多看到你贴过来的一段标题,没法读到内嵌截图、字段编辑历史、上一次评审意见。

解决方法是把禅道 RESTful API 包成一份只暴露最小工具集的 MCP Server,加一份配套 SKILL 让 Agent 主动把 bug 落到本地工作底稿。下面会给出一份从 0 到 1 的完整落地步骤,你照着走就能让团队的 AI Agent 接入禅道。

# 一、整体架构

整套系统是「Agent ↔ MCP Server ↔ 禅道 REST API」三段式:

┌─────────────┐   stdio    ┌──────────────────┐   HTTPS    ┌────────────────┐
│  Claude /   │ ◄────────► │  zentao-mcp-     │ ◄────────► │  禅道实例      │
│  Cursor /   │   JSON-RPC │  server (Node)   │   Token    │  /api.php/v1   │
│  Codex      │            │  (10 个工具)     │            │                │
└─────────────┘            └──────────────────┘            └────────────────┘
       │                          │                                │
       │                          ▼                                │
       │                  ┌───────────────┐                        │
       └────────────────► │ bugfix/<date> │ ◄──── 落档 SKILL       │
                          │  /bug-N-...   │   按日期 + 经办人归档  │
                          └───────────────┘                        │
@前端进阶之旅: 代码已经复制到剪贴板

整体架构:AI Agent 通过 stdio 连接 MCP Server,MCP Server 通过 HTTPS 调禅道 REST API,bug 上下文落档到本地 bugfix 目录

三处选型说明:

  • 要求 Node.js 18+:直接用内置 fetch + AbortController,省掉 node-fetch 这类依赖,发布包体积小、攻击面小。
  • stdio 而非 HTTP:MCP 客户端把进程 stdin/stdout 接到协议层,Server 不监听端口,省掉鉴权、CORS、TLS 这些自找的麻烦。
  • 不在仓库里存密钥:所有凭证只从环境变量读,配套 .env.example;连默认日志都做了字段脱敏。

# 二、五分钟跑通最小可用版本

下面是一份照抄就能跑的最小路径,先把链路打通,再做下一步优化。

五分钟跑通的五个步骤:拿凭证 → 起工程 → Token 客户端 → 装 MCP 工具 → 启动 Server

# Step 1 准备禅道实例信息

向运维 / DBA 拿到三样东西并验证:

# 1. 禅道访问入口(必须 HTTPS)
ZENTAO_BASE_URL="https://zentao.example.com"
# 2. 一个最小权限的服务账号(强烈不要用管理员账号)
ZENTAO_ACCOUNT="bot_account"
ZENTAO_PASSWORD="<from-vault>"

# 3. 验证 token 接口是否通
curl -sS -X POST "$ZENTAO_BASE_URL/api.php/v1/tokens" \
  -H 'Content-Type: application/json' \
  -d "{\"account\":\"$ZENTAO_ACCOUNT\",\"password\":\"$ZENTAO_PASSWORD\"}"
# 期望返回 { "token": "xxxxxxxxxxxxxxxx", ... }
@前端进阶之旅: 代码已经复制到剪贴板

返回里没有 token 字段就先不要往下做,先找运维确认 apiPrefix 是不是 /api.php/v1、是否开启了 RESTful API v1 接口。

# Step 2 创建工程骨架

mkdir zentao-mcp-server && cd zentao-mcp-server
npm init -y
npm i @modelcontextprotocol/sdk
node -e "console.log(process.versions.node)"   # 必须 >= 18
@前端进阶之旅: 代码已经复制到剪贴板

在 package.json 里加上 "type": "module" 和启动脚本:

{
  "type": "module",
  "main": "src/index.js",
  "scripts": { "start": "node src/index.js" },
  "dependencies": { "@modelcontextprotocol/sdk": "^1.0.0" }
}
@前端进阶之旅: 代码已经复制到剪贴板

# Step 3 写一个能拿 Token 的最小 client

新建 src/zentao.js,先把「鉴权 + 请求」这条骨架打通:

export function createZenTaoClient({ baseUrl, account, password }) {
  let cachedToken = "";
  let cachedAt = 0;
  const TTL = 50 * 60 * 1000; // 50 分钟

  async function getToken() {
    if (cachedToken && Date.now() - cachedAt < TTL) return cachedToken;
    const resp = await fetch(`${baseUrl}/api.php/v1/tokens`, {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({ account, password }),
    });
    const data = await resp.json();
    const token = data?.token || data?.data?.token;
    if (!token) throw new Error("token field missing");
    cachedToken = token;
    cachedAt = Date.now();
    return token;
  }

  async function call(path, { method = "GET", query, body } = {}) {
    const token = await getToken();
    const url = new URL(`${baseUrl}/api.php/v1${path}`);
    if (query) for (const [k, v] of Object.entries(query)) {
      if (v != null) url.searchParams.set(k, String(v));
    }
    const resp = await fetch(url, {
      method,
      headers: { Token: token, "Content-Type": "application/json" },
      body: body ? JSON.stringify(body) : undefined,
    });
    if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
    return resp.json();
  }

  return { getToken, call };
}
@前端进阶之旅: 代码已经复制到剪贴板

这里是最小骨架,省略了 AbortController 超时、相对路径白名单、HTTPS 校验等安全护栏 —— 第四节会补齐。

# Step 4 注册第一个工具

新建 src/index.js,先只暴露一个 get_my_bugs 工具,跑通端到端:

fe
  • 痛点与解决方案
  • 一、整体架构
  • 二、五分钟跑通最小可用版本
    • Step 1 准备禅道实例信息
    • Step 2 创建工程骨架
    • Step 3 写一个能拿 Token 的最小 client
    • Step 4 注册第一个工具
    • Step 5 接入 Claude Desktop / Cursor
  • 三、完整工具集设计
  • 四、Token 与请求层的安全护栏
    • 1)默认 HTTPS,不允许裸 HTTP
    • 2)相对路径白名单
    • 3)请求超时
    • 4)日志脱敏
  • 五、bug 列表的多形态适配
  • 六、bug 详情与图片落档
  • 七、状态扭转工具
  • 八、配套 SKILL 落档到本地
    • 落档目录约束
    • 在项目里启用 SKILL 的步骤
  • 九、上生产前的安全 checklist
  • 总结
  • 参考

← 重新认识 Claude Code 架构治理与团队工程化实战全景搞懂这7个配置文件让你的OpenClaw变智能助手 →