@ cyanheads/ pubmed- mcp- 服务器
搜索 PubMed/Europe PMC,取出文章和全文(PMC/EPMC/Unpaywall),引文,MeSH名词通过MCP. (原始内容存档于2012-10-12). STIO or Streamable HTTP.
概览
PubMed、PubMed Central和欧洲PMC的生物医学文献。 搜索它,获取元数据和全文,解决识别符和部分引用,格式引用,以及 MeSH 词汇中的地面查询. 运行为 stdio 进程,本地可流的 HTTP 服务器,或上面的公共主机端点. 船舶 pubmed-guide 代理技能( e)skill://pubmed-guide/SKILL.md),MCP客户端读取了PubMed查询语法,PMC外的DOI-to-PMID路由,引用列表解析,引用计数,和全文缺失.
工具
| 工具 | 说明 |
|---|---|
pubmed_search_articles | 搜索 PubMed 有完整的查询语法、结构化过滤器、日期范围以及可选摘要 |
pubmed_fetch_articles | 由 PMID 获取文章元数据: 抽象、 作者、 日记、 MeSH 条款、 数据库加入, 如审判登记 ID 、 赠款、 作者集体调查员 、 链接撤回和更正通知 |
pubmed_fetch_fulltext | 由 PMID 、 PMCID 或 DOI 获取全文, 从 PMC 返回欧洲 PMC 到 Unpaywall |
pubmed_europepmc_search | 搜索欧洲PMC 预印,专利,阿格里可拉,和开放访问记录 PubMed 不携带 |
pubmed_europepmc_fetch | 获取完整的欧洲PMC记录,包括未整理的抽象, 如 records: [{ source, epmcId }] |
pubmed_fetch_citation_metrics | 由 PMID 获取 NIH iCite 引用参数: 相对引用率、 NIH 百分位数、 引用数和率 |
pubmed_format_citations | 在APA 7th, MLA 9th, BibTeX, RIS, 或温哥华(ICMJE/NLM)中采用格式引用,并附带撤回和更正通知 |
pubmed_find_related | 为 PMID 查找类似文章、 引用文章或参考文献 |
pubmed_spell_check | 通过 NCBI ESpell 校正一个拼错的 PubMed 查询 |
pubmed_lookup_mesh | 查找带有树号、范围说明和条目名的 MeSH 标题 |
pubmed_lookup_citation | 通过 ECitMatch 解决部分引用 PMID 的问题,每次最多25次 |
pubmed_convert_ids | 通过 PMC ID 转换器在 DOI, PMID 和 PMCID 之间转换 |
资源
| 资源 | 说明 |
|---|---|
pubmed://database/info | PubMed 数据库元数据通过 EInfo( 域列表, 记录计数, 最后更新) |
提示
| 提示 | 说明 |
|---|---|
research_plan | 制定一个结构化的四阶段生物医学研究计划 |
能力参考
pubmed_search_articles 工具
- 完整 PubMed 查询语法加过滤器(作者、期刊、 MeSH、 出版类型、语言、物种、抽象、免费全文)和出版/修改/Entrez日期范围
query是可选的:使用作者、日记、 MeSH 或 出版物类型的过滤器,过滤器单独进行搜索(例如,日记在日期范围内的输出)- 每页最多1 000个结果,抵消最多9 998个结果,或
maxResults: 0单凭比赛数;summaryCount增加最多50个点击的简介。 在封顶处会提供更大的页码,并注明要继续何处的提示 - 报告
totalCount,则effectiveQuery普布迈德跑,和appliedFilters - 拒绝在 PubMed 调用前的空白过滤值、 无法使用的日期和倒置的日期范围
pubmed_fetch_articles 工具
- 每通电话最多200个PMID;失事情况列于
unavailablePmids - 摘要、作者、期刊、DOI、出版物类型、链接撤回/erratum/评论通知和链接; MeSH默认条件,通过
includeGrants,以及集体作者的成员(其InvestigatorList数以千计的一些联合体审判)includeInvestigators - 撤回、更正或被质询的文章以与
pubmed_format_citations,直接在其标题下 dataBanks(c) 逐字列出记录的审判登记和数据储存(Clinical Curritics.gov NCT ID、GenBank和PDB加入、Dryad DOIs)pubmed_search_articles页:1<accession>[si]找到其他记录recordType从 Bookshelf 章节和书籍中分离出期刊文章; 选入maxResponseCharacters推迟至deferred.ids
pubmed_fetch_fulltext 工具
pmcids, (中文(简体) ),pmids,以及dois每次通话最多50个不同的识别码:前10个被取出,其余被运回overLimit后续电话。 每一个都是针对PMC,然后是欧洲PMC,然后是Unpaywall(需要)UNPAYWALL_EMAIL),其中多篇文章被取出并退回一次viaSource命名响应的分级source: "pmc"返回部分(正文,然后是背面事项,如承认、声明和附录)、表格和数字;source: "unpaywall"返回最佳 HTML 或 PDF 文本正文- 获取欧洲PMC全文,以便记录欧洲PMC标记打开,包括预印;文章载有
licenses他们的PMCJATS状态 - 密斯带有一个类型
reason财务报告和审定财务报表triedTiers· ;sections, (中文(简体) ),maxSections, (中文(简体) ),maxCharacters, (中文(简体) ),overflowMode,以及maxResponseCharacters约束反应,truncation报告被切断的东西sectionCap名称maxSections切换
pubmed_europepmc_search 工具
- 添加预印( I)
PPR专利(PAT)和阿格里科拉(AGR改为:MED财务报告和审定财务报表PMC; 默认为MED, (中文(简体) ),PMC, (中文(简体) ),PPR - 通过光标
cursorMark编号 :nextCursorMark,每页最多100个;封顶处提供更大的页码,并注明要继续何处。 摘要以 400 个字符片段来取 - 可选
sort逗号分隔<field> asc|desc键;relevance是默认的顺序, 而一个不能使用的欧洲 PMC 类europepmc_invalid_input - 击打携带
license财务报告和审定财务报表hasFullTextXml - 未注册时间
EUROPEPMC_ENABLED=false
pubmed_europepmc_fetch 工具
- 最多25个记录
records: [{ source, epmcId }],每对复制 从搜索点击, 与完整的抽象,license,以及hasFullTextXml; 未解决的编号在notFound; 选入maxResponseCharacters推迟至deferred.records - 未注册时间
EUROPEPMC_ENABLED=false
pubmed_fetch_citation_metrics 工具
- 每拨电话最多可达1 000个PMID;前200个识别器被取出,其余返回
overLimitPMIDs NIH iCite没有记录unavailablePmids - 相对引用比率(带有临时旗帜)、NIH百分位数、引用数和比率、翻译潜力、MeSH类股份和临床引用
- iCite 不标出撤销; 请检查
pubmed_fetch_articles通知时 - 资料来源: NIH iCite (英语)
pubmed_format_citations 工具
- 每个电话最多50个PMID,任何组合
apa, (中文(简体) ),mla, (中文(简体) ),bibtex, (中文(简体) ),ris,以及vancouver - 书本记录作为已编辑的书籍引用,每一章按其上次修订或提交日期注明;无法获取的PMID报告为无法获取
- 温哥华用缩放的引用医学形式写出页面范围(
1637-1645→1637-45页:1issn国际空间研究所SN携带日记连接ISSSN和RISTI减少后继期 - NCBI与一篇文章的链接
notices(b) 温哥华添加了以下内容:Retraction in:编号 :Erratum in:注和APA 缩出括号
pubmed_find_related 工具
similar, (中文(简体) ),cited_by,或references,每页最多可有50个相抵平面。 在封顶处会提供更大的页码,并注明要继续何处的提示- 回溯到欧洲PMC,然后是OpenAlex, 并指定响应的提供者; 失败为
all_providers_failed如果没有人可以
pubmed_spell_check 工具
- 回返
original, (中文(简体) ),corrected,以及hasSuggestion; 校正已就地, 因此字段标记、 运算符、 间隔和基因符号保持为正文, 而像作者首字母这样的单个字母永远不会被换为另一个 - 索引字段标记的值( Q)
aged[mh], (中文(简体) ),zhang y[au], (中文(简体) ),free full text[sb])保留为书面;自由文本字段([tiab], (中文(简体) ),[ti], (中文(简体) ),[tw])仍在更正 - 在零重击或薄搜索后运行, 然后重试
pubmed_search_articles与corrected
pubmed_lookup_mesh 工具
- 按名称或自由文字术语排列的描述符,准确的标题匹配先被标注(描述符,用于药物类标题);每页最多50个,通过
nextOffset。在封顶处提供更大的页码,并注明要继续何处的通知 - 记录携带他们的 MeSH 独有的ID(
meshId,比如说.D000072657在Entrez UID旁;includeDetails(默认)添加树号、范围说明和条目词
pubmed_lookup_citation 工具
- 每通电话最多25个部分引文;需要一份日记或四位数年份,以及第一页的音量,作者应使匹配更清晰
- 每个都独立匹配,然后回来
matched, (中文(简体) ),not_found,或ambiguous,带有回收细节
pubmed_convert_ids 工具
- 每通电话最多50个身份证,全部申报
idType(单位:千美元)doi, (中文(简体) ),pmid, (中文(简体) ),pmcid);只有 PMC 索引文章解决 - 每个ID一个成功或出错行,按顺序排列,所以部分批次永远不会失败
pubmed://database/info 资源
- 现场信息呼叫
pubmed数据库,返回为application/json count, (中文(简体) ),lastUpdate,以及fields[],其名称为搜索标记pubmed_search_articles接受
research_plan 提示
- 参数 :
title, (中文(简体) ),goal,以及keywords需要;organism财务报告和审定财务报表includeAgentPrompts选项 - 返回四阶段研究计划;
includeAgentPrompts: "true"在其9个分步骤中每个分步骤下增加一个代理指导区块,其中2个在工具上:文献审查名称pubmed_search_articles财务报告和审定财务报表pubmed_lookup_mesh,以及解释步骤名称pubmed_search_articles
特征
建造在 @cyanheads/mcp-ts-core: stdio和可流式的 HTTP 传输器,可插接式(none 编号 : jwt 编号 : oauth),可互换存储(in-memory, (中文(简体) ), filesystem, (中文(简体) ), Supabase, (中文(简体) ), Cloudflare KV/R2/D1),结构化记录,可选择的OpenTeleometry tracking.
PubMed 特性 :
- NCBI E-用途(ESearch, EFetch, ESummary, ELink, ESpell, EInfo, ECitMatch)和PMC ID转换器,欧洲PMC, OpenAlex和Unpaywall填补了漏洞
- 共享 NCBI 请求队列: 启动节奏请求, 封顶货币, 冷却器在 NCBI 429 之后将每个呼叫者保存, 以及一个覆盖队列等待和重试的最后期限
- 为 PubMed 不一致的记录构建的 XML 解析: 结构化摘要、 缺失字段、 不同日期格式
- 豁免标识符:一个零加法的PMID解决,因为它在每个工具中拼写一个;
pubmed_fetch_fulltext并且不区分大小写和 PMC ID 的匹配PMC前缀 - 手卷引文格式化(APA, MLA, BibTeX, RIS, 温哥华),无依赖性
方便代理输出 :
- 答复中的证据:源标签、全文的许可字段和欧洲PMC结果、Unpaywall结果的最佳警告、搜索时的有效平息回声,因此特工可以判断信任什么
- Graceful 部分失败:批量工具返回每个项目的成功/错误行,而不是请求失败,并带有结构化状态代码和可操作的下一步文本
- 歧视性产出合同:
source: "pmc" | "unpaywall"键入unavailable理由,viaSource财务报告和审定财务报表triedTiers字段,因此调用数据分支,而不是字符串解析
开始
连接到主机实例, 没有安装 :
claude mcp add --transport http pubmed-mcp-server https://pubmed.caseyjhand.com/mcp
或者在当地运行它:
claude mcp add pubmed-mcp-server -- npx -y @cyanheads/pubmed-mcp-server
对于其他客户端,请将此添加到 MCP 配置文件中 :
{
"mcpServers": {
"pubmed-mcp-server": {
"command": "npx",
"args": ["-y", "@cyanheads/pubmed-mcp-server"]
}
}
}
一个 NCBI API 密钥 内 NCBI_API_KEY 将标准限制从每秒3个请求提高到10个请求(-e NCBI_API_KEY=your-key,或一个 env ) (中文(简体) ). 对于 Docker 或源构建,请参见 运行服务器。 。 。 .
配置
| 变量 | 说明 | 默认 |
|---|---|---|
NCBI_API_KEY | NCBI API密钥;将速率限制从 3 req/s提高到 10 req/s. NCBI 计算每个密钥的限值(每个IP地址不包含一个),因此进程共享密钥或地址共享. | 无 |
NCBI_ADMIN_EMAIL | 按照NCBI的建议,与 NCBI 请求发送的电子邮件联系. | 无 |
NCBI_REQUEST_DELAY_MS | NCBI请求之间的最小间隔开始,以毫秒计. | 400 (单位:千美元)120 带有密钥) |
NCBI_MAX_CONCURRENT | 最大同时飞行 NCBI请求. | 8 |
NCBI_MAX_RETRIES | 重试失败 NCBI 请求的尝试 . | 6 |
NCBI_TIMEOUT_MS | 每个请求HTTP超时,以毫秒计. | 30000 |
NCBI_TOTAL_DEADLINE_MS | NCBI呼叫超过队列等待、重复和后退的最后期限,以毫秒计。 一个不能及时开始的电话立刻被拒绝. | 60000 |
UNPAYWALL_EMAIL | 为 Unpaywall 联系电子邮件 。 设置它使Unpaywall级 pubmed_fetch_fulltext 用于非PMC DOI. | 无 |
UNPAYWALL_TIMEOUT_MS | 按请求超时获取 Unpaywall 检索和内容, 以毫秒计 . | 20000 |
EUROPEPMC_ENABLED | 设定 false 禁用每个欧洲PMC呼叫: 两个欧洲PMC工具都没有注册, pubmed_fetch_fulltext 跳过这层,和 pubmed_find_related 跳过后退. | true |
EUROPEPMC_EMAIL | 与欧洲 PMC 请求发送的可选联系电子邮件 . | 无 |
EUROPEPMC_REQUEST_DELAY_MS | 欧洲PMC请求之间的最小差距开始,以毫秒计. | 200 |
EUROPEPMC_MAX_RETRIES | 重试尝试失败的欧洲 PMC 请求 . | 3 |
EUROPEPMC_TIMEOUT_MS | 每个欧洲PMC电话请求超时,以ms计. | 20000 |
MCP_TRANSPORT_TYPE | 运输: stdio 或者说 http。 。 。 . | stdio |
MCP_HTTP_PORT | HTTP 服务器端口. | 3010 |
MCP_SESSION_MODE | HTTP 会话模式 : stateless, (中文(简体) ), stateful,或 auto。 。 。 . | stateless |
MCP_AUTH_MODE | 认证 : none, (中文(简体) ), jwt,或 oauth。 。 。 . | none |
MCP_LOG_LEVEL | 日志级别 (debug, (中文(简体) ), info, (中文(简体) ), warning, (中文(简体) ), error(见a/c.5/49/70,附件). | info |
LOGS_DIR | 日志文件目录(只有Node.js). | <app-root>/logs |
STORAGE_PROVIDER_TYPE | 存储后端 : in-memory, (中文(简体) ), filesystem, (中文(简体) ), supabase, (中文(简体) ), cloudflare-kv/r2/d1。 。 。 . | in-memory |
OTEL_ENABLED | 启用 打开几何。 。 。 . | false |
见 .env.example 用于每个服务器设置和通用框架覆盖.
运行服务器
地方发展
要求数 Bun v1.4.0 (英语) 或更高(或Node.js v24+).
-
克隆并安装数字 :
git clone https://github.com/cyanheads/pubmed-mcp-server.git cd pubmed-mcp-server && bun install cp .env.example .env # set NCBI_API_KEY, NCBI_ADMIN_EMAIL, and UNPAYWALL_EMAIL as needed -
构建和运行制作版本数字 :
# One-time build bun run rebuild # Run the built server bun run start:http # or bun run start:stdio -
运行检查和测试数字 :
bun run devcheck # Lints, formats, type-checks, and more bun run test # Runs the test suite
夹克
docker run --rm -p 3010:3010 ghcr.io/cyanheads/pubmed-mcp-server:latest
图像默认为 HTTP 传输、 无国籍会话模式和日志到 /var/log/pubmed-mcp-server运行到一个 MCP 客户端的 stdio,使用 "command": "docker" 与 "args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/pubmed-mcp-server:latest"]为了在当地建设, docker build -t pubmed-mcp-server .; OpenTeleometry 端点依赖性默认安装——用 --build-arg OTEL_ENABLED=false 以略去它们.
项目结构
| 目录 | 目的 |
|---|---|
src/mcp-server/tools | 工具定义*.tool.ts) (中文(简体) ). PubMed、PMC、欧洲PMC和NIH iCite共有12个工具. |
src/mcp-server/resources | 资源定义。 数据库信息资源. |
src/mcp-server/prompts | 快速定义。 研究计划迅速. |
src/services/ncbi | NCBI E-用量服务层——API客户端,队列,解析器,用于事由. |
src/services/europe-pmc | 欧洲PMC服务——搜索+ fullTextXML JATS检索. 重用 NCBI JATS 解析器 . |
src/services/unpaywall | Unpaywall service — DOI — OA位置分辨率和内容获取 (HTML/PDF). |
src/services/openalex | OpenAlex 服务——最后的提供者 pubmed_find_related。 。 。 . |
src/config | 服务器特定环境变量与Zod解析并验证. |
tests/ | 单位和综合测试,反映 src/ 结构. |
skills/ | 发表 pubmed-guide 代理技能,通过MCP服务,并在包件中发运 .mcpb 捆绑,和多克的图像. |
发展指南
见 CLAUDE.md 发展准则和建筑规则。 简本:
- 搬运工投掷,框架渔获量——否
try/catch在工具逻辑中 - 使用
ctx.log用于伐木,ctx.state用于存储 - 登记册中的新工具和资源
createApp()数组在src/index.ts - 环绕外部 API 调用: 验证 生 → 规范到域类型 → 返回输出计划; 永远不要编织缺失的字段
捐款
问题值得欢迎。 提交前进行检查和测试:
bun run devcheck
bun run test
许可证
这个项目根据Apache 2.0许可证获得许可. 见 自由主义 详细文件.