PubMed文章搜索工具

PubMed-MCP是一个基于NCBI Entrez API的PubMed文章搜索工具,提供文章标题、作者、摘要等详细信息的检索功能,并以JSON格式返回结果。

  • by emi-dm
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 emi-dm/PubMed-MCP

使用说明

PubMed MCP

一种模型上下文协议(MCP)服务器,提供使用NCBI Entrez API搜索PubMed文章的工具。

作者 埃米利奥·德尔加多·穆尼奥斯

特性

  • 根据查询在PubMed上搜索文章
  • 检索详细信息,包括标题、作者、摘要、期刊和出版日期
  • 以JSON格式返回结果
  • 可配置的最大结果数

建筑

graph TB
  A[User] --> B[MCP Server<br/>pubmed_server.py]
  B --> C[search_pubmed function]
  C --> D[Entrez.esearch<br/>Search in PubMed]
  D --> E[PubMed database<br/>NCBI]
  E --> F[List of PMIDs]
  F --> G[Entrez.efetch<br/>Fetch details]
  G --> E
  G --> H[Article XML records]
  H --> I[Data processing]
  I --> J[Extraction of:<br/>- Title<br/>- Authors<br/>- Abstract<br/>- Journal<br/>- Date]
  J --> K[List of articles<br/>in JSON format]
  K --> L[Response to user]

  subgraph "Dependencies"
    M[BioPython<br/>requirements.txt]
    N[FastMCP<br/>requirements.txt]
  end

  B -.-> M
  B -.-> N

  subgraph "Configuration"
    O[Entrez.email<br/>Configured in code]
  end

  C -.-> O

  style A fill:#e1f5fe
  style L fill:#c8e6c9
  style E fill:#fff3e0

安装

  1. 克隆此存储库:

    git clone <repository-url>
    cd PubMed-MCP
    
  2. 安装依赖项:

    uv sync
    
  3. 在中配置您的电子邮件 pubmed_server.py:

    Entrez.email = 'your-email@example.com'  # Replace with your actual email
    

VS代码配置

要在VS Code中本地使用此MCP服务器,该项目包括一个预配置的 .vscode/mcp.json 文件。这个文件告诉VS Code如何运行MCP服务器。

配置已设置为使用 uv 运行服务器:

{
  "servers": {
    "pubmed-mcp": {
      "command": "uv",
      "args": ["run", "${workspaceFolder}/pubmed_server.py"]
    }
  }
}

VS代码集成要求

  • 支持MCP扩展的VS代码
  • uv 已安装包管理器
  • Python虚拟环境设置

替代配置

如果你更喜欢使用 pip 而不是 uv,您可以修改 .vscode/mcp.json 文件:

{
  "servers": {
    "pubmed-mcp": {
      "command": "python",
      "args": ["${workspaceFolder}/pubmed_server.py"]
    }
  }
}

使用此配置时,请确保您的虚拟环境已激活。

需求

  • Python 3.11+
  • 生物Python
  • FastMCP

用法

运行MCP服务器:

python pubmed_server.py

服务器将启动并监听stdin/stdout上的MCP协议消息。

可用工具

搜索已提交

在PubMed中搜索与给定查询匹配的文章。

参数:

  • query (string):搜索查询
  • max_results (整数,可选):返回的最大结果数(默认值:10)
  • title (bool,可选):如果为true(默认),则在标题字段中搜索
  • abstract (bool,可选):如果为true(默认),则在抽象字段中搜索
  • keywords (bool,可选):如果为true(默认),则使用作者关键字展开搜索([ot])和MeSH标题([mh])

字段逻辑:

  • title=True 和 abstract=True ->查询应用为 (your terms)[tiab]
  • 仅 title=True -> (your terms)[ti]
  • 仅 abstract=True -> (your terms)[ab]
  • 均为false->无字段标签(所有字段)
  • keywords=True ->或扩展为 (your terms)[ot] OR (your terms)[mh]

优化查询示例:

query = "breast cancer metastasis"
title=True, abstract=True, keywords=True -> (breast cancer metastasis)[tiab] OR ((breast cancer metastasis)[ot] OR (breast cancer metastasis)[mh])
title=True, abstract=False, keywords=False -> (breast cancer metastasis)[ti]
title=False, abstract=False, keywords=True -> (breast cancer metastasis) OR ((breast cancer metastasis)[ot] OR (breast cancer metastasis)[mh])

退货: 包含以下内容的文章对象列表:

  • pmid:PubMed ID
  • title:文章标题
  • authors:作者姓名列表
  • abstract:文章摘要
  • journal:日志名称
  • publication_year:出版年份
  • publication_month:出版月份
  • url:PubMed URL

配置

在使用该工具之前,您必须在 Entrez.email 变量。这是NCBI的Entrez API所要求的。

许可证

这个项目是开源的。请检查许可证文件以了解详细信息。

贡献

欢迎投稿!请随时提交拉取请求。