Zotero 文献系统¶
Zotero 文献能力由 mylibrary 提供,本项目通过 zotero-mcp Docker 服务消费。
文件名
zotero-cli-cc是历史遗留:旧的 zotero-cli-cc 方案已退役(镜像里既无zot二进制、也无zotero_cli_cc模块)。paper pipeline 与zotero-mcp的源码现已归~/code/mylibrary(hydrolitagent),在镜像构建期安装。本文档描述的是当前系统。
Zotero MCP 服务¶
| 属性 | 值 |
|---|---|
| 服务名 | zotero-mcp |
| 端口 | 8002 |
| Transport | streamable HTTP(POST /mcp;/sse 返回 404) |
| 端点 | http://zotero-mcp:8002/mcp |
| 代码来源 | mylibrary(build-time rsync,本地优先 + git fallback) |
12 个 MCP Tools¶
Web API(api.zotero.org,需要 Zotero API key):
| Tool | 用途 |
|---|---|
zotero_search |
关键词搜索文献库 |
zotero_fulltext_search |
全字段搜索(含 PDF 全文) |
zotero_search_by_tag |
按标签搜索 |
zotero_get_item |
获取单篇文献详情 |
zotero_get_recent |
获取最近添加的文献 |
zotero_get_collection_items |
获取合集下的文献 |
zotero_get_collections |
列出所有合集 |
zotero_get_tags |
列出所有标签 |
zotero_get_attachments |
获取文献附件列表 |
zotero_get_annotations |
获取 PDF 批注(高亮、备注) |
Local API(host.docker.internal:23119,需要 Zotero Desktop 运行):
| Tool | 用途 |
|---|---|
zotero_get_fulltext |
获取索引全文内容 |
zotero_get_file_info |
获取附件文件元数据 |
前置条件¶
- Zotero Desktop 需运行并开启本地 API:Preferences → Advanced → Allow other applications to communicate with Zotero
- Zotero Web API key:在 zotero.org/settings/keys 创建,勾选 Allow library access
环境变量¶
# .env
ZOTERO_API_KEY=xxxxxxxx # 注入 zotero-mcp / hermes / hermes-coder / hermes-finance
ZOTERO_LIBRARY_ID=1234567
ZOTERO_LIBRARY_TYPE=user
道元不需要单独的 API key —— 见下方「Agent 接入方式」。
Agent 接入方式¶
| Agent | 容器 | 写入凭据(ZOTERO_API_KEY) |
接入方式 |
|---|---|---|---|
| 爱码士 (coder) | hermes-coder | 有 | zotero-mcp + paper-to-zotero skill |
| 道元 (daoyuan) | hermes-daoyuan | 无(未注入) | zotero-mcp + zotero-query skill |
| Hermes (default) | hermes | 有 | zotero-mcp |
| finance | hermes-finance | 有 | zotero-mcp |
- 查询路径不区分 agent:
zotero-mcp是共享服务,用它自己容器里的ZOTERO_API_KEY访问文献库,且 12 个工具全部是只读查询——MCP 上不存在写操作,也没有 per-agent 的权限差别(hermes-daoyuan实测连同一个服务、同样 12 个工具)。 - 写入路径才分权限:写入靠容器内注入的
ZOTERO_API_KEY(paper pipeline 用 pyzotero 直连 Web API)。默认 profile / 爱码士 / finance 注入了该 key;道元未注入,因此道元无法创建/修改条目。 - 爱码士独享论文注入管线(paper-fetch → rclone → paper-to-zotero),代码来自 mylibrary
- 道元使用 mylibrary 提供的
zotero-queryskill 进行 MCP 文献查询 - ⚠️ 本文档旧版本提到的
DAOYUAN_ZOTERO_API_KEY目前没有接线:该变量只存在于.env,docker-compose.yml、scripts/、entrypoint 均未引用它。道元的只读实际是靠「不给它注入ZOTERO_API_KEY」实现的。
Paper Pipeline(仅爱码士)¶
完整工作流由 mylibrary 提供,爱码士通过 run-paper-pipeline.sh 执行:
- paper-fetch 搜索并下载 PDF
- rclone 上传到 Google Drive
paper-to-zotero.py创建 Zotero 条目(linked_file 附件)
# DOI 论文注入
docker compose exec hermes-coder /opt/hermes/scripts/run-paper-pipeline.sh '<DOI>'
docker compose exec hermes-coder /opt/hermes/scripts/run-paper-pipeline.sh --dry-run '<DOI>'
验证¶
# MCP 连接测试
docker compose exec hermes /opt/hermes/.venv/bin/hermes mcp test zotero
docker compose exec hermes-daoyuan /opt/hermes/.venv/bin/hermes mcp test zotero
# 健康检查
docker compose exec zotero-mcp python3 -c "print('healthy')"
参考¶
- mylibrary — Zotero 能力代码源
- Zotero Web API
- pyzotero