内容
# 解剖学引擎
一款 3D 全身解剖学 + 生物力学引擎,以 **模型上下文协议(MCP)** 服务器的形式公开,带有内联 3D 查看器。它为 AI 代理(或任何应用程序)提供真实的解剖结构、生物力学关系和交互式身体,以进行渲染。
> **⚠️ 等待临床医生批准。** 解剖学和临床数据由 AI 编写,尚未经过**持牌临床医生**的审查。**仅用于教育目的** — 教育性和方向性,非诊断性。请参阅 [免责声明](#免责声明)。

<p align="center">
<img src="docs/screenshots/nervous.png" width="49%" alt="神经系统 — 大脑、脊髓和周围神经" />
<img src="docs/screenshots/cardiovascular.png" width="49%" alt="心血管系统 — 心脏和血管树" />
</p>
<p align="center"><em>骨骼 + 肌肉(顶部)· 神经系统 · 心血管系统 — 7 个系统之一,可独立切换。</em></p>
---
## 什么是解剖学引擎
- **22 个 MCP 工具**,基于手工知识核心 — 结构、连接、神经支配、血液供应、筋膜链、肌肉角色、运动、姿势、任务激活和矫正。
- **7 个真实的 Z-Anatomy 系统**(骨骼、肌肉、神经、心血管、内脏、韧带、皮肤),经过 Draco 压缩,并有移动版“精简”层。
- **骨骼身份绑定** — 鼠标悬停以识别任何部位,点击查看其生物力学链接,隔离区域,并表达命名姿势(骨盆倾斜、前倾头、圆肩…)。
它是 **LooksLab** 的可重用核心;它没有自己的账户或付费墙。
## 快速入门
```bash
npm install
npm run playground # → http://localhost:4599 (每个工具作为按钮 + 实时 3D 查看器)
npm test # 烟雾测试
npm run validate-data
```
## 作为 MCP 服务器使用
发布后,任意 MCP 客户端都可以指向该软件包:
```json
{
"mcpServers": {
"anatomy-engine": { "command": "npx", "args": ["-y", "@ajfutures/anatomy-engine"] }
}
}
```
或直接从本地检查运行 — `{ "command": "npx", "args": ["tsx", "src/index.ts"], "cwd": "…/anatomy-engine" }`.
## 22 个工具
所有读取内容均为**教育性和方向性,非诊断性**。每个工具都返回结构化 JSON。
### 浏览和搜索
| 工具 | 参数 | 返回内容 |
|---|---|---|
| `list_systems` | — | 7 个解剖系统,按加载优先级顺序。 |
| `list_structures` | `system?` | 所有结构,可选过滤到一个系统。 |
| `get_structure` | `id` | 一个结构:英文/拉丁文名称、区域、侧面、描述,以及它参与的模式。 |
| `search_anatomy` | `query` | 模糊自然语言 → 结构 ID(处理健身房俚语:“glute”,“hammy”,“rear delt”)。**结构化 `outputSchema`。** 在调用其他工具之前,将普通名称解析为 ID。 |
| `focus_region` | `region`, `side?` | 每个身体区域(可选一侧)中的结构 + 一个隔离它的查看器 URL。 |
### 连接和生物力学
| 工具 | 参数 | 返回内容 |
|---|---|---|
| `get_relationships` | `id` | 带有功能注释和矫正思路的精选生物力学链接(拮抗剂 / 协同剂 / 耦合)。 |
| `get_connections` | `id` | **所有**连接到一个结构的内容 — 类型(区域 / 协同剂 / 拮抗剂 / 运动链 / 筋膜 / 附件),分组和扁平。 |
| `get_fascial_chain` | `id` \| `chain` | 一个结构所在的肌筋膜(Anatomy-Trains)线,或一条线的成员 — 跟踪链条上的紧张。 |
| `get_muscle_roles` | `id`, `action` | 对于一个运动(例如“髋部伸展”),对结构的角色进行分类,并列出主动肌 / 拮抗剂 / 协同剂 / 稳定器。 |
| `describe_movement` | `joint`, `direction` | 运动范围,哪些肌肉缩短 vs. 延长,以及下游姿势影响。 |
| `get_pose` | `name` | 命名姿势(例如 `anterior_pelvic_tilt`)作为关节角度目标 + 其紧/弱肌肉平衡读取。 |
| `analyze_task` | `task`, `phase?` | 按阶段划分的多关节任务(步态、蹲、髋部弯曲、过肩压力)的肌肉激活。 |
| `list_patterns` | — | 命名的姿势肌肉平衡模式(交叉综合征、旋前链)。 |
| `get_pattern` | `id` | 一个模式的可能紧/弱肌肉、测量方法以及完整的矫正细节。 |
| `get_interventions` | `id`, `goal` | 按目标(释放 / 伸展 / 加强 / 移动)为结构提供矫正选项。 |
### 解剖学事实
| 工具 | 参数 | 返回内容 |
|---|---|---|
| `get_innervation` | `id` | 神经供应:神经、脊髓根(肌节)、神经丛。 |
| `get_blood_supply` | `id` | 动脉供应 + 静脉/淋巴引流。 |
### 临床 — 教育性和红旗筛选,**绝非诊断**
| 工具 | 参数 | 返回内容 |
|---|---|---|
| `get_referred_pain` | `id` | 肌肉通常将感觉传递到触发点区域(例如斜方肌上部 → 太阳穴)。 |
| `list_pathologies` | `id` | 与结构相关的疾病,每个疾病都有常见的体征 + 红旗进行筛查。 |
| `get_contraindications` | `target` | 需要谨慎的运动/负荷 — 按疾病 ID 或结构 ID(聚合其疾病)。 |
| `map_symptoms` | `region`, `symptom` | 区域内用于**学习**的结构/疾病 — 明确不用于诊断,始终返回红旗并指向面对面护理。 |
### 查看器
| 工具 | 参数 | 返回内容 |
|---|---|---|
| `show_anatomy` | `systems?`, `pose?`, `region?` | 解析后的选择 + `ui://anatomy/viewer` 内联 3D 资源(悬停识别,点击,隔离,表达)。 |
## 与 AI 代理一起使用
引擎的目的是,代理可以**链接这些工具来解决一个实际问题** — 将模糊的、自然语言的问题转化为结构化的解剖学,然后是扎实的、来源可靠的答案。五个例子:
**1. “哪些运动对前倾盆骨有益?”**
代理调用 `get_pose("anterior_pelvic_tilt")` → `get_pattern("lower_crossed_syndrome")` 以读取哪些肌肉**可能紧绷**(髋屈肌/髂肌,腰部竖脊肌)和**可能无力**(臀肌,深层核心肌肉),然后对每个肌肉调用 `get_interventions(...)`。→ *"释放和拉伸髋屈肌和下背部;加强臀肌和深层核心肌肉 — 这里有具体的矫正方法。"*
**2. “我的侧卧时,外侧髋部疼痛 — 可能是什么原因,我应该避免什么?”**
`map_symptoms("hip", "ache lying on my side")` 显示臀中肌和臀肌腱病变 → `list_pathologies("gluteus_medius")` 用于体征 + 红旗 → `get_contraindications("gluteal_tendinopathy")`。→ *"这种模式通常是臀肌腱病变;通常会因交叉腿和侧卧而加重 — 需要谨慎的是 X、Y。这些红旗意味着需要看医生。"* (绝非诊断。)
**3. “从蹲姿站起来时,哪些肌肉是主要的运动肌?”**
`analyze_task("squat", "ascent")`。→ *"主要的运动肌:臀大肌和股四头肌;协同肌:腿后肌、臀大肌、内收肌、 soleus;稳定肌:腰部竖脊肌和腹肌。"*
**4. “我经常出现紧张性头痛,斜方肌上部紧绷 — 有什么联系?”**
`search_anatomy("upper trap")` → `get_referred_pain("upper_trapezius")` (指向太阳穴)+ `get_pattern("upper_crossed_syndrome")` → `get_interventions(...)`,并使用 `list_pathologies` 红旗筛选颈源性头痛。→ *"斜方肌上部将疼痛传递到太阳穴,是紧张性头痛和前倾头姿势的经典驱动因素;这里有如何释放它的信息 — 这些红旗需要专业人员进行评估。"*
**5. “在 3D 中显示前倾头姿势和涉及的肌肉。”**
`get_pose("forward_head")` 用于紧/弱读取,然后 `show_anatomy({ systems: ["skeletal","muscular"], pose: "forward_head" })` 返回内联 3D 查看器,表达为该姿势,突出显示涉及的肌肉。→ *一个交互式身体,用户可以旋转,加上肌肉平衡解释。*
在每种情况下,引擎都提供**结构化的解剖事实和关系**;代理进行自然语言对话,并将它们转化为建议 — 有根据的,并始终以教育性而非诊断性的方式呈现。
## 免责声明
本引擎**仅用于教育和定位**。它**不是医疗建议,不是诊断**,也不是持牌临床医生的替代品。临床工具配备了红旗筛选和非诊断框架。
**状态:等待临床医生批准 — 仅用于教育目的。** 解剖学/临床数据由 AI 编写,尚未经过持牌临床医生审查。
## 许可证和署名
- **代码和数据:** MIT — 见 [LICENSE](LICENSE)。
- **3D 网格:** 源自 [Z-Anatomy](https://www.z-anatomy.com) (CC BY-SA 4.0),本身来自 BodyParts3D/DBCLS。在显示网格的任何地方,都需要遵守署名和共享衍生作品的义务 — 见 [NOTICE](NOTICE)。网格**不**包含在 npm 软件包中;它们由 `pipeline/export.py` 构建,并从托管的资产库提供。