Files
zyt/server/app/mcp/catalog/review
2026-09-24 11:03:44 +08:00
..
2026-09-24 09:45:44 +08:00
2026-09-24 11:03:44 +08:00
2026-09-24 11:03:44 +08:00
2026-09-24 09:45:44 +08:00
2026-09-24 09:45:44 +08:00
2026-09-24 09:45:44 +08:00

AI 数据目录人工审核

generated.php 由 php app/mcp/cli/catalog.php --write 扫描后台全部接口生成,只是盘点。 本目录下每个 *.php 文件返回 [资源标识 => 条目],覆盖自动判断,决定 AI 能否查询、怎么查询。 资源标识就是后台权限点写法,如 tcm.diagnosis/lists。

条目字段

字段 说明
status open 开放 / pending 待整改(必须写 reason)/ excluded 不开放(必须写 reason)
reason 未开放的原因,会展示给使用者和模型
name 中文名称(菜单名称不清楚时填写)
note 口径说明,如“按预约日期统计,不含已取消”
kind 覆盖自动识别:list 列表 / detail 单条详情 / report 统计或其他查询
params_allow 允许的查询参数及中文说明 ['patient_name' => '患者姓名(模糊)'];不填则用扫描到的参数减去禁用参数
forbid 额外禁用的参数(会扩大数据范围的开关等),全局禁用见 Catalog::GLOBAL_FORBID
force 固定参数,如 ['apply_data_scope' => 1]、['only_archived' => 1]
guard 详情类必填:'builtin'(接口自身已做逐条权限校验,需在注释写明函数)、['callable' => [类::class, '方法'], 'args' => ['id', 'admin_id', 'admin_info']](调用已有校验函数,返回 true 放行)、['via' => '列表资源标识', 'filter' => '参数名', 'match' => 'id'](用列表的数据范围判断)
handler 控制器里夹带写操作时改为直接调 Logic:['logic' => [类::class, '方法'], 'args' => ['params', 'admin_id', 'admin_info'], 'validate' => [验证器::class, '场景'], 'error' => [类::class, 'getError']]
http 只读但必须 POST 的接口填 'POST'
perm 权限点与资源标识不同时填写(如子接口复用页面权限)
perm_fallback 自身权限点在部分环境未登记时的替代权限点(按顺序取第一个已登记的),如 ['stats.yejiStats/tabLeaderboard', 'fans/yeji'];自身已登记时不生效
timeout 单条 SQL 超时秒数(默认 10,最大 60),只给后台本身就放宽了执行时间的重型统计

开放门槛(全部满足才可 open)

  1. 只读:调用链不写业务表(运行时在只读事务里执行,写库会直接报错并回滚);
  2. 不调用外部接口(企微、腾讯 IM、物流、短信等),或可用固定参数避开;
  3. 数据范围与后台页面一致;后台本身不做数据范围的,在 note 里写明“对有权限的账号返回全量”;
  4. 详情类有逐条权限校验(guard);
  5. 不返回凭据(各类密钥、令牌、证书),配置类接口一律 excluded;
  6. 去掉会扩大范围的参数(forbid),分页由 MCP 统一控制。

运行时还会检查权限点是否已在菜单登记;未登记(且 perm_fallback 里也没有已登记的替代项)的资源即使写了 open 也按“待整改”处理。