返回市场
医疗-MCP服务器

医疗-MCP服务器

作者:pascalwhoop7 星标更新:2025-11-21

项目介绍

生物学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
  • ...(详见可用端点

本地开发

要在本地运行自己的实例,您可以:

集成的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

服务将在以下地址可用:

方案2:本地Python安装

# 使用uv同步依赖项
cd /path/to/medical-mcps
uv sync

运行服务器

服务器使用可流式传输的HTTP传输(根据MCP规范)进行远程托管。

运行uv sync之后,您可以运行服务器:

使用Makefile(推荐用于开发)

# 启动服务器并使用uvicorn和livereload(代码更改时自动重新加载)
make server

直接使用uv

# 运行HTTP服务器
uv run mcp-server

# 或自定义主机/端口
MCP_HOST=0.0.0.0 MCP_PORT=8000 uv run mcp-server

直接使用uvicorn

# 使用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,每个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.dbkegg.db

缓存行为

  • 自动:默认情况下为所有基于HTTP的API启用缓存
  • 透明:根据URL、参数和头自动缓存响应
  • RFC 9111合规:遵守HTTP缓存语义和Cache-Control头
  • 缓存可见性:日志显示“(来自缓存)”当提供缓存响应时

禁用缓存

要禁用特定客户端的缓存,在初始化时传递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工具执行、提示请求和资源访问进行监控。

设置

  1. sentry.io获取您的Sentry DSN
  2. 设置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:

不需要API密钥的API:

  • Reactome、KEGG、UniProt、GWAS Catalog、Pathway Commons、Node Normalization、ChEMBL、ClinicalTrials.gov、PubMed、MyVariant.info、BioThings Suite(MyGene、MyDisease、MyChem)

新API的未来模式

如果新API需要身份验证,请遵循以下模式:

  1. api_key: str作为所有工具的必需参数
  2. 在进行API调用之前验证API密钥的存在
  3. 如果缺少密钥,则返回清晰的错误消息:“Error: API key is required. Get your API key from <url>
  4. 根据提供的密钥创建客户端实例:client = APIClient(api_key=api_key)
  5. 不要在服务器设置或环境变量中存储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获取路径信息
  • `