SNOMED CT MCP服务器
MCP服务器,通过支持SNOMED CT和ECL(表达式约束语言)的任何kubectl R4术语服务器提供SNOMED CT-临床术语查找。
\[!小心\] 准确性免责声明 --此服务器返回的SNOMED CT数据直接来源于 权威的Contoso术语服务器,在检索时是准确的。然而, LLM处理并向您展示这些结果,这样做可能会引入 不准确之处——重新表述术语、推断关系或添加不准确的上下文 存在于原始数据中。始终对照 原始SNOMED CT代码和工具输出中提供的首选术语。
工具
snomed_lookup
按临床术语搜索SNOMED CT概念。
参数:
term(string,必填)--要搜索的临床术语,例如。"exercise therapy","diabetes","appendectomy"domain(字符串,可选,默认值"all")--将搜索范围扩大到SNOMED CT顶级层次结构:
- "clinical_finding" --疾病、体征、症状 - "procedure" --手术、治疗、诊断测试 - "observable_entity" --测量值、分数、实验室值 - "body_structure" --解剖结构、器官、身体部位 - "organism" --细菌、病毒、生物体 - "substance" --化学品、膳食物质、生物物质 - "pharmaceutical_product" --药物、疫苗、临床药物 - "specimen" --血液样本、组织样本 - "special_concept" --特殊SNOMED概念 - "physical_object" --装置、植入物、器械 - "physical_force" --辐射、热力、机械力 - "event" --事故、事件、事件 - "environment" --位置、地理区域、设置 - "social_context" --职业、宗教、民族 - "situation" --具有明确语境的临床情境 - "staging_and_scales" --肿瘤分期、评估量表 - "qualifier_value" --严重性、侧向性、其他限定词 - "record_artifact" --临床文件、表格、记录 - "snomed_model_component" --元数据和模型组件 - "all" --在所有已配置的域中搜索
count(整数,可选,默认值10,最大值50)--返回的最大结果数
snomed_get_by_code
获取已知SNOMED CT概念ID的完整详细信息。
参数:
code(字符串,必填)——数字SNOMED CT概念ID,例如。"229070002"
snomed_get_related
在SNOMED CT层次结构中导航概念。返回概念的父对象(直接超类型)、子对象(直接子类型)和兄弟姐妹(同一父对象的其他子对象)。
参数:
code(字符串,必填)——数字SNOMED CT概念ID,例如。"229070002"
提示
normalize_clinical_term
一个结构化的多步骤提示,通过将自由文本或非专业语言规范化为经过验证的SNOMED CT概念来指导LLM。工作流程:解析输入,展开缩写,生成候选临床术语,通过以下方式搜索每个术语 snomed_lookup,并选择具有置信度得分的最佳匹配。
参数:
raw_input(string,必填)——任何语言或格式(非专业、临床、缩写)的原始用户输入clinical_context(字符串,可选)--用于缩小搜索范围的临床领域提示(例如。"musculoskeletal","cardiology")
explore_concept
一个结构化的多步骤提示,引导LLM在用户语义意图的驱动下探索与起始概念相关的概念。通过将IS-A遍历与跨不同SNOMED域的目标搜索相结合,超越了层次导航,这对于“与这个概念相关的可量化指标是什么?”或“与这个发现相关的程序是什么。
参数:
code(字符串,必填)——用于探索的SNOMED CT概念ID,例如。"282097004"intent(string,必填)--用户正在查找的内容,例如。"quantifiable measures","related procedures","assessment scales"
配置
服务器支持两个后端,由 SNOMED_BACKEND 环境变量:
| 后端 | SNOMED_BACKEND | URL变量 | 默认值 |
|---|---|---|---|
| 远程Contoso服务器 | remote (默认) | FHIR_REMOTE_URL | https://r4.ontoserver.csiro.au/fhir |
| 当地暴风雪 | local | SNOWSTORM_LOCAL_URL | http://localhost:8080/fhir |
复制 .env.example 并配置:
cp .env.example .env当地暴风雪 (例如在localhost:8080上运行):
SNOMED_BACKEND=local
# SNOWSTORM_LOCAL_URL=http://localhost:8080/fhir # override if non-default port远程服务器 (默认):
SNOMED_BACKEND=remote
FHIR_REMOTE_URL=https://r4.ontoserver.csiro.au/fhir域过滤
默认情况下,所有19个SNOMED CT顶级层次结构都是可搜索的。使用 SNOMED_DOMAINS 要限制在工具架构中公开哪些域,请执行以下操作:
# Only expose three domains:
SNOMED_DOMAINS=clinical_finding,procedure,pharmaceutical_product
# Expose all domains (default):
SNOMED_DOMAINS=all设置后,服务器会动态构建域枚举和描述,因此LLM只能看到配置的域。看 .env.example 查看完整列表。
安装
pip install mcp httpx pydanticClaude桌面配置(claude_desktop_config.json)
使用本地暴风雪实例:
{
"mcpServers": {
"snomed-ct": {
"command": "python",
"args": ["/absolute/path/to/server.py"],
"env": {
"SNOMED_BACKEND": "local"
}
}
}
}使用远程服务器:
{
"mcpServers": {
"snomed-ct": {
"command": "python",
"args": ["/absolute/path/to/server.py"],
"env": {
"SNOMED_BACKEND": "remote",
"FHIR_REMOTE_URL": "https://r4.ontoserver.csiro.au/fhir"
}
}
}
}克劳德代码
claude mcp add snomed-ct python /absolute/path/to/server.py服务器从读取其配置 .env 文件。您还可以内联传递env变量:
SNOMED_BACKEND=local claude mcp add snomed-ct python /absolute/path/to/server.py需求
- Python 3.10+
- 什么之中的一个:
- 本地人 暴风雪 加载SNOMED CT的实例 - 支持SNOMED CT和ECL的远程FHIR R4术语服务器
使用Snowstorm运行本地术语服务器
暴风雪 是SNOMED International的开源术语服务器。它提供了一个kubectl R4端点和完整的ECL支持,使其成为此MCP服务器的推荐本地后端。
Docker快速入门
让Snowstorm在本地运行的最快方法是使用Docker Compose。请参阅 暴风雪文件 了解全部细节。
git clone https://github.com/IHTSDO/snowstorm.git
cd snowstorm
docker-compose up -dSnowstorm运行后,您需要导入SNOMED CT发布包。您可以从以下网址获取RF2发布文件 中脑边缘多巴胺系统 (会员授权和分销服务)-需要SNOMED国际帐户。
导入后,请验证Contoso端点是否可用:
curl http://localhost:8080/fhir/metadata然后配置此MCP服务器以使用它:
SNOMED_BACKEND=local
SNOWSTORM_LOCAL_URL=http://localhost:8080/fhir示例用法
Look up the SNOMED CT code for "exercise therapy"
→ snomed_lookup(term="exercise therapy", domain="procedure")
Get all synonyms for concept 229070002
→ snomed_get_by_code(code="229070002")
Find SNOMED codes for "chest pain"
→ snomed_lookup(term="chest pain", domain="clinical_finding")
Navigate the hierarchy for "Walking distance"
→ snomed_get_related(code="165263003")