Remote MCP server for Zotero libraries synced with WebDAV file storage, running on Cloudflare Workers
Strong foundation with 16 well-named tools, comprehensive schemas, and clear descriptions. Tool names follow verb_noun pattern (search, get, create, update, delete, list, read, put, rename, import, reindex, find). Most parameters have type definitions and descriptions. However, some parameter descriptions lack actionable constraints (e.g., 'limit' parameters missing min/max bounds), and a few tools have generic descriptions that could better explain when to use them vs. alternatives. Output schemas are documented in code but not explicitly in tool definitions. Error handling guidance is minimal, tools don't describe recovery paths for common failures.
List annotations (highlights, notes, tags) on an item or its attachments.
Create new items in the library with metadata, creators, tags, and fields.
Create a note item, optionally as a child of another item.
Delete an attachment item and remove its file from WebDAV.
Move items to trash or permanently delete them.
Group items that share a DOI, ISBN or title+year. With merge=true the richest copy is kept, children and collections move onto it, and the others go to the trash.
Numeric parameters (limit, scanLimit) lack min/max bounds in descriptions. LLMs may pass absurd values (limit=999999) that break pagination or timeout.
Array parameters (items, keys, itemKeys, mergeKeys) lack descriptions of expected structure, length limits, or item format. E.g., zotero_create_items accepts 'items' array but doesn't document required fields per item.
Error handling descriptions are absent. Tools don't explain what to do if a search returns no results, an attachment fails to upload, or a merge operation encounters conflicts. LLMs have no recovery guidance.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | A | 82 | 2026-07-28+ | v2 |
Retrieve full metadata for one item, optionally including its children (notes and attachments).
Import a reference from a URL (DOI, ISBN, PMID, or webpage) into the library.
List all collections in the library, optionally filtered by parent collection or item type.
Upload a PDF or other file to WebDAV and attach it to an item.
Read the text content of a PDF attachment from WebDAV, or get metadata about it.
Rebuild the semantic search index. Runs incrementally; pass full=true to re-submit everything. A scheduled job does this every six hours, so this is for the first run or after a reset. Indexing is asynchronous: complete=true means every change was submitted, and backlog is what is still being processed.
Rename attachment files on WebDAV according to a standard pattern (Author - Year - Title.pdf).
Search the Zotero library by author, title, phrase, or other metadata. Results are ordered by relevance.
Search the Zotero library by topic or meaning. Results are ranked by closeness with advisory scores. Falls back to zotero_search if AI Search is not bound.
Update metadata, creators, tags, and fields of existing items.
Destructive tools (zotero_delete_items, zotero_delete_attachment, zotero_find_duplicates with merge=true) lack confirmation or dry-run capability. Agents can permanently delete data without a safety check.
Output schemas are not documented in tool definitions. Callers must infer response structure from code or trial. E.g., zotero_search returns items but the schema (fields, pagination) is not declared.