An integrated MCP (Model Context Protocol) server that runs within the Zotero plugin, providing AI clients with access to Zotero libraries, items, collections, and semantic search capabilities via streamable HTTP requests.
The Zotero MCP server presents 21 tools with reasonable coverage of library operations, collections, search, and semantic features. Naming follows verb_noun conventions consistently (get_*, search_*, create_*, delete_*, etc.), which is a strong foundation. However, several tools lack complete parameter descriptions, and output schemas are not documented in the provided code. Descriptions are generally present (10 tools have 100+ character descriptions) but some lack depth on return types and error guidance. The server implements HTTP transport, though the spec alignment check reveals reliance on a deprecated 'ping' tool (removed in 2026-07-28 spec). Parameter validation is present for enums (sortOrder, itemType filtering) but numeric bounds (limit, offset, threshold) are not explicitly constrained. Read/write operation semantics are clearly marked in Risk fields, which is good for agent safety. Error handling is not visible in the provided code samples, no recovery guidance or categorization is evident.
Add one or more items to a collection.
Build or rebuild the semantic search index for items in a library. Processes all indexed items and creates embeddings.
Create a new collection in the specified library.
Delete a collection from the library.
Get detailed information about a specific collection including metadata, item counts, and subcollections.
List items in a collection with pagination support.
List all collections in a specified library. Returns collection metadata including names and item counts as a paginated array.
Output schemas not documented. No visible return type definitions in code for any of the 21 tools. LLMs cannot plan downstream tool calls or extract structured data without knowing what fields to expect.
Numeric parameter constraints missing. limit, offset, and threshold parameters lack min/max bounds in descriptions. An LLM could pass limit=999999 or threshold=1000, causing performance issues or invalid API calls.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 70 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Retrieve the full text content of an item or attachment.
Retrieve a single item by its key from the specified library.
Retrieve the abstract/summary of a specific item.
List all Zotero libraries available in the current client. Returns minimal library metadata for each library as a paginated array.
Get the current status and statistics of the semantic search index.
List subcollections within a parent collection.
Health check endpoint that returns a pong response with current timestamp.
Remove one or more items from a collection.
Search collections in a library by name or metadata. Supports pagination and filtering.
Search item fulltext content (PDFs and other documents). Returns items with matching text and relevance scores.
Search the Zotero library with advanced parameters, boolean operators, relevance scoring, and pagination. Results are from user's personal library. Use itemKey with get_content for full text. To find standalone PDFs without metadata, use itemType="attachment" with includeAttachments="true".
Perform semantic similarity search across indexed items using embeddings. Returns items ranked by semantic relevance.
Move one or more items to the trash.
Update the metadata of an existing collection.
Error handling and recovery guidance not visible. No evidence of categorized errors (retryable vs fatal), recovery hints, or actionable error messages. When a search returns 0 results or a collection is not found, agents have no guidance on next steps.
Destructive operations lack confirmation or dry-run support. delete_collection and trash_items can irreversibly remove data, but no confirmation step or dry-run mode is documented. Agents should not execute destructive operations without user acknowledgment.
Tool descriptions are brief and lack WHEN/WHY guidance. Most descriptions (e.g., 'Retrieve a single item by its key') are functional but do not explain when an agent should prefer this over search_library or when to call it as a follow-up. LLMs benefit from explicit sequencing hints.
ping tool is deprecated and removed in MCP spec 2026-07-28. Server-initiated health checks should use stateless per-request mechanisms or rely on HTTP status codes, not a dedicated ping tool.
No tool annotations visible. Tools lack readOnlyHint, destructiveHint, or idempotentHint annotations. These help agents understand operation safety and retry behavior without parsing descriptions.
Pagination fields (limit/offset) could be more complete. Tools supporting pagination do not document total counts or next_cursor in return schema, making it impossible for agents to iterate all results reliably.
Parameter descriptions lack examples and constraints. Fields parameter in get_item ('Comma-separated list of specific fields to include') does not list valid field names or format. LLMs will guess or pass invalid field names.
Semantic search threshold parameter lacks guidance. 'Minimum similarity score threshold (0-1)' is present but does not explain what values are typical or sensible. LLMs may pass 0.99 (too strict) or 0.01 (too loose).