urschrei/pyzotero · 上手攻略
- 仓库:urschrei/pyzotero
- 链接:https://github.com/urschrei/pyzotero
- 分类:academic-writing · zotero-integration
- 作者:Tom
- 更新:2026-08-16
这是什么
Pyzotero 是 Zotero API 的 Python 客户端,由 Zotero 社区维护,支持对个人库和团体库进行完整的增删改查操作。它提供 Python 库、CLI 工具和 MCP 服务器三种使用形态,适合需要将 Zotero 文献管理自动化接入 AI 工作流的用户。
解决什么问题:Zotero 的 Web API 功能强大但需要手动操作,Pyzotero 让你用 Python 脚本或命令行直接操控 Zotero 库——批量导入文献、按标签筛选、做笔记、同步 PDF 全文搜索,以及通过 MCP 让 LLM 直接访问本地文献库。
快速安装
Python 库安装
# uv(推荐)
uv add pyzotero
# pip
pip install pyzotero
# conda
conda install conda-forge::pyzotero
带 CLI 的安装
uv add "pyzotero[cli]"
pip install "pyzotero[cli]"
带 MCP 服务器的安装
uv add "pyzotero[mcp]"
pip install "pyzotero[mcp]"
# 或作为独立工具安装
uv tool install "pyzotero[mcp]"
不安装直接运行 CLI
uvx --from "pyzotero[cli]" pyzotero search -q "machine learning"
pipx run --spec "pyzotero[cli]" pyzotero search -q "machine learning"
核心用法
初始化与认证
from pyzotero import Zotero
# 获取方法:
# 个人库:https://www.zotero.org/settings/keys → Your userID for use in API calls
# 团体库:打开团体页面,hover 设置链接,URL 中 /groups/ 后的整数即为 ID
# API Key:https://www.zotero.org/settings/keys/new
zot = Zotero(
library_id, # int,个人库 userID 或团体库 ID
library_type, # 'user' 或 'group'
api_key # 你的 Zotero API key
)
# local=True 用于只读访问本地 Zotero(需要 Zotero 7 + 开启远程 API)
items = zot.top(limit=5)
for item in items:
print(f"{item['data']['itemType']} | {item['data']['key']}")
CLI 搜索
# 搜索顶级条目标题和元数据
pyzotero search -q "machine learning"
# 全文搜索(含 PDF 内容)
pyzotero search -q "climate change" --fulltext
# 按条目类型筛选
pyzotero search -q "methodology" --itemtype book --itemtype journalArticle
# 在指定收藏集中搜索
pyzotero search --collection ABC123 -q "test"
# 输出 JSON(机器处理)
pyzotero search -q "climate" --json
# 列出所有收藏集
pyzotero listcollections
# 列出可用条目类型
pyzotero itemtypes
⚠️ 全文搜索注意:
--fulltext搜索 PDF 附件内容时,CLI 会自动检索匹配附件的父级文献条目,返回的是标准书目记录而非原始 PDF。
MCP 服务器(Claude Desktop 集成)
在 Claude Desktop 配置文件 ~/Library/Application Support/Claude/claude_desktop_config.json(macOS)或对应路径添加:
{
"mcpServers": {
"zotero": {
"command": "pyzotero-mcp"
}
}
}
或者不安装,用 uvx 方式:
{
"mcpServers": {
"zotero": {
"command": "uvx",
"args": ["--from", "pyzotero[mcp]", "pyzotero-mcp"]
}
}
}
MCP 工具列表
Zotero 本地库工具:
| 工具 | 说明 |
|---|---|
search |
按查询、类型、收藏集、标签或全文搜索 |
get_item |
按 key 获取单条 Zotero 条目 |
get_children |
获取条目的子项(附件、笔记) |
list_collections |
列出所有收藏集 |
list_tags |
列出所有标签(可按收藏集筛选) |
get_fulltext |
获取 PDF 等附件的全文内容 |
Semantic Scholar 集成工具:
| 工具 | 说明 |
|---|---|
find_related |
用 SPECTER2 嵌入找相似论文 |
get_citations |
找引用了某论文的文献 |
get_references |
找某论文引用的文献 |
search_semantic_scholar |
搜索 Semantic Scholar 论文索引 |
⚠️ Semantic Scholar 工具默认会检查结果是否已在本地图馆中(
check_library=True)。
典型适用场景
- 学术写作自动化:批量导入文献、整理标签、提取 PDF 全文内容供 AI 阅读。
- AI 研究助手:MCP 服务器让 Claude Desktop 直接查询本地 Zotero 库,找相似论文、查引用关系。
- 文献综述构建:用
find_related+get_citations构建论文引用图谱。 - 跨平台同步:通过 API 访问非本地 Zotero 库,适合多设备用户。
- CLI 快速检索:不用打开 Zotero App,在终端直接搜文献标题、作者、标签。
坑与注意
- Zotero API Key 权限:个人库和未公开的团体库需要 API Key;公开团体库可不带 key 访问。
- Zotero 7 本地 API:MCP 和 CLI 的
local=True模式要求 Zotero 7 在设置中开启"Allow other applications on this computer to communicate with Zotero"。 - 全文搜索依赖 PDF 索引:只有 Zotero 中有 PDF 附件且已建立全文索引的文献才能被
--fulltext搜到。 - API 速率限制:Zotero API 有请求频率限制,高频操作建议加延时或用
local=True旁路。 - Pyzotero v1.0 Semver:v1.0 后遵循 Semver,API 变更会升主版本号,升级前注意 changelog。
- MCP CLI 路径:直接运行
pyzotero-mcp需要 PATH 中有对应命令,建议用 uvx 或 pipx 隔离环境。 - Semantic Scholar 工具的 check_library:默认开启,会额外查询本地库,可能增加延迟。
与同类对比
| 维度 | Pyzotero | zotero-better-bibtex | citekey-py | RJafroc |
|---|---|---|---|---|
| 核心功能 | Zotero API 客户端 | BibTeX 导出/同步 | 引用 key 生成 | ROC 分析 |
| Python 支持 | ✅ 原生 | ❌(JS 插件) | ✅ | ❌ |
| CLI 工具 | ✅ | ❌ | ❌ | ❌ |
| MCP 服务器 | ✅ | ❌ | ❌ | ❌ |
| 全文搜索 | ✅(需 PDF 索引) | ❌ | ❌ | ❌ |
| Semantic Scholar 集成 | ✅ | ❌ | ❌ | ❌ |
| 维护状态 | 活跃(Blue Oak 许可证) | 活跃(Zotero 插件) | 低活跃 | 低活跃 |
Pyzotero 的核心优势:纯 Python + 完整 API 覆盖 + MCP 生态接入,是目前将 Zotero 接入 AI 工作流最直接的方案。
一句话推荐结论
Pyzotero 是 Zotero 官方 API 最完整的 Python 封装,适合学术写作者和 AI 应用开发者将 Zotero 文献库无缝接入自动化和 LLM 工作流。
最小可跑命令
# 前置:Python 3.9+,Zotero 7(本地模式),API Key
uv add pyzotero
# Python 示例(需替换为真实 library_id / library_type / api_key)
python3 -c "
from pyzotero import Zotero
zot = Zotero(12345, 'user', 'your_api_key_here')
items = zot.top(limit=3)
for item in items:
print(item['data']['itemType'], '|', item['data'].get('title', 'N/A'))
"
# CLI 搜索(无需 key,仅搜索公开库)
uvx --from 'pyzotero[cli]' pyzotero search -q 'deep learning' --limit 3
⚠️ Python 版本:官方文档未注明最低版本,推测支持 Python 3.9+;
uv sync构建基于 pyproject.toml,具体以pyproject.toml为准。
来源
- https://github.com/urschrei/pyzotero(README + CONTRIBUTING.md)
- https://pyzotero.readthedocs.org(完整文档)
- https://pypi.org/project/Pyzotero/