paper-fetch-safe
README.md
# paper-fetch-mcp-safe
[中文](README.md) · [English](README_EN.md)
[](https://github.com/yhwucn12-cell/paper-fetch-mcp-safe/actions/workflows/tests.yml)
[](https://www.python.org/)
[](LICENSE)
一个带**版权与许可边界**的论文检索、解析和开放 PDF 下载 MCP 服务。
- 搜索 OpenAlex、arXiv、PubMed / Europe PMC
- 解析 DOI、PMID、PMCID、arXiv、OpenReview、ACL、PMLR、HAL、Zenodo、OSF 标识符
- 下载前检查开放许可或 OA 依据;默认拒绝无法确认许可的候选
- 校验 PDF、计算 SHA-256,并生成可审计 JSON sidecar
- 支持单篇、按标题和最多 500 篇批量下载
> 默认不启用 Sci-Hub。完整版权策略与限制见 [COMPLIANCE.md](COMPLIANCE.md)。
## 快速开始
### Windows PowerShell
```powershell
git clone https://github.com/yhwucn12-cell/paper-fetch-mcp-safe.git
cd paper-fetch-mcp-safe
python -m venv .venv
.venv\Scripts\python.exe -m pip install -e .
Copy-Item paper-fetch.toml.example paper-fetch.toml
```
### macOS / Linux
```bash
git clone https://github.com/yhwucn12-cell/paper-fetch-mcp-safe.git
cd paper-fetch-mcp-safe
python3 -m venv .venv
source .venv/bin/activate
pip install -e .
cp paper-fetch.toml.example paper-fetch.toml
```
编辑 `paper-fetch.toml`,至少填写联系邮箱:
```toml
mailto = "you@example.org"
license_policy = "open"
allow_scihub = false
# download_directory = "downloads"
```
启动服务:
```powershell
.venv\Scripts\python.exe -m paper_fetch_mcp_safe.server --config paper-fetch.toml
```
macOS / Linux 使用:
```bash
.venv/bin/python -m paper_fetch_mcp_safe.server --config paper-fetch.toml
```
## MCP 客户端配置
将下列配置加入支持 stdio MCP 的客户端,并替换为实际绝对路径:
```json
{
"mcpServers": {
"paper-fetch-safe": {
"command": "D:/path/to/paper-fetch-mcp-safe/.venv/Scripts/python.exe",
"args": [
"-m",
"paper_fetch_mcp_safe.server",
"--config",
"D:/path/to/paper-fetch-mcp-safe/paper-fetch.toml"
]
}
}
}
```
服务提供两个工具:
| 工具 | 用途 |
|---|---|
| `execute_paper_request` | 搜索、解析、单篇下载和批量下载 |
| `get_server_status` | 查看 provider、限速状态和当前许可策略 |
## 配置
| 配置项 | 默认值 | 说明 |
|---|---:|---|
| `mailto` | 必填 | 提交给学术 API 的联系邮箱 |
| `download_directory` | 未设置 | 默认下载目录;也可在请求中传入 `directory` |
| `license_policy` | `open` | `strict`、`open` 或 `any` |
| `allow_scihub` | `false` | 启用 gray 来源;启动时会警告 |
| `openalex_api_key` | 空 | 可选 OpenAlex API key |
| `s2_api_key` | 空 | 可选 Semantic Scholar API key |
| `core_api_key` | 空 | 可选 CORE API key;未配置时自动跳过 CORE |
| `timeout_seconds` | `45.0` | HTTP 超时时间 |
| `host_rates` | 内置值 | 按主机设置请求速率 |
许可策略:
| 策略 | 接受范围 |
|---|---|
| `strict` | 明确开放许可或可信开放来源;始终拒绝 gray |
| `open` | 默认;在 `strict` 基础上接受 provider 的 OA 标记并附警告 |
| `any` | 接受无许可证据的非 gray 候选;仅在自备合法依据时使用 |
## 用法
`execute_paper_request` 接受结构化参数。`accepted=true` 只表示请求已执行,实际结果位于 `result`。
### 搜索论文
```json
{
"action": "search",
"query": "water oxidation catalyst",
"source": "auto",
"limit": 5,
"year_min": 2022
}
```
### 检查开放 PDF
```json
{
"action": "resolve",
"identifiers": ["10.1021/jacs.4c00478"],
"verbosity": "full"
}
```
### 下载单篇论文
```json
{
"action": "download",
"identifiers": ["arxiv:1706.03762"],
"directory": "D:/papers"
}
```
也可按准确标题下载:
```json
{
"action": "download",
"query": "A Precisely Specified Article Title",
"directory": "D:/papers"
}
```
唯一准确匹配会直接下载;无法唯一匹配时返回 `needs_review=true`。
### 批量下载
```json
{
"action": "batch",
"identifiers": [
"10.1021/jacs.4c00478",
"PMC10009416",
"arxiv:1706.03762"
],
"directory": "D:/papers",
"concurrency": 4
}
```
批量请求支持 1–500 个标识符。默认返回摘要,逐项结果写入下载目录下的 `batch-results-*.json`。
## 下载结果
每个成功下载的 PDF 都会生成同名 `.pdf.json` sidecar,包含:
- 来源 provider、原始 URL 和文献标识符
- 原始及归一化许可、许可类别和判定依据
- 当前策略版本、PDF 版本、时间戳和 SHA-256
常见错误:
| 错误码 | 含义 |
|---|---|
| `PAYWALL_NO_OA` | 未找到开放 PDF 候选 |
| `LICENSE_RESTRICTED` | 找到链接,但没有足够许可依据或被策略拒绝 |
| `PROVIDER_UNAVAILABLE` | provider 请求失败,结论不完整 |
| `RATE_LIMITED` | provider 限流;可能包含 `retry_after` |
| `DOWNLOAD_CORRUPT` | 响应不是有效 PDF 或超过 200 MiB |
## 测试
```powershell
.venv\Scripts\python.exe -m pytest -q
.venv\Scripts\python.exe -m pytest -q -m local_subprocess
.venv\Scripts\python.exe scripts\paper_download_test.py audit
```
实时 provider 测试:
```powershell
.venv\Scripts\python.exe -m pytest -q -m network
.venv\Scripts\python.exe scripts\paper_download_test.py search resolve download batch
```
## 更多文档
- [版权与许可边界](COMPLIANCE.md)
- [相对原项目的变更](NOTICE)
- [MCP skill](skills/paper-fetch-safe/SKILL.md)
- [来源和限速](skills/paper-fetch-safe/references/channels.md)
- [错误处理](skills/paper-fetch-safe/references/errors.md)
## 许可证
代码以 [MIT License](LICENSE) 发布。第三方论文与 API 仍受各自许可和服务条款约束;本软件不构成法律意见。
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo recent community issues