MCP server for accessing and searching Zotero library collections and items
MCP Zotero is a simple read-only reference server with 5 tools. All tools have names and descriptions present, but lack critical depth for production use. Naming is verb-forward (get_*, search_*) which is good. However, descriptions are generic and do not explain when/why to use each tool vs alternatives, or what the LLM should expect in the response. Input schemas are present but minimal, most tools accept only 1 parameter with no validation constraints. Output schemas are entirely undocumented; the code shows the tools return JSON but does not specify field names, types, or structure that the LLM should expect. Parameter descriptions are present but very terse (e.g., 'The collection key/ID' does not explain format, length, or how to obtain a key). Error handling is present in code (e.g., 'No collections found') but responses are not structured to guide the LLM on recovery actions. No tool output is documented, forcing the LLM to infer structure from first call. All tools are read-only (safe), but the lack of output documentation and parameter constraints prevents confident agent composition.
Get all items in a specific collection
List all collections in your Zotero library
Get detailed information about a specific paper
Get recently added papers to your library
Search your entire Zotero library
No output schemas documented. All tools return unstructured JSON. LLM cannot plan downstream calls or know what fields to extract without trial-and-error on first invocation.
Parameter descriptions are terse and lack actionable constraints. 'The collection key/ID' does not explain format, length limits, or how to obtain a key. LLMs cannot validate input before sending.
No enum or constraint on 'limit' parameter in get_recent. Unbounded numeric parameter invites LLM to pass extreme values (e.g., 10000) causing API strain or timeouts.
Tool descriptions do not explain when to use each vs. alternatives. 'Get all items in a specific collection' vs 'Search your entire Zotero library', when should the LLM pick one over the other? No guidance provided.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 51 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Error responses are not structured for LLM recovery. 'No collections found' returns a suggestion, but response format is inconsistent with tool outputs (mixes text content with error guidance). LLM may not recognize it as recoverable.
get_recent 'limit' parameter is optional with a default, but the description does not state what 'default 10' means or why 10 is chosen. LLM reasoning about pagination is hampered.