# Archive Hospital MCP

> 全周期智能管理平台（archive_hospital_server）只读 Connector。围绕当前登录医生的患者档案提供跨域查询能力，覆盖患者/标签画像/生活方式/随访/用药/消息沟通/报告指标/模板管理等业务域，把机构端数据取回供 WorkBuddy 做后续分析。所有查询都在当前登录医生的权限范围内执行；数据只读，仅限对话内分析，禁止下载导出。

- Skill: `ahang1598/archive-hospital-mcp` (Agent Skill)
- Install (CLI): `npx skillmds@latest add ahang1598/archive-hospital-mcp`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ahang1598/archive-hospital-mcp/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: ahang1598 (https://skillmd.com/u/ahang1598)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/ahang1598/archive-hospital-mcp

---


# 全周期智能管理平台 Skill（只读）

本 Connector 连接**全周期智能管理平台**（archive_hospital_server），面向医护/助理场景。所有工具都在**当前登录医生**的权限范围内执行——你只能看到该医生名下的患者及相关业务数据。

> ⚠️ 当前会话为**只读**（read-only）：所有已注册工具都是查询类，**没有任何写/更新/删除能力**。用户若要求新建/修改/删除档案数据（含用药计划），请直接告诉用户"当前 Connector 为只读模式，无法执行写操作，请到医生端应用中操作"，**不要**尝试用查询工具"曲线救国"。

> ⚠️ 本 skill 正文**不**逐个展开工具的完整参数——工具数量与形态会随业务演进变化，具体清单以运行时 `tools/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`，动词前缀直接暗示了它的语义：

| 前缀 | 含义 | 典型输入 | 典型输出 |
|---|---|---|---|
| `list_*` | 分页/批量查询 | 关键词、时间窗、筛选条件、分页参数 | 列表 + 分页元信息（`totalCount` / `hasMore` 等） |
| `get_*` | 单对象详情 / 某维度信息 | 目标 id（`patientId` / `followUpId` / `reportId` / `templateId` / 用药计划 id …） | 结构化详情 |

所有工具都是 **read**。看到工具描述里没有 `⚠️` / `❌` 前缀标记，就是纯查询。

### 业务域（**判断该找哪个前缀 + 关键词**）

下表是**当前已知业务域的快照，仅供参考**——用于帮 AI 快速定位"该去哪个域找工具"。真实业务域以运行时 `tools/list` 为准；**遇到表外的新域 / 新工具，按同样的命名规律 + 通用调用姿势处理即可，无需等本 skill 更新**。

| 业务域 | 关键词 | 典型问题 |
|---|---|---|
| **患者管理** | 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） | 患者在吃什么药、用药计划怎么设置的、有没有按时吃、打卡依从性如何 |

### 跨域 id 的机制与示例

**机制**：同一个对象（患者 / 随访 / 报告 / 用药计划等）在不同业务域里共用同一个主 id——拿到一个 id，同域和跨域的多个 `get_*` 都能复用，这是跨域联查的基础。

**示例**（仅说明机制，**非权威清单**，具体字段名以运行时 `tools/list` 的 `inputSchema` 为准，不要硬编）：患者用 `patientId`、分组用 `groupId`、随访用 `followUpId`、模板用 `templateId`、用药计划用其自身 id……

**发现工具的正确姿势**：调 `tools/list` 拿到清单 → 按前缀 + 业务域关键词过滤 → 读工具的 `description` 与 `inputSchema` 决定用哪个。**不要凭记忆硬编工具名**，工具会随业务演进增删。

## 通用调用姿势

### 姿势 1：用户报名字/关键词 → 先列表后详情

绝对高频场景。任何 `get_*_detail` / `get_*_basic_info` / `get_*_info` 类的详情工具都需要 id，**先用对应域的 `list_*` 工具搜出候选**：

1. `list_*`，把用户给的姓名/关键词/时间窗塞进参数
2. 从返回的 `entities` 或 `ids` 里挑目标对象
3. 再调 `get_*` 拿详情

**多个候选时不要自作主张选一个**——把候选（姓名 + 手机号后 4 位 + 科室/分组，或该业务域的区分字段）展示给用户，让用户确认。

### 姿势 2：同一对象的多维信息 → **并行**

针对同一个 `patientId`（或其他主 id），多个 `get_*` 工具是**互相独立**的，**在同一轮里并行调用**，不要串行等。

典型：用户问"某某患者的完整情况" → 并行拉基础信息、备注、画像、病史、最近饮食/运动统计、随访状态、用药计划与打卡统计、报告等。

胖工具内部可能已经把常联查的数据一次给全，**先看第一个工具 `entities` 里到底有什么**，再决定是否需要补拉，别重复拉同一份数据。

### 姿势 3：跨域联查靠共享 id

同一个 `patientId` 在患者、标签、生活方式、随访、用药、报告等多个域里都通用；`followUpId` 可以关联到时间轴、答卷、患者列表、统计等；用药计划的 id 可以关联到用药记录与打卡数据。拿到一个 id 后，同域和跨域的多个 `get_*` 都可以直接复用。

### 姿势 4：nextActions 是导航提示，不是必选

`nextActions` 是工具建议的下一步——如果你或用户接下来的意图就是这些动作，直接用；如果意图不匹配，忽略即可。

## 分页

- 用户说"最近的"/"前几条"：用工具的默认页码/页大小（一般 `currentPage=0, pageSize=20`）
- 用户说"全部"：先看第一页返回里的 `totalCount` / `hasMore` 之类字段，估算页数再决定是否翻页；**不要盲目一次性拉几百条**
- `entities` 里的列表可能被截断，但总数字段是真实总数——需要更多细节再翻页

## 时间参数

- 涉及时间窗的 `list_*`（饮食/运动/报告/随访/用药记录/打卡/消息等），优先用工具 `inputSchema` 里定义的时间字段（通常是 ISO8601 或 `YYYY-MM-DD`），不要瞎传格式
- 用户说"最近一周""上个月"这类相对时间，**基于当前会话时间换算成绝对日期**再传入

## 错误处理

工具返回的文本如果带 `[XXX]` 前缀，代表结构化错误，**按前缀决定动作**：

| 前缀 | 含义 | 处理 |
|---|---|---|
| `[MISSING_AUTHORIZATION]` | 没带 Bearer token | 提示用户在客户端侧完成全周期智能管理平台账号授权 |
| `[INVALID_TOKEN]` | token 无效 / 过期 / 权限不足 | 提示用户重新授权；**不要重试** |
| `[BIZ_ERROR:*]` | 后端业务报错（HTTP ≥ 400） | 把后端 `message` 原样告知用户，不要瞎猜原因 |
| `[NETWORK_ERROR]` | 网络异常 / 超时 | 可以再试一次；连续失败要提示用户 |
| 其他 | 未分类异常 | 展示原文并让用户联系维护方 |

**遇到 `[INVALID_TOKEN]` 不要重复调用**——token 状态由外层客户端管，你重试也是同样结果，只会打扰用户。

## 不要做的事

- **不要**尝试执行写操作（新增/修改/删除/发送/审批等，含设置或调整用药计划）——当前 Connector 就是只读，用户提出这类需求直接告知在应用中操作
- **不要**下载 / 导出患者数据（写文件、发外、生成文件交付等）——见「数据合规与使用边界」
- **不要**凭记忆硬编工具名，每次会话都用 `tools/list` 校对；工具会增删
- **不要**在没有 id 的情况下瞎猜一个 id 去调详情类工具，先用 `list_*` 搜
- **不要**在错误未消除时重复调用（尤其 `[INVALID_TOKEN]` / `[BIZ_ERROR]`），既浪费配额也解决不了问题
- **不要**跨对象拼接信息（"A 患者的备注 + B 患者的档案"），除非用户明确要求对比
- **不要**把不同域的 id 张冠李戴（`followUpId` 传给患者详情、`reportId` 传给随访详情、用药计划 id 传给随访/报告类工具等）

---

## 附录：工具清单快照（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_*` 前缀」定位使用

