Zotero MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| OCR_ENABLED | No | Whether OCR is enabled for scanned/image-only PDF pages. Set to 'false' to turn OCR off. | true |
| OCR_LANGUAGE | No | Language(s) used by the OCR engine (Tesseract). | eng |
| ZOTERO_DATA_DIR | No | Path to the Zotero data directory containing zotero.sqlite and storage/ with PDFs. Defaults to ~/Zotero. | ~/Zotero |
| ZOTERO_LIBRARY_ID | No | Zotero library ID. Only needed if using Zotero group libraries. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_librariesA | List every Zotero library this server can see: your personal
library ("My Library", library_id 1) plus every group/shared library
you belong to, with its library_id, name, and type. Pass a group's
library_id as the |
| list_collectionsA | List every collection (and sub-collection) in the Zotero library as a
flat list with parent links, so Claude can build or walk the collection
tree. Each entry has |
| list_itemsA | List items (papers, books, etc. — not notes/attachments) in the
library, most recently modified first. Filter by |
| get_itemA | Get full metadata for one item: all bibliographic fields, creators,
tags, the collections it belongs to, its abstract, and a summary of its
child notes and attachments (so you know what's available to fetch next
with get_item_fulltext / get_item_notes / get_item_annotations). Works
for items in any library — personal or group/shared — the response's
|
| search_metadataA | Fast search over item titles, abstracts, and creator names (does NOT
search inside PDFs or notes — use search_library or search_fulltext for
that). Good for quickly locating an item you already know roughly.
Searches your personal library and every group/shared library by
default; pass |
| get_item_fulltextA | Extract the full text of an item's PDF attachment(s), with |
| get_item_notesA | Get all notes attached to an item (child notes), or the content of a
standalone note if |
| get_item_annotationsA | Get every PDF annotation (highlights, notes, underlines) the user has made on an item's PDF: the highlighted/underlined text, any comment the user added, the highlight color, and the page label — in reading order. This surfaces what the user found important, which is often more useful for synthesis than the raw PDF text. |
| get_tagsA | List tags. If |
| search_libraryA | Search across the whole library. |
| rebuild_search_indexA | (Re)build the full-text search index used by search_library's
'fulltext' and 'notes' scopes. Indexes every library — personal plus
every group/shared library — by default, so shared libraries become
full-text searchable automatically; pass |
| compare_itemsA | Fetch metadata (and optionally truncated full text) for several items
in one call, so you can compare/synthesize across them — arguments,
methods, findings, etc. Items can come from different libraries
(personal and/or group/shared) in the same call — each entry's
|
| get_library_statsA | Overall library stats: item/collection/tag counts and full-text
index coverage (how many PDFs/notes are searchable via
search_library's fulltext/notes scopes right now), including
|
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 13 tools
Most tools have clearly distinct purposes (list libraries/collections/items, get item content, search, rebuild index, stats). However, search_metadata and search_library with scope='metadata' overlap, and compare_items partially duplicates get_item + get_item_fulltext as a batch operation. Detailed descriptions mitigate but do not eliminate the ambiguity.
All 13 tools follow a consistent verb_noun snake_case pattern: list_* for enumerating multiple entities, get_* for retrieving specific content, search_* for the two search tools, plus rebuild_search_index, compare_items, and get_library_stats. The naming is highly predictable and readable.
13 tools is well within the ideal range for this server's scope. Each tool addresses a distinct part of the Zotero read-only workflow (library discovery, collection/item listing, metadata retrieval, fulltext/notes/annotations extraction, search, indexing, comparison, and stats), with no obvious bloat.
The tool set provides complete read-only coverage of the Zotero research workflow: discover libraries and collections, list and filter items, fetch full metadata and child content, search across all scopes, maintain the search index, compare multiple items, and retrieve library statistics. There are no dead ends for the stated purpose.