纸张清理机
用于获取学术论文全文的MCP服务器和CLI工具。设计用于作为 克劳德代码 MCP工具,支持人工智能辅助的文献综述和研究工作流程。
运作原理
paper fetcher使用三层策略来最大限度地访问全文论文:
Layer 1: Open Access (Unpaywall + arXiv) ← free, no login required
Layer 2: Institutional proxy (EZproxy) ← requires university login
Layer 3: Metadata only (Semantic Scholar) ← always available对于每个论文请求,它首先尝试开放获取源代码。如果纸张是付费墙,它将退回到您机构的EZproxy。元数据和搜索始终可以通过语义学者获得。
特性
- MCP服务器 -直接与Claude Code集成,用于人工智能驱动的研究
- 三个接入层 -开放获取、机构EZproxy和元数据回退
- 多源搜索 -通过语义学者API搜索论文
- 全文提取 -从HTML和PDF源中提取文本
- 发布服务器适配器 -针对Nature、ACS、Elsevier、Wiley等进行优化提取
- 智能缓存 -在本地缓存提取的论文,以避免冗余请求
- 速率限制 -内置礼貌请求延迟
- CLI接口 -用于批处理操作的独立命令行工具
安装
# Clone the repository
git clone https://github.com/YOUR_USERNAME/paper-fetcher.git
cd paper-fetcher
# Install in development mode
pip install -e .使用Claude代码进行设置
在Claude Code中将纸张提取器注册为MCP服务器:
claude mcp add paper-fetcher -- paper-fetcher-mcp重启Claude Code后,您可以让Claude直接搜索和获取论文:
“搜索最近关于钙钛矿太阳能电池的论文” “获取DOI 10.1038/s41566-024-01234-5的全文”
CLI使用情况
登录EZproxy(机构访问)
# Opens a browser for manual login. Cookies are saved for future use.
paper-fetcher login
# Force re-login even if session appears valid
paper-fetcher login --force搜索论文
# Basic search
paper-fetcher search "organic photovoltaics stability"
# Limit results and filter by year
paper-fetcher search "perovskite solar cells" --limit 20 --year 2022-2025
# Search and fetch full texts
paper-fetcher search "silver nanowire transparent electrode" --fetch取一张纸
# By DOI
paper-fetcher fetch "10.1038/s41566-024-01234-5"
# By URL
paper-fetcher fetch "https://www.nature.com/articles/s41566-024-01234-5"
# Output as markdown
paper-fetcher fetch "10.1038/s41566-024-01234-5" --format markdown批量提取
# Create a file with one DOI per line
paper-fetcher batch dois.txt --format markdown --output ./papers配置
# View current config
paper-fetcher config-cmd
# Set email (required for Unpaywall OA detection)
paper-fetcher config-cmd --email your@email.com
# Set output directory
paper-fetcher config-cmd --output-dir ./my-papers配置
配置存储在 ~/.paper-fetcher/config.json 包括:
| 字段 | 描述 | 默认值 |
|---|---|---|
proxy_base | 您所在机构的EZproxy登录URL | http://eproxy.lib.hku.hk/login?url= |
email | Unpaywallneneneba API的电子邮件(OA检测) | "" (通过CLI设置) |
output_dir | 下载PDF的目录 | ~/.paper-fetcher/papers |
cache_dir | 缓存结果目录 | ~/.paper-fetcher/cache |
request_delay_min | 请求之间的最小延迟(秒) | 2.0 |
request_delay_max | 请求之间的最大延迟(秒) | 5.0 |
要与其他机构的EZproxy一起使用,请编辑 ~/.paper-fetcher/config.json:
{
"proxy_base": "http://your-institution-proxy.edu/login?url=",
"email": "your@email.com"
}MCP工具
当用作MCP服务器时,纸张提取器提供了三个工具:
| 工具 | 说明 |
|---|---|
search_papers | 通过语义学者搜索论文(查询、限制、年份范围) |
fetch_paper | 通过DOI或URL(标识符、格式)获取全文 |
get_paper_metadata | 通过DOI获取论文元数据,无需下载全文 |
项目结构
paper-fetcher/
├── paper_fetcher/
│ ├── mcp_server.py # MCP server (3 tools)
│ ├── cli.py # CLI interface (Typer)
│ ├── fetcher.py # Core fetching logic
│ ├── auth.py # EZproxy authentication (Selenium)
│ ├── config.py # Configuration management
│ ├── models.py # Paper data model
│ ├── sources/
│ │ ├── semantic_scholar.py
│ │ ├── unpaywall.py
│ │ └── arxiv.py
│ └── extractors/
│ ├── html_extractor.py
│ ├── pdf_extractor.py
│ └── publisher_adapters/
│ ├── nature.py
│ ├── acs.py
│ ├── elsevier.py
│ ├── wiley.py
│ └── generic.py
├── tests/
├── pyproject.toml
├── LICENSE
└── README.md需求
- Python>=3.10
- Chrome浏览器(用于EZproxy身份验证)
许可证
______________________________________________________________________
中文简介
纸张清理机 是一个学术论文全文获取工具,可作为 Claude Code 的 MCP Server 使用,让 AI 直接帮你搜索和获取论文全文。
核心特性
- 三层获取策略: Open Access (免费) → 机构代理 EZproxy (需登录) → 元数据兜底
- MCP服务器: 注册到 Claude Code 后,直接用自然语言让 AI 搜论文、拉全文
- 多出版商适配: 针对 Nature、ACS、Elsevier、Wiley 等做了专门的内容提取优化
- 本地缓存: 已获取的论文自动缓存,避免重复请求
- 命令行工具: 支持单篇获取、批量获取、搜索等操作
快速开始
# 安装
pip install -e .
# 注册到 Claude Code
claude mcp add paper-fetcher -- paper-fetcher-mcp
# 设置邮箱 (Unpaywall OA 检测需要)
paper-fetcher config-cmd --email your@email.com
# 登录机构代理 (可选,用于获取付费论文)
paper-fetcher login注册后重启 Claude Code,即可直接对话使用:
"帮我搜几篇关于钙钛矿太阳能电池的最新论文" "把这篇 DOI 10.1038/xxx 的全文拉下来"
配置其他机构的 EZproxy
默认配置的是 HKU EZproxy。如需使用其他机构,编辑 ~/.paper-fetcher/config.json:
{
"proxy_base": "http://your-proxy.university.edu/login?url="
}