# scansci-pdf
**Repository Path**: glorythesky/scansci-pdf
## Basic Information
- **Project Name**: scansci-pdf
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-06-07
- **Last Updated**: 2026-06-07
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# ScanSci PDF
[](https://pypi.org/project/scansci-pdf/)
[](https://pypi.org/project/scansci-pdf/)
[](LICENSE)
[](https://modelcontextprotocol.io)
> 学术论文下载 MCP 服务器 — 13+ 数据源、100+ 高校 WebVPN、并行竞速下载引擎
---
## 为什么选择 ScanSci PDF?
- **一个工具,13+ 数据源** — arXiv、Sci-Hub、LibGen、Unpaywall、OpenAlex、Semantic Scholar、DOAJ、EuropePMC、CORE、PMC、出版商直链等,自动选择最快可用源
- **100+ 高校 WebVPN** — 通过中国高校机构代理访问付费论文全文,CAS 认证,密码不经过工具
- **CARSI 联邦认证** — 支持 ScienceDirect、Springer、Wiley、IEEE、Taylor & Francis、Nature 等出版商的机构登录
- **Cloudflare 绕过** — CloakBrowser 反检测浏览器(Chromium 指纹修补)+ curl_cffi TLS 指纹模拟 + FlareSolverr 浏览器引擎
- **并行竞速引擎** — 多数据源同时尝试,首个成功立即返回,无需逐个等待
- **智能列表解析** — 支持 APA 引文、BibTeX、DOI 列表,自动补全缺失 DOI 后批量下载
- **自动重命名** — PDF 自动重命名为 `作者年份_标题.pdf` 格式
- **引文导出** — 一键获取 BibTeX、RIS、EndNote 格式引文
- **网络诊断** — 自动检测 DNS 封锁、代理配置、Tor 连接问题,给出针对性修复建议
---
## 前置准备(可选但推荐)
### Elsevier API Key — ScienceDirect 直接下载
ScienceDirect/Elsevier 是最大的学术出版商。配置 API Key 后可直接通过 API 下载 PDF,**无需浏览器登录**,速度从 15-30 秒降到 1-2 秒。
**申请步骤:**
1. 访问 [Elsevier Developer Portal](https://dev.elsevier.com/) 注册账号(已有 Elsevier 账号可直接登录)
2. 点击 **"My API Key"** → 创建新应用 → 选择 **"ScienceDirect Article Retrieval"** API
3. 复制生成的 API Key,运行配置命令:
```bash
# 方式一:通过 MCP 工具(推荐,会自动打开浏览器引导)
scansci_pdf_elsevier_setup
# 方式二:直接配置
scansci_pdf_config_set(key="elsevier_api_key", value="你的APIKey")
```
> **提示:** 申请完全免费,无需机构邮箱,个人邮箱即可。配置后所有 Elsevier/ScienceDirect/Cell Press 论文自动走 API 快速通道。
---
## 快速开始
### 安装
```bash
pip install scansci-pdf
```
### MCP 配置
在任何支持 MCP 的 Agent 中添加以下配置即可使用:
```json
{
"mcpServers": {
"scansci-pdf": {
"command": "scansci-pdf",
"args": ["run"]
}
}
}
```
支持 MCP 的 Agent 和客户端:
| 客户端 | 说明 |
|--------|------|
| Claude Desktop | Anthropic 官方桌面客户端 |
| Claude Code | Anthropic 命令行 Agent |
| Cursor | AI 代码编辑器 |
| Windsurf | AI 代码编辑器 |
| Cline | VS Code 插件 Agent |
| Cherry Studio | 多模型桌面客户端 |
| OpenClaw | MCP 客户端 |
| 任何 MCP 兼容客户端 | MCP 是开放协议,任何实现均可接入 |
HTTP 模式(远程/Web 调用)
适用于远程部署或不支持 stdio 的场景:
```bash
scansci-pdf run --mode streamable_http --host 0.0.0.0 --port 8000
```
### 检查环境
```bash
scansci-pdf check
```
---
## 工作原理
下载一篇论文时,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 机构代理
```
首个成功下载的源立即返回,其余自动取消。自适应评分系统会根据历史成功率和延迟动态调整源的优先级。
---
## MCP 工具
### 论文下载
| 工具 | 描述 |
|------|------|
| `scansci_pdf_smart_download` | **推荐** 零配置下载,自动尝试所有源 + Tor |
| `scansci_pdf_download` | 下载单篇论文(完整参数控制) |
| `scansci_pdf_batch_download` | 批量下载多篇论文 |
| `scansci_pdf_resolve_and_download` | 解析列表 → 补全 DOI → 批量下载 |
### 付费墙登录
| 工具 | 描述 |
|------|------|
| `scansci_pdf_login` | **推荐** 统一登录:输入 DOI 自动识别出版商并打开浏览器 SSO |
| `scansci_pdf_camofox_login` | camofox 持久化浏览器登录 |
| `scansci_pdf_camofox_status` | 检查 camofox-browser 状态 |
| `scansci_pdf_camofox_import_cookies` | 导入 Netscape cookie 到 camofox |
| `scansci_pdf_import_browser_cookies` | 打开浏览器捕获登录 cookie |
### 搜索与解析
| 工具 | 描述 |
|------|------|
| `scansci_pdf_search` | 按关键词搜索论文(OpenAlex) |
| `scansci_pdf_parse_list` | 解析 APA/BibTeX/DOI 列表文件 |
### 引文管理
| 工具 | 描述 |
|------|------|
| `scansci_pdf_citation` | 获取论文引文(BibTeX/RIS/EndNote) |
| `scansci_pdf_import_bib` | 导入 .bib 文件并下载全部论文 |
### 机构代理(WebVPN / CARSI / EZProxy)
| 工具 | 描述 |
|------|------|
| `scansci_pdf_vpnsci_set_school` | 设置 WebVPN 学校 |
| `scansci_pdf_vpnsci_login` | WebVPN 浏览器 CAS 认证 |
| `scansci_pdf_vpnsci_status` | WebVPN 登录状态 |
| `scansci_pdf_vpnsci_schools` | 搜索支持的大学 |
| `scansci_pdf_vpnsci_test` | 测试 WebVPN 连接性 |
| `scansci_pdf_carsi_login` | CARSI 出版商机构登录 |
| `scansci_pdf_carsi_status` | CARSI 状态与 cookie 检查 |
| `scansci_pdf_ezproxy_login` | EZProxy 图书馆代理登录 |
| `scansci_pdf_ezproxy_status` | EZProxy 状态检查 |
### 系统管理
| 工具 | 描述 |
|------|------|
| `scansci_pdf_auto_setup` | 一键环境检测与自动配置 |
| `scansci_pdf_setup_check` | 检测系统环境并给出安装建议 |
| `scansci_pdf_health_check` | 检查所有数据源可用性与延迟 |
| `scansci_pdf_network_diagnose` | 网络诊断 + 修复建议 |
| `scansci_pdf_source_scores` | 各数据源历史成功率排名 |
| `scansci_pdf_config_get` / `config_set` | 查看/修改配置 |
| `scansci_pdf_cache_clear` | 清除下载缓存 |
### Tor 管理
| 工具 | 描述 |
|------|------|
| `scansci_pdf_tor_install` | 自动下载安装 Tor Expert Bundle |
| `scansci_pdf_tor_start` | 启动内嵌 Tor SOCKS5 代理 |
| `scansci_pdf_tor_stop` | 停止 Tor 代理 |
---
## 下载策略
| 策略 | 描述 |
|------|------|
| `fastest`(默认) | 多数据源并行,最快获胜 |
| `oa_first` | 优先开放获取,Sci-Hub 兜底 |
| `scihub_only` | 仅使用 Sci-Hub |
| `legal_only` | 仅使用合法数据源(不含 Sci-Hub/LibGen) |
---
## 付费墙:机构登录
### 统一登录(推荐)
只需一行,自动识别出版商、打开浏览器、引导完成 SSO 登录,cookie 跨所有下载复用:
```
scansci_pdf_login(identifier="10.1126/science.aec6396")
```
`identifier` 可以是 DOI 或出版商名(`elsevier`, `wiley`, `nature`, `springer`, `ieee`, `science`, `tandfonline`, `acs`, `rsc`, `aip`, `aps`, `iop`, `oxford`, `acm`)。
### WebVPN(高校代理)
通过中国高校机构代理访问论文全文:
```
1. scansci_pdf_vpnsci_schools(query="北京") → 搜索学校
2. scansci_pdf_vpnsci_set_school(school="你的学校")
3. scansci_pdf_vpnsci_login → 浏览器 CAS 认证
4. scansci_pdf_vpnsci_test → 确认连接正常
```
支持 100+ 所高校。
### CARSI(出版商联邦认证)
直接通过出版商机构登录页面认证,无需 WebVPN 中转:
```
1. scansci_pdf_config_set(key="carsi_enabled", value="true")
2. scansci_pdf_config_set(key="carsi_idp_name", value="你的学校名称")
3. scansci_pdf_carsi_login(publisher="sciencedirect")
```
支持:sciencedirect, springer, wiley, ieee, tandfonline, nature
### EZProxy(图书馆代理)
通过学校图书馆 EZProxy 服务访问:
```
1. scansci_pdf_config_set(key="ezproxy_enabled", value="true")
2. scansci_pdf_config_set(key="ezproxy_login_url", value="https://libproxy.你的学校.edu.cn/login?url={url}")
3. scansci_pdf_ezproxy_login
```
---
## 配置参考
通过 `scansci_pdf_config_set` 修改:
| 配置项 | 默认值 | 说明 |
|--------|--------|------|
| `scihub_enabled` | `true` | 启用 Sci-Hub |
| `download_strategy` | `fastest` | 下载策略 |
| `output_dir` | `~/.scansci-pdf/papers` | PDF 输出目录 |
| `auto_rename` | `true` | 自动重命名 PDF |
| `network_proxy` | (空) | HTTP/SOCKS 代理地址 |
| `batch_workers` | `10` | 批量下载并发数 |
| `vpnsci_enabled` | `false` | 启用 WebVPN |
| `vpnsci_school` | (空) | WebVPN 学校名称 |
| `carsi_enabled` | `false` | 启用 CARSI 联邦认证 |
| `carsi_idp_name` | (空) | CARSI 机构名称 |
| `flaresolverr_url` | `http://localhost:8191/v1` | FlareSolverr 服务地址 |
| `use_tor_for_scihub` | `false` | Sci-Hub 使用 Tor |
---
## 高级功能(可选)
以下功能为可选项,适用于特定网络环境或高级需求。
### Docker 部署
适用于需要将 scansci-pdf 作为长期运行服务的场景,或不想在本机安装 Python 环境的用户。Docker 容器内置 MCP 服务器和 Tor 代理,数据通过 Docker 卷持久化。
```bash
docker compose up -d
```
| 服务 | 说明 | 端口 |
|------|------|------|
| `scansci-pdf` | MCP 服务器 | 8000 |
| `tor` | Tor SOCKS5 代理 | 1080 |
Docker 配置方式:
```json
{
"mcpServers": {
"scansci-pdf": {
"command": "docker",
"args": ["compose", "-f", "path/to/docker-compose.yml", "run", "--rm", "scansci-pdf"]
}
}
}
```
### Tor 匿名代理
Tor 用于在 Sci-Hub、LibGen 等网站被网络封锁的地区匿名访问。如果你的网络可以直连 Sci-Hub,则不需要 Tor。内嵌 Tor 会自动下载 Tor Expert Bundle(约 30MB),无需 Docker 或系统级安装。
```bash
# 首次使用:自动下载安装 Tor
scansci_pdf_tor_install
# 启动 Tor SOCKS5 代理
scansci_pdf_tor_start
# 如果 Tor 本身也被封锁(连接超时),启用 obfs4 桥接绕过
scansci_pdf_tor_start(use_bridges=true)
# 下载时通过 Tor 访问
scansci_pdf_download(identifier="10.1038/nature12373", use_tor=true)
```
二进制文件存储在 `~/.scansci-pdf/tor/`,不污染系统环境。
### FlareSolverr(Cloudflare 绕过)
当 Sci-Hub、LibGen 等站点触发 Cloudflare 防护时,FlareSolverr 可以自动绕过。需要 Docker 运行 FlareSolverr 服务:
```bash
docker run -d -p 8191:8191 ghcr.io/flaresolverr/flaresolverr
```
ScanSci PDF 会自动检测 Cloudflare 并回退到 FlareSolverr,无需手动配置。如果已安装 curl_cffi,会优先使用 TLS 指纹模拟(更快,无需 Docker)。
---
## 故障排查
**Sci-Hub 下载失败** — 运行 `scansci_pdf_health_check(detailed=true)` 查看数据源状态。域名轮换自动处理。如果遇到 Cloudflare 防护,安装 FlareSolverr 或 curl_cffi。
**Tor 连接失败** — 确认 Tor 运行在 `socks5h://127.0.0.1:1080`。如 Tor 也被封锁,使用 `scansci_pdf_tor_start(use_bridges=true)` 启用桥接。
**WebVPN 登录失败** — 需要 CloakBrowser(自动安装)。登录在你的浏览器中完成,密码不经过本工具。
**下载速度慢** — 运行 `scansci_pdf_health_check(detailed=true)` 检查数据源延迟。如 Sci-Hub 在你的网络被封锁,尝试 `legal_only` 策略或配置代理。
**网络问题** — 运行 `scansci_pdf_network_diagnose` 获取全面的连接诊断报告和针对性修复建议。
---
## 架构说明
本项目采用分层架构:
| 层级 | 内容 | 许可 |
|------|------|------|
| 公开层 | 所有 `.py` 源码、配置、文档 | Apache 2.0 |
| 保护层 | `_core/*.pyx`(Cython 源码) | 专有,不公开 |
| 分发层 | `_core/*.pyd`(编译二进制) | 随 PyPI 包分发 |
从 GitHub 克隆的用户使用纯 Python 回退实现(功能相同,性能略低)。从 PyPI 安装的用户自动获得编译版本。
---
## 赞助者
---
## 致谢
本项目在开发过程中参考和借鉴了以下开源项目:
- **[FlareSolverr](https://github.com/FlareSolverr/FlareSolverr)** — 早期反 bot 绕过架构设计
- **[ref-downloader](https://github.com/ltczding-gif/ref-downloader)** — Publisher 专用下载策略(Elsevier crasolve 检测、Wiley PDFDirect、AIP loading page 等)
- **[paper-fetch-skill](https://github.com/Dictation354/paper-fetch-skill)** — 论文获取 Agent Skill 设计
- **[paper-fetcher](https://github.com/fermionoid/paper-fetcher)** — 论文下载流程参考
- **[cloakbrowser](https://github.com/CloakHQ/CloakBrowser)** — Chromium stealth 浏览器引擎
感谢以上项目作者的开源贡献。
---
## 许可证
[Apache License 2.0](LICENSE)
例外:`src/scansci_pdf/_core/` 中的 Cython 编译扩展(`.pyd`/`.so`)为预编译二进制,仅通过 PyPI 分发。其 Cython 源码(`.pyx`)为专有代码,不包含在本仓库中。