← ClaudeAtlas

zotero-clilisted

This skill should be used when the user works with a Zotero research library or invokes any zotero-mcp-server CLI — `zotero-cli` (standalone library access) or `zotero-mcp` (MCP server / setup). Triggers on phrases like "Zotero library", "zotero-cli", "BibTeX key", "citation", "DOI lookup", "PDF annotations", "Better BibTeX", "reading list", "literature review", or any reference to `~/Zotero/zotero.sqlite` or a `storage/` PDF attachments folder. Also use it when the user asks to add a paper by DOI/arXiv URL, extract annotations, search a personal reference library, or manage collections. Captures the local/web/hybrid library-access modes, the SQLite-lock problem (writes require Zotero.app closed), the canonical DOI-ingestion workflow, annotation extraction, and the **`zotero-cli config` footgun that prints OPENAI_API_KEY and other secrets verbatim**. Use this skill even if the user does not name "Zotero" by name — if you see a `zotero.sqlite` next to a `storage/` directory of hash-named subfolders, that is a
nelsonlove/claude-code-plugins · ★ 0 · AI & Automation · score 58
Install: claude install-skill nelsonlove/claude-code-plugins
# Zotero CLI Zotero is a desktop reference manager (Mac/Win/Linux) with a SQLite-backed library at `~/Zotero/zotero.sqlite` and PDF attachments under `~/Zotero/storage/<8-char-hash>/`. The `zotero-mcp-server` PyPI package (upstream: 54yyyu/zotero-mcp) ships two binaries: - **`zotero-cli`** — standalone library access, no MCP server, no AI assistant needed. The right tool for Claude Code via Bash. - **`zotero-mcp`** — MCP server for Claude Desktop / Cursor / ChatGPT. Same library, heavier integration. For Claude Code, prefer **`zotero-cli` via Bash** — every MCP tool schema costs context tokens whether or not it's used, but a CLI binary only costs tokens when actually invoked. ## Library access modes Zotero MCP supports three modes, controlled by env vars: | Mode | Reads | Writes | Setup | |---|---|---|---| | **Local** (`ZOTERO_LOCAL=true`) | direct from `zotero.sqlite` | direct to `zotero.sqlite` — **requires Zotero.app closed** | no API key | | **Web** (`ZOTERO_API_KEY` + `ZOTERO_LIBRARY_ID`) | Zotero web API | Zotero web API | API key from zotero.org/settings/keys | | **Hybrid** (both set) | local reads (fast) | web writes (no GUI lock) | both | **The SQLite lock is the single most common failure mode.** Zotero.app holds a write lock on `zotero.sqlite` while running. Local-mode writes will error with `database is locked`. Either: 1. Quit Zotero.app before writing (simplest for one-off). 2. Switch to **hybrid mode**: keep `ZOTERO_LOCAL=true` for reads, add `ZOTERO_AP