生物原料药MCP服务器
](https://pypi.org/project/medical-mcps/)   
MCP服务器,集成了多个生物和医学数据库用于研究目的。
快速开始
连接到生产服务器
使用此MCP服务器的最简单方法是连接到生产部署。所有API都是 可通过a 统一端点 这使您可以在一个地方访问所有工具。
生产URL: https://mcp.cloud.curiloo.com/tools/unified/mcp
在Cursor(或其他MCP客户端)中配置
将此添加到您的 .cursor/mcp.json (或等效的MCP客户端配置):
{
"mcpServers": {
"medical-apis": {
"url": "https://mcp.cloud.curiloo.com/tools/unified/mcp"
}
}
}所得
连接后,您将可以访问 100+工具 涵盖14种生物和医疗原料药:
- 路径:Reactome、KEGG、Pathway Commons
- 基因和蛋白质:UniProt、MyGene.info、节点规范化
- 目标与关联:OpenTargets平台
- 变体:MyVariant.info,GWAS目录
- 疾病:OMIM、MyDisease.info
- 药物:ChEMBL、MyChem.info、OpenFDA
- 文学:PubMed/PubTator3
- 试验:ClinicalTrials.gov,NCI临床试验
- 知识图谱:每个治愈矩阵知识图
示例:搜索基因
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "mygene_get_gene",
"arguments": {
"gene_id_or_symbol": "TP53"
}
}
}单个API终点
如果您更喜欢单独使用单个API,则每个API都有自己的端点:
/tools/reactome/mcp-仅限Reactome/tools/pubmed/mcp-仅限PubMed/tools/chembl/mcp-仅限中国- …(参见 可用端点 完整列表)
本地开发
要在本地运行自己的实例,您可以:
- 使用Docker Compose(建议用于快速设置)-请参阅
- 直接使用Python/uv运行-请参阅 运行服务器 在......下面
集成API
✅ 已实现的API
- API反应器 -通路信息、基因/蛋白质查询、疾病关联
- API KEGG公司 -通路图、基因注释、疾病和药物信息
- UniProt API -蛋白质序列、功能注释、疾病关联
- API公司 -遗传疾病信息,基因-疾病关联(需要API密钥)
- GWAS目录API -遗传关联、变异信息、研究元数据
- Pathway Commons API -综合通路数据、通路相互作用、基因/蛋白质网络
- 节点规范化API -CURIE规范化,跨数据库的标识符映射
- 中国API -药物-靶点相互作用、生物活性数据、作用机制、药物
适应症
- ClinicalTrials.gov API -临床试验搜索、研究元数据、试验状态
- PubMed/PubTator3 API -生物医学文献检索、文章检索、预印本检索
- OpenFDA API -美国食品药品监督管理局不良事件报告、药品标签、器械事件、药品批准
- OpenTargets平台API -目标/疾病搜索、关联、证据
- MyVariant.info API -遗传变异注释、人群频率、临床
意义
- BioThings套件API -MyGene.info(基因注释)、MyDisease.info(疾病信息),
MyChem.info(药物/化学数据)
- NCI临床试验API -癌症临床试验搜索和元数据(需要API密钥)

安装
选项1:从PyPI安装
从PyPI安装软件包:
pip install medical-mcps然后运行服务器:
medical-mcps服务器将在以下时间可用http://localhost:8000.
选项2:使用Docker运行
拉取并运行预构建的Docker镜像:
# Pull latest image
docker pull pascalwhoop/medical-mcps:latest
# Run server
docker run -p 8000:8000 pascalwhoop/medical-mcps:latest服务器将在以下时间可用http://localhost:8000.
对于特定版本:
docker pull pascalwhoop/medical-mcps:v0.1.0选项3:Docker Compose(推荐用于开发)
运行MCP后端的最简单方法:
# Start all services with auto-rebuild
make docker-watch
# Or start in background
make docker-up
# View logs
make docker-logs
# Stop services
make docker-down服务将在以下地点提供:
- MCP后端: http://localhost:8000
选项4:本地Python安装
# Install dependencies using uv
cd /path/to/medical-mcps
uv sync运行服务器
服务器使用 可流式传输的HTTP 运输(按 MCP规范) 用于通过HTTP进行远程托管。
运行后 uv sync,您可以运行服务器:
使用Makefile(推荐用于开发)
# Start server with uvicorn and livereload (auto-reload on code changes)
make server直接使用uv
# Run HTTP server
uv run mcp-server
# Or with custom host/port
MCP_HOST=0.0.0.0 MCP_PORT=8000 uv run mcp-server直接使用uvicorn
# Run with uvicorn and livereload
uv run uvicorn medical_mcps.http_server:app --reload --host 0.0.0.0 --port 8000HTTP服务器将在 http://localhost:8000 (或您配置的主机/端口)。
服务器使用MCP SDK的Streamable HTTP传输,该传输作为ASGI应用程序安装在FastAPI上。MCP 端点位于 /mcp 并且支持POST(用于发送JSON-RPC消息)和GET(用于 可选的SSE流)。
连接到生产
MCP服务器已部署并可在以下位置使用:
生产基地URL: https://mcp.cloud.curiloo.com
统一端点(推荐)
使用统一的端点在一个地方访问所有API:
{
"url": "https://mcp.cloud.curiloo.com/tools/unified/mcp"
}这使您可以通过一个连接从所有API访问所有100多个工具。
单个API终点
如果您更喜欢单独使用单个API,则每个API都有自己的端点:
生产:
{
"url": "https://mcp.cloud.curiloo.com/tools/reactome/mcp"
}地方发展:
{
"url": "http://localhost:8000/tools/reactome/mcp"
}可用端点
所有端点在生产和本地URL上都可用:
/tools/unified/mcp-统一服务器(所有API结合在一起)/tools/reactome/mcp-API反应器/tools/kegg/mcp-API KEGG公司/tools/uniprot/mcp-UniProt API/tools/omim/mcp-OMIM API(需要API密钥)/tools/gwas/mcp-GWAS目录API/tools/pathwaycommons/mcp-Pathway Commons API/tools/nodenorm/mcp-节点规范化API/tools/chembl/mcp-中国API/tools/opentargets/mcp-OpenTargets平台API/tools/ctg/mcp-ClinicalTrials.gov API/tools/pubmed/mcp-PubMed/PubTator3 API/tools/openfda/mcp-OpenFDA API/tools/myvariant/mcp-MyVariant.info API/tools/biothings/mcp-BioThings套件API(MyGene、MyDisease、MyChem)/tools/nci/mcp-NCI临床试验API(需要API密钥)/tools/everycure-kg/mcp-每个治愈矩阵知识图API
示例:在Cursor中配置多个API
选项1:使用统一端点(推荐)
通过一个连接访问所有API:
{
"mcpServers": {
"medical-apis": {
"url": "https://mcp.cloud.curiloo.com/tools/unified/mcp"
}
}
}选项2:使用单个端点
如果您喜欢为每个API单独连接:
{
"mcpServers": {
"reactome": {
"url": "https://mcp.cloud.curiloo.com/tools/reactome/mcp"
},
"chembl": {
"url": "https://mcp.cloud.curiloo.com/tools/chembl/mcp"
},
"pubmed": {
"url": "https://mcp.cloud.curiloo.com/tools/pubmed/mcp"
}
}
}测试连接
您可以通过发出一个简单的HTTP请求来测试生产服务器是否可访问:
# Test unified endpoint (recommended)
curl https://mcp.cloud.curiloo.com/tools/unified/mcp \
-X POST \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "method": "initialize", "params": {}, "id": 1}'
# Or test individual API endpoint
curl https://mcp.cloud.curiloo.com/tools/reactome/mcp \
-X POST \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "method": "initialize", "params": {}, "id": 1}'成功响应表示服务器正在运行且可访问。
HTTP缓存
所有API客户端都使用 hishel (符合RFC 9111的HTTP缓存)透明地缓存响应 磁盘。这减少了冗余的API调用并提高了性能。
缓存配置
- 缓存位置:
~/.cache/medical-mcps/api_cache/ - 缓存持续时间:30天(默认TTL)
- 缓存刷新:访问缓存条目时重置TTL(
refresh_ttl_on_access=True) - Per-API缓存文件:每个API都有自己的SQLite缓存文件(例如。,
reactome.db,kegg.db)
缓存行为
- 自动:默认情况下,所有基于HTTP的API都启用缓存
- 透明:响应将根据URL、参数和标头自动缓存
- 符合RFC 9111:尊重HTTP缓存语义和缓存控制标头
- 缓存可见性:提供缓存响应时,日志显示“(来自缓存)”
禁用缓存
要禁用特定客户端的缓存,请传递 enable_cache=False 初始化时:
client = ReactomeClient(enable_cache=False)清除缓存
要清除缓存,请删除缓存目录:
rm -rf ~/.cache/medical-mcps/api_cache/或者删除单个API缓存文件:
rm ~/.cache/medical-mcps/api_cache/reactome.db支持的API
所有基于HTTP的API都支持缓存:
- Reactome(httpx)
- KEGG(httpx)
- UniProt(httpx)
- OMIM(httpx)
- GWAS目录(httpx)
- 路径共享(httpx)
- ClinicalTrials.gov(请求)
- PubMed(httpx)
- OpenFDA(httpx)
- MyVariant.info(httpx)
- BioThings套件(httpx)
- NCI临床试验(httpx)
备注:ChEMBL使用库客户端(不是HTTP),因此缓存是在库级别处理的。
哨兵监控
服务器包括可选 哨兵 用于错误跟踪和 性能监控。Sentry自动检测MCP工具执行、提示请求和 资源访问。
设置
- 从获取您的哨兵DSN sentry.io
- 设置
SENTRY_DSN环境变量:
export SENTRY_DSN="https://your-dsn@sentry.io/project-id"配置
哨兵可以通过环境变量进行配置:
SENTRY_DSN-您的哨兵DSN(启用哨兵所需)SENTRY_TRACES_SAMPLE_RATE-性能跟踪的采样率(默认值:1.0= 100%)SENTRY_SEND_DEFAULT_PII-在Sentry中包含工具输入/输出(默认值:true)SENTRY_ENABLE_LOGS-启用向Sentry发送日志(默认值:true)SENTRY_PROFILE_SESSION_SAMPLE_RATE-分析会话的采样率(默认值:1.0=
100%)
SENTRY_PROFILE_LIFECYCLE-探查器生命周期模式(默认值:trace-自动运行时
交易活跃)
ENVIRONMENT-环境名称(默认值:local)
性能监控:
- 追踪:默认情况下捕获100%的交易(
traces_sample_rate=1.0) - 分析:默认情况下配置100%的会话(
profile_session_sample_rate=1.0) - 日志:默认启用(
enable_logs=True)
什么被跟踪
哨兵自动收集:
MCP集成:
- 工具执行:工具名称、参数、结果和执行错误
- 快速请求:提示名称、参数和内容
- 资源访问:资源URI和访问模式
- 请求上下文:请求ID、会话ID和传输类型
- 执行跨度:所有处理程序调用的定时信息
Starlette集成:
- HTTP请求:方法、URL、标头、表单数据、JSON有效载荷
- 错误:所有导致内部服务器错误的异常(5xx状态代码)
- 演出:请求时间和交易数据
- 请求数据:附于所有事件(不包括PII,除非
send_default_pii=True)
HTTPX集成:
- 发送HTTP请求:API客户端(Reactome、KEGG、UniProt、,
等等)
- 请求跨度:为每个传出的HTTP请求创建跨度
- 跟踪传播:确保跟踪正确传播到下游服务
异步集成:
- 异步操作:跟踪异步上下文和操作
- 异步错误:捕获异步函数和任务中的错误
隐私
默认情况下,Sentry会这样做 不 包括工具输入/输出或提示内容(被视为PII)。至 包含此数据,设置 SENTRY_SEND_DEFAULT_PII=true.
请参阅 哨兵MCP集成文档 了解更多详情。
API密钥处理
重要提示: MCP服务器是 无状态代理.它不存储API密钥。
需要客户端提供API密钥的API
对于需要身份验证的API(目前 在线人类孟德尔遗传),MCP客户端必须提供API密钥 作为每次工具调用的参数:
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "get_entry",
"arguments": {
"mim_number": "104300",
"api_key": "your-omim-api-key-here"
}
}
}需要API密钥的API:
- 在线人类孟德尔遗传 -所有工具都需要
api_key参数(从https://omim.org/api) - NCI临床试验 -可选
api_key参数(从
https://clinicaltrialsapi.cancer.gov/)
- OpenFDA -可选
api_key更高速率限制的参数(从获取
https://open.fda.gov/apis/)
不需要API密钥的API:
- Reactome、KEGG、UniProt、GWAS目录、通路共用、节点规范化、ChEMBL、,
ClinicalTrials.gov、PubMed、MyVariant.info、BioThings Suite(MyGene、MyDisease、MyChem)
未来API的模式
如果新的API需要身份验证,请遵循以下模式:
- 添加
api_key: str作为 必需参数 所有工具 - 在进行API调用之前验证API密钥是否存在
- 如果密钥丢失,则返回明确的错误消息:
"Error: API key is required. Get your API key from "
- 使用提供的密钥为每个请求创建客户端实例:
client = APIClient(api_key=api_key) - 不要 将API密钥存储在服务器设置或环境变量中
例子:
@api_mcp.tool()
async def some_tool(param: str, api_key: str) -> str:
"""Tool description.
Args:
param: Required parameter
api_key: API key (REQUIRED - get from https://api-provider.com)
"""
if not api_key:
return "Error: API key is required. Get your API key from https://api-provider.com"
try:
client = APIClient(api_key=api_key)
return await client.some_method(param)
except Exception as e:
return f"Error calling API: {str(e)}"可用工具
所有工具都以API名称为前缀(例如。, reactome_*)明确API是 使用。
Reactome工具
reactome_get_pathway-获取详细的路径信息reactome_query_pathways-按关键字或基因/蛋白质名称查询通路reactome_get_pathway_participants-让所有参与者参与一个路径reactome_get_disease_pathways-获取与疾病相关的途径
KEGG工具
kegg_get_pathway_info-通过路径ID获取路径信息kegg_list_pathways-列出途径(可选按生物体过滤)kegg_find_pathways-查找与查询关键字匹配的路径kegg_get_gene-通过基因ID获取基因信息kegg_find_genes-查找与查询关键字匹配的基因kegg_get_disease-按疾病ID获取疾病信息kegg_find_diseases-查找与查询关键字匹配的疾病kegg_link_pathway_genes-获得与通路相关的基因
UniProt工具
uniprot_get_protein-通过登录获取蛋白质信息uniprot_search_proteins-在UniProtKB中搜索蛋白质uniprot_get_protein_sequence-获取FASTA格式的蛋白质序列uniprot_get_disease_associations-获取蛋白质的疾病关联uniprot_map_ids-在数据库之间映射标识符
OMIM工具
omim_get_entry-通过MIM编号获取入场信息omim_search_entries-在OMIM中搜索条目omim_get_gene-通过基因符号获取基因信息omim_search_genes-在OMIM中搜索基因omim_get_phenotype-通过MIM编号获取表型信息omim_search_phenotypes-OMIM中的搜索表型
注: 所有OMIM工具都需要 api_key 参数。从获取API密钥https://omim.org/api
GWAS目录工具
gwas_get_association-通过关联ID获取关联信息gwas_search_associations-搜索与各种过滤器的关联gwas_get_variant-通过rsId获取SNP信息gwas_search_variants-按rsId搜索SNP/变体gwas_get_study-通过研究ID获取研究信息gwas_search_studies-使用各种过滤器搜索研究gwas_get_trait-通过性状ID获取性状信息gwas_search_traits-搜索特征
Pathway共享工具
pathwaycommons_search-寻找途径、蛋白质或其他生物实体pathwaycommons_get_pathway_by_uri-通过URI获取路径信息pathwaycommons_top_pathways-获取顶级途径(可选择按基因或
数据源)
pathwaycommons_graph-获取路径图/网络(邻域、路径等)pathwaycommons_traverse-使用图形路径表达式遍历路径数据
节点规范化工具
nodenorm_get_semantic_types-获取所有支持的BioLink语义类型nodenorm_get_curie_prefixes-获取所有支持的CURIE前缀nodenorm_get_normalized_nodes-规范化一个或多个CURIE以获得等效标识符nodenorm_get_allowed_conflations-获取可用的合并类型
ChEMBL工具
chembl_get_molecule-通过ChEMBL ID获取分子(药物/化合物)信息chembl_search_molecules-按名称或同义词搜索分子chembl_get_target-通过ChEMBL ID获取目标(蛋白质)信息chembl_search_targets-按名称或同义词搜索目标chembl_get_activities-获取生物活性数据(按目标或分子过滤)chembl_get_mechanism-获取分子的作用机制chembl_find_drugs_by_target-查找针对特定蛋白质的所有药物chembl_find_drugs_by_indication-查找针对某一疾病/适应症的所有药物chembl_get_drug_indications-获取特定药物的所有适应症
OpenTargets工具
opentargets_search-在OpenTargets平台上搜索目标、疾病和药物opentargets_get_associations-检索目标疾病关联opentargets_get_evidence-获取将目标与疾病联系起来的证据
此服务器遵循相同的FastMCP+ med_mcp_server 在整个代码库中使用的模式,而不是 复制外部实现,其客户端调用官方的OpenTargets平台v4 GraphQL API 使用适当的GraphQL查询进行搜索、关联和证据检索。
ClinicalTrials.gov工具
ctg_search_studies-使用各种过滤器搜索临床试验ctg_get_study-通过NCT ID获取单项研究ctg_search_by_condition-按病情/疾病搜索试验ctg_search_by_intervention-按干预/治疗搜索试验ctg_get_study_metadata-获取数据模型元数据(可用字段)
PubMed/PubTator3工具
pubmed_search_articles-从PubMed/PubTator3中搜索生物医学文章,
化学品、关键字或变体
pubmed_get_article-通过PMID或DOI获取详细的文章信息(支持全文
检索)
pubmed_search_preprints-通过欧洲PMC搜索bioRxiv/medRxiv的预印本文章
OpenFDA工具
openfda_search_adverse_events-按药物、反应或
严重性
openfda_get_adverse_event-通过安全报告ID获取详细的不良事件报告openfda_search_drug_labels-按药物名称、适应症或
章节
openfda_get_drug_label-通过设置ID获取完整的药品标签(可选部分过滤)openfda_search_device_events-按设备搜索FDA设备不良事件报告(MAUDE),
制造商或问题
注: OpenFDA工具支持可选 api_key 用于更高速率限制的参数。获取API 密钥来自https://open.fda.gov/apis/
MyVariant.info工具
myvariant_search_variants-按基因、HGVS符号、rsID、临床搜索遗传变异
显著性、频率或CADD评分
myvariant_get_variant-通过变体ID(HGVS、rsID或
我的变量ID)
BioThings套件工具
mygene_get_gene-通过ID或符号从MyGene.info获取基因信息mydisease_get_disease-通过ID或姓名从MyDisease.info获取疾病信息mychem_get_drug-通过ID或姓名从MyChem.info获取药物/化学信息
NCI临床试验工具
nci_search_trials-检索NCI临床试验癌症研究的条件,干预,
阶段或状态
nci_get_trial-通过试验ID获取NCI试验详细信息
注: NCI工具支持可选 api_key 参数。从获取API密钥 https://clinicaltrialsapi.cancer.gov/
发展
服务器的结构如下:
medical_mcps/
├── __init__.py
├── http_server.py # HTTP MCP server (Starlette)
├── med_mcp_server.py # Unified MCP server and tool decorator
├── settings.py # Server configuration
├── sentry_config.py # Sentry error tracking configuration
├── api_clients/ # API client implementations
│ ├── __init__.py
│ ├── base_client.py
│ ├── reactome_client.py
│ ├── kegg_client.py
│ ├── uniprot_client.py
│ ├── omim_client.py
│ ├── gwas_client.py
│ ├── pathwaycommons_client.py
│ ├── nodenorm_client.py
│ ├── chembl_client.py
│ ├── ctg_client.py
│ ├── pubmed_client.py
│ ├── openfda_client.py
│ ├── opentargets_client.py
│ ├── myvariant_client.py
│ ├── mygene_client.py
│ ├── mydisease_client.py
│ ├── mychem_client.py
│ └── nci_client.py
└── servers/ # Individual MCP servers per API
├── __init__.py
├── reactome_server.py
├── kegg_server.py
├── uniprot_server.py
├── omim_server.py
├── gwas_server.py
├── pathwaycommons_server.py
├── nodenorm_server.py
├── chembl_server.py
├── opentargets_server.py
├── ctg_server.py
├── pubmed_server.py
├── openfda_server.py
├── myvariant_server.py
├── biothings_server.py
└── nci_server.py添加新的API:
- 在中创建新客户端
api_clients/(例如。,newapi_client.py) - 在中创建新服务器
servers/(例如。,newapi_server.py) - 使用
@medmcps_tool装饰师来自med_mcp_server将工具同时注册到
独立服务器和统一服务器
- 在中注册服务器
http_server.py(导入、装载和寿命) - 遵循命名约定:
{api_name}_{tool_name}用于工具
例子:
from ..med_mcp_server import unified_mcp, tool as medmcps_tool
@medmcps_tool(name="newapi_tool_name", servers=[newapi_mcp, unified_mcp])
async def tool_function(...):
...测试
通过连接MCP客户端并调用工具来测试服务器。每个工具响应包括 输出中的API源。
