Zotero library management MCP server for Cloudflare Workers, designed for deployment via mcp-deploy.
Groups
list_groups— list Zotero groups the user belongs to (returns group IDs for use withgroup_idparams)
Search & Browse
search_items— search by text, tags, type, collection, or date rangeget_collection_items— list items in a specific collectionlist_collections— list all collections (folders)create_collection— create a new collectionlist_tags— list tags with item countsget_library_stats— library overview with totals and top tags
Read
get_item— full metadata and children for a single itemread_attachment— read attachment content (auto-detects type, accepts parent or attachment key)get_note— read note content
Write
save_item— create an item with metadata and optional attachment (PDF URL, snapshot, or base64 file)attach— attach a file to an existing item (supportspdf_url,snapshot_url, orfilevia base64)create_note— create a note on an existing itemupdate_item— update metadata, tags, or collectionstrash_item— move a note or attachment to trash
All tools that operate on library data accept an optional group_id parameter. Omit it for the personal library; pass a group ID (from list_groups) to operate on a group library.
- Server instructions — workflow guidance injected once at init, not per-tool
- Progress notifications — multi-step operations (attach, save with attachment, read) emit MCP progress events
- Group library support — call
list_groupsto discover groups, passgroup_idto any tool - Smart author parsing — handles "Last, First", suffixes (Jr., III), and institutional authors
- Curated responses —
get_itemreturns only non-empty, agent-relevant fields; search results are compact summaries
Install mcp-deploy and deploy to Cloudflare Workers:
npm install -g mcp-deploy
mcp-deploy login
mcp-deploy add upascal/zotero-assistant-mcp
mcp-deploy deploy zotero-assistant-mcpOr use the web UI: mcp-deploy gui
This repo contains only MCP logic. Auth, deployment, and UI are handled by mcp-deploy (npm install -g mcp-deploy). The repo ships:
src/— MCP server code (Cloudflare Workers + Durable Objects)mcp-deploy.json— deployment contract (secrets, config, worker settings)
| Secret | Required | Description |
|---|---|---|
ZOTERO_API_KEY |
Yes | Zotero API key |
ZOTERO_LIBRARY_ID |
Yes | Your numeric user library ID |
npm install
# Create .dev.vars with your Zotero credentials:
# ZOTERO_API_KEY=your-api-key
# ZOTERO_LIBRARY_ID=your-library-id
npx wrangler devnpm testIntegration tests run against a live Zotero library. Set .dev.vars with your credentials. Tests create temporary items/collections and clean up after themselves.
Tag a version to trigger the GitHub Actions release workflow:
git tag v0.5.0
git push --tagsThis builds worker.mjs and publishes it alongside mcp-deploy.json as release assets. mcp-deploy fetches these assets to deploy the worker.