Curator for Zotero
Curator for Zotero is a research-focused MCP server for Zotero. It lets AI coding and research assistants search a library, inspect metadata, read long attachments in manageable sections, export citations, and safely organize items with dry-run-first write tools.
This project is independently maintained and is based on the MIT-licensed kujenga/zotero-mcp. See ACKNOWLEDGEMENTS.md and LICENSE.
Why Curator
The original Python MCP server required each client to know a repository-local virtual-environment path. Curator is a published Python package, so Codex, Claude Desktop, Cursor, Claude Code, and other clients can launch it with one stable command:
uvx --from zotero-curator zotero-curator serve
Curator adds long-document navigation, saved searches, optional PDF and semantic-search features, safe BibTeX workflows, arXiv import, central settings, diagnostics, and guarded organization tools.
Quick start
Install uv, open Zotero, and enable:
Zotero Settings → Advanced → Allow other applications on this computer to communicate with Zotero
Then configure and validate local mode:
uvx --from zotero-curator zotero-curator setup --local
uvx --from zotero-curator zotero-curator doctor
For GUI-launched macOS clients, use the absolute uvx path returned by:
command -v uvx
Common Homebrew paths are /opt/homebrew/bin/uvx on Apple Silicon and /usr/local/bin/uvx on Intel Macs.
MCP client configuration
Claude Desktop, Cursor, and other JSON-style clients:
{
"mcpServers": {
"zotero": {
"command": "/opt/homebrew/bin/uvx",
"args": ["--from", "zotero-curator", "zotero-curator", "serve"]
}
}
}
Codex:
[mcp_servers.zotero]
type = "stdio"
command = "/opt/homebrew/bin/uvx"
args = ["--from", "zotero-curator", "zotero-curator", "serve"]
startup_timeout_sec = 30
Replace /opt/homebrew/bin/uvx with your command -v uvx result.
Generate or install client configuration safely:
uvx --from zotero-curator zotero-curator mcp-config --uvx --format json
uvx --from zotero-curator zotero-curator mcp-config --uvx --format toml
uvx --from zotero-curator zotero-curator install-client --uvx
uvx --from zotero-curator zotero-curator install-client --uvx --apply
The installer backs up existing client configuration and defaults to dry-run mode.
Documentation
Detailed, version-controlled documentation lives in docs/:
- Client configuration
- Settings and safety
- Research workflows
- Optional PDF and semantic extras
- Troubleshooting
- Claude Desktop MCPB
- Release process
- Roadmap
Major capabilities
Research and navigation
- Search by title, creator, year, tag, DOI, or indexed text.
- Inspect metadata, child notes, attachments, collections, tags, and saved searches.
- Read long documents by chunk, within-document search, heuristic outline, or section.
- Use optional page-aware PDF reads and local semantic search.
Citation workflow
Curator exports selected Zotero items directly to managed BibTeX or BibLaTeX files and can validate LaTeX citations:
zotero-curator export-bibtex ITEMKEY1 ITEMKEY2 --out references.bib --mode auto
zotero-curator validate-citations --tex paper.tex --bib references.bib
auto prefers Better BibTeX when available for supported personal-library exports, then falls back to Zotero's exporter. Curator records the actual exporter, citation keys, generated cite command, and fallback reason.
arXiv import
Preview an import:
uvx --from zotero-curator zotero-curator add-arxiv https://arxiv.org/abs/2410.03529
Real imports require Web API mode, a write-enabled API key, global write enablement, and --apply. See Research workflows.
Guarded organization tools
Curator can create and rename collections, update tags and collection membership, patch selected metadata, create child notes, and apply multi-step organization plans.
All write tools default to dry_run=true. Real writes require:
- Web API mode.
- A Zotero API key with write permission.
write_enabled = trueorZOTERO_WRITE_ENABLED=true.dry_run=falseon the individual call.
Zotero's local API is treated as read-only because Local API v3 currently accepts only GET requests.
Optional extras
Keep the base install small or request additional features:
uvx --from 'zotero-curator[pdf]' zotero-curator serve
uvx --from 'zotero-curator[semantic]' zotero-curator serve
uvx --from 'zotero-curator[all]' zotero-curator serve
The pdf extra enables page-aware stored-PDF reads and bookmark extraction. The semantic extra provides a local Chroma index with cross-process locking.
Let an agent set it up
Copy this prompt into a local coding agent:
Install Curator for Zotero for me by following this repo's AGENTS.md. Use the published uvx workflow and configure these MCP clients: CLIENTS_TO_CONFIGURE.
Replace CLIENTS_TO_CONFIGURE with the applications you use.
Development
git clone https://github.com/JGSphaela/Curator-for-Zotero.git
cd Curator-for-Zotero
uv sync --extra dev
uv run zotero-curator doctor
uv run pytest
uv run ruff check .
The package exposes zotero-curator and the compatibility alias zotero-mcp.
Metadata
Release files for zotero-curator 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| zotero_curator-0.1.3.tar.gz | 333.1 kB | Without provenance | Details for zotero_curator-0.1.3.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| zotero_curator-0.1.3-py3-none-any.whl | Python 3 | none | any | Details for zotero_curator-0.1.3-py3-none-any.whl |
Total release size: 376.3 kB
Release files / zotero_curator-0.1.3.tar.gz
| Download URL | zotero_curator-0.1.3.tar.gz |
|---|---|
| Size | 333.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
272f104ea22b1531482ebb3207e5c01f7fad2e4a7d3d0199fb8493f8e7140ddc
|
|
BLAKE2b-256 checksum How to use checksums |
243e4a4752eb90599eeb6ec63f4096643978a7012398d99a583fc8ab46dd96f8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / zotero_curator-0.1.3-py3-none-any.whl
| Download URL | zotero_curator-0.1.3-py3-none-any.whl |
|---|---|
| Size | 43.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6b736bc2de3616c1a1660f8cf3cd2ec0d04093878bd9de998177d4acc40448f2
|
|
BLAKE2b-256 checksum How to use checksums |
007accfa7651eca5b8d5494fafaeaae18c4c11d00cbe9666557ea0914da20daa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for zotero-curator 0.1.3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.