内容
# 学术搜索工具 ScholarFetch

ScholarFetch 是一个多引擎的学术研究环境,用于:
- 以终端为中心的文献探索
- 基于 MCP 的代理工作流
- 构建精选的阅读列表和可导出的研究语料库
它结合了:
- 一个丰富的交互式 CLI 界面
- 一个经典的 MCP 服务器(stdio)
- 一个 FastMCP 服务器(`stdio`、`sse`、`streamable-http`)
核心思想很简单:从关键词、DOI 或作者开始,遍历论文和参考文献,检查摘要和全文,保存重要内容,然后导出一个紧凑的语料库用于综合分析。
## ScholarFetch 功能
- 并行搜索多个学术引擎
- 解析模糊的作者身份并扩展作者论文列表
- 将参考文献作为一流的研究节点遍历
- 检索摘要和机器可读的全文(如果可用)
- 在交互式研究会话期间跟踪保存的论文集
- 导出引用、摘要、BibTeX 或全文语料库
- 向 MCP 代理公开相同的研究工作流
- 在一个 MCP 会话中维护有状态的保存论文集合
## 引擎
- 爱思唯尔(Scopus / Abstract / Article 检索)
- OpenAlex
- Crossref
- arXiv
- 欧洲 PMC
- 施普林格自然(元数据 + 开放访问)
- Semantic Scholar(DOI 丰富路径)
## 安装
```bash
git clone https://github.com/laibniz/scholarfetch.git
cd scholarfetch
python3 -m venv .venv
source .venv/bin/activate
pip install -e .
scholarfetch
```
控制台脚本:
- `scholarfetch`
- `scholarfetch-mcp`
- `scholarfetch-fastmcp`
替代方案:
```bash
python3 scholarfetch.py
```
## 凭证
ScholarFetch 从环境中加载提供商凭证到服务器端/客户端。
默认环境文件:
- `.scholarfetch.env`
典型变量:
```bash
ELSEVIER_API_KEY=...
ELSEVIER_INSTTOKEN=...
SPRINGER_META_API_KEY=...
SPRINGER_OPENACCESS_API_KEY=...
```
注意:
- `ELSEVIER_INSTTOKEN` 是可选的
- 提供商的权限和速率限制仍然适用
- MCP 工具不接受工具参数中的 API 密钥
## CLI 研究工作流
ScholarFetch CLI 设计用于研究遍历。
典型流程:
1. 从主题、DOI 或作者开始。
2. 检查论文。
3. 阅读摘要或全文。
4. 扩展参考文献。
5. 跳转到相关作者。
6. 保存有希望的论文。
7. 导出语料库用于下游工作。
示例:
```text
/search graph neural networks
/author Albert Einstein
/papers 1 has:abstract
/article 1
/refs 1
/saved
/export fulltext dummy corpus.txt
```
## CLI 功能
- 具有树形导航的交互式选择器
- 当前研究位置的导航条
- `OPEN`、`ABSTRACT`、`TEXT`、`REFS` 和 `AUTHOR` 的操作栏
- `Backspace` 返回父节点
- `Esc` 返回提示符
- `S` 从论文列表或参考文献列表中保存论文
- `X` 从保存的列表中删除
- 现在,论文的 `AUTHOR` 操作允许您选择:
- 单个作者
- `所有作者`
- 参考文献列表的行为类似于论文列表:
- `open`
- `abstract`
- `text`
- `refs`
- `author`
- 自动的论文可用性提示:
- 摘要可用性
- 全文可用性
- 昂贵转换的进度反馈
- 可中断的参考文献预览构建,保留部分结果
## 核心 CLI 命令
- `/search <关键词|doi|人名>`
- `/author <姓名>`
- `/papers <作者姓名|索引> [过滤器]`
- `/doi <doi>`
- `/open <索引>`
- `/abstract <doi|索引>`
- `/article <doi|索引>`
- `/refs <doi|索引>`
- `/ref <索引>`
- `/saved`
- `/export [格式样式 路径 ...]`
- `/import [路径]`
- `/pick [模式]`
- `/config`
- `/engines`
- `/help`
## 论文过滤器
与 `/papers` 一起使用:
- `year>=YYYY`、`year<=YYYY`、`year=YYYY`
- `has:abstract`、`has:doi`、`has:pdf`、`has:fulltext`
- `venue:<文本>`、`title:<文本>`、`doi:<文本>`
示例:
```text
/papers 1 year>=2020 has:abstract
/papers 1 has:fulltext
/papers andrea de mauro venue:marketing
```
## 导出模式
ScholarFetch 支持从保存的论文集中导出四种模式。
- `bib`
- 用于引用管理器和书目工具的 BibTeX
- `citations`
- 仅引用导出,格式为 `harvard`、`apa` 或 `ieee`
- `abstracts`
- 每篇保存论文的元数据 + 摘要
- `fulltext`
- 元数据 + 摘要 + 可用的全文
- 可选包含参考文献
这使得 ScholarFetch 成为下游综合代理的语料库构建器。
## MCP 服务器
ScholarFetch 通过 MCP 公开相同的研究模型。
模式:
- 经典 MCP(stdio):`python3 scholarfetch_mcp.py`
- FastMCP stdio:`python3 scholarfetch_fastmcp.py --transport stdio`
- FastMCP SSE:`python3 scholarfetch_fastmcp.py --transport sse --host 127.0.0.1 --port 8000`
- FastMCP 流式 HTTP:`python3 scholarfetch_fastmcp.py --transport streamable-http --host 127.0.0.1 --port 8000 --http-path /mcp`
验证:
```bash
python3 scholarfetch_mcp.py --self-test
python3 scholarfetch_fastmcp.py --self-test
```
公共演示端点:
- Web UI:https://huggingface.co/spaces/Laibniz/ScholarFetch_Web
- 公共 MCP 端点:https://laibniz-scholarfetch-web.hf.space/mcp/
- MCP 注册列表:`io.github.laibniz/scholarfetch`
## MCP 研究模型
MCP 服务器设计用于代理工作流,而不仅仅是一次性调用。
代理可以:
1. 搜索论文
2. 解析作者
3. 扩展到作者论文
4. 读取摘要/全文
5. 扩展参考文献
6. 将有希望的论文保存到命名的内存阅读列表中
7. 导出阅读列表为:
- 引用
- 摘要
- BibTeX
- 全文语料库
这让代理可以在一个 MCP 会话中构建一个聚焦的研究集,然后将导出工件交给另一个综合步骤。
参见 [MCP_SERVER.md](./MCP_SERVER.md) 了解详细工具模型。
## 仓库文件
- `scholarfetch.py`: CLI 入口点
- `scholarfetch_cli.py`: 核心 CLI + 检索逻辑
- `scholarfetch_mcp.py`: 经典 MCP 服务器
- `scholarfetch_fastmcp.py`: FastMCP 服务器
- `MCP_SERVER.md`: MCP 使用指南
- `AGENTS.md`: 面向代理的工作流指南
- `SKILL.md`: 结构化研究技能指南
- `SKILLS.md`: 面向代理的技能文档索引
- `CONTRIBUTING.md`: 贡献者笔记
## 面向代理
如果您从兼容 MCP 的系统运行 ScholarFetch,请阅读:
- [AGENTS.md](./AGENTS.md)
- [SKILL.md](./SKILL.md)
- [SKILLS.md](./SKILLS.md)
这些文档解释了如何使用 ScholarFetch 作为文献研究环境,而不是作为一个扁平的搜索 API。
## 贡献
参见 [CONTRIBUTING.md](./CONTRIBUTING.md)。
## 安全
参见 [SECURITY.md](./SECURITY.md)。
## 许可证
MIT 许可证。参见 [LICENSE](./LICENSE)。