返回市场
PubMed-MCP

PubMed-MCP

作者:chrismannina7 星标更新:2025-06-18

项目介绍

PubMed MCP服务器

CI

一个全面的PubMed文献搜索和管理系统Model Context Protocol (MCP)服务器。此服务器通过MCP协议提供高级搜索功能、引用格式化以及研究分析工具。

<a href="https://glama.ai/mcp/servers/@chrismannina/pubmed-mcp"> <img width="380" height="200" src="https://gips1.baidu.com/it/u=2019236500,2306237655&fm=3081&app=3081&f=PNG?w=760&h=400" alt="PubMed Server MCP服务器" /> </a>

功能

  • 高级PubMed搜索:使用复杂的过滤器进行搜索,包括日期范围、文章类型、作者、期刊和MeSH术语
  • 文章详情:获取特定PMID的详细信息,包括摘要、作者和元数据
  • 引用导出:以多种格式(BibTeX、APA、MLA、芝加哥、Vancouver、EndNote、RIS)导出引用
  • 作者搜索:根据特定作者及其合作者信息查找文章
  • 相关文章:发现与特定PMID相关的文章
  • MeSH术语搜索:搜索并探索医学主题词
  • 期刊分析:获取特定期刊的指标和最新文章
  • 研究趋势:分析随时间变化的出版趋势
  • 文章比较:并排比较多篇文章
  • 缓存:内置缓存以提高性能
  • 速率限制:尊重API使用规则,并可配置速率限制

安装

先决条件

  • Python 3.8或更高版本
  • NCBI API密钥(需要免费注册)
  • 用于NCBI API识别的有效电子邮件地址

快速开始

  1. 克隆仓库:

    git clone https://github.com/your-org/pubmed-mcp.git
    cd pubmed-mcp
    
  2. 安装依赖项:

    pip install -r requirements.txt
    
  3. 设置环境变量:

    cp env.example .env
    # 使用您的NCBI API密钥和电子邮件编辑.env文件
    
  4. 运行服务器:

    python -m src.main
    

开发安装

对于带有额外工具的开发:

make install-dev

或者手动:

pip install -r requirements.txt
pip install -e .
pip install black isort mypy flake8

配置

在项目根目录创建一个.env文件,包含以下变量:

# 必需
PUBMED_API_KEY=your_ncbi_api_key_here
PUBMED_EMAIL=your.email@example.com

# 可选
CACHE_TTL=300
CACHE_MAX_SIZE=1000
RATE_LIMIT=3.0
LOG_LEVEL=info

获取NCBI API密钥

  1. 访问NCBI账户设置
  2. 登录或创建账户
  3. 导航到“API密钥管理”
  4. 创建新的API密钥
  5. 将密钥复制到您的.env文件中

使用方法

可用工具

该服务器提供了以下MCP工具:

1. search_pubmed

使用高级过滤选项搜索PubMed。

{
  "query": "机器学习医疗保健",
  "max_results": 20,
  "date_range": "5y",
  "article_types": ["期刊文章", "综述"],
  "has_abstract": true
}

2. get_article_details

获取特定PMID的详细信息。

{
  "pmids": ["12345678", "87654321"],
  "include_abstracts": true,
  "include_citations": false
}

3. search_by_author

按特定作者搜索文章。

{
  "author_name": "史密斯J",
  "max_results": 10,
  "include_coauthors": true
}

4. export_citations

以各种格式导出引用。

{
  "pmids": ["12345678"],
  "format": "bibtex",
  "include_abstracts": false
}

5. find_related_articles

查找与特定PMID相关的文章。

{
  "pmid": "12345678",
  "max_results": 10
}

6. search_mesh_terms

使用MeSH术语进行搜索。

{
  "term": "机器学习",
  "max_results": 20
}

7. analyze_research_trends

分析随时间变化的研究趋势。

{
  "topic": "人工智能",
  "years_back": 5,
  "include_subtopics": false
}

使用MCP客户端示例

import asyncio
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client

async def main():
    server_params = StdioServerParameters(
        command="python",
        args=["-m", "src.main"]
    )

    async with stdio_client(server_params) as (read, write):
        async with ClientSession(read, write) as session:
            # 初始化会话
            await session.initialize()

            # 搜索PubMed
            result = await session.call_tool(
                "search_pubmed",
                {
                    "query": "COVID-19疫苗",
                    "max_results": 5,
                    "date_range": "1y"
                }
            )

            print(result.content[0].text)

if __name__ == "__main__":
    asyncio.run(main())

开发

运行测试

# 运行所有测试
make test

# 带覆盖率运行测试
make test-coverage

# 运行特定类型的测试
python run_tests.py unit
python run_tests.py integration
python run_tests.py coverage

代码质量

# 格式化代码
make format

# 运行代码检查
make lint

# 类型检查
mypy src/

项目结构

pubmed-mcp/
├── src/
│   ├── __init__.py
│   ├── main.py              # 入口点
│   ├── server.py            # MCP服务器实现
│   ├── models.py            # Pydantic模型
│   ├── pubmed_client.py     # PubMed API客户端
│   ├── tool_handler.py      # 工具请求处理器
│   ├── citation_formatter.py # 引用格式化
│   ├── tools.py             # 工具定义
│   └── utils.py             # 实用函数
├── tests/                   # 测试套件
├── requirements.txt         # 依赖项
├── setup.py                 # 包设置
├── pyproject.toml          # 现代Python配置
├── Makefile                # 开发命令
├── Dockerfile              # 容器设置
└── README.md               # 本文件

Docker

构建和运行

# 构建Docker镜像
make docker-build

# 使用环境变量运行
make docker-run PUBMED_API_KEY=your_key PUBMED_EMAIL=your_email

Docker Compose

version: '3.8'
services:
  pubmed-mcp:
    build: .
    environment:
      - PUBMED_API_KEY=your_key
      - PUBMED_EMAIL=your_email
      - LOG_LEVEL=info
    volumes:
      - ./data:/app/data

API参考

搜索参数

  • query: 使用PubMed语法的搜索查询
  • max_results: 结果的最大数量(1-200)
  • sort_order: 排序顺序(相关性、发表日期、作者、期刊、标题)
  • date_from/date_to: 日期范围过滤器
  • date_range: 预定义的范围(1年、5年、10年、全部)
  • article_types: 按出版物类型过滤
  • authors: 按作者姓名过滤
  • journals: 按期刊名称过滤
  • mesh_terms: 按MeSH术语过滤
  • language: 语言过滤器(例如,'eng','fre')
  • has_abstract: 仅具有摘要的文章
  • has_full_text: 仅具有全文的文章
  • humans_only: 仅人类研究

引用格式

  • bibtex: BibTeX格式
  • apa: APA风格
  • mla: MLA风格
  • chicago: 芝加哥风格
  • vancouver: Vancouver风格
  • endnote: EndNote格式
  • ris: RIS格式

贡献

  1. 分叉仓库
  2. 创建功能分支
  3. 进行更改
  4. 为新功能添加测试
  5. 运行测试套件
  6. 提交拉取请求

开发指南

  • 遵循PEP 8样式指南
  • 为所有函数添加类型提示
  • 编写全面的测试
  • 更新新功能的文档
  • 使用常规提交消息

许可证

本项目根据MIT许可证发布 - 详情见LICENSE文件。

支持

致谢

更改日志

查看CHANGELOG.md以获取详细的更改历史记录。


注意:此服务器需要有效的NCBI API密钥,并遵循NCBI的使用指南。请尊重API速率限制和服务条款。