关于 omophub-mcp
omophub-mcp 是面向临床研究人员和健康数据团队的 MCP 服务,用于检索和处理 OMOP 医学词汇,支持概念查找、跨词汇映射、层级浏览及 FHIR 到 OMOP 的解析。
主要功能
- 01跨词汇搜索医学概念
- 02在不同词汇间映射概念
- 03浏览概念层级
- 04语义搜索与相似概念查找
- 05将 FHIR 代码解析为 OMOP
适用场景
- 01查找临床术语的 OMOP ID
- 02验证代码并检查映射
- 03构建表型概念集
- 04将 FHIR 值解析到 OMOP
MCP 相关
向 MCP 客户端提供 OMOP 词汇搜索、查找、映射、层级浏览和 FHIR 解析工具,以及词汇资源与引导提示词。支持 stdio 和 HTTP 连接。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
6收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| page | number | 否 | 页码(从 1 开始,默认值为 1) |
| query | string | 是 | 要搜索的医学术语或概念名称 |
| page_size | number | 否 | 返回结果数(1–50,默认值为 10) |
| domain_ids | string | 否 | 用于筛选的逗号分隔领域 ID。例如:'Condition'、'Drug'、'Measurement'、'Procedure'。留空则搜索所有领域。 |
| vocabulary_ids | string | 否 | 用于筛选的逗号分隔词汇 ID。例如:'SNOMED'、'ICD10CM'、'RxNorm'、'LOINC'。留空则搜索所有词汇。 |
| standard_concept | enum | 否 | 按标准概念状态筛选:'S' 表示标准,'C' 表示分类。省略则搜索全部。S | C |
详细介绍
OMOPHub MCP 服务
为 AI Agent 提供医学词汇表。
搜索、映射和浏览 1,100 多万个 OMOP 概念:SNOMED CT、ICD-10、RxNorm、LOINC 等。可直接通过 Claude、Cursor、VS Code 或任何兼容 MCP 的客户端使用。
为什么选择 OMOPHub MCP?
如今使用医学词汇表意味着要下载数 GB 的 CSV 文件,将其载入本地数据库,再编写 SQL 查找所需内容。每次都如此。
OMOPHub MCP 服务让你的 AI 助手即时访问整个 OHDSI ATHENA 词汇表。无需设置数据库,无需处理 CSV,无需切换上下文。直接提问即可。
You: "Map ICD-10 code E11.9 to SNOMED"
Claude: Found it - E11.9 (Type 2 diabetes mellitus without complications)
maps to SNOMED concept 201826 (Type 2 diabetes mellitus)
via standard 'Maps to' relationship.
使用场景:
- 概念查询 - 在几秒内查找临床术语对应的 OMOP 概念 ID
- 跨词汇表映射 - 在 ICD-10、SNOMED、RxNorm、LOINC 和 120 多种词汇表之间进行映射
- 层级浏览 - 探索祖先概念和后代概念,以定义表型
- 构建概念集 - 让你的 AI Agent 为队列定义组装完整的概念集
- 代码验证 - 验证医学代码并检查其标准映射
快速开始
1. 获取 API 密钥
在 omophub.com 注册 → 在控制面板中创建 API 密钥。
2. 添加到 AI 客户端
Claude Desktop
打开 Claude Desktop 设置 >“Developer”选项卡 >“Edit Config”。添加到 claude_desktop_config.json:
{
"mcpServers": {
"omophub": {
"command": "npx",
"args": ["-y", "@omophub/omophub-mcp"],
"env": {
"OMOPHUB_API_KEY": "oh_your_key_here"
}
}
}
}
Claude Code
claude mcp add omophub -- npx -y @omophub/omophub-mcp
# Then set OMOPHUB_API_KEY in your environment
Cursor
打开命令面板并选择“Cursor Settings” >“MCP” >“Add new global MCP server”。添加到 .cursor/mcp.json:
{
"mcpServers": {
"omophub": {
"command": "npx",
"args": ["-y", "@omophub/omophub-mcp"],
"env": {
"OMOPHUB_API_KEY": "oh_your_key_here"
}
}
}
}
VS Code
添加到 .vscode/mcp.json:
{
"servers": {
"omophub": {
"command": "npx",
"args": ["-y", "@omophub/omophub-mcp"],
"env": {
"OMOPHUB_API_KEY": "oh_your_key_here"
}
}
}
}
Streamable HTTP(远程 / 托管)
将 MCP 服务作为 HTTP 服务运行,客户端通过 URL 连接:
# Start HTTP server on port 3100
npx -y @omophub/omophub-mcp --transport=http --port=3100 --api-key=oh_your_key_here
# MCP endpoint: http://localhost:3100/mcp
# Health check: http://localhost:3100/health
将 MCP 客户端连接到 / 或 /mcp。适用于集中式部署,多个 AI Agent 可共用一个服务实例。
托管服务(mcp.omophub.com)
直接连接到 OMOPHub 托管的 MCP 服务,无需安装。每个客户端都通过 Authorization 标头使用自己的 API 密钥进行身份验证:
Claude Code:
claude mcp add omophub --transport http \
-H "Authorization: Bearer oh_your_key_here" \
https://mcp.omophub.com
VS Code(.vscode/mcp.json):
{
"servers": {
"omophub": {
"type": "http",
"url": "https://mcp.omophub.com",
"headers": { "Authorization": "Bearer oh_your_key_here" }
}
}
}
Cursor / Windsurf:
{
"mcpServers": {
"omophub": {
"url": "https://mcp.omophub.com",
"headers": { "Authorization": "Bearer oh_your_key_here" }
}
}
}
注意: Claude Desktop 的 Custom Connectors 界面仅支持 OAuth,无法发送自定义标头。请改用 npx 设置。
Docker
# HTTP mode (default in Docker) - serves MCP on port 3100
docker run -e OMOPHUB_API_KEY=oh_your_key_here -p 3100:3100 omophub/omophub-mcp
# Stdio mode (for piping)
docker run -i -e OMOPHUB_API_KEY=oh_your_key_here omophub/omophub-mcp --transport=stdio
3. 开始提问
“2 型糖尿病的 OMOP 概念 ID 是什么?”
“将 ICD-10 代码 E11.9 映射到 SNOMED”
“显示 SNOMED 中 Diabetes mellitus 的所有后代概念”
可用工具
| 工具 | 功能 |
|---|---|
search_concepts | 在所有词汇中按名称或临床术语搜索医学概念 |
get_concept | 根据 concept_id 获取特定 OMOP 概念的详细信息 |
get_concept_by_code | 使用特定词汇的代码查找概念(例如 ICD-10 E11.9) |
map_concept | 将概念映射到其他词汇中的等效概念(分页 — 见下方说明) |
get_hierarchy | 浏览概念层级结构 — 祖先、后代或两者 |
list_vocabularies | 列出可用的医学词汇及统计信息 |
semantic_search | 使用自然语言和神经嵌入进行搜索(理解临床含义) |
find_similar_concepts | 查找与参考概念、名称或描述相似的概念 |
explore_concept | 一次调用即可获取概念详情、层级结构和跨词汇映射 |
fhir_resolve | 将 FHIR 编码值(包括通过 HL7 FHIR-to-OMOP IG ConceptMaps 映射的行政代码)解析为对应的 OMOP 标准概念和 CDM 目标表 |
fhir_resolve_codeable_concept | 解析 FHIR CodeableConcept — 根据 OHDSI 词汇优先级选取最佳匹配,同时遵循 userSelected |
资源
| URI | 描述 |
|---|---|
omophub://vocabularies | 包含统计信息的完整词汇目录 |
omophub://vocabularies/{vocabulary_id} | 特定词汇的详情 |
提示词
| 提示词 | 描述 |
|---|---|
phenotype-concept-set | 通过引导式工作流,为临床表型构建概念集 |
code-lookup | 查找并验证医学代码及其映射和层级结构 |
示例提示词
查找概念 → search_concepts
"在 RxNorm 中搜索 metformin"
跨词汇映射 → map_concept
"我有 SNOMED 概念 201826——对应的 ICD-10 编码是什么?"
构建概念集 → search_concepts → get_hierarchy → map_concept
"帮我构建一个 2 型糖尿病概念集,包含所有后代概念"
完整性在这里至关重要。
map_concept一次返回一页 (page_size为 1-200,默认值为 100)。广泛使用的药物成分可能有远超 1,000 个 NDC 映射,因此单次调用得到的是样本,而非完整结果。检查 响应中的has_more,并持续递增page,直到其值为false—— 否则概念集看起来完整,实际上却悄悄漏掉了一些编码。使用
find_similar_concepts进行探索,而非用于此目的:它基于嵌入相似度 排序,因此无法判断概念是否属于某个集合,也无法做到穷尽搜索,无论page_size设置得多大都一样。
验证编码 → get_concept_by_code → map_concept
"ICD-10 编码 E11.9 有效吗?它映射到 SNOMED 中的什么概念?"
语义搜索 → semantic_search
"查找与“心脏病发作”相关的概念"
探索概念 → explore_concept
"提供有关 SNOMED 概念 201826 的所有信息"
FHIR 到 OMOP 的解析 → fhir_resolve
"将 FHIR SNOMED 编码 44054006 解析到 OMOP——它应放在哪个表中?"
CodeableConcept → fhir_resolve_codeable_concept
"这个 CodeableConcept 同时包含 SNOMED 44054006 和 ICD-10 E11.9——用于 OMOP 时我应该选哪个?"
查找相似概念 → find_similar_concepts
"有哪些概念与“2 型糖尿病”相似?"
配置
环境变量
| 变量 | 必需 | 描述 |
|---|---|---|
OMOPHUB_API_KEY | ✅ | 你的 OMOPHub API 密钥 |
OMOPHUB_BASE_URL | 自定义 API 基础 URL(默认值:https://api.omophub.com/v1) | |
OMOPHUB_LOG_LEVEL | debug · info · warn · error(默认值:info) | |
OMOPHUB_ANALYTICS_OPTOUT | 设置为 true 以禁用分析请求头 | |
OMOPHUB_USER_AGENT_SUFFIX | 可选的部署标识符,附加到 omophub-mcp/<version> 后(默认值:无) | |
MCP_TRANSPORT | stdio(默认值)或 http | |
MCP_PORT | HTTP 服务端口(默认值:3100,仅在使用 http 传输时生效) | |
HEALTH_PORT | stdio 模式下独立健康检查端点的端口(默认值:禁用) |
CLI 参数
# Stdio mode (default)
npx @omophub/omophub-mcp --api-key=oh_your_key --base-url=https://custom.api.com/v1
# HTTP mode
npx @omophub/omophub-mcp --transport=http --port=3100 --api-key=oh_your_key
# Stdio mode with standalone health endpoint
npx @omophub/omophub-mcp --api-key=oh_your_key --health-port=8080
健康检查端点(Docker / Kubernetes)
在 HTTP 模式下,健康检查端点位于 MCP 端点所在的同一端口,路径为 /health:
npx @omophub/omophub-mcp --transport=http --port=3100 --api-key=oh_your_key
curl http://localhost:3100/health
# → {"status":"ok","version":"1.5.0","uptime_seconds":42}
在 stdio 模式下,使用 --health-port 启用独立健康检查端点:
HEALTH_PORT=8080 OMOPHUB_API_KEY=oh_your_key npx @omophub/omophub-mcp
curl http://localhost:8080/health
Docker 镜像默认使用端口 3100 的 HTTP 模式,并内置健康检查。
开发
git clone https://github.com/OMOPHub/omophub-mcp.git
cd omophub-mcp
npm install
npm run build
npm test
本地运行:
OMOPHUB_API_KEY=oh_your_key npx tsx src/index.ts
故障排除
| 错误 | 解决方案 |
|---|---|
API key required | 在环境变量或 MCP 配置中设置 OMOPHUB_API_KEY |
Authentication failed | API 密钥可能无效或已过期 - 生成新密钥 |
Rate limit exceeded | 已内置自动重试。如需更高限额,升级套餐 |
| 未显示工具 | 重启 AI 客户端,确认 npx @omophub/omophub-mcp 运行时没有错误,并检查配置路径 |
链接
许可证
MIT - 参见 LICENSE
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。