集成多个生物和医学数据库用于研究目的的MCP服务器。
使用此MCP服务器最简单的方法是连接到生产部署。所有API都通过一个统一端点提供,该端点使您可以在一个地方访问所有工具。
生产URL: https://medical-mcps-production.up.railway.app/tools/unified/mcp
在您的.cursor/mcp.json(或等效的MCP客户端配置文件)中添加以下内容:
{
"mcpServers": {
"medical-apis": {
"url": "https://medical-mcps-production.up.railway.app/tools/unified/mcp"
}
}
}
一旦连接,您将可以访问跨越14个生物和医学API的100多种工具:
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "mygene_get_gene",
"arguments": {
"gene_id_or_symbol": "TP53"
}
}
}
如果您希望单独使用各个API,每个API都有自己的端点:
/tools/reactome/mcp - 仅Reactome/tools/pubmed/mcp - 仅PubMed/tools/chembl/mcp - 仅ChEMBL要在本地运行自己的实例,您可以:

运行MCP后端和SearXNG搜索引擎最简单的方式:
# 启动所有服务并自动重建
make docker-watch
# 或在后台启动
make docker-up
# 查看日志
make docker-logs
# 停止服务
make docker-down
服务将在以下地址可用:
# 使用uv同步依赖项
cd /path/to/medical-mcps
uv sync
服务器使用可流式传输的HTTP传输(根据MCP规范)进行远程托管。
运行uv sync之后,您可以运行服务器:
# 启动服务器并使用uvicorn和livereload(代码更改时自动重新加载)
make server
# 运行HTTP服务器
uv run mcp-server
# 或自定义主机/端口
MCP_HOST=0.0.0.0 MCP_PORT=8000 uv run mcp-server
# 使用uvicorn和livereload运行
uv run uvicorn medical_mcps.http_server:app --reload --host 0.0.0.0 --port 8000
HTTP服务器将在http://localhost:8000(或您配置的主机/端口)上可用。
服务器使用MCP SDK的可流式传输的HTTP传输作为FastAPI上的ASGI应用挂载。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"
}
这将为您提供通过单个连接访问所有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 - 药物再利用手册选项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}'
成功的响应表明服务器正在运行且可访问。
所有API客户端均使用hishel(符合RFC 9111的HTTP缓存)透明地将响应缓存到磁盘。这减少了冗余API调用并提高了性能。
~/.cache/medical-mcps/api_cache/refresh_ttl_on_access=True)reactome.db,kegg.db)要禁用特定客户端的缓存,在初始化时传递enable_cache=False:
client = ReactomeClient(enable_cache=False)
要清除缓存,请删除缓存目录:
rm -rf ~/.cache/medical-mcps/api_cache/
或者删除单独的API缓存文件:
rm ~/.cache/medical-mcps/api_cache/reactome.db
所有基于HTTP的API均支持缓存:
注意:ChEMBL使用库客户端(非HTTP),因此缓存在库级别处理。
服务器包括可选的Sentry集成,用于错误跟踪和性能监控。Sentry自动对MCP工具执行、提示请求和资源访问进行监控。
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)性能监控:
traces_sample_rate=1.0)profile_session_sample_rate=1.0)enable_logs=True)Sentry自动收集:
MCP集成:
Starlette集成:
send_default_pii=True,否则排除PII)HTTPX集成:
Asyncio集成:
默认情况下,Sentry不包括工具输入/输出或提示内容(视为PII)。要包含这些数据,请设置SENTRY_SEND_DEFAULT_PII=true。
详情请参阅Sentry MCP集成文档。
重要:MCP服务器是一个无状态代理。它不会存储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:
api_key参数(从https://omim.org/api 获取)api_key参数(从https://clinicaltrialsapi.cancer.gov/ 获取)api_key参数以提高速率限制(从https://open.fda.gov/apis/ 获取)不需要API密钥的API:
如果新API需要身份验证,请遵循以下模式:
api_key: str作为所有工具的必需参数client = APIClient(api_key=api_key)示例:
@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_get_pathway - 获取详细路径信息reactome_query_pathways - 通过关键词或基因/蛋白质名称查询路径reactome_get_pathway_participants - 获取路径中的所有参与者reactome_get_disease_pathways - 获取与疾病相关的路径kegg_get_pathway_info - 通过路径ID获取路径信息