概述
安装
工具列表
内容详情
替代品
什么是生物医学API集成服务器?
这是一个专门为生物医学研究设计的智能数据查询服务器。它将14个权威的生物医学数据库(如Reactome、KEGG、UniProt、PubMed等)整合到一个统一的接口中,让研究人员可以通过简单的命令查询基因信息、疾病关联、药物靶点、临床试验数据等。如何使用生物医学API集成服务器?
您可以通过两种方式使用:1) 连接到生产服务器(推荐,无需安装);2) 在本地运行自己的实例。只需在Cursor等AI开发工具中配置MCP连接,即可通过自然语言查询所有生物医学数据。适用场景
适用于生物信息学分析、药物发现研究、临床数据查询、学术文献检索、基因变异分析、疾病机制研究等场景。无论是寻找药物靶点、查询基因功能,还是分析临床试验数据,这个服务器都能提供一站式解决方案。主要功能
如何使用
使用案例
常见问题
相关资源
安装
{
"mcpServers": {
"medical-apis": {
"url": "https://medical-mcps-production.up.railway.app/tools/unified/mcp"
}
}
}
{
"mcpServers": {
"reactome": {
"url": "https://medical-mcps-production.up.railway.app/tools/reactome/mcp"
},
"chembl": {
"url": "https://medical-mcps-production.up.railway.app/tools/chembl/mcp"
},
"pubmed": {
"url": "https://medical-mcps-production.up.railway.app/tools/pubmed/mcp"
}
}
}🚀 生物API MCP服务器
本MCP服务器集成了多个生物和医学数据库,旨在为研究工作提供便利。它整合了丰富的数据资源,让用户可以通过统一的接口访问各类生物医学工具,极大地提高了研究效率。
🚀 快速开始
连接到生产服务器
使用此MCP服务器最简单的方法是连接到生产部署。所有API都可通过一个统一端点访问,这意味着你可以在一处使用所有工具。
生产环境URL:https://medical-mcps-production.up.railway.app/tools/unified/mcp
在Cursor(或其他MCP客户端)中配置
将以下内容添加到你的 .cursor/mcp.json(或等效的MCP客户端配置文件)中:
{
"mcpServers": {
"medical-apis": {
"url": "https://medical-mcps-production.up.railway.app/tools/unified/mcp"
}
}
}
连接后可获得的功能
连接成功后,你将可以访问来自14个生物和医学API的100多种工具:
- 通路相关:Reactome、KEGG、Pathway Commons
- 基因与蛋白质相关:UniProt、MyGene.info、Node Normalization
- 变异相关:MyVariant.info、GWAS Catalog
- 疾病相关:OMIM、MyDisease.info
- 药物相关:ChEMBL、MyChem.info、OpenFDA
- 文献相关:PubMed/PubTator3
- 试验相关:ClinicalTrials.gov、NCI Clinical Trials
- 药物再利用手册:用于探索生物医学数据路径的结构化策略
示例:搜索基因
{
"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- 仅用于ChEMBL- ...(完整列表请参阅可用端点)
本地开发
若要在本地运行自己的实例,你可以选择以下两种方式:
- 使用Docker Compose(推荐用于快速设置) - 请参阅Docker Compose设置
- 直接使用Python/uv运行 - 请参阅下面的运行服务器
✨ 集成的API
✅ 已实现的API
- Reactome API - 提供通路信息、基因/蛋白质查询以及疾病关联信息
- KEGG API - 提供通路图、基因注释、疾病和药物信息
- UniProt API - 提供蛋白质序列、功能注释和疾病关联信息
- OMIM API - 提供遗传疾病信息和基因-疾病关联信息(需要API密钥)
- GWAS Catalog API - 提供遗传关联、变异信息和研究元数据
- Pathway Commons API - 提供集成的通路数据、通路相互作用和基因/蛋白质网络信息
- Node Normalization API - 提供CURIE标准化和跨数据库的标识符映射功能
- ChEMBL API - 提供药物-靶点相互作用、生物活性数据、作用机制和药物适应症信息
- ClinicalTrials.gov API - 提供临床试验搜索、研究元数据和试验状态信息
- PubMed/PubTator3 API - 提供生物医学文献搜索、文章检索和预印本搜索功能
- OpenFDA API - 提供FDA不良事件报告、药物标签、设备事件和药物批准信息
- MyVariant.info API - 提供遗传变异注释、人群频率和临床意义信息
- BioThings Suite APIs - MyGene.info(基因注释)、MyDisease.info(疾病信息)、MyChem.info(药物/化学数据)
- NCI Clinical Trials API - 提供癌症临床试验搜索和元数据(需要API密钥)
- 药物再利用手册 - 提供用于药物再利用发现的结构化策略(请参阅PLAYBOOKS.md)
📦 安装指南
选项1:使用Docker Compose(推荐)
这是运行MCP后端和SearXNG搜索引擎最简单的方法:
# 启动所有服务并自动重建
make docker-watch
# 或者在后台启动
make docker-up
# 查看日志
make docker-logs
# 停止服务
make docker-down
服务将在以下地址可用:
- MCP后端:http://localhost:8000
- SearXNG:http://localhost:8888
选项2:本地Python安装
# 使用uv安装依赖项
cd /path/to/medical-mcps
uv sync
💻 运行服务器
服务器使用可流式HTTP传输协议(遵循MCP规范)进行远程HTTP托管。
运行 uv sync 后,你可以通过以下方式运行服务器:
使用Makefile(推荐用于开发)
# 使用uvicorn启动服务器并开启热重载(代码更改时自动重新加载)
make server
直接使用uv
# 运行HTTP服务器
uv run mcp-server
# 或者使用自定义主机/端口
MCP_HOST=0.0.0.0 MCP_PORT=8000 uv run mcp-server
直接使用uvicorn
# 使用uvicorn启动服务器并开启热重载
uv run uvicorn medical_mcps.http_server:app --reload --host 0.0.0.0 --port 8000
HTTP服务器将在 http://localhost:8000(或你配置的主机/端口)上可用。
服务器使用MCP SDK的可流式HTTP传输协议,将其作为ASGI应用挂载在FastAPI上。MCP端点为 /mcp,支持POST(用于发送JSON-RPC消息)和GET(用于可选的SSE流)请求。
📚 连接到生产环境
MCP服务器已部署并可通过以下地址访问:
生产环境基础URL:https://medical-mcps-production.up.railway.app
统一端点(推荐)
使用统一端点可在一处访问所有API:
{
"url": "https://medical-mcps-production.up.railway.app/tools/unified/mcp"
}
通过单个连接,你可以访问所有API的100多种工具。
单个API端点
如果你更喜欢单独使用各个API,每个API都有自己的端点:
生产环境:
{
"url": "https://medical-mcps-production.up.railway.app/tools/reactome/mcp"
}
本地开发环境:
{
"url": "http://localhost:8000/tools/reactome/mcp"
}
可用端点
所有端点在生产环境和本地环境的URL上均可使用:
/tools/unified/mcp- 统一服务器(所有API组合)/tools/reactome/mcp- Reactome API/tools/kegg/mcp- KEGG API/tools/uniprot/mcp- UniProt API/tools/omim/mcp- OMIM API(需要API密钥)/tools/gwas/mcp- GWAS Catalog API/tools/pathwaycommons/mcp- Pathway Commons API/tools/nodenorm/mcp- Node Normalization API/tools/chembl/mcp- ChEMBL 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 Suite APIs(MyGene、MyDisease、MyChem)/tools/nci/mcp- NCI Clinical Trials API(需要API密钥)/tools/playbooks/mcp- 药物再利用手册
示例:在Cursor中配置多个API
选项1:使用统一端点(推荐) 通过一个连接访问所有API:
{
"mcpServers": {
"medical-apis": {
"url": "https://medical-mcps-production.up.railway.app/tools/unified/mcp"
}
}
}
选项2:使用单个端点 如果你更喜欢为每个API使用单独的连接:
{
"mcpServers": {
"reactome": {
"url": "https://medical-mcps-production.up.railway.app/tools/reactome/mcp"
},
"chembl": {
"url": "https://medical-mcps-production.up.railway.app/tools/chembl/mcp"
},
"pubmed": {
"url": "https://medical-mcps-production.up.railway.app/tools/pubmed/mcp"
}
}
}
测试连接
你可以通过发送一个简单的HTTP请求来测试生产服务器是否可访问:
# 测试统一端点(推荐)
curl https://medical-mcps-production.up.railway.app/tools/unified/mcp \
-X POST \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "method": "initialize", "params": {}, "id": 1}'
# 或者测试单个API端点
curl https://medical-mcps-production.up.railway.app/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) - 每个API的缓存文件:每个API都有自己的SQLite缓存文件(例如,
reactome.db、kegg.db)
缓存行为
- 自动缓存:默认情况下,所有基于HTTP的API都启用了缓存
- 透明缓存:响应会根据URL、参数和标头自动缓存
- 符合RFC 9111:遵循HTTP缓存语义和Cache-Control标头
- 缓存可见性:提供缓存响应时,日志会显示 "(from cache)"
禁用缓存
要为特定客户端禁用缓存,在初始化时传递 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 Catalog(httpx)
- Pathway Commons(httpx)
- ClinicalTrials.gov(requests)
- PubMed(httpx)
- OpenFDA(httpx)
- MyVariant.info(httpx)
- BioThings Suite(httpx)
- NCI Clinical Trials(httpx)
注意:ChEMBL使用库客户端(非HTTP),因此缓存由库级别处理。
🔧 使用Sentry进行监控
服务器可选集成了 Sentry,用于错误跟踪和性能监控。Sentry会自动监控MCP工具执行、提示请求和资源访问。
设置
- 从 sentry.io 获取你的Sentry DSN
- 设置
SENTRY_DSN环境变量:
export SENTRY_DSN="https://your-dsn@sentry.io/project-id"
配置
Sentry可以通过环境变量进行配置:
SENTRY_DSN- 你的Sentry DSN(启用Sentry必需)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)
监控内容
Sentry会自动收集以下信息:
MCP集成:
- 工具执行:工具名称、参数、结果和执行错误
- 提示请求:提示名称、参数和内容
- 资源访问:资源URI和访问模式
- 请求上下文:请求ID、会话ID和传输类型
- 执行跨度:所有处理程序调用的时间信息
Starlette集成:
- HTTP请求:方法、URL、标头、表单数据、JSON有效负载
- 错误:导致内部服务器错误(5xx状态码)的所有异常
- 性能:请求时间和事务数据
- 请求数据:附加到所有事件(除非
send_default_pii=True,否则不包括PII)
HTTPX集成:
- 出站HTTP请求:API客户端(Reactome、KEGG、UniProt等)发出的所有HTTP请求
- 请求跨度:为每个出站HTTP请求创建跨度
- 跟踪传播:确保跟踪正确传播到下游服务
Asyncio集成:
- 异步操作:跟踪异步上下文和操作
- 异步错误:捕获异步函数和任务中的错误
隐私
默认情况下,Sentry 不 包含工具输入/输出或提示内容(视为PII)。要包含此数据,请设置 SENTRY_SEND_DEFAULT_PII=true。
更多详细信息,请参阅 Sentry MCP集成文档。
🔧 API密钥处理
⚠️ 重要提示
MCP服务器是一个无状态代理,它不会存储API密钥。
需要客户端提供API密钥的API
对于需要身份验证的API(目前为 OMIM),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:
- OMIM - 所有工具都需要
api_key参数(从https://omim.org/api获取) - NCI Clinical Trials - 可选的
api_key参数(从https://clinicaltrialsapi.cancer.gov/获取) - OpenFDA - 可选的
api_key参数,用于提高速率限制(从https://open.fda.gov/apis/获取)
不需要API密钥的API:
- Reactome、KEGG、UniProt、GWAS Catalog、Pathway Commons、Node Normalization、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 <url>" - 使用提供的密钥为每个请求创建客户端实例:
client = APIClient(api_key=api_key) - 不要 将API密钥存储在服务器设置或环境变量中
示例:
@api_mcp.tool()
async def some_tool(param: str, api_key: str) -> str:
"""工具描述。
参数:
param: 必需参数
api_key: API密钥(必需 - 从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参数。请从https://omim.org/api获取你的API密钥。
GWAS Catalog工具
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 Commons工具
pathwaycommons_search- 搜索通路、蛋白质或其他生物实体pathwaycommons_get_pathway_by_uri- 通过URI获取通路信息pathwaycommons_top_pathways- 获取顶级通路(可选按基因或数据源过滤)pathwaycommons_graph- 获取通路图/网络(邻域、路径等)pathwaycommons_traverse- 使用图路径表达式遍历通路数据
Node Normalization工具
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- 获取特定药物的所有适应症
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- 按药物、反应或严重程度搜索FDA不良事件报告(FAERS)openfda_get_adverse_event- 通过安全报告ID获取详细的不良事件报告openfda_search_drug_labels- 按药物名称、适应症或部分搜索FDA药物产品标签(SPL)openfda_get_drug_label- 通过设置ID获取完整的药物标签(可选部分过滤)openfda_search_device_events- 按设备、制造商或问题搜索FDA设备不良事件报告(MAUDE)
⚠️ 重要提示
OpenFDA工具支持可选的
api_key参数,以提高速率限制。请从https://open.fda.gov/apis/获取你的API密钥。
MyVariant.info工具
myvariant_search_variants- 按基因、HGVS表示法、rsID、临床意义、频率或CADD分数搜索遗传变异myvariant_get_variant- 通过变异ID(HGVS、rsID或MyVariant ID)获取全面的变异详细信息
BioThings Suite工具
mygene_get_gene- 通过ID或符号从MyGene.info获取基因信息mydisease_get_disease- 通过ID或名称从MyDisease.info获取疾病信息mychem_get_drug- 通过ID或名称从MyChem.info获取药物/化学信息
NCI Clinical Trials工具
nci_search_trials- 按病症、干预、阶段或状态搜索NCI癌症研究临床试验nci_get_trial- 通过试验ID获取NCI试验详细信息
⚠️ 重要提示
NCI工具支持可选的
api_key参数。请从https://clinicaltrialsapi.cancer.gov/获取你的API密钥。
🔧 开发
服务器的结构如下:
medical_mcps/
├── __init__.py
├── http_server.py # HTTP MCP服务器(Starlette)
├── med_mcp_server.py # 统一MCP服务器和工具装饰器
├── settings.py # 服务器配置
├── sentry_config.py # Sentry错误跟踪配置
├── api_clients/ # API客户端实现
│ ├── __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
│ ├── myvariant_client.py
│ ├── mygene_client.py
│ ├── mydisease_client.py
│ ├── mychem_client.py
│ └── nci_client.py
└── servers/ # 每个API的单个MCP服务器
├── __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
├── 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) - 使用
med_mcp_server中的@medmcps_tool装饰器将工具注册到单个服务器和统一服务器 - 在
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来源。
替代品







