quality-inspection-platform/docs/mcp_tools_for_ai.md
qihongkun f5143aee09 feat: 添加 Docker 部署支持和 MCP 原生集成
- 添加 Dockerfile、docker-compose.yml 和 Jenkins 流水线配置
- 新增 MCP 原生集成模块 (mcp_native.py)
- 移除旧的 mcp_bridge.py,更新依赖和文档
- 添加部署文档 (Docker 和服务器部署指南)

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-25 14:21:43 +08:00

369 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# MCP 工具能力说明AI 专用)
> **读者**Codex / Claude / Cursor 等通过 `quality-inspection-platform` MCP 工作的 Agent。
> **目的**:在调用 `tools/list` 之外,提供「何时用哪个工具、按什么顺序、参数怎么填」的固定上下文。
> **维护**:工具以 `app/main.py` 中 `MCP_TOOL_SPECS` 和平台 `GET /mcp/tools` 为准;增删工具时请同步更新本文档。
> **重要**:某些 MCP 客户端可能缓存、裁剪或延迟刷新工具列表;不要仅凭当前客户端可见工具反向删减本文档能力。
---
## 0. Agent 必读30 秒)
1. **先** `catalog_snapshot` 了解现有 apis / workflows / workflow_batches / mocks / folders / ssh_tree避免重复创建。
2. **写操作与执行**必须带 `sto-` API KeyMCP 请求头 `Authorization: Bearer``X-API-Key`HTTP 脚本可在 body 传 `api_key`,兼容旧名 `AI_TEST_API_KEY`)。
3. **接口**用 `api_upsert`**流程**用 `workflow_upsert``workflow_patch_json`**跑批**固定三步:`workflow_batch_create` → `workflow_batch_update``workflow_batch_run`
4. **排障**`workflow_run_get` 看 request/response → `workflow_run_loki_link` 查日志。
5. 如果当前客户端没有显示某个工具,先用 MCP `tools/list``GET /mcp/tools` 核对,再重启 MCP 客户端 / 会话。
6. 人类可读安装见 `docs/mcp_install.md`curl 示例见 `docs/mcp_quickstart.md`
### 0.1 工具来源与客户端刷新
- 权威工具清单来自后端 `app/main.py``MCP_TOOL_SPECS`,平台通过 `GET /mcp/tools` 对外暴露。
- 平台内置 Streamable HTTP MCP`GET/POST /mcp``tools/list` 由 `MCP_TOOL_SPECS` 提供;兼容 HTTP 网关 `GET /mcp/tools`
- Codex / Cursor / Claude 等客户端可能在会话启动时缓存工具列表;平台新增工具后,通常需要重启 MCP 客户端或重启会话。
- 如果客户端只显示部分工具,不代表平台没有该能力。先用 `/mcp/tools` 或本文档核对,再决定是否降级。
- Agent 更新本文档时,应以源码和 `/mcp/tools` 为准,不以单个客户端当前暴露的工具子集为准。
---
## 1. 平台在做什么
| 层级 | 含义 | MCP 主要工具 |
|------|------|----------------|
| 接口库 | 单个 HTTP API 定义method、url、headers、body… | `api_upsert`、`catalog_snapshot` |
| 工作流 | 多节点编排HTTP / 条件 / 循环 / 提取) | `workflow_upsert`、`workflow_run` |
| 跑批 | 一次任务顺序执行多个工作流 | `workflow_batch_*` |
| 执行历史 | 每次运行的 request/response 快照 | `workflow_run_list`、`workflow_run_get` |
| Mock | 命名数据集,供节点 mock 使用 | `mock_upsert` |
**数据约定**`url` 只存**路径**(如 `/api/user/{id}`),环境域名放在执行时的 `base_url`
---
## 2. 鉴权
### 2.1 平台地址
Codex 等客户端在个人 MCP 配置中配置平台 URL 与 API Key例如
| 配置项 | 含义 | 示例 |
|--------|------|------|
| `url` | MCP 端点 | `http://10.20.30.42:8000/mcp` |
| `http_headers.Authorization` / `headers.Authorization` | `Bearer sto-...` | `Bearer sto-xxx` |
Agent 通过 MCP 工具访问平台;平台进程由质量检测平台项目或共享内网服务负责。兼容环境变量名 `AI_TEST_API_KEY` 仅适用于旧 HTTP 脚本MCP 客户端请用请求头传 Key。
### 2.2 调用鉴权
| 类型 | 工具示例 | 无 Key 时 |
|------|----------|-----------|
| 只读 | `catalog_snapshot`、`workflow_get`、`workflow_run_list` | 以 superadmin 读全库(不推荐生产暴露) |
| 写入 | `api_upsert`、`workflow_upsert`、`folder_ensure`… | **401** |
| 执行 | `workflow_run`、`workflow_batch_run`、`ssh_script_run`、`workflow_run_replay` | **401** |
环境变量 `MCP_REQUIRE_API_KEY=true` 时,**所有**工具(含 `GET /mcp/tools`)均需 Key。
写操作与执行类工具必须使用有效 Key。不要把 Key 写入文档、日志或对话输出;只允许放在 MCP 配置、环境变量或请求头中。
---
## 3. 按场景选工具(决策表)
| 用户意图 | 推荐工具链 |
|----------|------------|
| 我不知道项目里有什么 | `catalog_snapshot` |
| 客户端看不到某个工具 | 查 `GET /mcp/tools` → 重启 MCP 客户端 / 会话 → 再调用 |
| 从 Apifox/文档批量建接口 | `folder_ensure` → 多次 `api_upsert`(或 `invoke-batch` |
| 新建/改流程图 | `workflow_validate`(可选)→ `workflow_upsert` |
| 只改流程里某几个字段 | `workflow_patch_json` |
| 跑一条流程 | `workflow_run``base_url` + `workflow_id` |
| 只调试一个节点 | `workflow_run_node` |
| 版本/回归一次跑多条流程 | `workflow_batch_create``workflow_batch_update``workflow_batch_run``workflow_batch_get` |
| 看某次执行详情 | `workflow_run_get``run_id` |
| 看历史列表 | `workflow_run_list``workflow_id` / `batch_id` |
| 失败后续跑 | `workflow_run_replay``run_id` |
| 查服务端日志 | `workflow_run_loki_link``run_id` + `node_id` |
| 看节点上次结果 | `workflow_node_status``workflow_get` |
| 快速看上次成败统计 | `workflow_analyze_last_run` |
| 准备 Mock 数据 | `mock_upsert` |
| 运维脚本 | `ssh_tree``ssh_script_upsert``ssh_script_run` |
---
## 4. 工具清单(按分类)
下文参数均为各工具的 **`arguments` 对象**MCP `tools/call` 直接传该对象)。仅在使用 HTTP 网关时,外层再包一层 `{"tool":"<名称>","arguments":{...}}`,见 [mcp_quickstart.md](./mcp_quickstart.md)。
### 4.1 发现与目录
#### `catalog_snapshot`
- **用途**:一次拉取 apis、workflows、mocks、**workflow_batches**、folders、ssh_tree。
- **参数**:无。
- **何时用**:任务开始、批量导入前、避免重复 `api_upsert`
#### `folder_ensure`
- **用途**:登记 apis 或 workflows 目录(空目录也可)。
- **参数**`target``apis` | `workflows``path`:如 `auth/login`(不要前导 `/`)。
- **需 Key**:是。
#### `folder_list`
- **用途**:列出已登记目录。
- **参数**:可选 `target`
#### `api_move_folder` / `workflow_move_folder`
- **用途**移动资源到目录workflow 目标目录须已 `folder_ensure`
---
### 4.2 接口API
#### `api_upsert`
- **用途**:创建或更新接口定义。
- **必填**`name`、`method`、`url`。
- **常用可选**`api_id`(更新)、`folder_path`、`headers`、`body`、`query`、`path_params`、`timeout_seconds`。
- **需 Key**:是。
- **示例**
```json
{
"tool": "api_upsert",
"arguments": {
"name": "用户登录",
"folder_path": "auth",
"method": "POST",
"url": "/api/login",
"headers": { "Content-Type": "application/json" },
"body": { "username": "admin", "password": "{{password}}" },
"query": {},
"path_params": {}
}
}
```
---
### 4.3 工作流Workflow
#### `workflow_upsert`
- **用途**:创建/更新完整 `definition`Drawflow JSON
- **必填**`name`、`definition``nodes`、`edges`、`variables`)。
- **需 Key**:是。
- **注意**:非空 `folder_path` 须先 `folder_ensure`workflows
#### `workflow_get`
- **用途**:读取流程及各节点 `last_run`
#### `workflow_patch_json`
- **用途**:对 `definition` / `variables` 等深度合并 patch小改动优先于全量 upsert。
#### `workflow_validate`
- **用途**:检查节点 id、边是否引用合法**upsert 前**建议调用。
#### `workflow_move_folder`
- **用途**:移动工作流到已登记目录。
#### `workflow_node_status`
- **用途**:单节点最近 `last_run`
#### `workflow_analyze_last_run`
- **用途**:上次执行汇总(成功/失败节点 id细节不足时再 `workflow_get`
---
### 4.4 执行
#### `workflow_run`
- **用途**:执行整条工作流。
- **必填**`workflow_id`。
- **可选**`base_url`(环境根地址)、`fail_fast`(默认 true
- **需 Key**:是。
- **返回**`status`、`variables`、`results[]`(含每节点 request/response、`run_id`。
#### `workflow_run_node`
- **用途**:只跑一个节点(调试参数)。
- **必填**`workflow_id`、`node_id`。
- **需 Key**:是。
#### `workflow_run_replay`
- **用途**:按历史 run 内保存的 definition 快照重放。
- **必填**`run_id`。
- **需 Key**:是。
---
### 4.5 跑批Batch
| 步骤 | 工具 | 说明 |
|------|------|------|
| 1 | `workflow_batch_create` | 建草稿,可带 `name`、`base_url`、`fail_fast` |
| 2 | `workflow_batch_update` | **必填** `batch_id`;设置 `workflow_ids: [1,2,3]` |
| 3 | `workflow_batch_run` | 执行,仅 `draft` 可跑 |
| 4 | `workflow_batch_get` | 查看结果及关联 `run_id` |
辅助:`workflow_batch_list``status` 过滤draft|running|success|failed|partial
**需 Key**create/update/run 需 Keyget/list 只读。
---
### 4.6 执行历史与日志
#### `workflow_run_list`
- **参数**:可选 `workflow_id`、`batch_id`、`limit`、`after_id`。
- **返回**`items[]` 摘要(无完整 body 时用 `workflow_run_get`)。
#### `workflow_run_get`
- **参数**`run_id`。
- **返回**:含 `payload``results`、`variables`、`workflow_snapshot`)。
#### `workflow_run_loki_link`
- **参数**`run_id`、`node_id`HTTP 节点)。
- **返回**`explore_url`、`logql`、时间窗;未配 `GENERAL_LOKI_EXPLORE_URL``enabled=false`
---
### 4.7 Mock 与其它
#### `mock_upsert`
- **用途**:按 `name` 创建/更新 Mock 数据集(`data` 对象)。
- **需 Key**:是。
#### `mcp_tool_upsert`
- **用途**:平台内「自定义 MCP 工具配置」表,**不是** Codex / Claude / Cursor 所见的内置 MCP 工具列表本身。
#### SSH 系列
| 工具 | 用途 |
|------|------|
| `ssh_tree` | 主机与脚本树 |
| `ssh_script_get` | 读脚本内容 |
| `ssh_script_upsert` | 创建/更新内联 bash`profile_id`+`name`+`content` |
| `ssh_script_run` | 远端执行(**需 password**,需 Key |
---
## 5. 工作流 definition 约定(简版)
```json
{
"nodes": [
{ "id": "n1", "position": {"x": 0, "y": 0}, "data": { "type": "http", "api_id": 1, "save_as": "resp1" } },
{ "id": "n2", "data": { "type": "extract", "source_var": "resp1", "field": "json.token", "save_as": "token" } }
],
"edges": [
{ "id": "e1", "source": "n1", "target": "n2", "data": { "branch": "success" } }
],
"variables": {}
}
```
| `data.type` | 说明 |
|-------------|------|
| `start` / `end` | 透传 |
| `http` | 引用 `api_id` 或内联 method/url/headers/body/query/path_params支持 mock、expect |
| `extract` | 从 `source_var``field` 写入 `save_as` |
| `condition` | 出边 `branch`: `true` / `false`;支持 `left_mode=json_path` |
| `loop` | BODY 边进入子图;`while_*` 控制下一轮DONE 边退出 |
变量替换:字符串中的 `{{token}}``variables` 注入。工作流级 `default_headers` 与节点 headers 合并,**节点覆盖同名 key**。
---
## 6. 调用协议
### 6.1 Codex / MCP 客户端(推荐)
- **端点**`http://10.20.30.42:8000/mcp`Streamable HTTP
- **鉴权**:请求头 `Authorization: Bearer sto-...`Codex 配置在个人 `config.toml``mcp_servers.<name>.http_headers`
- **工具发现**MCP 方法 `tools/list`(与 `MCP_TOOL_SPECS` 一致)
- **工具调用**MCP 方法 `tools/call``name` + `arguments`)→ `content[0].text` 为 JSON 字符串,解析后字段为 `ok` / `tool` / `data` / `error`;失败时 `isError` 可能为 true
### 6.2 HTTP 网关curl / CI
- **发现**`GET /mcp/tools` → `{ tools, require_api_key, ai_guide }`
- **单次**`POST /mcp/invoke` → `{ ok, tool, data, error }`
- **批量**`POST /mcp/invoke-batch` → `{ results: [...] }``stop_on_error: true` 时任一步失败即停
`ok=false` 时读 `error`,修正参数后重试;不要臆造未在 `tools/list` 中出现的工具名。
---
## 7. 推荐 Recipe
### R1新建接口并跑通单接口流程
```
catalog_snapshot → folder_ensure(apis) → api_upsert
→ workflow_upsert → workflow_run → workflow_analyze_last_run
```
### R2Apifox 迁移一批接口
```
catalog_snapshot → folder_ensure(apis, 模块路径)
→ invoke-batch: N × api_upsert → 核对 catalog
```
### R3版本回归跑批
```
workflow_batch_create → workflow_batch_update(workflow_ids)
→ workflow_batch_run → workflow_batch_get
→ 对失败项 workflow_run_get + workflow_run_loki_link
```
### R4失败节点最小修复
```
workflow_analyze_last_run → workflow_patch_json(只改变量/单节点 data)
→ workflow_run → 仍失败则 workflow_run_get 看 payload
```
---
## 8. 常见错误
| error / 现象 | 处理 |
|--------------|------|
| 401 MCP requires API Key | Codex个人 `config.toml` 中配置 `Authorization: Bearer sto-...`curl请求头或 body `api_key` |
| workflow folder not registered | 先 `folder_ensure` workflows |
| 仅 draft 批次可执行 | 已对 running/success 的 batch 再 run |
| unknown mcp tool | `GET /mcp/tools` 刷新名称 |
| Loki enabled=false | 配置 `GENERAL_LOKI_EXPLORE_URL` |
| 重复接口 | 同 method+url 视为同一接口,更新时传 `api_id` |
---
## 9. 文档索引
| 文件 | 受众 |
|------|------|
| **本文** `docs/mcp_tools_for_ai.md` | **AI Agent首选** |
| `docs/mcp_quickstart.md` | 人类 + curl 示例 |
| `docs/mcp_install.md` | MCP Server 安装、Codex/内网/远程环境 |
| 项目根 `AGENTS.md` | Codex 自动加载的短指引 |
---
*文档版本:与 `MCP_TOOL_SPECS`28 个工具)同步;接入方式为内置 Streamable HTTP `/mcp`,见 `docs/mcp_install.md`。*