ci: 更新为 GitHub Actions v6 + OIDC provenance 发布流程
为 LLM Agent 提供结构化 PubMed 文献数据的 MCP 服务器。Agent 友好的响应模型,专注数据提供,分析交给 LLM。
LLM Agent <--MCP--> PubMed MCP Server <--API--> PubMed / PMC / Unpaywall
核心能力: 文献搜索 / 智能缓存 / OA 全文下载 / Agentic 响应模型
前置要求: Node.js v18.0.0+
# 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
cp .env.example .env
编辑 .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 次/秒。
# npm 包 mcp-pubmed-llm-server # 或 npx mcp-pubmed-llm-server # 源码开发 npm run dev # 源码生产 npm run build && npm start
npm start
npm run start:http
npm start # 或 node dist/index.js --mode=stdio
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
GET /mcp
DELETE /mcp
GET /health
{ "mcpServers": { "pubmed": { "command": "npx", "args": ["-y", "mcp-pubmed-llm-server"], "env": { "PUBMED_API_KEY": "你的API密钥(可选)", "PUBMED_EMAIL": "你的邮箱(可选)", "ABSTRACT_MODE": "deep", "FULLTEXT_MODE": "enabled" } } } }
配置文件位置:
~/Library/Application Support/Claude/claude_desktop_config.json
~/.claude/config.json
stdio 模式: 同上配置,type 设为 stdio
type
stdio
streamableHttp 模式: type 设为 streamableHttp,baseUrl 设为 http://<服务器IP>:8745/mcp
streamableHttp
baseUrl
http://<服务器IP>:8745/mcp
pubmed_search
query
max_results
days_back
sort_by
format
pubmed_get_details
pmids
pubmed_extract_info
pmid
sections
pubmed_find_related
pubmed_manage_cache
action
target
FULLTEXT_MODE=enabled
pubmed_detect_fulltext
auto_download
pubmed_download_fulltext
force
pubmed_system_status
每个工具返回统一的 AgentResponse<T> 结构,为 AI Agent 优化:
AgentResponse<T>
{ "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
支持多个 NCBI API Key 轮询/主备/随机负载均衡。
在项目根目录创建 api-keys.json(参见 api-keys.json.example):
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 秒冷却后恢复
优先级: 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
lsof -i :8745
PORT=其他端口
docker logs pubmed-mcp
MIT License
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802032778号
PubMed MCP Server v3.0
为 LLM Agent 提供结构化 PubMed 文献数据的 MCP 服务器。Agent 友好的响应模型,专注数据提供,分析交给 LLM。
核心能力: 文献搜索 / 智能缓存 / OA 全文下载 / Agentic 响应模型
快速开始
前置要求: Node.js v18.0.0+
1. 安装
2. 配置
编辑
.env:3. 运行
传输模式
npm start(默认)npm run start:httpstdio 模式(默认)
Streamable HTTP 模式
Docker 部署:
验证:
端点:
POST /mcp— MCP 协议消息GET /mcp— SSE 事件流DELETE /mcp— 关闭会话GET /health— 健康检查MCP 客户端配置
Claude Desktop / Claude Code / Cline
配置文件位置:
~/Library/Application Support/Claude/claude_desktop_config.json(macOS)~/.claude/config.jsonCherry Studio
stdio 模式: 同上配置,
type设为stdiostreamableHttp 模式:
type设为streamableHttp,baseUrl设为http://<服务器IP>:8745/mcp工具列表(8 个)
文献搜索
pubmed_searchquery,max_results,days_back,sort_by,formatpubmed_get_detailspmids,formatpubmed_extract_infopmid,sectionspubmed_find_relatedpmid,type,max_results缓存管理
pubmed_manage_cacheaction,target全文下载(需
FULLTEXT_MODE=enabled)pubmed_detect_fulltextpmid,auto_downloadpubmed_download_fulltextpmids,forcepubmed_system_statusAgentic 响应模型
每个工具返回统一的
AgentResponse<T>结构,为 AI Agent 优化:status— 成功/错误状态data— 类型化的返回数据metadata— 执行上下文(耗时、分页、缓存状态)suggestions— Agent 下一步操作建议(工具名 + 原因 + 参数)API Key 池配置
支持多个 NCBI API Key 轮询/主备/随机负载均衡。
在项目根目录创建
api-keys.json(参见api-keys.json.example):round-robinfailoverrandom项目结构
故障排除
npm install && npm run buildapi-keys.json中 Key 是否有效,60 秒后自动恢复lsof -i :8745查看,或设置PORT=其他端口.env配置,docker logs pubmed-mcp许可证
MIT License