医疗术语MCP服务器
](https://www.npmjs.com/package/medical-terminologies-mcp)     
模型上下文协议(MCP)服务器,提供对全球主要医学术语的统一访问:
- ICD-11 -国际疾病分类(世界卫生组织)
- 临床术语 -药物系统命名法 *(选择加入;需要自托管暴风雪)*
- 腰部 -逻辑观测标识符名称和代码
- RxNorm -临床药物的标准化名称(NIH)
- 医学主题词 -医学主题标题(NLM)
- 空中交通管制 -解剖治疗化学分类(世界卫生组织合作中心,通过NLM RxClass提供服务)
- CID-10 -ICD-10的巴西葡萄牙语翻译(DataSUS V2008,捆绑)
特性
- 31个默认工具(37个启用SNOMED)用于医学术语查找
- 3 MCP 提示 将工具调用编排到命名工作流中(
find-medical-code,drug-info,cid10-portuguese-lookup)--客户端将这些呈现为单击用户操作 - 4 MCP 资源 用于过程中参考内容(
info://server,info://cid10/chapters,info://licenses,info://stats)--亚毫秒读取(除info://stats往返托管端点上的StatsCounter持久对象) - 单个服务器中的多术语支持
- 跨术语映射和搜索
- 内置缓存以提高性能
- 遵守API限制的费率限制
- 格式丰富的详细回复
- 两种运输方式: 标准 (默认值;适用于Claude Desktop、IDE客户端)和 流式HTTP (对于托管部署,默认情况下在边缘的Cloudflare Workers、Smithery URL提交或自托管Docker上运行)
这是给谁的?
此服务器是 不 临床护理决策工具——执业临床医生有专门的助理(UpToDate AI、OpenEvidence、EHR集成工具)。实际受众是研究人员、公共卫生分析师、临床信息学开发人员和教育工作者,他们需要通过程序访问权威术语数据。
| 如果你是… | 开始 | 为什么 |
|---|---|---|
| 生物医学研究员/文献学家 | mesh_search, mesh_descriptor, mesh_tree | MeSH是PubMed的索引词汇;树编号允许您以编程方式遍历受控层次结构 |
| 公共卫生分析员(巴西/SUS) | cid10_search, cid10_chapters, atc_classify | CID-10 V2008是巴西的操作标准;ATC与DataSUS处方数据完美配对 |
| 公共卫生分析员(国际) | icd11_search, icd11_lookup, icd11_chapters | 世界卫生组织ICD-11是目前的国际修订版;章节和层次结构支持管道分类 |
| 临床信息开发人员 | loinc_search, loinc_details, find_equivalent | LOINC用于实验室/观察互操作性;跨术语搜索构建新映射 |
| 教育工作者/课程作者 | mesh_descriptor, icd11_lookup, rxnorm_search | 权威定义、树编号和药物术语类型,您可以放入自检练习中 |
尝试托管实例(不安装)
Cloudflare Workers的公共部署在以下位置运行:
https://medical-terminologies-mcp.sidneybissoli.workers.dev/mcp通过MCP检查器或任何可流式HTTP MCP客户端连接:
npx @modelcontextprotocol/inspector --transport streamable-http \
--server-url https://medical-terminologies-mcp.sidneybissoli.workers.dev/mcp或者通过Smithery安装,Smithery通过网关代理同一端点:
npx -y smithery mcp add sidneybissoli/medical-terminologies托管实例配置了世界卫生组织凭据,因此所有31个默认工具都可以在没有任何设置的情况下工作。对于您自己的部署(例如公司网络、不同地区、自定义世界卫生组织证书),请参阅 安装 和 托管在Cloudflare Workers上 下面的部分。
安装
全局安装(推荐)
npm install -g medical-terminologies-mcp本地安装
npm install medical-terminologies-mcp配置
克劳德桌面版
添加到您的Claude Desktop配置文件中:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json 视窗: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"medical-terminologies": {
"command": "npx",
"args": ["-y", "medical-terminologies-mcp"],
"env": {
"WHO_CLIENT_ID": "your-who-client-id",
"WHO_CLIENT_SECRET": "your-who-client-secret"
}
}
}
}环境变量
| 变量 | 必填 | 描述 |
|---|---|---|
WHO_CLIENT_ID | 是? | 世界卫生组织ICD API客户ID |
WHO_CLIENT_SECRET | 是? | 世界卫生组织ICD API客户秘密 |
WHO_ICD11_RELEASE_ID | 否 | ICD-11版本可供查询(例如。 2024-01, 2025-01).默认 2024-01. |
ENABLE_SNOMED_TOOLS | 否² | 设置为 true 注册6个SNOMED相关工具。默认关闭 |
SNOMED_BASE_URL | No² | 暴风雪实例的基本URL,例如。 https://my-snowstorm.example.com/snowstorm/snomed-ct. |
SNOMED_LANGUAGE | 否² | 接受SNOMED响应的语言标签,例如。 pt, pt-BR, es.默认值 en单个标签值被可靠地传递;具有q权重的复合值(例如。 pt-BR,en;q=0.8)取决于Snowstorm实例的Accept-Language处理——回退语义可能会有所不同。如果依赖于加权回退,请针对您的特定部署进行测试。 |
LOG_LEVEL | 无 | 引脚日志级别(debug, info, warn, error, fatal).默认 info. |
¹ICD-11工具需要。获取凭据:https://icd.who.int/icdapi.
²参见 SNOMED CT设置(高级) 在......下面LOINC、RxNorm和MeSH不需要配置。
HTTP传输(托管/共享部署)
默认情况下,服务器在stdio上运行——这是Claude Desktop和IDE客户端所期望的。对于托管部署(Cloudflare Workers、Smithery、您自己的Docker容器),请通过 --http 切换到流式HTTP传输:
medical-terminologies-mcp --http --port 3000
# or, in Docker / containers:
medical-terminologies-mcp --http --host 0.0.0.0 --port 3000| 标志 | 环境变量 | 默认值 | 描述 |
|---|---|---|---|
--http | MCP_HTTP=true | off | 启用流式HTTP传输而不是stdio |
--port N | PORT | 3000 | 要侦听的TCP端口(使用 0 对于临时端口) |
--host H | HOST | 127.0.0.1 | 绑定地址。通过 0.0.0.0 用于容器/托管用途 |
终点:
POST /mcp--基于流式HTTP(MCP协议)的JSON-RPC。无状态模式:每个请求都是独立的,没有会话cookie。GET /health--活性探针返回{ status, name, version, tool_count }用于负载均衡器和正常运行时间监视器。- CORS是允许的(
*)因此浏览器客户端(例如MCP Inspector web UI)可以直接连接。
从另一个终端进行快速烟雾测试:
curl -sS http://localhost:3000/health
# {"status":"ok","name":"medical-terminologies-mcp","version":"1.5.0","tool_count":31}
# Inspector via HTTP
npx @modelcontextprotocol/inspector --transport streamable-http --server-url http://localhost:3000/mcp托管在Cloudflare Workers上(主要)
生产部署是Cloudflare Worker。来源生活在 src/worker.ts,配置中 wrangler.toml,并在中部署CI .github/workflows/deploy-worker.yml (每次按下都会自动运行 main).
要部署自己的实例,请执行以下操作:
npm ci
npm run build:worker
npx wrangler login # one-time, browser flow
npx wrangler deploy # publishes to ..workers.dev
# Set ICD-11 secrets so those 5 tools work:
npx wrangler secret put WHO_CLIENT_ID
npx wrangler secret put WHO_CLIENT_SECRET公共端点是 POST https://..workers.dev/mcp.CORS是允许的,因此MCP检查器web UI直接连接。 /health 回报 { status, name, version, tool_count, uptime_s }.
Why Workers:边缘零冷启动,1000万请求每月5美元(免费层每天可覆盖高达10万个请求),无需调整或重启虚拟机。第一阶段部署使用每个隔离缓存+速率限制器——适用于中等流量;在持续的高负载下,交换Workers KV缓存和持久对象速率限制器(跟踪为PROGRESS.md第11.9阶段第2阶段随访)。
在Smithery上市
在您的Worker上线后,在Smithery上注册URL:
- 访问https://smithery.ai → 发布→ MCP (或
https://smithery.ai/new). - 选择 统一资源定位符 提交路径(Smithery在2024年弃用了容器托管——现在支持的流是URL)。
- 粘贴
https://.workers.dev/mcp.Smithery的网关扫描合规性和代理流量。
自托管Docker(替代方案)
如果您更愿意在自己的基础架构中运行服务器(私有部署、内部合规约束、本地),该仓库包括 Dockerfile:
docker build -t medical-terminologies-mcp .
docker run --rm -p 3000:3000 \
-e PORT=3000 \
-e WHO_CLIENT_ID=... -e WHO_CLIENT_SECRET=... \
medical-terminologies-mcp多阶段构建(~150 MB),运行 node dist/index.js --http,绑定 0.0.0.0:$PORT。与Workers部署相同的MCP端点。
可用工具(默认情况下为31个,启用SNOMED时为37个)
ICD-11工具(5)
| 工具 | 说明 | 示例 |
|---|---|---|
icd11_search | 按术语搜索ICD-11 | query: "diabetes mellitus" |
icd11_lookup | 通过代码/URI获取实体详细信息 | code: "5A11" |
icd11_hierarchy | 导航父/子关系 | code: "5A11" |
icd11_chapters | 列出所有ICD-11章节 | - |
icd11_postcoordination | 获取后协调轴 | code: "5A11" |
LOINC工具(4)
| 工具 | 说明 | 示例 |
|---|---|---|
loinc_search | 搜索实验室测试和观察结果 | query: "glucose" |
loinc_details | 获取完整的LOINC代码详细信息 | loinc_num: "2339-0" |
loinc_answers | 获取调查答案列表 | loinc_num: "44249-1" |
loinc_panels | 获取面板/表单结构 | loinc_num: "24331-1" |
RxNorm工具(5)
| 工具 | 说明 | 示例 |
|---|---|---|
rxnorm_search | 按名称搜索药物 | query: "metformin" |
rxnorm_concept | 获取药物概念详细信息 | rxcui: "6809" |
rxnorm_ingredients | 获取活性成分 | rxcui: "6809" |
rxnorm_classes | 参加治疗课程 | rxcui: "6809" |
rxnorm_ndc | RxCUI和NDC之间的映射 | rxcui: "6809" |
MeSH工具(4)
| 工具 | 说明 | 示例 |
|---|---|---|
mesh_search | 搜索MeSH描述符 | query: "hypertension" |
mesh_descriptor | 获取描述符详细信息 | mesh_id: "D006973" |
mesh_tree | 获取树层次结构位置 | mesh_id: "D006973" |
mesh_qualifiers | 获取允许的限定符 | mesh_id: "D006973" |
SNOMED CT工具(5,默认禁用)
这些仅在以下情况下注册 ENABLE_SNOMED_TOOLS=true。参见 SNOMED CT设置(高级).
| 工具 | 说明 | 示例 |
|---|---|---|
snomed_search | 按术语搜索概念 | query: "myocardial infarction" |
snomed_concept | 通过SCTID获取概念细节 | sctid: "22298006" |
snomed_hierarchy | 获取父/子概念 | sctid: "22298006" |
snomed_descriptions | 获取所有描述 | sctid: "22298006" |
snomed_ecl | 执行ECL查询 | ecl: "<< 73211009" |
人行横道工具(5-- map_snomed_to_icd10 需要SNOMED)
| 工具 | 说明 | 示例 |
|---|---|---|
map_icd10_to_icd11 | 权威ICD-10→ 通过捆绑世界卫生组织过渡表绘制ICD-11图;返回主代码+章节+URI和任何WHO文档化的备选方案 | icd10_code: "E11" |
map_snomed_to_icd10 | 鼻CT→ ICD-10指南(仅当 ENABLE_SNOMED_TOOLS=true) | sctid: "73211009" |
map_loinc_to_snomed | 腰部↔ SNOMED指南 | loinc_code: "2339-0" |
validate_codes | 在ICD-11、LOINC、RxNorm、MeSH、ATC、CID-10(以及启用时的SNOMED)中批量验证多达100个代码;每个代码返回有效/无效+显示名称 | codes: [{terminology:"icd11",code:"5A11"}, …] |
find_equivalent | 跨术语搜索;禁用SNOMED工具时跳过SNOMED分支 | term: "diabetes" |
ATC工具(3)
世界卫生组织解剖治疗化学分类,通过NLM RxClass提供(免费,无授权)。WHOCC基础本身需要付费订阅,但RxClass封装了相同的代码/名称对。
| 工具 | 说明 | 示例 |
|---|---|---|
atc_classify | 药品名称→ ATC代码 | drug_name: "metformin" |
atc_lookup | ATC代码(1-4级)→ 名称+级别类型 | atc_code: "A10BA" |
atc_members | ATC等级→ 会员毒品 | atc_code: "A10BA" |
CID-10工具(4)
ICD-10的巴西葡萄牙语翻译(DataSUS V2008)。打包为静态数据集——无HTTP调用。巴西SUS在操作上使用CID-10 V2008;对于国际ICD-11(世界卫生组织当前修订版),请使用上述ICD-11工具。
| 工具 | 说明 | 示例 |
|---|---|---|
cid10_search | 葡萄牙语文本搜索(不区分发音符号) | query: "diabetes" |
cid10_lookup | 代码→ 葡萄牙语官方名称 | code: "I21" 或 "A00.1" |
cid10_chapters | 列出22个CID-10章节 | - |
cid10_chapter | 第章详细介绍组成小组 | num: 9 |
版本控制工具(2)
展示此服务器目前查询的每个术语的版本——在对固定版本运行批处理验证或调查上游更新后的意外查找遗漏时非常有用。
| 工具 | 说明 | 示例 |
|---|---|---|
terminology_versions | 列出所有8个支持的术语,包括当前版本、发布日期、发布者、源URL和更新节奏 | - |
terminology_diff | 报告两个版本的术语之间的差异数据(ICD-10的实际交叉修订统计数据→ ICD-11;指导否则) | terminology: "icd10-icd11" |
输出示例
下面的示例是工具生成的实际格式化输出—— CallToolResult。工具也会返回一个 structuredContent 与每个工具匹配的对象 outputSchema 对于程序化消费者。
loinc_search --查询:“葡萄糖”,最大结果:3
## LOINC Search Results for "glucose"
Found 1024 total results (showing 3):
1. **74790-7** - Glucose challenge (hydrogen breath test) panel - Exhaled gas
Component: Glucose challenge panel | Method: -
2. **104708-3** - Deprecated Estimated average glucose [Moles/volume] in Blood
Component: Estimated average glucose | Property: SCnc
3. **97510-2** - Glucose measurements in range out of Total glucose measurements during reporting period
Component: Glucose measurements in range/Total glucose measurements | Property: NFr | Method: Calculatedtotal_count (1024)反映了NLM临床表索引中的每个匹配项,而不仅仅是返回的页面。碰撞 max_results (最多50)查看规范代码,如 2339-0 (血液中的葡萄糖\[质量/体积\]);API的相关性排名将面板和衍生的测量结果置于小页面上的普通血液葡萄糖之上。
rxnorm_ingredients --rxcui:“6809”(二甲双胍)
# Ingredients for RxCUI 6809
Found 18 ingredient(s):
| RxCUI | Name | Type |
|-------|------|------|
| 6809 | metformin | Single Ingredient |
| 1007411 | chlorpropamide / metformin | Multiple Ingredient |
| 1043562 | metformin / saxagliptin | Multiple Ingredient |
| 1243019 | linagliptin / metformin | Multiple Ingredient |
| 1486436 | dapagliflozin / metformin | Multiple Ingredient |
| 1545149 | canagliflozin / metformin | Multiple Ingredient |
| 1664314 | empagliflozin / metformin | Multiple Ingredient |
| 729717 | metformin / sitagliptin | Multiple Ingredient |
| ... | (10 more combinations) | Multiple Ingredient |对于本身就是一种成分(TTY=IN)的RxCUI,该工具返回该成分加上包含它的每个多成分(TTY=MIN)概念。使用此方法枚举围绕物质构建的组合产品。
mesh_descriptor --mesh_id:“D006973”(高血压)
# Hypertension
MeSH ID: D006973
## Scope Note
Persistently high systemic arterial BLOOD PRESSURE. Based on multiple readings (BLOOD PRESSURE DETERMINATION), hypertension is currently defined as when SYSTOLIC PRESSURE is consistently greater than 140 mm Hg or when DIASTOLIC PRESSURE is consistently 90 mm Hg or more.
## Tree Numbers
- C14.907.489
## Concepts
- Hypertension *(preferred)*
## Allowed Qualifiers
35 qualifier(s) allowed. Use mesh_qualifiers for details.范围注释来自描述符的 *首选概念*,而不是其注释字段(这是一个面向索引器的注释)。树编号是进入MeSH受控层次结构的可导航路径-- C14.907.489 将高血压归入心血管疾病→ 血管疾病。
常见工作流
- ICD-11查询:
icd11_search带有临床术语→ 选择结果→icd11_lookup使用代码获取完整详细信息,或icd11_hierarchy陪父母/孩子散步。 - 药品管道:
rxnorm_search对于品牌或通用名称→rxnorm_concept为了规范记录→rxnorm_ingredients和rxnorm_classes用于下游分析。 - 跨术语脚手架:
find_equivalent使用临床术语在一次呼叫中搜索ICD-11、LOINC、RxNorm、MeSH和(启用时)SNOMED。使用它来引导映射;成对map_*工具对其进行了改进。 - ICD-10→ ICD-11(文本搜索,非权威):
map_icd10_to_icd11对世界卫生组织ICD-11进行诚实的文本搜索。世界卫生组织的真实过渡表在 PROGRESS.md第13.1阶段.
SNOMED CT设置(高级)
5 SNOMED工具(snomed_search, snomed_concept, snomed_hierarchy, snomed_descriptions, snomed_ecl)加上SNOMED依赖的人行横道工具(map_snomed_to_icd10)都是 默认情况下禁用当它们被禁用时,服务器注册了31个工具,而不是37个; find_equivalent 仍然有效,并跳过SNOMED分支,并附上解释性说明。
原因:截至2026年5月8日,该项目历史上称之为IHTSDO暴风雪的公共终点(https://browser.ihtsdotools.org/snowstorm/snomed-ct/...)为每条路径返回HTTP 410 Gone。如果没有可用的后端,注册这些工具会向每个客户提供6个损坏的工具。
要启用SNOMED工具:
- 确认您的SNOMED CT许可证。 SNOMED CT的使用需要SNOMED International(IHTSDO)许可证。成员国居民通常通过其国家释放中心获得一个;非会员可以获得联盟许可证。看https://www.snomed.org/snomed-ct/get-snomed.
- 配置此服务器:
{
"mcpServers": {
"medical-terminologies": {
"command": "npx",
"args": ["-y", "medical-terminologies-mcp"],
"env": {
"WHO_CLIENT_ID": "...",
"WHO_CLIENT_SECRET": "...",
"ENABLE_SNOMED_TOOLS": "true",
"SNOMED_BASE_URL": "https://my-snowstorm.example.com/snowstorm/snomed-ct",
"SNOMED_LANGUAGE": "en"
}
}
}
}SNOMED_BASE_URL 应该指向暴风雪暴露的底部 /MAIN/concepts 以及相关端点。 SNOMED_LANGUAGE 接受标准 Accept-Language 标签(例如。 pt, es, pt-BR,en;q=0.8)--Snowstorm在分支有本地化术语时返回这些术语,否则返回英语。
- 重新启动MCP客户端 因此,服务器会接收env变量。
如果你设置 ENABLE_SNOMED_TOOLS=true 如果不配置工作的Snowstorm,SNOMED工具将注册,但每次呼叫都会在网络层失败。
术语许可证
ICD-11(世界卫生组织)
ICD-11内容在 知识共享署名-禁止衍生3.0 IGO许可(CC BY-ND 3.0 IGO).
- 你必须将世界卫生组织作为来源
- 您不得创作衍生作品
- API访问要求在https://icd.who.int/icdapi
临床术语
SNOMED CT的使用需要IHTSDO(SNOMED International)许可证。默认情况下,此服务器中的SNOMED工具处于禁用状态,仅由具有有效许可证和自托管Snowstorm实例的操作员启用——请参阅 SNOMED CT设置(高级).
- 成员国拥有国家许可证
- 其他人可以使用联盟许可证
- 更多信息:https://www.snomed.org/snomed-ct/get-snomed
腰部
LOINC内容根据 LOINC许可证.
- 大多数用途免费
- 需要署名
- 推荐注册
RxNorm
RxNorm由美国国家医学图书馆制作,免费提供。
- 使用无需许可证
- 赞赏归因
医学主题词
MeSH由美国国家医学图书馆制作,免费提供。
- 使用无需许可证
- 赞赏归因
API费率限制
此服务器实现速率限制以尊重API提供程序:
| API | 费率限制 |
|---|---|
| 世界卫生组织ICD-11 | 5个请求/秒 |
| NLM(LOINC、MeSH) | 每秒10个请求 |
| RxNorm | 20个请求/秒 |
| SNOMED CT(暴风雪) | 每秒10个请求 |
发展
从源头构建
git clone https://github.com/SidneyBissoli/medical-terminologies-mcp.git
cd medical-terminologies-mcp
npm install
npm run build在本地运行
npm startMCP检验员测试
npx @modelcontextprotocol/inspector node dist/index.js贡献
欢迎投稿!请随时提交拉取请求。
- 分叉存储库
- 创建功能分支(
git checkout -b feature/AmazingFeature) - 提交您的更改(
git commit -m 'Add some AmazingFeature') - 推到分支(
git push origin feature/AmazingFeature) - 打开拉取请求
作者
西德尼·比索里
- github: @西德尼·比索里
许可证
此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。
注:虽然该软件是麻省理工学院许可的,但通过它访问的医学术语有自己的许可证(见 术语许可证 上文)。
致谢
- 世界卫生组织 用于ICD-11 API
- Regenstrief研究院 对于LOINC
- 美国国家医学图书馆 RxNorm和MeSH
- SNOMED国际 SNOMED CT
- Anthropic 对于模型上下文协议
支持
如果您遇到任何问题或有疑问:
- 打开一个问题
- 检查现有问题的解决方案
______________________________________________________________________
出于对医学信息学界的热爱
