接口文档提取服务器

YAPI 接口文档提取器 MCP 服务器:自动登录 YAPI,按路径搜索接口、按分组拉取接口列表、提取接口 Schema 用于生成 Mock 数据和 TypeScript 类型定义,并支持回写到 YAPI 的高级 Mock。

  • by MatchaCutie
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 MatchaCutie/YAPI-Extractor

使用说明

YAPI Extractor MCP Server

YAPI 接口文档提取器 MCP 服务器:自动登录 YAPI,按路径搜索接口、按分组拉取接口列表、提取接口 Schema 用于生成 Mock 数据和 TypeScript 类型定义,并支持回写到 YAPI 的高级 Mock。

功能特性

  • 🔐 自动登录 YAPI(LDAP),会话复用,过期自动重新登录
  • 🔍 按路径搜索接口、按分组列出接口
  • 📋 提取接口请求/响应 JSON Schema,输出可直接喂给 LLM 的生成提示词
  • 💾 将生成的 Mock JSON / TS 类型保存到本地
  • ☁️ 将 Mock 数据保存为 YAPI 高级 Mock 场景

安装与构建

npm install
npm run build      # 使用 esbuild 打包为单文件 ESM,第三方依赖会被一并打包进产物
npm start          # 运行 build/index.js
npm run dev        # 使用 ts-node 直接运行源码
npm run clean      # 清理构建产物

MCP 服务器配置

在 MCP 客户端(如 Cline)的配置中添加:

{
  "mcpServers": {
    "yapi-extractor": {
      "command": "node",
      "args": ["/path/to/yapi-mock-server/build/index.js"],
      "env": {
        "YAPI_BASE_URL": "http://your-yapi-server:3000",
        "YAPI_EMAIL": "your-email",
        "YAPI_PASSWORD": "your-password",
        "SAVE_FILES": "true",
        "OUTPUT_DIR": "mock"
      }
    }
  }
}

环境变量

必需:

  • YAPI_BASE_URL:YAPI 服务器地址
  • YAPI_EMAIL:登录邮箱
  • YAPI_PASSWORD:登录密码

可选:

  • SAVE_FILES:是否在提示词中要求自动保存生成文件("true" / "false",默认 false)
  • OUTPUT_DIR:文件保存目录,默认 mock。绝对路径直接使用;相对路径相对于 MCP 服务器的项目根目录解析

工具说明

1. search_yapi_interface

按接口路径搜索 YAPI,返回匹配的 interfaceId、projectId、title。在不知道接口 ID 时先用它定位。

参数:

  • path (必需):接口路径,如 /app/aiCoach/saveExercisePlan

2. list_cat_interfaces

获取分组下的所有接口。支持直接传分组页面 URL(自动解析 cat_<id>),也支持直接传 catId。

参数(二选一):

  • catUrl:分组页面 URL,如 http://host:3000/project/119/interface/api/cat_5143
  • catId:分组 ID,如 5143

3. extract_yapi_interface

获取接口详情,解析请求与响应 Schema,并返回一段构造好的 prompt 用于驱动后续 Mock/类型生成。

参数:

  • interfaceId (必需):YAPI 接口 ID(接口 URL 中 /api/<id> 的数字部分)
  • generateType (可选):mock / types / both,默认 both

返回字段(部分):

  • interfaceId / projectId / interfaceName / method / path
  • schemas.request:按参数位置分组的入参 Schema,无入参时为 null
    • params:路径参数(req_params,如 /user/{id}),恒为必填
    • query:URL query 参数(req_query)
    • body:请求体,JSON 类型取自 req_body_other,form 类型由 req_body_form 转换而来(文件字段标 format: "binary")
    • 说明:YAPI 的 query / 路径 / form 参数不记录类型,统一输出为 string,并原样带出 description、example 供推断真实类型
  • schemas.response:响应中 data 字段的 Schema
  • prompt:生成 Mock / TS 类型的完整提示词
  • shouldSaveFiles:来自 SAVE_FILES 环境变量
  • outputDir:来自 OUTPUT_DIR 环境变量

4. save_generated_files

将生成的 Mock 数据和类型定义写入本地,目录由 OUTPUT_DIR 决定。

参数:

  • interfaceId (必需):作为文件名前缀
  • mockData (可选):Mock JSON 字符串,保存为 {interfaceId}-mock.json
  • typeDefinitions (可选):TS 类型字符串,保存为 {interfaceId}-types.ts

5. save_advanced_mock

将 Mock 数据保存为 YAPI 高级 Mock 场景。服务器会自动包裹 { code: 200, msg: "", data: <你传入的 mockData> },并在 name 后追加时间戳避免重名。

参数:

  • interfaceId (必需):YAPI 接口 ID
  • projectId (必需):YAPI 项目 ID
  • name (必需):场景名称(一般用接口名)
  • mockData (必需):data 部分的 JSON 字符串,不要包含 code / msg

典型使用流程

  1. search_yapi_interface 用路径找到 interfaceId(或用 list_cat_interfaces 拉一个分组)
  2. extract_yapi_interface 获取 Schema 与生成提示词
  3. LLM 根据返回的 prompt 生成 mockData / typeDefinitions
  4. 调 save_generated_files 落盘,或调 save_advanced_mock 回写到 YAPI

输出文件

  • Mock:{interfaceId}-mock.json
  • 类型:{interfaceId}-types.ts

技术栈

  • Node.js (ESM)、TypeScript
  • @modelcontextprotocol/sdk
  • axios
  • 构建:esbuild(单文件打包,第三方依赖内联进产物)

目录结构

yapi-mock-server/
├── src/
│   └── index.ts        # MCP 服务器主入口
├── build/              # esbuild 输出(单文件 ESM)
├── package.json
├── tsconfig.json
└── README.md

许可证

MIT