Skip to content

Compare

There are several good ways to automate Zotero. They optimize for different things. This page is honest about where each one wins.

Local writeNeeds account / API keyWorks offlineAgent-ready (MCP)Open sourceSecurity docs
zotero-agentno
zotero-mcpweb onlyyesnopartial
pyzoteroweb APIyesnolibraryn/a
Better BibTeX JSON-RPCalmost nonenonon/a
Beaver✓ (cloud backend)freemium accountnoGUInopartial

zotero-agent — full read-write on your local library, no account, no API key, works offline, MCP-ready. Its edge is exactly that combination: local write + offline + privacy. Working on the files themselves also makes things possible that a web API cannot reach at all — zot toc builds and embeds a PDF’s table of contents, which fixes the empty Outline tab that Zotero’s reader cannot fill itself. The cost is that writes need a small privileged plugin with a documented security model, which you install yourself.

zotero-mcp — excellent, and the better choice if you already use zotero.org sync. It writes through the Zotero Web API, which means it needs an account, an API key, and network access — and your data round-trips through the cloud. If you live in the synced Zotero world already, that’s a natural fit; if you want local-only and offline, it isn’t.

pyzotero — the mature Python client for the Zotero Web API. It’s a library, not an agent tool, and it also writes only through the web API (account + API key, online). Reach for it when you’re writing Python against your synced library, not when you want a local CLI or an MCP server.

Better BibTeX JSON-RPC — great for what it does (citekey resolution, search, export) and it’s local and offline. But it writes almost nothing (only autoexport.add, collection.scanAUX), so it can’t do the metadata edits, dedup, or tagging jobs zotero-agent is built for. zotero-agent actually uses BBT’s JSON-RPC to resolve citekeys.

Beaver — a capable AI-assisted Zotero experience, but it runs against a cloud backend and a freemium account, and it’s a GUI product rather than an open, scriptable, local tool. Different trade-off: convenience and hosted intelligence versus local control and privacy.

  • You want local, offline, private read-write and/or an MCP/CLI you can script → zotero-agent.
  • You already sync with zotero.org and want an agent that fits that world → zotero-mcp.
  • You’re writing Python against your synced library → pyzotero.
  • You just need citekeys, search, export locally → Better BibTeX.