关于 doiget
doiget 是面向研究者和自动化流程的命令行工具与 MCP 服务,可按 DOI 或 arXiv ID 获取论文 PDF 和元数据。默认通过 Crossref、Unpaywall 和 arXiv 等开放获取来源检索。
主要功能
- 01按 DOI 或 arXiv ID 获取论文
- 02通过开放获取 API 检索 PDF
- 03批量获取论文
- 04保存 PDF 与 TOML 元数据
- 05扩展引用图谱
适用场景
- 01按 DOI 下载开放获取论文
- 02批量处理参考文献列表
- 03为研究自动化流程获取论文
- 04从现有论文库迁移存储
MCP 相关
提供 stdio MCP 服务,供 MCP 客户端调用论文检索能力。默认发布版本仅使用开放获取来源;机构订阅来源需在构建时单独启用。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
doiget
一个单二进制 CLI + stdio MCP 服务,通过官方且优先开放获取(OA)的 API,将 DOI 和 arXiv ID 转换为本地 PDF。
文档: stable = Zola 网站(由 main 构建);dev = 由 next 构建的 rustdoc;API = docs.rs(最新发布版本)。
状态: 已在 crates.io 发布(doiget-core、doiget-cli、
doiget-mcp),二进制文件经过 sigstore 签名,并在 GitHub
Release 中附带 SBOM。Tier 1 + Tier 2 来源、stdio MCP 服务、引用图
扩展以及受门控的 TDM 来源均已实现。发布通过由标签驱动的流水线,使用
单个经过签名的 git 标签完成(参见
ADR-0025);release-plz 已
退役。历史记录请参见 CHANGELOG.md,阶段计划请参见
docs/PHASES.md。
定位
doiget 是一款通用自动化工具,可通过官方出版商 API 获取论文。 按照设计,doiget 仅尝试通过以下方式获取:
- 公开的开放获取来源(默认——Crossref、Unpaywall、arXiv)。
- 用户为自己的机构或个人订阅亲自配置的凭据(选择启用,且受编译时门控)。
doiget 不会绕过任何访问控制机制、重新分发论文、托管 内容、作为 SaaS 运营,也不会捆绑任何出版商 API 密钥。
用户有责任确保自己有权访问所请求的内容,并遵守各来源的服务条款。
请参见 docs/LEGAL.md 和 docs/SCOPE.md。
文档
| 读者 | 入门指南 |
|---|---|
| CLI 用户 | 本 README,然后是 doiget --help,以及用于了解非简单标志/退出代码的 docs/CONFIG.md 和 docs/ERRORS.md |
| Agent / MCP 宿主集成者 | docs/MCP_TOOLS.md + docs/INTEGRATION/README.md |
| 库用户(Rust) | docs/PUBLIC_API.md + crates.io rustdoc |
| 贡献者 | CONTRIBUTING.md → docs/ARCHITECTURE.md → docs/DECISIONS/ |
| 出版商法务团队 | docs/LEGAL.md + CONTACT.md |
| 安全研究人员 | docs/SECURITY.md + docs/PROVENANCE_LOG.md + docs/CAPABILITY.md |
| 迁移 BiblioFetch.jl 存储 | docs/MIGRATION.md + docs/STORE.md + docs/SAFEKEY.md |
架构:docs/ARCHITECTURE.md 威胁模型:docs/SECURITY.md 永久非目标:docs/SCOPE.md 阶段计划:docs/PHASES.md ADR:docs/DECISIONS/
安装
doiget 提供一个独立二进制文件——Linux 版本完全静态链接(musl),因此在旧版 glibc 系统或 HPC 服务器上也能运行。所有安装渠道都会从经过签名的 GitHub Release 获取经过校验和验证的同一二进制文件。
推荐:使用预编译二进制文件(无需 Rust 工具链或编译器)。 下方的 shell / PowerShell 安装程序会直接下载经过签名的 Release 二进制文件。
cargo install(下文介绍)则会从源代码编译,因此需要可用的 C/C++ 构建工具链——各平台的具体要求请参见对应部分。
Shell 安装程序(Linux / macOS)
curl -fsSL https://raw.githubusercontent.com/QAtlasHub/doiget/main/scripts/install.sh | sh
安装到 ~/.local/bin(可通过 DOIGET_INSTALL_DIR 更改);使用 DOIGET_VERSION=0.6.0 指定版本。脚本会在安装前验证已发布的 SHA-256 校验文件。
PowerShell 安装程序(Windows)
irm https://raw.githubusercontent.com/QAtlasHub/doiget/main/scripts/install.ps1 | iex
升级。 重新运行安装程序即可。它会说明替换的版本,并在二进制文件旁留下 doiget.install.json。doiget 不会自行检查更新(ADR-0015)。若要查看当前实际运行的二进制文件,包括 MCP 配置按路径指定的二进制文件,请使用 doiget capabilities(build)或 doiget_health 工具。两者都会报告版本、渠道、安装方式以及该方式对应的更新命令。运行 doiget version --check 可按需与最新版本比较。Claude Desktop .mcpb 扩展不会自动更新;请从最新版本中安装新的 .mcpb。
从 crates.io 安装(Rust 工具链——从源代码编译)
已发布的 crate 名称是 doiget-cli(它会生成 doiget 二进制文件)。cargo install doiget 无法运行——不存在这个不带限定名称的 crate:
cargo install doiget-cli # installs the `doiget` binary
由于这会从源代码编译,因此需要 C/C++ 构建工具链(链接器是必需的——没有链接器,cargo install 就无法链接二进制文件):
- Linux:
gcc/clang+make(例如build-essential)。 - macOS: Xcode 命令行工具(
xcode-select --install)。 - Windows: 使用带有 "Desktop development with C++" 工作负载的 Visual Studio Build Tools(提供
link.exe),或通过 GNU 目标使用 MinGW-w64 工具链(rustup toolchain install stable-x86_64-pc-windows-gnu+cargo +stable-x86_64-pc-windows-gnu install doiget-cli)。
如果没有(或不想安装)构建工具链,请使用上方的某个预编译安装程序——它们无需编译器。
npm / npx——在 Agent 配置中使用一行命令
npx -y doiget-cli serve # MCP server, no install step
npm install -g doiget-cli # or put `doiget` on PATH
软件包名称是 doiget-cli,安装的命令是 doiget——这与 cargo install doiget-cli 的形式相同,名称也由此而来。npm 拒绝了不带限定名称的 doiget,因为它与无关的软件包 giget 太相似;无论如何,与 crate 保持一致最终都是更好的选择:该工具在两个注册表中使用同一个名称。
npm 软件包将与已签名 Release 相同的二进制文件作为 optionalDependencies 携带——npm 会解析与你的平台匹配的版本,而且不会在 postinstall 阶段下载文件,因此在 --ignore-scripts 下以及通过企业注册表镜像使用时都能正常工作。运行 npm view doiget version 可查看已发布的版本;这些软件包随带标签的 Release 发布,因此最新提交可能会比它们更新。
Homebrew
brew tap QAtlasHub/doiget https://github.com/QAtlasHub/doiget
brew install doiget
这个 tap 位于本仓库中,而不是独立的 homebrew-doiget 仓库,因此 tap 命令行中带有明确的 URL。如果有专用的 tap 仓库,命令就可以简化为 brew tap QAtlasHub/doiget;Formula 无需修改即可迁移过去。
Formula/doiget.rb 安装的是 GitHub Release 发布的同一个签名发布二进制文件,并使用该 Release 自带的 .sha256 资源中的 sha256 值进行固定——shell 安装程序也会验证这个文件,因此两个渠道安装的内容不会不一致。该文件由 scripts/update-homebrew-formula.sh 生成,绝不手动编辑;如果已提交的 Formula 与生成器的输出不一致,CI 就会失败。
Formula 跟踪最新的稳定版,因此可能比最新的标签落后一个提交;运行 brew info doiget 可查看其固定的版本。
Claude Code 插件
/plugin marketplace add QAtlasHub/doiget
/plugin install doiget@doiget
此插件从本仓库的默认分支读取 .claude-plugin/。插件的 .mcp.json 会运行 npx -y doiget-cli serve,因此无需预先安装任何内容——npm 会在首次运行时获取包装器和对应平台的二进制文件。在此之前,它直接运行 doiget,这意味着插件只有在用户已通过其他方式安装 doiget 后才能使用;因此它采用了可自托管的方式,而没有提交到 Anthropic 插件目录。现在则可以提交了。
渠道状态
| 渠道 | 状态 |
|---|---|
| Shell / PowerShell 安装程序 | 已发布 |
| GitHub Release 二进制文件(已签名,含 SBOM) | 已发布 |
cargo install doiget-cli | 已发布(需要 C 链接器) |
cargo binstall doiget-cli | 从 0.9.0 开始提供元数据:获取 Release 二进制文件而非编译(Linux x86_64、macOS、Windows x86_64)。它不会检查 .sha256 附属文件或 cosign 捆绑包;Shell 安装程序会检查 |
.mcpb Claude Desktop 扩展 | 自 0.8.4 起已发布 |
| MCP Registry | 已列出 |
| npm / npx | doiget-cli(安装 doiget 命令);已发布的内容见下文 |
| Claude Code 插件 | 可自托管的市场,见上文 |
| Homebrew | 本仓库中的 Formula/doiget.rb;tap 配置行见上文 |
| Nix | nix profile install github:QAtlasHub/doiget 会从源代码构建 packages.doiget。在 0.9.0 之前,flake 无法构建:它固定使用 Rust 1.86,低于依赖项的要求,而且版本字符串已过时。现在,nix 工作流会在 flake 或锁文件更改时以及每周构建 |
.deb | 未构建——价值较低;大多数 Linux 用户会选择二进制文件或 Nix |
| Docker | 暂无计划——见下文 |
在 #501 中,Docker 排名第二,理由是容器是“Tier-3 功能唯一可合法使用的架构”。这个前提并不成立:ADR-0002 决定默认发布的二进制文件完全不包含 TDM 源代码,而基于已发布二进制文件构建的镜像,与其他所有预构建渠道一样,只会提供 oa-only,citation。这句话描述的架构确实存在,可通过使用 --features tdm-<publisher> 从源代码构建来支持,但这并非分发渠道。剩下的价值是“企业可以固定版本并扫描的形式”——确实有一定价值,但 doiget 是一个静态链接的单一二进制文件,因此容器在这里无法解决依赖问题;现有的 .sha256 文件和 cosign 捆绑包已能提供可固定且可验证的构件。
npm 是唯一编写了发布流程、但尚无对应软件包的渠道。npm Trusted Publishing 无法执行软件包的首次发布——该设置位于软件包的 Settings 页面中,而从未发布过的软件包没有 Settings 页面——因此,按设计不携带令牌的发布作业无法创建这些软件包。scripts/bootstrap-npm.sh 会执行一次性占位发布,以解除这一阻碍;操作手册见 CONTRIBUTING.md。
截至 2026-08-27,四个针对不同平台的软件包已以 0.0.0 占位版本发布。npm 无论 --tag 指定什么,都会将 latest 指向软件包的首次发布版本,因此这些占位版本已弃用——在某个发布版本将 latest 更新为正式版本之前,这条弃用通知是唯一的警告。
#247 在其五个渠道中有四个尚不存在时就被标记为已完成并关闭;其余渠道在 #501 中跟踪。每个发布资源都使用 cosign 无密钥签名(<asset>.cosign.bundle),可选择进行验证。
快速开始
# Fetch a paper by DOI (Open Access only by default)
doiget fetch 10.1103/PhysRevLett.130.200601
# Fetch by arXiv id
doiget fetch arXiv:2401.12345
# Batch fetch
doiget batch refs.txt
# Verify a bibliography's references resolve (no PDF download) — CI gate
doiget verify docs/references.bib --strict
# Lint a .bib for structural issues (no network): missing fields,
# blank fields, $$-display-math titles. Read-only and math-aware.
doiget lint docs/references.bib
# Inspect what was fetched
doiget info 10.1103/PhysRevLett.130.200601
# Run as MCP server (stdio)
doiget serve
默认功能仅通过 Crossref / Unpaywall / arXiv 获取开放获取 PDF。机构 TDM 访问(Springer OA、APS Harvest、Elsevier ScienceDirect TDM)不包含在默认发布的二进制文件中;必须在构建时按出版商选择启用。 参见 docs/SOURCES.md。
BiblioFetch.jl 写入的存储
doiget 的存储格式(TOML 元数据 + 位于可配置存储根目录下的 PDF 文件,docs/STORE.md)最初是与 BiblioFetch.jl 共用的格式。该约定现已废止(ADR-0060),但格式没有变化:将 doiget 指向现有存储(DOIGET_STORE_ROOT=~/papers),它就会读取该存储,并保留它不负责管理的 [bibliofetch] 表。doiget 默认使用 ./papers(ADR-0036)。
许可证
doiget 源代码和二进制文件采用 MIT 许可证(请参阅 LICENSE)。
doiget 获取论文所依据的许可证另行确定,取决于每篇论文自身的许可证、出版商的 API 服务条款以及用户自身的访问权限。 doiget 不会对获取的内容重新授权。
联系方式
下架请求、安全问题披露及其他正式 correspondence: CONTACT.md。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。