PubMed MCP Server
Provides structured PubMed literature data for LLM agents, supporting search, caching, and open-access full-text downloads via the MCP protocol.
README
PubMed MCP Server v3.0
为 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 git@github.com: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 设为 streamableHttp,baseUrl 设为 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": "user1@example.com" },
{ "api_key": "KEY_2", "email": "user2@example.com" }
],
"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
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。