npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

mcp-pubmed-llm-server

v3.0.0

Published

PubMed MCP server — agentic biomedical literature search for LLMs

Downloads

298

Readme

PubMed MCP Server v3.0

License: MIT npm version MCP Compatible TypeScript

为 LLM Agent 提供结构化 PubMed 文献数据的 MCP 服务器。Agent 友好的响应模型,专注数据提供,分析交给 LLM。

LLM Agent <--MCP--> PubMed MCP Server <--API--> PubMed / PMC / Unpaywall

核心能力: 文献搜索 / 智能缓存 / OA 全文下载 / Agentic 响应模型


快速开始

前置要求: Node.js v18.0.0+

1. 安装

# npm 全局安装
npm install -g mcp-pubmed-llm-server

# 或从源码构建
git clone [email protected]:PancrePal-xiaoyibao/mcp-pubmed-server-pancrpal.git
cd mcp-pubmed-server-pancrpal
npm install && npm run build

2. 配置

cp .env.example .env

编辑 .env

PUBMED_API_KEY=你的NCBI_API密钥    # 可选,https://www.ncbi.nlm.nih.gov/account/settings/
PUBMED_EMAIL=你的邮箱               # 可选(建议填写)
ABSTRACT_MODE=quick                 # quick(1500字符) | deep(6000字符)
FULLTEXT_MODE=disabled              # disabled | enabled | auto

说明: API Key 和 Email 均非必填。无 Key 时匿名运行(3 次/秒),有 Key 时 10 次/秒。

3. 运行

# npm 包
mcp-pubmed-llm-server
# 或
npx mcp-pubmed-llm-server

# 源码开发
npm run dev

# 源码生产
npm run build && npm start

传输模式

| 模式 | 适用场景 | 启动方式 | |------|----------|----------| | stdio | 本地 MCP 客户端集成 | npm start(默认) | | Streamable HTTP | 服务端远程部署 | npm run start:http |

stdio 模式(默认)

npm start
# 或
node dist/index.js --mode=stdio

Streamable HTTP 模式

npm run start:http
# 或
node dist/index.js --mode=streamableHttp

Docker 部署:

cd docker
cp .env.example .env   # 编辑填入配置
docker compose up -d --build

验证:

curl http://localhost:8745/health
# {"status":"ok","mode":"streamableHttp","sessions":0}

端点:

  • POST /mcp — MCP 协议消息
  • GET /mcp — SSE 事件流
  • DELETE /mcp — 关闭会话
  • GET /health — 健康检查

MCP 客户端配置

Claude Desktop / Claude Code / Cline

{
  "mcpServers": {
    "pubmed": {
      "command": "npx",
      "args": ["-y", "mcp-pubmed-llm-server"],
      "env": {
        "PUBMED_API_KEY": "你的API密钥(可选)",
        "PUBMED_EMAIL": "你的邮箱(可选)",
        "ABSTRACT_MODE": "deep",
        "FULLTEXT_MODE": "enabled"
      }
    }
  }
}

配置文件位置:

  • Claude Desktop: ~/Library/Application Support/Claude/claude_desktop_config.json (macOS)
  • Claude Code: ~/.claude/config.json
  • Cline: VS Code 设置中的 MCP Servers

Cherry Studio

stdio 模式: 同上配置,type 设为 stdio

streamableHttp 模式: type 设为 streamableHttpbaseUrl 设为 http://<服务器IP>:8745/mcp


工具列表(8 个)

文献搜索

| 工具 | 说明 | 关键参数 | |------|------|----------| | pubmed_search | 文献搜索,支持 Boolean/MeSH | query, max_results, days_back, sort_by, format | | pubmed_get_details | 获取 PMID 完整信息(单个或批量) | pmids, format | | pubmed_extract_info | 提取论文关键信息段落 | pmid, sections | | pubmed_find_related | 查找相关/综述文献 | pmid, type, max_results |

缓存管理

| 工具 | 说明 | 关键参数 | |------|------|----------| | pubmed_manage_cache | 缓存统计、清理、清空 | action, target |

全文下载(需 FULLTEXT_MODE=enabled

| 工具 | 说明 | 关键参数 | |------|------|----------| | pubmed_detect_fulltext | 检测 OA 状态和全文可用性 | pmid, auto_download | | pubmed_download_fulltext | 下载全文 PDF(单篇或批量) | pmids, force | | pubmed_system_status | 系统环境和 API Key 状态检测 | 无 |


Agentic 响应模型

每个工具返回统一的 AgentResponse<T> 结构,为 AI Agent 优化:

{
  "status": "success",
  "data": { ... },
  "metadata": {
    "tool": "pubmed_search",
    "executionMs": 1234,
    "timestamp": "2025-01-01T00:00:00.000Z",
    "pagination": { "total": 500, "returned": 20, "hasMore": true }
  },
  "suggestions": [
    {
      "tool": "pubmed_get_details",
      "reason": "Get full metadata for specific articles of interest.",
      "parameters": { "pmids": ["12345678"] }
    }
  ]
}
  • status — 成功/错误状态
  • data — 类型化的返回数据
  • metadata — 执行上下文(耗时、分页、缓存状态)
  • suggestions — Agent 下一步操作建议(工具名 + 原因 + 参数)

API Key 池配置

支持多个 NCBI API Key 轮询/主备/随机负载均衡。

在项目根目录创建 api-keys.json(参见 api-keys.json.example):

{
  "keys": [
    { "api_key": "KEY_1", "email": "[email protected]" },
    { "api_key": "KEY_2", "email": "[email protected]" }
  ],
  "strategy": "round-robin"
}

| 策略 | 说明 | |------|------| | round-robin | 轮询(默认) | | failover | 主备切换 | | random | 随机负载均衡 |

优先级: api-keys.json > 环境变量 > 匿名模式

健康管理: 连续 3 次失败自动下线,60 秒冷却后恢复


项目结构

src/
├── index.ts                  # 入口点
├── config.ts                 # 配置常量 + 环境变量
├── server.ts                 # MCP Server 编排器
├── types/                    # TypeScript 类型定义
│   ├── article.ts            # Article, SearchResult, OAInfo
│   ├── responses.ts          # AgentResponse<T>, makeResponse/makeError
│   └── index.ts
├── api/
│   ├── pubmed-client.ts      # PubMed EUtilities 客户端
│   └── key-pool.ts           # API Key 号池(轮询/主备/随机)
├── cache/
│   ├── memory-cache.ts       # 内存 LRU 缓存(5 分钟,100 条上限)
│   └── file-cache.ts         # 文件持久化缓存(30 天过期)
├── services/
│   ├── fulltext.ts           # OA 检测 + PDF 下载
│   └── system.ts             # 系统环境检测
├── tools/
│   ├── definitions.ts        # MCP 工具 Schema(8 个工具)
│   └── handlers.ts           # 工具路由 + 处理逻辑
├── transport/
│   ├── stdio.ts              # stdio 传输
│   └── streamable-http.ts    # HTTP 传输(Express)
└── utils/
    └── formatter.ts          # 文章格式化(compact/standard/detailed)

故障排除

| 问题 | 解决方案 | |------|----------| | 依赖缺失 | npm install && npm run build | | PubMed API 调用失败 | 检查网络;有 Key 时确认 Key 有效 | | Key 池全部不可用 | 检查 api-keys.json 中 Key 是否有效,60 秒后自动恢复 | | 端口被占用 | lsof -i :8745 查看,或设置 PORT=其他端口 | | Docker 健康检查失败 | 检查 .env 配置,docker logs pubmed-mcp |


许可证

MIT License