# SE 工作流 MCP 工具 API 文档
> **来源**:`docs/task/se工作流mcp工具统计.md`(草稿统计)→ 本文档按 `mis-mcp-server` **源码实现**补全为可调用的 API 文档
> **覆盖范围**:SE 工作流相关的 **9 个** MCP 工具
> **生成日期**:2026-09-22
> **代码基线**:`mis-mcp-server` 分支 `dev`
>
> **一句话定位**:面向「AI 生成 SKILL / Prompt」场景的机器友好型接口文档。每个工具给出**参数表 + 返回 JSON 结构 + 字段语义 + 关联工具**。
### 修订记录(2026-09-22)
编写本文档时发现 **5 处工具描述与实现不符**,已在 `mis-mcp-server` 侧修正(**未改动 `mbx` 下游代码**):
| 工具 | 原描述问题 | 处置 |
|---|---|---|
| `queryDriverListVersion` | 说「驱动列表唯一标识」「返回 `packageFileUrl` 即可」——实为**版本**标识,且该字段**嵌套**在数组里、未裁剪 | ✅ 改描述 |
| `queryTestUnitListByProjectName` | 说「根据项目名称、**五码**查询」——下游 SQL **未按五码过滤** | ✅ 改描述 + 参数说明 |
| `queryProjectNameList` | 说「获取项目名称列表」——实为**固定最多 2 条** | ✅ 常量 `2` → `100`,并同步描述(**行为变更**) |
| `queryTestPcByUuids` | 未说明在线状态字段名——直觉会取恒为 null 的 `onlineStatus` | ✅ 描述里点明用 `onlineStatusKey` |
| `creatOrSendTask` | 未说明 `other.type` 必填——漏传会下游报错 | ✅ 描述里点明必填项 |
---
## ⚠️ 确信度标记(务必先读)
本文档所有字段名均来自**源码或真实响应样本**,不使用推测值。为便于区分,全文使用以下标记:
| 标记 | 含义 |
|---|---|
| ✅ **已确定** | 直接来自 `mis-mcp-server` 源码逻辑、下游实现源码,或真实接口响应样本,字段名与结构可信 |
| ⚠️ **透传** | MCP 层**不裁剪**,原样返回下游响应;字段结构以**下游 MIS/MBX 服务为准**,可能随下游变更 |
> 无法完全确证的少量细节**不散落在正文里**,统一收在 **§6.5 残留不确定项**。
> 写 prompt 前建议先扫一遍 **§6.4 高风险陷阱汇总**——那里是「照直觉写就会错」的地方。
> **给 AI 生成 prompt 的建议**:引用 ⚠️ 透传 字段时,prompt 里应写成「从返回的 `xxx` 字段读取」而非硬编码整个结构;
> 引用 ✅ 已确定 字段时可以放心直接取值。
---
## 目录
- [1. 工具总览](#1-工具总览)
- [2. 全局约定](#2-全局约定)
- [3. 工具详情](#3-工具详情)
- [3.1 `debuggingProjectQuery`](#31-debuggingprojectquery)
- [3.2 `queryProjectNameList`](#32-queryprojectnamelist)
- [3.3 `queryDriverListNamesByProject`](#33-querydriverlistnamesbyproject)
- [3.4 `queryDriverListVersion`](#34-querydriverlistversion)
- [3.5 `prepareTaskFile`](#35-preparetaskfile)
- [3.6 `generatePreloadUpdateLink`](#36-generatepreloadupdatelink)
- [3.7 `creatOrSendTask`](#37-creatorsendtask)
- [3.8 `queryTestUnitListByProjectName`](#38-querytestunitlistbyprojectname)
- [3.9 `queryTestPcByUuids`](#39-querytestpcbyuuids)
- [4. 典型工作流(编排剧本)](#4-典型工作流编排剧本)
- [5. 生成 SKILL 与 Prompt 的指引](#5-生成-skill-与-prompt-的指引)
- [6. 附录](#6-附录)
- [6.1 MCP 接入信息](#61-mcp-接入信息)
- [6.2 下游接口与白名单对照](#62-下游接口与白名单对照)
- [6.3 易混淆 / 已废弃工具](#63-易混淆--已废弃工具)
- [6.4 高风险陷阱汇总(写 prompt 前必读)](#64-高风险陷阱汇总写-prompt-前必读)
- [6.5 残留不确定项](#65-残留不确定项)
---
## 1. 工具总览
### 1.1 速查表
| # | MCP 工具名 | 所属服务 | 用途 | 必填参数 | 返回形态 |
|---|---|---|---|---|---|
| 1 | `debuggingProjectQuery` | `mis-mcp-tool-debugging` | 按项目名称/别名/五码查**项目基础信息** | 无(全部可选) | 分页信封 `{code,msg,total,rows[]}` ⚠️ |
| 2 | `queryProjectNameList` | `mis-mcp-tool-driver` | 取 MBX 侧**项目名称 + projectUuid** | 无(`creatorCode` 可选) | 数组 `[{name,projectUuid}]` ✅ |
| 3 | `queryDriverListNamesByProject` | `mis-mcp-tool-driver` | 按项目组/项目取**全部 Driver List Name** | `projectGroupUuid` 或 `projectUuid` | 数组 `[{driverListVersionUuid,driverListName}]` ✅ |
| 4 | `queryDriverListVersion` | `mis-mcp-tool-driver` | 取驱动列表版本的**包下载地址** | `driverListVersionUuid` | 下游对象 ⚠️(含 `packageFileUrl`) |
| 5 | `prepareTaskFile` | `mis-mcp-tool-driver` | 下载文件→重传到文件服务,换**任务下发可用的 fileUuid** | `fileUrl` | 对象 `{fileUuid,fileUrl,fileName,fileExtensionKey}` ✅ |
| 6 | `generatePreloadUpdateLink` | `mis-mcp-tool-vlab` | 生成 VLAB Preload 向导的**更新下载链接** | `project` | 对象(成功/失败两种结构)✅ |
| 7 | `creatOrSendTask` | `mis-mcp-tool-vlab` | **创建或下发测试任务** | `creatorCode`,`requestBodyJson` | 下游对象 ⚠️ / 纯文本提示 ✅ |
| 8 | `queryTestUnitListByProjectName` | `mis-mcp-tool-vlab` | 按项目名+五码查**机器列表** | `projectName`,`modelCode`,`ownerCode` | 下游列表 ⚠️ / 纯文本提示 ✅ |
| 9 | `queryTestPcByUuids` | `mis-mcp-tool-vlab` | 按 UUID 批量查**测试机在线状态** | `testUnitUuids` | 下游列表 ⚠️ |
> **参数必填标记来自源码**:`@ToolParam` 未写 `required = false` 即为**必填**。
### 1.2 数据依赖关系(谁喂谁)
这是生成 prompt 时最关键的一张图——**ID 都是一跳一跳传递的**:
```
① debuggingProjectQuery ──► projectName / projectUuid / modelCode
│
② queryProjectNameList ──────► projectUuid(MBX 侧)──┐
│
③ queryDriverListNamesByProject ◄─────────────────────┘
│ (需要 projectGroupUuid 或 projectUuid)
└──► driverListVersionUuid
│
④ queryDriverListVersion ◄──┘
└──► packageFileUrl
│
⑤ prepareTaskFile ◄─┘
└──► fileUuid
│
⑦ creatOrSendTask ◄──┘ (填入 requestBodyJson.model.children[].documentCopyDTOList[].fileUuid)
⑥ generatePreloadUpdateLink 独立链路,只需 project 名称(+ 可选 osVer)
⑧ queryTestUnitListByProjectName ──► testUnitUuid[]
│
⑨ queryTestPcByUuids ◄────────────────────┘ (查在线状态)
```
**关键 ID 传递表**:
| 上游工具 | 产出字段 | 下游工具 | 填入位置 |
|---|---|---|---|
| `queryDriverListNamesByProject` | `driverListVersionUuid` | `queryDriverListVersion` | 入参 `driverListVersionUuid` |
| `queryDriverListVersion` | `driverPackageVersionList[].packageFileUrl` | `prepareTaskFile` | 入参 `fileUrl` |
| `prepareTaskFile` | `fileUuid` | `creatOrSendTask` | `requestBodyJson.model.children[].documentCopyDTOList[].fileUuid` |
| `queryProjectNameList` | `projectUuid` | `queryDriverListNamesByProject` | 入参 `projectUuid` |
| `queryTestUnitListByProjectName` | `testUnitUuid` | `queryTestPcByUuids` | 入参 `testUnitUuids[]` |
### 1.3 语义说明:两个「项目查询」不重复(用户补充)
- `debuggingProjectQuery` —— 查的是 **SE 系统同步过来的 project** 信息;
- `queryProjectNameList` —— 查的是 **MBX 系统**的 project 信息;
- **两边的 project 的 `name` 值是对应的**,可互为参照。
> AI 写 prompt 时:要「项目基础信息」用 ①;要「能直接喂给 Driver 链路的 `projectUuid`」用 ②。
---
## 2. 全局约定
### 2.1 返回信封与三种裁剪行为
MCP 工具**全部返回字符串**(JSON 文本)。脱掉下游信封 `{code, msg, data}` 后,按模块有**三种**不同行为——写 prompt 时必须区分:
| 行为 | 工具 | 返回内容 |
|---|---|---|
| **A. 全量透传** | `debuggingProjectQuery` | 返回**整个信封** `{code,msg,total,rows[]}`,`rows[]` 内字段**不裁剪** ⚠️ |
| **B. 取 data(分页自动展平)** | `queryDriverListVersion`、`creatOrSendTask`、`queryTestUnitListByProjectName`、`queryTestPcByUuids` | 若 `data` 是对象且含 `records`,**只返回 `records` 数组**;否则返回 `data` 本身;`data` 为空返回 `"[]"` ⚠️ |
| **C. 取 data + 字段裁剪** | `queryProjectNameList`、`queryDriverListNamesByProject`、`prepareTaskFile`、`generatePreloadUpdateLink` | 只返回源码中显式挑出的字段 ✅ |
> **注意 B 类的空值表现**:`data` 为空时返回字符串 `"[]"`(**空数组**,不是空对象)。
### 2.2 分页参数命名不统一(易错点)
| 服务 | 页码参数 | 每页参数 | 默认值 |
|---|---|---|---|
| `mis-mcp-tool-debugging` | `pageNum` | `pageSize` | 1 / 10 |
| `mis-mcp-tool-driver` | `current` | `size` | 1 / 10(`queryProjectList*` / `queryDriverChidPage` / `queryDriverPackageList` / `queryWu*`)
1 / 5(`queryDriverListPage`) |
| `mis-mcp-tool-vlab` | `current` | `size` | 1 / 10 |
> **两个工具没有分页参数**(内部固定,调用方无需也无法指定):
> `queryProjectNameList`(固定第 1 页、每页 **100** 条)、`queryDriverListNamesByProject`(自动翻页取全量,每页 100 条)。
### 2.3 用户 ID 与鉴权
- **两种用户 ID 不能混用**:MCP 工具入参普遍收 **MIS 系统用户 ID**(如 `creatorCode`、`ownerCode`),
由服务内部通过 `MbxUserIdConverter` 转成 **MBX 用户 ID** 后传给下游(5 分钟本地缓存)。
- **转换失败有专用提示**:部分工具转换失败时返回**纯文本**而非 JSON,见 §2.4。
- **鉴权由 MCP 客户端透传**,调用方(LLM 侧)**不需要**在工具参数里传 token;
凭证走 MCP 请求头 `auth` / `clientid`,由 `MisAuthForestInterceptor` 注入下游。
### 2.4 非 JSON 返回(prompt 必须能识别)
以下情况返回的是**纯文本字符串**,不是 JSON——AI 解析时应先判断首字符:
| 工具 | 返回文本 | 触发条件 |
|---|---|---|
| `creatOrSendTask` | `请输入当前登录人信息` | `creatorCode` 为空,或 MIS→MBX 用户 ID 转换失败 |
| `queryTestUnitListByProjectName` | `登录人信息转换异常` | `ownerCode` 有值但转换失败 |
### 2.5 异常的处理方式
参数校验失败、下游业务失败时,工具**抛异常**(`IllegalArgumentException` / `RuntimeException`),
由 MCP 协议以错误形式返回,**不会**包装成 JSON。典型触发:
- `queryDriverListVersion`、`queryTestPcByUuids` 等:必填参数为空(如 `testUnitUuids` 空列表);
- 所有工具:下游返回非 JSON、下游业务码失败(错误信息取下游 `msg`)。
---
## 3. 工具详情
### 3.1 `debuggingProjectQuery`
**摘要**:根据项目名称、项目别名、项目五码查询项目基础信息,返回项目列表分页数据。
| 项 | 值 |
|---|---|
| 所属服务 | `mis-mcp-tool-debugging`(端口 18780,`STATELESS`) |
| Java 方法 | `ProjectMcpService.queryProjectList` |
| MCP 工具名 | `debuggingProjectQuery`(**源码中显式指定**,与 Java 方法名不同,调用时必须用这个名字) |
| 下游接口 | `GET {misApiBaseUrl}/debugging/project`(MIS 平台,网关白名单已放行) |
| 返回裁剪 | **A 类:全量透传**(`rows[]` 内 34 个字段全部返回,不裁剪)⚠️ |
**参数表**
| 参数名 | 类型 | 必填 | 默认 | 说明 | 示例 |
|---|---|---|---|---|---|
| `projectName` | String | 否 | — | 项目名称 | `IdeaPad 5 Pro 16ARP8` |
| `projectAlias` | String | 否 | — | 项目别名 | — |
| `modelCode` | String | 否 | — | 项目五码 | `LT4EN` |
| `ppmQuery` | String | 否 | — | 项目负责人名称或参与人 | `san.zhang` |
| `mtCode` | String | 否 | — | 项目四码 | `81S3` |
| `pageSize` | Integer | 否 | `10` | 每页条数 | `10` |
| `pageNum` | Integer | 否 | `1` | 页码 | `1` |
**返回 JSON 结构** ✅(顶层 5 字段)/ ⚠️(透传,未裁剪)
```jsonc
{
"total": 0, // number 总条数
"rows": [ /* 见下表,Project 实体,34 个字段 */ ],
"code": 200, // number 成功码固定 200
"msg": "查询成功", // string
"extraData": null // 该接口路径下恒为 null
}
```
**`rows[]` 元素字段表**(实体 `com.lcfc.debugging.domain.Project`,**无任何 JSON 重命名注解**)
| 字段名 | 类型 | 说明 |
|---|---|---|
| `projectUuid` | Long → number/string | 主键。**类型不确定**:雪花 ID 超 2^53-1 时会被序列化成字符串,须按「可能是数字也可能是字符串」处理 |
| `idpProjectUuid` | String | idp 项目管理表主键 |
| `projectName` | String | Project Name 数据 |
| `projectCode` | String | Project code 数据 |
| `projectAlias` | String | 项目别名 |
| `lenovoProductName` | String | 联想产品名称 |
| `issueOwners` | Array\