Star 历史趋势
数据来源: GitHub API · 生成自 Stargazers.cn
README.md
ScanSci PDF

ScanSci PDF

PyPI License MCP

让 Agent 替你下载学术论文 —— 20+ 数据源并行竞速,100+ 高校机构通道,一句自然语言拿下整份文献清单。

能力 · 快速开始 · 怎么用 · 机构通道 · 社区 · 致谢

能力

给出 DOI、arXiv 号或一份文献清单,ScanSci PDF 会自动挑最快能下的那条路:OA 直链、预印本、出版商 API、你的学校通道都试一遍,付费墙自动路由,结果落地成规整命名的 PDF 文件。

  • 单篇,一句话的事 — DOI / arXiv 进,作者_年份_标题.pdf 出;BibTeX / RIS / EndNote 引文顺手导出,可直推 Zotero。
  • 清单,整批拿下 — APA / BibTeX / DOI 列表直接喂,自动补全缺失 DOI;上千篇先分「OA / 灰色源 / 需机构」三桶再分批下载,不瞎跑不浪费。
  • 付费墙,走你的学校 — 100+ 高校 WebVPN、CARSI 联邦认证、EZProxy、Elsevier API 快速通道(1–2 秒/篇);登录在你自己的浏览器完成,密码不经过工具。
  • 对抗与自愈全自动 — Cloudflare / CAPTCHA / SSO 分层处理;出版商封 IP 自动停损;机构会话过期自动重登,登录一次全程复用。
  • Agent 原生 — 标准 MCP 服务器、17 个工具即装即用;Codex App、ZCode、Claude Code 都有现成的插件或配置。

近期更新

  • 统一任务管线 — 任意输入(xlsx/csv 表格、文献清单、检索结果、文章页 URL)自动归一成带渠道预测的下载队列;batch --lanes 四车道调度:Elsevier API / OA 快车道并行,灰色源竞速与机构级联接续,失败逐级溢流。
  • SI 附件下载get <DOI> --si 把补充材料一并拉下来;被 Cloudflare 挡住的 Elsevier 自动切隐身浏览器通道。
  • AI 阅读层get <DOI> --md 顺手把 PDF 转成 agent 友好的 Markdown(PDF 仍是默认交付物)。
  • OpenAIRE 仓储源接入 — 绿色 OA / 机构库副本进入免费竞速池,Unpaywall 漏掉的它来补(现已 20+ 数据源)。
  • MCP 工具面瘦身 — 45 → 17 个工具,每次会话的 schema token 开销降约 60%,能力零损失。
  • 更抗封、更稳 — 竞速引擎新增 (源 × 出版商) 负缓存,被 Cloudflare 拦一次不再反复烧超时;cloakbrowser 强制 0.5.9+(Chromium 151 内核);每周出版商金丝雀巡检。

快速开始

安装和更新是同一句话——对 Codex、ZCode、Claude Code 都这么说:

帮我安装或更新这个插件:https://github.com/Rimagination/scansci-pdf

Agent 会克隆(或原地更新)仓库、装好依赖并注册插件,然后你就能直接让它下论文了——例子见下一节怎么用

手动安装 / pip / MCP 配置(不走对话流程时)
pip install scansci-pdf

标准 MCP 配置(Claude Desktop / Cursor / Windsurf / Cline / Cherry Studio…):

{
  "mcpServers": {
    "scansci-pdf": {
      "command": "scansci-pdf",
      "args": ["run"]
    }
  }
}

Codex App / Codex CLI(Windows 一键:克隆 + 装环境 + 注册插件):

powershell -NoProfile -ExecutionPolicy Bypass -Command '$p=Join-Path $HOME "plugins\scansci-pdf"; if(Test-Path $p){ git -C $p pull --ff-only } else { git clone --branch main --single-branch https://github.com/Rimagination/scansci-pdf.git $p }; & (Join-Path $p "scripts\install-scansci-pdf.ps1")'

ZCode:插件市场搜 scansci-pdf 一键安装,MCP、skills、快捷命令一次带齐。

插件入口:Codex = .codex-plugin/plugin.json + .mcp.json(自动注册 MCP server)+ skills/;ZCode = zcode-plugin/(marketplace 包:skills + /scansci 快捷命令);Claude Code = .claude/skills/ + 上面的标准 MCP 配置。

手动安装(Codex):仓库放到 %USERPROFILE%\plugins\scansci-pdfpython -m pip install -e . → 插件管理页刷新个人 marketplace;Codex CLI 可用时执行 codex plugin add scansci-pdf@local-plugins

其他部署方式(HTTP 远程 / Docker / Web UI)

HTTP 模式(远程部署或不支持 stdio 的场景,默认只监听本机):

scansci-pdf run --mode streamable_http --host 127.0.0.1 --port 8000

Web UI:

scansci-pdf web --port 8080   # 浏览器打开 http://localhost:8080

Docker(内置 MCP 服务器 + Tor,数据卷持久化):

docker compose up -d

怎么用

装好后,对着 Agent 说一句话就行。这些例子覆盖最常见的日常场景:

帮我下载 10.1038/nature12373 这篇论文

这个清单里有 3000 篇文献,先分类哪些能直接下、哪些要走机构权限,然后分批下载

搜一下 "urban heat island" 2023 年以来被引最高的 10 篇论文,并下载

用北大的 WebVPN 登录,把这篇 Elsevier 的论文下下来

把刚才那批论文的 BibTeX 导出,再推送到 Zotero

这篇下载失败了,帮我诊断一下网络问题

不动 Agent、直接命令行也行:

scansci-pdf get 10.1038/nature12373            # 单篇下载
scansci-pdf batch 文献清单.xlsx --lanes        # 批量下载(xlsx/csv/队列通用,四车道调度)
scansci-pdf search "carbon cycle" --out q.txt  # 检索结果落成队列文件,直接接 batch
scansci-pdf check                             # 依赖与环境体检
MCP 工具全表(17 个,按意图分组)
想做什么工具
下载单篇(可拉附件、转 Markdown)scansci_pdf_download
批量下载(列表 / xlsx·csv·bib·APA 文件)scansci_pdf_batch_download
检索、作者检索、系统性发现scansci_pdf_search · scansci_pdf_find · scansci_pdf_expand_citations
准备队列(校验 / OA 定位 / 构建)scansci_pdf_prepare_queue
机构登录与状态(WebVPN / CARSI / EZProxy / 出版商 SSO)scansci_pdf_login · scansci_pdf_channel_status · scansci_pdf_schools
引文 / 元数据 / Zoteroscansci_pdf_citation · scansci_pdf_zotero_push
配置 / 诊断 / Tor / 缓存 / Elsevier Keyscansci_pdf_config · scansci_pdf_diagnostics · scansci_pdf_tor · scansci_pdf_cache_clear · scansci_pdf_elsevier_setup

每个工具的参数与说明由 MCP tools/list 自带,Agent 会自动看到。

机构通道

付费墙论文优先走这四条机构通道。登录都在你自己的浏览器里完成,密码不经过本工具。

Elsevier API(推荐,无需浏览器)

ScienceDirect / Cell Press 等 Elsevier 论文走 API 直接下载,速度从 15–30 秒降到 1–2 秒。Key 申请免费、个人邮箱即可:

  1. 访问 Elsevier Developer Portal 创建应用,勾选 ScienceDirect Article Retrieval
  2. 配置 Key:scansci_pdf_elsevier_setup(MCP 会打开浏览器引导)或 scansci_pdf_config(key="elsevier_api_key", value="...")

WebVPN(高校代理)

1. scansci_pdf_schools(action="search", query="北京")  → 搜你的学校
2. scansci_pdf_schools(action="set", school="你的学校")
3. scansci_pdf_login(kind="webvpn")                    → 浏览器完成 CAS 认证
4. scansci_pdf_channel_status(kind="webvpn_test")      → 确认连接正常

支持 100+ 所中国高校,命令行等价:scansci-pdf schools 北京 / scansci-pdf setup 北京航空航天大学

CARSI(出版商联邦认证)

1. scansci_pdf_config(key="carsi_enabled", value="true")
2. scansci_pdf_config(key="carsi_idp_name", value="你的学校名称")
3. scansci_pdf_login(kind="carsi", publisher="sciencedirect")

支持 sciencedirect、springer、wiley、ieee、tandfonline、nature 等。

EZProxy(图书馆代理)

1. scansci_pdf_config(key="ezproxy_enabled", value="true")
2. scansci_pdf_config(key="ezproxy_login_url", value="https://libproxy.你的学校.edu.cn/login?url={url}")
3. scansci_pdf_login(kind="ezproxy")
支持的出版商路由表(19 家,自动生成)
策略DOI 前缀域名
ACM10.1145/dl.acm.org
ACS10.1021/pubs.acs.org
AIP10.1063/pubs.aip.org
APS10.1103/journals.aps.org
ASCE10.1061/ascelibrary.org
Copernicus10.5194/copernicus.org
Elsevier10.1016/, 10.1016/j. 等 18 个sciencedirect.com
Generic
IEEE10.1109/ieeexplore.ieee.org
IOP10.1088/iopscience.iop.org
Nature10.1038/nature.com
Oxford10.1093/academic.oup.com
Royal Society10.1098/royalsocietypublishing.org
RSC10.1039/pubs.rsc.org
SAGE10.1177/journals.sagepub.com
Science10.1126/science.org
Springer10.1007/, 10.1023/link.springer.com
Tandfonline10.1080/tandfonline.com
Wiley10.1002/, 10.1111/onlinelibrary.wiley.com

配置与策略

配置参考(完整表)

通过 scansci_pdf_configscansci-pdf config-cmd 修改:

配置项默认值说明
output_dir~/.scansci-pdf/papersPDF 保存目录
auto_renametrue自动按作者/标题重命名
download_strategyfastest下载策略
scihub_enabledtrue启用 Sci-Hub/LibGen 类来源
network_proxyHTTP/SOCKS 代理地址
proxy_pool逗号分隔的代理列表;非空时批量下载按代理轮换出口 IP
batch_workers10批量下载并发数(被封 IP 时建议调低到 2)
request_delay_min2.0请求间随机延迟下限(秒)
request_delay_max5.0请求间随机延迟上限(秒)
vpnsci_enabled / instsci_enabledfalse启用 WebVPN
vpnsci_school / instsci_schoolWebVPN 学校名称
carsi_enabledfalse启用 CARSI
carsi_idp_nameCARSI 机构名称
auto_relogintrue机构会话自愈:下载前自动校验 WebVPN 会话,明确过期才弹浏览器重登
cache_ttl_hours168下载缓存 TTL(小时),设 0 禁用
elsevier_api_keyElsevier / ScienceDirect API Key
elsevier_insttokenElsevier institutional token,可选
use_tor_for_scihubfalseSci-Hub 走 Tor
flaresolverr_urlhttp://localhost:8191/v1FlareSolverr 服务地址
browser_headlessfalse浏览器是否无头运行
browser_humanizetrue浏览器人性化操作
下载策略与缓存语义
策略描述
fastest(默认)多数据源并行,最快获胜
oa_first优先开放获取,Sci-Hub 兜底
scihub_only / scihub_first仅用 / 优先 Sci-Hub
legal_only仅使用合法数据源(不含 Sci-Hub/LibGen)
  • 每个输出目录的 .doi_index.json 记录 {file, source, strategy, ts};超过 cache_ttl_hours 视为过期自动重下。
  • 显式策略与缓存记录的策略不符时视为未命中重新下载,无需手动删缓存。
  • 下载进入机构阶段前自动校验 WebVPN 会话(HTTP 探测重定向),判定过期且 auto_relogin=true 时自动重登;CARSI 自带 24 小时新鲜度校验。
  • 与 ScanSci Find 闭环:find 产出候选 → manifest / batch 下载并写 download_results.jsonscansci-find reconcile 回写候选状态。(Find 系命令需要可选的 scansci-find CLI:pip install scansci-find,未安装时用 search/verify/resolve-oa/build-queue 本地降级链。)
批量调优:代理池与封 IP 停损

自动停损(默认开启):批量任务连续 3 次检测到 IP 被封(ACS 封锁页 / 403 / 429)会自动取消剩余下载,终端提示:

⚠ 已自动停止:连续检测到 IP 被出版商封禁(N 篇返回 ip_blocked),剩余任务已取消。

降低被封概率 —— 让请求像人:

scansci-pdf config-cmd batch_workers 2          # 调低并发(默认 10)
scansci-pdf config-cmd request_delay_min 5      # 拉大随机延迟下限(默认 2)
scansci-pdf config-cmd request_delay_max 12     # 拉大随机延迟上限(默认 5)

代理池轮换(进阶):多个代理轮换出口 IP,每个代理一个独立浏览器上下文,登录一次 cookies 全复用;连续 3 次被封的代理自动剔除:

scansci-pdf config-cmd proxy_pool "socks5://1.1.1.1:1080,http://2.2.2.2:8080"

权衡:同一登录态从多个 IP 并发访问,少数出版商可能视为异常。机构对这种检测敏感的话,保持 proxy_pool 为空即可。

故障排查

现象先做
下载失败scansci-pdf check,会话问题再跑 scansci-pdf session-doctor
Agent 说 Elsevier 需要 insttoken不需要:API key + 校园网出口即可;NOT_ENTITLED=未连校园网或学校未订阅,连网重试或转其他渠道
数据源全红 / 打不开Agent 里调 scansci_pdf_diagnostics(check="network"),给出针对性修复建议
以前能下的站点突然 403 / 弹 Cloudflare大概率 cloakbrowser 过旧:pip install -U cloakbrowserscansci-pdf browser-doctor 会标出 outdated)
WebVPN / CARSI 登录失败pip install "scansci-pdf[cloakbrowser,instsci]",在可见浏览器完成登录后重试
Sci-Hub 连不上内嵌 Tor:scansci_pdf_tor(action="start", use_bridges=true),或配置 network_proxy
下载速度慢配置 Elsevier API Key;调 batch_workers;数据源延迟用 scansci_pdf_diagnostics(check="health") 查看
ACS 提示 IP Address Blocked 怎么办

批量下载 ACS(pubs.acs.org)等出版商时可能遇到整页报错:

IP Address Blocked — Your IP address has been blocked automatically due to unusual behavior.

这是出版商的自动反爬。机构出口 IP(如校园网)是共享的,一个人触发就可能让整段 IP 被封。

立即解除(封禁在出版商侧,代码改不了):

  • 邮件 ipblock@acs.org 申诉,附上被封 IP,通常 1–3 个工作日解封
  • 换出口 IP(代理 / 手机热点)可绕过,但会失去机构订阅授权,只能下 OA 论文
  • 部分封锁会在 24–48 小时后自动解除

预防:见上方「批量调优」折叠块 —— 调低并发、拉大延迟、启用代理池。

工作原理:五层竞速

下载一篇论文时,ScanSci PDF 同时启动多个数据源,按优先级分层竞速,第一个成功立即返回:

Tier 1 (4s)  ─ 出版商直链(OA/机构访问)
Tier 2 (5s)  ─ OpenAlex / Unpaywall / DOAJ
Tier 3 (8s)  ─ EuropePMC / CORE / PMC / arXiv
Tier 4 (25s) ─ LibGen / Sci-Hub(带 FlareSolverr 绕过)
Tier 5 (20s) ─ WebVPN / CARSI 机构代理

架构说明:公开层(.py 源码、配置、文档)Apache 2.0;_core/*.pyx(Cython 源码)为专有层不公开;PyPI 安装自带编译二进制(.pyd),GitHub 克隆使用纯 Python 回退实现(功能相同,性能略低)。

交流群 / Community

扫码加入微信交流群,一起聊 AI for Science —— 偏 AI 应用与科研工具,也欢迎讨论 ScanSci PDF 的用法、bug 和需求。

微信群二维码
微信交流群 / WeChat Group
群码 7 天有效,过期会更新
群主微信
加群主微信 / Contact
群码失效?扫码备注 scansci 拉你进群

群聊方向

  • AI 在科研场景的落地与工具链
  • 论文检索、下载、阅读、整理的工作流
  • ScanSci PDF 使用问题与改进建议

二维码过期会更新;着急进群可直接加群主微信。

更偏好异步交流?欢迎直接在 IssuesDiscussions 区开贴。

赞助者

qwlei328-maker jingqingqiu1 minqifeng

致谢

本项目在开发过程中参考和借鉴了以下开源项目:

感谢以上项目作者的开源贡献。

许可证

Apache License 2.0

例外:src/scansci_pdf/_core/ 中的 Cython 编译扩展(.pyd/.so)为预编译二进制,仅通过 PyPI 分发。其 Cython 源码(.pyx)为专有代码,不包含在本仓库中。

Star History

Star History Chart

手绘星标曲线,每日由仓库自建的 Action 自动更新——数据与图表都在本仓库内,不依赖任何第三方服务。

关于 About

No description, website, or topics provided.

语言 Languages

Python98.5%
HTML0.9%
PowerShell0.4%
Shell0.1%
Dockerfile0.0%

提交活跃度 Commit Activity

代码提交热力图
过去 52 周的开发活跃度
205
Total Commits
峰值: 69次/周
Less
More

核心贡献者 Contributors