PubMed搜索服务

PubMed MCP通过HTTP暴露PubMed E-Utilities搜索工作流,为实现了模型上下文协议(MCP)或任何其他支持REST的集成的客户端提供PubMed查询服务,并返回格式一致的JSON格式的文章元数据。

  • by aimiora
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 aimiora/pubmed-mcp

使用说明

PubMed MCP(注:MCP可能代表某种特定的文献或数据库分类,但在此上下文中未给出具体含义,因此直接保留原样翻译)

PubMed MCP通过HTTP暴露PubMed E-Utilities搜索工作流,以便实现模型上下文协议(MCP)或任何其他支持REST集成的客户端可以使用。它提供了一个单一的查询端点,用于查询PubMed,并以一致的JSON格式返回经过整理的文章元数据。

特点/功能

  • 🔎 通过单次HTTP请求搜索PubMed。
  • 📄 获取文章摘要(标题、期刊、发表日期、作者、数字对象标识符(DOI)和规范URL)。
  • 🛠️ 可通过环境变量进行配置,包括一个可选的NCBI API密钥以提高速率限制。
  • 🧪 使用模拟响应进行测试,以确保能够稳健地解析PubMed的响应。

开始入门

1. 安装依赖项

创建并激活一个 Python 3.10+ 环境,然后安装依赖项:

pip install -e .
# For development and testing extras
pip install -e .[dev]

2. (可选)配置API密钥

设置 PUBMED_API_KEY 或者 NCBI_API_KEY 使用您的NCBI E-Utilities API密钥以解锁更高的吞吐量。

export PUBMED_API_KEY="your-api-key"

3. 启动HTTP服务器

使用 Uvicorn 运行 FastAPI 应用:

uvicorn pubmed_mcp.server:app --host 0.0.0.0 --port 8000
# or
python -m pubmed_mcp.main

您现在可以查询该服务:

curl "http://localhost:8000/articles/search?q=heart+disease&limit=5"

4. 运行测试套件

pytest

API

  • GET /health – 退货 { "status": "ok" } 进行准备就绪检查。
  • GET /articles/search – 必需的查询参数 q;可选 limit (默认 10,最大值 50)。 返回一个包含原始查询、应用的限制以及文章摘要列表的JSON有效载荷。

开发说明

  • 这个(或“该”) PubMedClient 处理eSearch和eSummary请求,并将它们合并成一个列表 ArticleSummary `dataclasses`(数据类)。
  • FastAPI 应用缓存了一个客户端实例,并在关闭时优雅地关闭它。
  • 测试使用 respx 为了模拟PubMed的响应,保持该套件的快速性和确定性。