flycode-mcp 1.9.2 → 1.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +151 -19
  2. package/dist/flycode-mcp.min.js +2 -0
  3. package/package.json +21 -8
  4. package/dist/clients/authClient.js +0 -43
  5. package/dist/clients/authClient.js.map +0 -1
  6. package/dist/clients/databaseFunctionClient.js +0 -16
  7. package/dist/clients/databaseFunctionClient.js.map +0 -1
  8. package/dist/clients/entityClient.js +0 -28
  9. package/dist/clients/entityClient.js.map +0 -1
  10. package/dist/clients/formClient.js +0 -30
  11. package/dist/clients/formClient.js.map +0 -1
  12. package/dist/clients/functionClient.js +0 -30
  13. package/dist/clients/functionClient.js.map +0 -1
  14. package/dist/clients/logicClient.js +0 -45
  15. package/dist/clients/logicClient.js.map +0 -1
  16. package/dist/clients/runClient.js +0 -16
  17. package/dist/clients/runClient.js.map +0 -1
  18. package/dist/clients/types.js +0 -7
  19. package/dist/clients/types.js.map +0 -1
  20. package/dist/index.js +0 -53
  21. package/dist/index.js.map +0 -1
  22. package/dist/service/auth.js +0 -84
  23. package/dist/service/auth.js.map +0 -1
  24. package/dist/service/logic.js +0 -261
  25. package/dist/service/logic.js.map +0 -1
  26. package/dist/store/tenant.js +0 -20
  27. package/dist/store/tenant.js.map +0 -1
  28. package/dist/store/token.js +0 -25
  29. package/dist/store/token.js.map +0 -1
  30. package/dist/tools/common.js +0 -61
  31. package/dist/tools/common.js.map +0 -1
  32. package/dist/tools/database-function/read.js +0 -98
  33. package/dist/tools/database-function/read.js.map +0 -1
  34. package/dist/tools/entity/read.js +0 -169
  35. package/dist/tools/entity/read.js.map +0 -1
  36. package/dist/tools/entity/schemas.js +0 -65
  37. package/dist/tools/entity/schemas.js.map +0 -1
  38. package/dist/tools/form/read.js +0 -202
  39. package/dist/tools/form/read.js.map +0 -1
  40. package/dist/tools/function/read.js +0 -187
  41. package/dist/tools/function/read.js.map +0 -1
  42. package/dist/tools/logic/read.js +0 -170
  43. package/dist/tools/logic/read.js.map +0 -1
  44. package/dist/tools/logic/schemas.js +0 -122
  45. package/dist/tools/logic/schemas.js.map +0 -1
  46. package/dist/tools/logic/write.js +0 -303
  47. package/dist/tools/logic/write.js.map +0 -1
  48. package/dist/tools/run/read.js +0 -65
  49. package/dist/tools/run/read.js.map +0 -1
  50. package/dist/utils/config.js +0 -26
  51. package/dist/utils/config.js.map +0 -1
  52. package/dist/utils/date.js +0 -45
  53. package/dist/utils/date.js.map +0 -1
  54. package/dist/utils/error.js +0 -30
  55. package/dist/utils/error.js.map +0 -1
  56. package/dist/utils/mcp-types.js +0 -2
  57. package/dist/utils/mcp-types.js.map +0 -1
  58. package/dist/utils/request.js +0 -74
  59. package/dist/utils/request.js.map +0 -1
  60. package/dist/utils/snowflake.js +0 -119
  61. package/dist/utils/snowflake.js.map +0 -1
  62. package/dist/utils/str-replace.js +0 -353
  63. package/dist/utils/str-replace.js.map +0 -1
package/README.md CHANGED
@@ -10,8 +10,8 @@ A [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server for the
10
10
 
11
11
  - 基于官方 `@modelcontextprotocol/sdk` 实现,使用标准 `stdio` 传输协议。
12
12
  - 启动即完成 APaaS IDE 平台鉴权链路:账号登录 → 获取租户信息 → 获取 IDE Token。
13
- - 内置统一请求层 `request`,自动按请求类型(`center` / `tenant`)切换中心服务地址与当前租户连接地址,并自动注入鉴权 Token。
14
- - 当前提供工具:业务逻辑类 `page_model_logic_list`(分页查询业务逻辑列表)、`get_model_logic`(查询单个业务逻辑详情)、`save_model_logic`(保存 / 更新业务逻辑完整 JSON)、`simple_save_flycode_model_logic`(轻量保存 flycode 业务逻辑,只传 `modelLogicCode` / `flycode` / 可选 `input` / `output`);实体类 `page_entity_list`(分页查询实体列表)、`get_entity`(查询实体详情);表单 / 页面类 `page_form_list`(分页查询表单 / 页面列表)、`get_form`(查询表单 / 页面详情);函数类 `page_function_list`(分页查询 flycode 函数列表)、`get_function`(查询 flycode 函数详情,含 `confjson` 函数代码内容);数据库函数类 `page_database_function_list`(分页查询 PostgreSQL 自定义数据库函数列表,列表结果随行返回函数体 `functionscript`);SQL 执行类 `run_sql`(在业务库中执行一条 SELECT 查询,返回查询结果数据与结果总数);通用类 `generate_unique_code`(生成唯一编码,用于新建实体 / 领域 / 表单时生成 JSON 中的 `code` 字段)。
13
+ - 内置统一请求层 `request`,自动按请求类型(`center` / `tenant` / `business`)切换中心服务地址、当前租户连接地址或当前租户业务地址,并自动注入鉴权 Token:`business` 类型主要用于 H5 表单查询(需以特定预览账号 token 发起)。
14
+ - 当前提供工具:业务逻辑类 `page_model_logic_list`(分页查询业务逻辑列表)、`get_model_logic`(查询单个业务逻辑详情)、`save_model_logic`(保存 / 更新业务逻辑完整 JSON)、`simple_save_flycode_model_logic`(轻量保存 flycode 业务逻辑,只传 `modelLogicCode` / `flycode` / 可选 `input` / `output`);实体类 `page_entity_list`(分页查询实体列表)、`get_entity`(查询实体详情);表单 / 页面类 `page_form_list`(分页查询表单 / 页面列表)、`get_form`(查询表单 / 页面详情);H5 表单类 `page_h5_form`(分页查询 H5 表单列表)、`get_h5_form`(查询 H5 表单详情,含 `confjson` 内容 JSON);函数类 `page_function_list`(分页查询 flycode 函数列表)、`get_function`(查询 flycode 函数详情,含 `confjson` 函数代码内容);数据库函数类 `page_database_function_list`(分页查询 PostgreSQL 自定义数据库函数列表,列表结果随行返回函数体 `functionscript`);SQL 执行类 `run_sql`(在业务库中执行一条 SELECT 查询,返回查询结果数据与结果总数);通用类 `generate_unique_code`(生成唯一编码,用于新建实体 / 领域 / 表单时生成 JSON 中的 `code` 字段)。
15
15
 
16
16
  ---
17
17
 
@@ -28,14 +28,17 @@ A [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server for the
28
28
  # 安装依赖
29
29
  npm install
30
30
 
31
- # 编译 TypeScript 到 dist/
31
+ # 类型校验(tsc -p tsconfig.json,tsconfig 设 noEmit) + esbuild 经 scripts/build.mjs 打包压缩为单文件 dist/flycode-mcp.min.js
32
32
  npm run build
33
33
 
34
- # 或者直接用 ts-node 启动开发模式(自动监听编译)
34
+ # 仅做类型校验(不产出)
35
+ npm run typecheck
36
+
37
+ # 开发模式:esbuild --watch 持续重建产物
35
38
  npm run dev
36
39
  ```
37
40
 
38
- 构建产物位于 `dist/`,入口为 `dist/index.js`(已在 `package.json` 的 `bin` 中注册为 `flycode-mcp`)。
41
+ 构建产物为单个压缩文件 `dist/flycode-mcp.min.js`(已在 `package.json` 的 `bin` 中注册为 `flycode-mcp`;minify 后折叠为单行以减小体积,运行时依赖 `@modelcontextprotocol/sdk` / `axios` / `zod` 保持外置)。
39
42
 
40
43
  ---
41
44
 
@@ -283,7 +286,128 @@ username=<账号>&password=<密码>&tenantCode=<租户号>&envName=<环境名>
283
286
  - `pageswitch`:仅 switchpage 类型才有的页面切换配置(`mode` / `menu` / `pagerefs` / `eventlist`)
284
287
  - `message`:每次保存填写的提交信息(类似 git 提交信息)
285
288
 
286
- > 注:工具的 `description` 中附有「字段速查」,列出了各顶层对象的关键字段与编码枚举含义(如 `pageinfo.type` 页面类型、`marktype` 创建标记、`clientcategorycode` 用户端等),便于理解返回 JSON。详情类型的字段定义见 `src/clients/formClient.ts`(`FormResult` / `FormPageInfo` / `FormViewNode` / `FormControl` 等接口)。
289
+ > 注:工具的 `description` 中附有「字段速查」,列出了各顶层对象的关键字段与编码枚举含义(如 `pageinfo.type` 页面类型、`marktype` 创建标记、`clientcategorycode` 用户端等),便于理解返回 JSON。详情类型的字段定义见 `src/clients/form.ts`(`FormResult` / `FormPageInfo` / `FormViewNode` / `FormControl` 等接口)。
290
+
291
+ ### `get_form_outline` — 查询表单 / 页面骨架
292
+
293
+ 获取表单 / 页面的轻量骨架(地址簿 / 决策依据),约 2–4KB,避免为日常改动拉取完整 88KB 的表单 JSON(只读、幂等)。底层调用 `service/form.ts` 的 `getFormOutline`。
294
+
295
+ **输入参数:**
296
+
297
+ | 参数 | 类型 | 必填 | 说明 |
298
+ | ------ | ------ | ---- | -------------------------------- |
299
+ | `code` | string | 是 | 要查骨架的表单 / 页面的唯一编码 |
300
+
301
+ **返回:** `pageinfo` 关键字段、`viewTree`(递归骨架,仅 `code` / `type` / `title` + `children`)、`handlers` 与 `interfaces` 清单、`businessModels`(仅逻辑名,不回内容)。
302
+
303
+ > 用途:在不知道全量内容时先拿到所有可改对象的 `code`,避免 `NODE_NOT_FOUND` 盲猜;随后用 `get_form_fragment` 看局部真实属性名,再用 `patch_form` 修改。
304
+
305
+ ### `get_form_fragment` — 查询表单 / 页面局部内容
306
+
307
+ 按 `code` 取表单的局部内容(几 KB),避免为改一处而拉完整 88KB 表单 JSON(只读、幂等)。三种寻址方式三选一,可组合。底层调用 `service/form.ts` 的 `getFormFragment`。
308
+
309
+ **输入参数:**
310
+
311
+ | 参数 | 类型 | 必填 | 说明 |
312
+ | ------------- | ------ | ---- | ------------------------------------------------------------------------------- |
313
+ | `code` | string | 是 | 表单 / 页面的唯一编码 |
314
+ | `nodeCode` | string | 否 | 目标控件 / 节点编码,返回其完整子树 |
315
+ | `handlerCode` | string | 否 | 目标 presenter 处理器编码,返回其完整定义与 `actionIndex` 清单 |
316
+ | `section` | string | 否 | 整段 `pageinfo` / `view` / `presenter` / `controls` / `pageswitch` / `businessmodel` |
317
+
318
+ **返回:** 命中的 `node` / `handler` / `section`,以及 `actionIndex`(每个 action 的 `code` / `type` 与 `script` / `condition` / `expression` 长度),便于精确构造 `patch_form` 的 `replace_script`。
319
+
320
+ ### `patch_form` — 局部补丁修改表单 / 页面
321
+
322
+ 以结构化补丁(delta ops)局部修改表单 / 页面,**无需回传完整 88KB 的表单 JSON**(非只读、有事务性保护)。底层调用 `service/form.ts` 的 `patchForm`:先拉取最新完整对象 → 在内存副本上按 `ops` 顺序合并 → 一次性保存到 `POST /biserv/bizpage/saveNewPage`。
323
+
324
+ **输入参数:**
325
+
326
+ | 参数 | 类型 | 必填 | 说明 |
327
+ | --------------- | ------- | ---- | --------------------------------------------------------- |
328
+ | `code` | string | 是 | 目标表单 / 页面的唯一编码 |
329
+ | `ops` | array | 是 | 补丁操作数组,至少一个元素;9 类见下表,按数组顺序依次作用 |
330
+ | `commitMessage` | object | 是 | 提交信息,结构与 `save_model_logic` 的 `commitMessage` 一致 |
331
+ | `dryRun` | boolean | 否 | 只预演输出 diff、不落库,默认 `false` |
332
+ | `verify` | boolean | 否 | 保存后回读校验改动是否生效,默认 `true` |
333
+
334
+ **9 类 ops:**
335
+
336
+ | op | 关键参数 | 说明 |
337
+ | ---------------------- | ----------------------------------------------------------------------- | --------------------------------------------------------------------------- |
338
+ | `set_pageinfo` | `patch` | 浅合并进 pageinfo(如改标题 / 状态) |
339
+ | `set_attrs` | `code`、`patch` | 按 `code` 定位节点,浅合并属性(如 `hidden` / `required`) |
340
+ | `insert_node` | `parentCode`、`node`、`position?` | 在父节点下插入新节点 |
341
+ | `remove_node` | `code`、`checkRefs?` | 按 `code` 删除节点,默认校验引用 |
342
+ | `move_node` | `code`、`newParentCode`、`position?` | 移动节点到新父节点下 |
343
+ | `set_section` | `section`、`value` | 整段替换 `view` / `presenter` / `controls` / `pageswitch` |
344
+ | `replace_script` | `handlerCode`、`actionIndex?` / `actionCode?`、`field?`、`replacement?` / `ops?` | 改 action 的 `script` / `condition` / `expression`,支持整段覆盖或 old→new 局部替换 |
345
+ | `add_businessmodel` | `modellogiccode`、`overwrite?` | 仅给逻辑编码,MCP 自动拉取其完整 JSON 追加到 `businessmodel` |
346
+ | `remove_businessmodel` | `modellogiccode`、`checkRefs?` | 从 `businessmodel` 移除指定逻辑 |
347
+
348
+ **事务性:** 全部 `op` 预演成功才会落库,任一 `op` 失败(`NODE_NOT_FOUND` / `DUP_CODE` / `REF_VIOLATION` / `FETCH_FAILED`)则整批中止、零写入回滚;整批只发起一次保存请求,不存在写一半的中间态。
349
+
350
+ **返回:** `ok` / `applied` / `verified` / `errorCode` / `message` / `diff` / `ops[]`,其中 `ops[].suggestions` 在 `NOT_FOUND` 时给出相似候选。
351
+
352
+ > 错误码:`OK` / `DRY_RUN` / `EMPTY_OPS` / `FETCH_FAILED` / `NODE_NOT_FOUND` / `DUP_CODE` / `REF_VIOLATION` / `OPS_FAILED` / `SAVE_FAILED` / `VERIFY_FAILED`。
353
+
354
+ ### `save_form` — 全量保存表单 / 页面
355
+
356
+ 整页重构(重排布局、模板迁移等)时没有其他表达方式,才用本工具:把从 `get_form` 查询到的完整 `FormResult` 对象按需修改后整份回传保存(非只读)。底层调用 `service/form.ts` 的 `saveForm` → `POST /biserv/bizpage/saveNewPage`。日常局部改动请优先用 `patch_form`。
357
+
358
+ **输入参数:**
359
+
360
+ | 参数 | 类型 | 必填 | 说明 |
361
+ | --------------- | ------ | ---- | -------------------------------------------------------------- |
362
+ | `form` | object | 是 | 完整的 `FormResult` 对象,通常来自 `get_form` 的返回,改后回传 |
363
+ | `commitMessage` | object | 是 | 提交信息,结构与 `save_model_logic` 的 `commitMessage` 一致 |
364
+
365
+ **返回:** `ok` / `code` / `message`。
366
+
367
+ > 注:保存接口 `conf` / `ui` 要求传入完整对象,故 `businessmodel`(完整 `LogicResult[]`)**原样透传、不剥离**;`message` 作为顶层提交参数传入,不是 `FormResult` 内部的 `message` 字段。服务端按 `overwrite: false` 保存(不覆盖他人最新版本),`clearuserconfig` 默认 `true`。
368
+
369
+ ### `page_h5_form` — 分页查询 H5 表单列表
370
+
371
+ 根据查询条件分页查询智慧100 H5 引擎配置的 H5 表单列表(只读、幂等)。底层调用 `h5Client.pageH5List`(接口 `POST /api/masterserv/hpage/listH5Page`)。
372
+
373
+ > 说明:列表结果**不包含** `confjson` 字段(该字段为 H5 表单的内容 JSON,体积较大);如需获取表单的 `confjson`(含 Vue 代码与元数据配置),请调用 `get_h5_form` 获取详情。
374
+
375
+ **输入参数:**
376
+
377
+ | 参数 | 类型 | 必填 | 说明 |
378
+ | --------------- | ------ | ---- | -------------------------------------------------------------------------- |
379
+ | `keywords` | string | 否 | H5 表单代码及其元数据中包含的关键字,模糊匹配 |
380
+ | `pagecode` | string | 否 | H5 表单的唯一编码,模糊匹配 |
381
+ | `status` | string | 否 | 状态,整数:1-启用;2-停用。示例传 `"1"` |
382
+ | `title` | string | 否 | H5 表单的标题,模糊匹配 |
383
+ | `updateopname` | string | 否 | 最近修改人姓名,模糊匹配 |
384
+ | `page` | string | 否 | 当前页,从 1 开始,默认 1 |
385
+ | `rows` | string | 否 | 每页记录数,默认 20 |
386
+
387
+ **返回:** H5 表单列表的 JSON(`resp_data`),包含分页信封 `pageCount` / `pageIndex` / `pageSize` / `resultCount`,以及 `data` 数组中每个 H5 表单的基本信息:`pagecode`(唯一编码)/ `title`(标题)/ `status`(状态:1-启用;2-停用)/ `pagedescr`(描述)/ `platstatus`(平台状态)/ `platcreateop` / `platcreatetime` / `platupdateop` / `platupdatetime` 等。字段值可能为 `null`,且 `status` 以字符串或数字两种形态返回。
388
+
389
+ > 注:当接口返回数据包含 `HTTP 404 Not Found` 时,说明此租户未安装 H5 引擎。该工具以宽松结构(`catchall`)透传服务端返回的额外字段,确保任意列表结果均可正常返回。字段定义见 `src/clients/h5.ts`(`H5PageResult` 接口)。
390
+
391
+ ### `get_h5_form` — 查询 H5 表单详情
392
+
393
+ 根据 H5 表单的唯一编码 `pagecode` 获取其完整详情(只读、幂等),核心内容 `confjson` 为 H5 表单的内容 JSON(含 Vue 代码与元数据配置)。底层调用 `h5Client.getH5`(接口 `POST /api/masterserv/hpage/listH5PageByOne`)。
394
+
395
+ **输入参数:**
396
+
397
+ | 参数 | 类型 | 必填 | 说明 |
398
+ | ---------- | ------ | ---- | -------------------------- |
399
+ | `pagecode` | string | 是 | 要查详情的 H5 表单的唯一编码 |
400
+
401
+ **返回:** H5 表单详情的 JSON(`resp_data`),主要字段:
402
+
403
+ - `pagecode` / `title` / `pagedescr`:H5 表单唯一编码、标题、描述
404
+ - `status`:状态(1-启用;2-停用),以字符串或数字返回
405
+ - `confjson`:H5 表单的内容 JSON 字符串,包含 H5 表单的 Vue 代码与元数据配置(核心内容)
406
+ - `platcreateop` / `platcreatetime`:创建人 / 创建时间
407
+ - `platupdateop` / `platupdatetime`:最近更新人 / 最近更新时间
408
+ - `platstatus`:平台状态
409
+
410
+ > 注:当接口返回数据包含 `HTTP 404 Not Found` 时,说明此租户未安装 H5 引擎。详情类型的字段定义见 `src/clients/h5.ts`(`H5PageResult` 接口)。H5 查询接口需要以特定预览账号(职位为 `SFA系统管理员`)的 token 发起,该鉴权细节由 `service/h5.ts` 自动解析,调用方无需关心。
287
411
 
288
412
  ### `page_function_list` — 分页查询 flycode 函数列表
289
413
 
@@ -322,7 +446,7 @@ username=<账号>&password=<密码>&tenantCode=<租户号>&envName=<环境名>
322
446
  - `tablename` / `createtime` / `updatetime` / `createaccountname` / `updateaccountname`:数据库表名(函数一般无对应表,通常为空)、时间戳与创建 / 更新人
323
447
  - `confjson`:flycode 函数代码内容,是函数实现体的核心字段
324
448
 
325
- > 注:详情接口返回结构不稳定(部分字段调用时可能缺省),工具以宽松结构(`z.looseObject`)透传服务端返回的额外字段,确保任意详情均可正常返回。字段定义见 `src/clients/functionClient.ts`(`FunctionResult` / `FunctionPageResult` 接口)。
449
+ > 注:详情接口返回结构不稳定(部分字段调用时可能缺省),工具以宽松结构(`z.looseObject`)透传服务端返回的额外字段,确保任意详情均可正常返回。字段定义见 `src/clients/function.ts`(`FunctionResult` / `FunctionPageResult` 接口)。
326
450
 
327
451
  ### `page_database_function_list` — 分页查询数据库函数列表
328
452
 
@@ -341,7 +465,7 @@ username=<账号>&password=<密码>&tenantCode=<租户号>&envName=<环境名>
341
465
 
342
466
  **返回:** 数据库函数列表的 JSON(`resp_data`),包含分页信封 `pageCount` / `pageIndex` / `pageSize` / `resultCount`,以及 `data` 数组中每个数据库函数的基本信息:`dbfunctionname`(数据库函数名)/ `functionname`(函数中文名)/ `functioncode`(函数唯一编码)/ `functionscript`(数据库函数内容,PostgreSQL 函数体,列表随行返回)/ `metamodelcode`(领域模型编码)/ `marktype`(创建标记:0-平台;1-产品;2-租户)/ `publishstatus`(发布状态:1-已发布;2-未发布)/ `status`(状态:1-启用;2-停用)/ `creator` / `updator` / `createtime` / `updatetime` / `remark` 等。字段值可能为 `null`,且 `marktype` / `publishstatus` / `status` 等部分字段以数字或字符串两种形态返回。
343
467
 
344
- > 注:返回的 `data` 为服务端实际结构透传,工具以宽松结构(`catchall`)保留服务端返回的额外字段,确保任意列表结果均可正常返回。字段定义见 `src/clients/databaseFunctionClient.ts`(`DatabaseFunctionPageParams` / `DatabaseFunctionPageResult` 接口)。
468
+ > 注:返回的 `data` 为服务端实际结构透传,工具以宽松结构(`catchall`)保留服务端返回的额外字段,确保任意列表结果均可正常返回。字段定义见 `src/clients/database-function.ts`(`DatabaseFunctionPageParams` / `DatabaseFunctionPageResult` 接口)。
345
469
 
346
470
  ### `run_sql` — 执行 SQL 查询
347
471
 
@@ -384,17 +508,22 @@ username=<账号>&password=<密码>&tenantCode=<租户号>&envName=<环境名>
384
508
  flycode-mcp/
385
509
  ├── src/
386
510
  │ ├── index.ts # 入口:启动鉴权、注册工具、启动 stdio 服务
511
+ │ ├── types.ts # 跨模块共用的通用类型(如提交信息 CommitMessage)
387
512
  │ ├── service/ # 业务封装
388
513
  │ │ ├── auth.ts # 登录 → 获取租户信息 → 获取 IDE Token
389
- │ │ └── logic.ts # 保存业务逻辑(saveModelLogic / simpleSaveFlyCodeModelLogic / replaceFlyCodeSegments):提交信息处理 + 局部替换 + 异常兜底
514
+ │ │ ├── logic.ts # 保存业务逻辑(saveModelLogic / simpleSaveFlyCodeModelLogic / replaceFlyCodeSegments):提交信息处理 + 局部替换 + 异常兜底
515
+ │ │ ├── form.ts # 表单骨架 getFormOutline / 局部读取 getFormFragment / 补丁合并引擎 patchForm(9 类 ops,事务性)/ 全量保存 saveForm
516
+ │ │ └── h5.ts # H5 表单查询鉴权(解析 SFA系统管理员预览账号 token) + 列表/详情查询 service 封装
390
517
  │ ├── clients/ # 平台接口封装
391
- │ │ ├── authClient.ts # 登录 / 获取租户信息 / 获取 IDE Token 请求
392
- │ │ ├── logicClient.ts # 业务逻辑分页/详情查询、保存请求
393
- │ │ ├── entityClient.ts # 实体列表 pageEntityList / 详情 getEntity 请求
394
- │ │ ├── functionClient.ts # flycode 函数列表 pageFunctionList、详情 getFunction 请求;FunctionResult 等类型定义
395
- │ │ ├── databaseFunctionClient.ts # 数据库函数(PostgreSQL 自定义函数)列表 pageDatabaseFunctionList 请求;DatabaseFunctionPageResult 等类型定义
396
- │ │ ├── formClient.ts # 表单 / 页面列表 pageFormList、详情 getForm 请求;FormResult 等详情类型定义
397
- │ │ ├── runClient.ts # SQL 查询 sqlRun 请求(POST /api/biz/sqlrun)
518
+ │ │ ├── auth.ts # 登录 / 获取租户信息 / 获取 IDE Token 请求
519
+ │ │ ├── logic.ts # 业务逻辑分页/详情查询、保存请求;LogicResult 等类型定义
520
+ │ │ ├── entity.ts # 实体列表 pageEntityList / 详情 getEntity 请求;EntityResult 等类型定义
521
+ │ │ ├── function.ts # flycode 函数列表 pageFunctionList、详情 getFunction 请求;FunctionResult 等类型定义
522
+ │ │ ├── database-function.ts # 数据库函数(PostgreSQL 自定义函数)列表 pageDatabaseFunctionList 请求;DatabaseFunctionPageResult 等类型定义
523
+ │ │ ├── form.ts # 表单 / 页面列表 pageFormList、详情 getForm、保存 saveForm(POST /biserv/bizpage/saveNewPage)请求;FormResult 等详情类型定义
524
+ │ │ ├── h5.ts # H5 表单列表 listH5Page、详情 listH5PageByOne 请求;H5PageResult 等类型定义
525
+ │ │ ├── run.ts # SQL 查询 sqlRun 请求(POST /api/biz/sqlrun)
526
+ │ │ ├── test-case.ts # 预览账号列表 getPreviewAccounts 请求(H5 查询鉴权所需的 SFA系统管理员 token 来源)
398
527
  │ │ └── types.ts # 公共响应信封类型(DataResponse / PageResponse / CommonResponse)
399
528
  │ ├── store/ # 运行时内存存储
400
529
  │ │ ├── token.ts # 鉴权 Token 存储器
@@ -409,7 +538,10 @@ flycode-mcp/
409
538
  │ │ │ ├── read.ts # 只读类工具(page_entity_list / get_entity)
410
539
  │ │ │ └── schemas.ts # 实体共享 zod schema(EntityResult / EntityProperty,宽松透传结构)
411
540
  │ │ ├── form/
412
- │ │ │ └── read.ts # 只读类工具(page_form_list / get_form)
541
+ │ │ │ ├── read.ts # 只读类工具(page_form_list / get_form / get_form_outline / get_form_fragment)
542
+ │ │ │ └── write.ts # 写入类工具(patch_form / save_form)
543
+ │ │ ├── h5/
544
+ │ │ │ └── read.ts # 只读类工具(page_h5_form / get_h5_form)
413
545
  │ │ ├── function/
414
546
  │ │ │ └── read.ts # 只读类工具(page_function_list / get_function)
415
547
  │ │ ├── database-function/
@@ -438,8 +570,8 @@ flycode-mcp/
438
570
  2. **登录**:`service/auth.ts` 中的 `authenticate()` 调用 `/api/multiplat/auth/login` 获取 Token,存入内存。
439
571
  3. **定位租户与环境**:`authenticate()` 调用 `/api/multiplat/auth/getTenantInfo`,依据 `tenantCode + envName` 匹配出目标租户,保存其连接信息(`conn.config`)到内存。
440
572
  4. **获取 IDE Token**:`authenticate()` 调用 `/api/multiplat/auth/getIdeToken` 换取 IDE 专用 Token 并覆盖内存中的 Token。
441
- 5. **注册并启动**:创建 `McpServer`,注册 `page_model_logic_list`、`get_model_logic`、`save_model_logic`、`simple_save_flycode_model_logic`、`str_replace_flycode`、`page_entity_list`、`get_entity`、`page_form_list`、`get_form`、`page_function_list`、`get_function`、`page_database_function_list`、`run_sql`、`generate_unique_code` 等工具,通过 `StdioServerTransport` 监听请求。
442
- 6. **业务请求**:工具被调用时,`logicClient` / `entityClient` / `formClient` / `functionClient` / `runClient` 通过 `request({ type: "tenant" })` 自动切换到当前租户连接地址,并携带已注入的 Token 发起查询。
573
+ 5. **注册并启动**:创建 `McpServer`,注册 `page_model_logic_list`、`get_model_logic`、`save_model_logic`、`simple_save_flycode_model_logic`、`str_replace_flycode`、`page_entity_list`、`get_entity`、`page_form_list`、`get_form`、`get_form_outline`、`get_form_fragment`、`patch_form`、`save_form`、`page_h5_form`、`get_h5_form`、`page_function_list`、`get_function`、`page_database_function_list`、`run_sql`、`generate_unique_code` 等工具,通过 `StdioServerTransport` 监听请求。
574
+ 6. **业务请求**:工具被调用时,`logicClient` / `entityClient` / `formClient` / `functionClient` / `runClient` / `h5Client` 通过 `request({ type: "tenant" })` 或 `request({ type: "business" })` 自动切换到当前租户连接地址或业务地址。`h5Client` 的 H5 表单查询需以特定预览账号(职位为 `SFA系统管理员`)的 token 发起,该 token 由 `service/h5.ts` 通过 `test-case.ts` 的预览账号列表接口解析后,以 `request({ type: "business", token })` 显式传入。`request` 在请求头统一注入 Token:若调用方在配置里显式传入 `token`(如 `request({ url, method, type: "business", token: "xxxx" })`),则优先使用该传入 Token;否则回退到内存中的 Token(由 `authenticate()` 写入或通过 `setToken` 设置)。注入后自定义 `token` 字段会被剔除,不会泄漏给后端。
443
575
 
444
576
  ---
445
577