archive-hospital-mcp · diff
v1.0.0 to v2.0.0
128 added, 69 removed. Audit A to A.
---
name: archive-hospital-mcp
- description: 面向医护/助理场景,提供当前登录医生名下的患者列表检索、患者详情/画像标签/备注/病史查询,以及有权限科室列表查询等能力。
- version: 1.0.0
+ description: 全周期智能管理平台(archive_hospital_server)只读 Connector。围绕当前登录医生的患者档案提供跨域查询能力,覆盖患者/标签画像/生活方式/随访/用药/消息沟通/报告指标/模板管理等业务域,把机构端数据取回供 WorkBuddy 做后续分析。所有查询都在当前登录医生的权限范围内执行;数据只读,仅限对话内分析,禁止下载导出。
+ version: 2.0.0
author: darcybfli
---
- # 腾医患者档案 Skill
+ # 全周期智能管理平台 Skill(只读)
- 本 Connector 连接全周期智能管理平台(archive_hospital_server),面向医护/助理场景,提供**患者档案查询**能力。所有工具都在**当前登录医生**的权限范围内执行——你只能看到该医生名下的患者。
+ 本 Connector 连接**全周期智能管理平台**(archive_hospital_server),面向医护/助理场景。所有工具都在**当前登录医生**的权限范围内执行——你只能看到该医生名下的患者及相关业务数据。
- ## 你能帮用户做什么
+ > ⚠️ 当前会话为**只读**(read-only):所有已注册工具都是查询类,**没有任何写/更新/删除能力**。用户若要求新建/修改/删除档案数据(含用药计划),请直接告诉用户"当前 Connector 为只读模式,无法执行写操作,请到医生端应用中操作",**不要**尝试用查询工具"曲线救国"。
- - **找人**:按姓名 / 手机号 / 病历号 / 是否收藏,翻页查询当前医生名下的患者列表
- - **看档案**:根据患者 ID 查看患者详情(基础档案、联系方式等)
- - **看标签**:根据患者 ID 查看患者画像标签(系统标签 + 医生自定义标签)
- - **看备注**:根据患者 ID 查看医生对该患者的备注
- - **看病史**:根据患者 ID 查看患者病史信息(既往病史 / 现病史等)
- - **看科室**:查询当前医生有权限访问的科室列表
+ > ⚠️ 本 skill 正文**不**逐个展开工具的完整参数——工具数量与形态会随业务演进变化,具体清单以运行时 `tools/list` 为准,工具描述里已经写清楚了参数与返回。正文只讲**通用姿势**:怎么发现工具、怎么组合调用、怎么处理返回、怎么规避坑。文末**附录**提供当前已知工具的静态快照,供快速定位参考。
- ## 可用工具
+ ## 职责边界(先想清楚再动手)
- ### 1. `query_patient_list` — 查询患者列表
+ 本 skill 的职责是**帮 WorkBuddy 把机构端数据取回来**:发现工具 → 组合调用 → 处理返回 → 规避坑。数据取回之后的分析,由 WorkBuddy 自身的通用能力承担,**不在本 skill 职责内**——不要在本 skill 里写死任何"分析配方"或"输出格式规范"。
- 按分页 / 关键词 / 收藏过滤,返回当前医生名下的患者列表。
+ ## 数据合规与使用边界(强制,P0)
- | 参数 | 类型 | 默认 | 说明 |
+ 患者数据属于**个人健康信息(PHI)**,敏感且涉及数据较多,使用必须遵循「合规、最小范围、保护数据」原则。
+
+ ### 只能用于数据分析,禁止下载 / 导出(强制)
+
+ - **禁止**把患者数据写成任何文件——包括 xlsx / csv / pdf / docx / json / md 等,**也禁止通过 WorkBuddy 生成文件交付**。用户要求"导出到桌面 / 生成表格文件 / 下载"时,一律拒绝并说明"患者数据只支持在对话内分析,不支持下载或导出"。
+ - **禁止**复制大段原始数据到对话外、发送到其他服务、或粘贴到其他应用。
+ - 数据只用于**本次问询的分析**,不落盘、不外传。
+
+ ### 输出必须附数据合规提醒(强制)
+
+ 每次输出涉及患者数据时,**末尾都附上固定的数据合规提醒**——面向用户,提醒其注意数据合规与隐私保护,格式统一:
+
+ > 🔒 数据合规提醒:以上内容涉及患者个人健康信息,请严格遵守数据保护要求,仅在授权范围内使用,勿对外泄露。
+
+ ### 展示脱敏
+
+ - 展示手机号 / 身份证号 / 住院号时,**默认脱敏**(如手机号显示为 `138****1234`),除非用户明确要求看完整值。
+
+ ### 不做医学判断
+
+ - 不要基于患者档案/备注/用药/画像给出**诊断建议**——你的职责是帮医生找信息、取数据,医学判断由医生做。
+
+ ## 工具组织方式
+
+ 所有工具都是**语义化"胖"工具**——一个工具对应一个业务查询动作,内部可能编排多个后端接口,返回统一的结构化结果:
+
+ ```jsonc
+ {
+ "summary": "面向 AI 的一句话摘要",
+ "entities": { /* 结构化数据,形态因工具而异 */ },
+ "ids": { /* 便于下一步引用的 id 集合 */ },
+ "nextActions": [ "推荐的后续工具名" ]
+ }
+ ```
+
+ ### 命名规律(**用来快速定位工具**)
+
+ 工具名一律 `snake_case`,动词前缀直接暗示了它的语义:
+
+ | 前缀 | 含义 | 典型输入 | 典型输出 |
|---|---|---|---|
- | `keyword` | string | `""` | 模糊搜索:姓名 / 手机号 / 病历号 |
- | `favorite` | `0`\|`1` | `0` | `1` 只看已收藏,`0` 全部 |
- | `page` | int | `0` | 页码,**从 0 开始** |
- | `pageSize` | int | `20` | 每页条数,最大 100 |
+ | `list_*` | 分页/批量查询 | 关键词、时间窗、筛选条件、分页参数 | 列表 + 分页元信息(`totalCount` / `hasMore` 等) |
+ | `get_*` | 单对象详情 / 某维度信息 | 目标 id(`patientId` / `followUpId` / `reportId` / `templateId` / 用药计划 id …) | 结构化详情 |
- **返回结构关注点**:`total`(总数)、`list[]`(每条含 `patientId`、`name`、`phone` 等)。后续查详情/标签/备注/病史**必须**用 `list[i].patientId`。
+ 所有工具都是 **read**。看到工具描述里没有 `⚠️` / `❌` 前缀标记,就是纯查询。
- ### 2. `query_patient_info` — 查询患者详情
+ ### 业务域(**判断该找哪个前缀 + 关键词**)
- 按 `patientId` 拿单个患者的详细档案。
+ 下表是**当前已知业务域的快照,仅供参考**——用于帮 AI 快速定位"该去哪个域找工具"。真实业务域以运行时 `tools/list` 为准;**遇到表外的新域 / 新工具,按同样的命名规律 + 通用调用姿势处理即可,无需等本 skill 更新**。
- | 参数 | 类型 | 说明 |
+ | 业务域 | 关键词 | 典型问题 |
|---|---|---|
- | `patientId` | string | 必填,取自 `query_patient_list` 返回的 `list[i].patientId` |
+ | **患者管理** | patient / group / remark | 找病人、看基础信息、备注、分组 |
+ | **标签画像 & 病史** | tag(system/custom)/ portrait / history / indicators | 患者身上有哪些标签、健康画像、既往病史、健康指标 |
+ | **生活方式** | diet / sport(records / statistics) | 饮食/运动明细与统计 |
+ | **随访管理** | followUp / joinRequest / autoImport / questionnaire | 随访项目、随访对象、时间轴、加入申请、患者答卷 |
+ | **消息沟通** | chat(session/messages)/ mass | 查看消息记录、消息列表、群聊详情 |
+ | **报告指标** | report / indicator | 检查报告列表与详情、指标类型、指标趋势 |
+ | **模板管理** | plan / questionnaire / msg template / template categories | 诊后计划模板、问卷模板、消息模板、模板分类 |
+ | **用药管理** | medication / drug(plan / records / checkIn) | 患者在吃什么药、用药计划怎么设置的、有没有按时吃、打卡依从性如何 |
- ### 3. `get_patient_portrait_tag` — 查询患者画像标签
+ ### 跨域 id 的机制与示例
- 按 `patientId` 拿患者的画像标签集合(系统标签 / 自定义标签)。
+ **机制**:同一个对象(患者 / 随访 / 报告 / 用药计划等)在不同业务域里共用同一个主 id——拿到一个 id,同域和跨域的多个 `get_*` 都能复用,这是跨域联查的基础。
- | 参数 | 类型 | 说明 |
- |---|---|---|
- | `patientId` | string | 必填,取自 `query_patient_list` 返回的 `list[i].patientId` |
+ **示例**(仅说明机制,**非权威清单**,具体字段名以运行时 `tools/list` 的 `inputSchema` 为准,不要硬编):患者用 `patientId`、分组用 `groupId`、随访用 `followUpId`、模板用 `templateId`、用药计划用其自身 id……
- ### 4. `get_patient_remarks` — 查询患者备注
+ **发现工具的正确姿势**:调 `tools/list` 拿到清单 → 按前缀 + 业务域关键词过滤 → 读工具的 `description` 与 `inputSchema` 决定用哪个。**不要凭记忆硬编工具名**,工具会随业务演进增删。
- 按 `patientId` 拿医生对该患者的备注信息。
+ ## 通用调用姿势
- | 参数 | 类型 | 说明 |
- |---|---|---|
- | `patientId` | string | 必填,取自 `query_patient_list` 返回的 `list[i].patientId` |
+ ### 姿势 1:用户报名字/关键词 → 先列表后详情
- ### 5. `get_patient_disease_info` — 查询患者病史
+ 绝对高频场景。任何 `get_*_detail` / `get_*_basic_info` / `get_*_info` 类的详情工具都需要 id,**先用对应域的 `list_*` 工具搜出候选**:
- 按 `patientId` 拿患者的病史信息(既往病史 / 现病史等)。
+ 1. `list_*`,把用户给的姓名/关键词/时间窗塞进参数
+ 2. 从返回的 `entities` 或 `ids` 里挑目标对象
+ 3. 再调 `get_*` 拿详情
- | 参数 | 类型 | 说明 |
- |---|---|---|
- | `patientId` | string | 必填,取自 `query_patient_list` 返回的 `list[i].patientId` |
+ **多个候选时不要自作主张选一个**——把候选(姓名 + 手机号后 4 位 + 科室/分组,或该业务域的区分字段)展示给用户,让用户确认。
- ### 6. `get_perm_department_list` — 查询科室列表
+ ### 姿势 2:同一对象的多维信息 → **并行**
- 查询当前登录医生有权限访问的科室列表。**无业务入参**。返回结构里通常包含科室 id / 名称等,可用于后续按科室维度进一步筛选或展示。
+ 针对同一个 `patientId`(或其他主 id),多个 `get_*` 工具是**互相独立**的,**在同一轮里并行调用**,不要串行等。
- ## 推荐调用姿势
+ 典型:用户问"某某患者的完整情况" → 并行拉基础信息、备注、画像、病史、最近饮食/运动统计、随访状态、用药计划与打卡统计、报告等。
- **用户说患者名字,而不是 ID**——这是常见情况。你要**先列表、后详情**:
+ 胖工具内部可能已经把常联查的数据一次给全,**先看第一个工具 `entities` 里到底有什么**,再决定是否需要补拉,别重复拉同一份数据。
- 1. 调 `query_patient_list`,`keyword` 传用户提到的姓名/手机号/病历号
- 2. 从 `list[]` 里找到目标患者,拿到 `patientId`
- 3. 再调 `query_patient_info` / `get_patient_portrait_tag` / `get_patient_remarks` / `get_patient_disease_info`
+ ### 姿势 3:跨域联查靠共享 id
- 如果 `list[]` 里有**多个同名患者**,不要自作主张选一个——把候选列表(姓名 + 手机号后 4 位 / 病历号)展示给用户,请用户确认后再进详情。
+ 同一个 `patientId` 在患者、标签、生活方式、随访、用药、报告等多个域里都通用;`followUpId` 可以关联到时间轴、答卷、患者列表、统计等;用药计划的 id 可以关联到用药记录与打卡数据。拿到一个 id 后,同域和跨域的多个 `get_*` 都可以直接复用。
- 如果用户想同时看**详情 / 标签 / 备注 / 病史**中的多个,这些 tool 都只依赖 `patientId`,可以**并行调用**,不要串行等。
+ ### 姿势 4:nextActions 是导航提示,不是必选
- `get_perm_department_list` 独立于患者维度,用户想"看看我管哪些科室"、或需要按科室做二次筛选时再调;不需要在每次查患者前预热调用。
+ `nextActions` 是工具建议的下一步——如果你或用户接下来的意图就是这些动作,直接用;如果意图不匹配,忽略即可。
- ## 分页与批量
+ ## 分页
- - 用户说"最近的"、"前几条",用默认 `page=0, pageSize=20` 即可
- - 用户说"全部",先看第一页的 `total`,估算页数再决定要不要继续翻页;不要盲目一次性拉几百条
- - 单页上限是 100,超过要翻页
+ - 用户说"最近的"/"前几条":用工具的默认页码/页大小(一般 `currentPage=0, pageSize=20`)
+ - 用户说"全部":先看第一页返回里的 `totalCount` / `hasMore` 之类字段,估算页数再决定是否翻页;**不要盲目一次性拉几百条**
+ - `entities` 里的列表可能被截断,但总数字段是真实总数——需要更多细节再翻页
+ ## 时间参数
+
+ - 涉及时间窗的 `list_*`(饮食/运动/报告/随访/用药记录/打卡/消息等),优先用工具 `inputSchema` 里定义的时间字段(通常是 ISO8601 或 `YYYY-MM-DD`),不要瞎传格式
+ - 用户说"最近一周""上个月"这类相对时间,**基于当前会话时间换算成绝对日期**再传入
+
## 错误处理
- 工具返回的文本里如果带 `[XXX]` 前缀,代表结构化错误:
+ 工具返回的文本如果带 `[XXX]` 前缀,代表结构化错误,**按前缀决定动作**:
- | 前缀 | 含义 | 你该怎么办 |
+ | 前缀 | 含义 | 处理 |
|---|---|---|
- | `[MISSING_AUTHORIZATION]` | 没带 Bearer token | 提示用户在 WorkBuddy 侧完成腾医账号授权 |
- | `[INVALID_TOKEN]` | token 无效 / 过期 / 权限不足 | 提示用户重新授权;不要重试 |
- | `[BIZ_ERROR]` | 后端业务报错(HTTP ≥ 400) | 把后端 message 展示给用户,不要瞎猜 |
- | `[NETWORK_ERROR]` | 网络异常 / 超时 | 可以稍等再试一次;连续失败要提示用户 |
+ | `[MISSING_AUTHORIZATION]` | 没带 Bearer token | 提示用户在客户端侧完成全周期智能管理平台账号授权 |
+ | `[INVALID_TOKEN]` | token 无效 / 过期 / 权限不足 | 提示用户重新授权;**不要重试** |
+ | `[BIZ_ERROR:*]` | 后端业务报错(HTTP ≥ 400) | 把后端 `message` 原样告知用户,不要瞎猜原因 |
+ | `[NETWORK_ERROR]` | 网络异常 / 超时 | 可以再试一次;连续失败要提示用户 |
+ | 其他 | 未分类异常 | 展示原文并让用户联系维护方 |
- **遇到 `[INVALID_TOKEN]` 不要重复调用**——token 状态由 WorkBuddy 客户端管,你重试也是同样结果,会打扰用户。
+ **遇到 `[INVALID_TOKEN]` 不要重复调用**——token 状态由外层客户端管,你重试也是同样结果,只会打扰用户。
- ## 隐私与合规
+ ## 不要做的事
- - 患者数据涉及**个人健康信息(PHI)**,属于敏感数据
- - 展示患者手机号 / 身份证号 / 病历号时,**默认脱敏**(如手机号显示为 `138****1234`),除非用户明确要求看完整值
- - 不要主动把患者数据写入外部文件、发送到其他服务、或用于与本次问询无关的目的
- - 不要基于患者标签/档案/病史给出诊断建议——你的职责是**帮医生找信息**,诊断由医生做
+ - **不要**尝试执行写操作(新增/修改/删除/发送/审批等,含设置或调整用药计划)——当前 Connector 就是只读,用户提出这类需求直接告知在应用中操作
+ - **不要**下载 / 导出患者数据(写文件、发外、生成文件交付等)——见「数据合规与使用边界」
+ - **不要**凭记忆硬编工具名,每次会话都用 `tools/list` 校对;工具会增删
+ - **不要**在没有 id 的情况下瞎猜一个 id 去调详情类工具,先用 `list_*` 搜
+ - **不要**在错误未消除时重复调用(尤其 `[INVALID_TOKEN]` / `[BIZ_ERROR]`),既浪费配额也解决不了问题
+ - **不要**跨对象拼接信息("A 患者的备注 + B 患者的档案"),除非用户明确要求对比
+ - **不要**把不同域的 id 张冠李戴(`followUpId` 传给患者详情、`reportId` 传给随访详情、用药计划 id 传给随访/报告类工具等)
- ## 不要做的事
+ ---
- - 不要在没有 `patientId` 的情况下瞎猜一个 ID 去调详情/标签/备注/病史
- - 不要在错误未消除时继续重试消耗后端配额
- - 不要跨患者拼接信息("A 患者的标签 + B 患者的档案")除非用户明确要求对比
+ ## 附录:工具清单快照(v2.0.0)
+
+ > 本附录是**静态快照**,仅供快速定位参考,不替代运行时发现。工具会随业务演进增删,**一切以 `tools/list` 实际返回为准**;遇到附录之外的工具,按正文「命名规律 + 业务域」定位,读工具 `description` 与 `inputSchema` 使用。
+
+ ### 源码已确认的工具(6 个)
+
+ | 工具名 | 业务域 | 关键参数 | 说明 |
+ |---|---|---|---|
+ | `query_patient_list` | 患者管理 | `keyword`(姓名/手机号/病历号模糊搜索)、`page`(页码,从 0 起)、`pageSize`(1~100,默认 20)、`favorite`(0 全部 / 1 只看收藏) | 查询当前登录医生名下的患者列表,返回 `total` / `list` 等 |
+ | `query_patient_info` | 患者管理 | `patientId` | 患者详细档案(基础信息、联系方式等) |
+ | `get_patient_disease_info` | 标签画像 & 病史 | `patientId` | 既往病史 / 现病史 |
+ | `get_patient_remarks` | 患者管理 | `patientId` | 患者备注 |
+ | `get_patient_portrait_tag` | 标签画像 & 病史 | `patientId` | 画像标签(系统标签 / 自定义标签) |
+ | `get_perm_department_list` | 患者管理 | 无入参 | 当前登录医生有权限访问的科室列表 |
+
+ **用法要点**:
+
+ - 所有 `patientId` 都来自 `query_patient_list` 返回的 `list[].patientId`,**不要凭空构造**
+ - 针对同一患者的多个 `get_*` 工具互相独立,可**并行调用**
+ - 患者域之外的业务域(生活方式 / 随访管理 / 消息沟通 / 报告指标 / 模板管理 / 用药管理)工具未包含在本快照内,以运行时 `tools/list` 实际返回为准,按正文「业务域表格关键词 + `list_*` / `get_*` 前缀」定位使用