mcp-zotero
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ZOTERO_API_KEY | Yes | API key for Zotero Web API v3. Create one at zotero.org/settings/keys with library read/write and file access permissions. | |
| ZOTERO_USER_ID | Yes | Your Zotero numeric user ID. Retrieve it with curl -H 'Zotero-API-Key: KEY' https://api.zotero.org/keys/current. | |
| UNPAYWALL_EMAIL | No | Email for Unpaywall API requests. Enables OA PDF lookup in add_items_by_doi and find_and_attach_pdfs. | |
| UNSAFE_OPERATIONS | No | Controls destructive operations (deletion). Values: 'none' (default, all deletions blocked), 'items' (allow item deletion but not collection deletion), 'all' (allow both). Case-insensitive. | none |
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": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_collectionsA | List all collections (folders) in your Zotero library. Returns collection keys, names, and parent relationships. Use collection keys with get_collection_items or as parent_collection in create_collection. Trashed collections are excluded by default. |
| get_collection_itemsA | Get all items in a specific Zotero collection (only items directly in it, not those in its subcollections). Returns item keys, titles, authors, and dates. Use the collectionKey from get_collections. Use the returned item keys with get_items_details, get_item_fulltext, or inject_citations. |
| get_items_detailsA | Get metadata for multiple Zotero items in a single call. Accepts an array of item keys and returns a map of key → metadata. Use this instead of one call per item. Returns all type-specific fields (e.g. bookTitle for bookSection, proceedingsTitle for conferencePaper, university for thesis). Set include_abstract to include abstracts (excluded by default to keep responses lightweight). Keys not found in the library are listed in not_found (present only when some are missing). |
| search_libraryA | Search your Zotero library or list items sorted by a field. When 'query' is provided, matches it against titles, creator names and years (not abstracts, tags or full text). When 'query' is omitted, lists items sorted by the chosen field (default: dateAdded, descending). Examples:
Use the returned item keys with get_items_details, get_item_fulltext, or inject_citations. |
| create_collectionA | Create a new collection (folder) in your Zotero library. Optionally nest it under a parent collection. Returns the new collection key and name. Use the key as collection_key in add_items_by_doi or add_items to organize imported papers. |
| add_items_by_doiA | Add items to your Zotero library by resolving DOIs. Works with ANY item type that has a DOI — journal articles, books, datasets, preprints, conference papers, reports, etc. For each DOI, resolves metadata via content negotiation and creates the item in Zotero with the correct type automatically. Returns a list of successfully added items (with item_key and title) and any failures. WHEN TO USE vs add_items:
WORKFLOW TIPS:
|
| inject_citationsA | Replace placeholder tags in a .docx file with native Zotero field codes that Zotero for Word can recognize and manage. The tool fetches item metadata from Zotero automatically — you only need to provide the .docx file. WORKFLOW — how to create a Word document with live Zotero citations:
CITATION STYLES — ask the user which style they want before generating:
ZCITE TAG FORMAT: Supported attributes (any order):
OUTPUT: A new .docx file (original filename with _cited suffix) with Zotero field codes and a ZOTERO_BIBL bibliography at the end. A cited key that is not in the library, or that is not a Zotero key (8 characters from 23456789ABCDEFGHIJKLMNPQRSTUVWXYZ), is an error and no file is written. WHERE THE FILE LIVES: this tool reads and writes files on the machine where this MCP server runs. If you create the .docx in a sandbox or cloud workspace that the server cannot see (for example code execution in Claude.ai or Claude Desktop, paths like /mnt/user-data/...), do not call this tool: use the zotero-mcp-integrations skill, which injects the citations inside the sandbox with metadata from get_items_details. If that skill is not installed, recommend it to the user: zotero-skill-mcp-integrations.zip from https://github.com/Xevos117/mcp-zotero/releases/latest. |
| get_item_fulltextA | Get the text of a Zotero item's stored PDF from Zotero's full-text index. Works for PDFs indexed by Zotero desktop and synced, or imported with import_pdf_to_zotero / find_and_attach_pdfs; not for linked URLs or web pages. Use this to read the full content of papers instead of relying on abstracts. |
| get_user_idA | Returns the Zotero library configured in the server environment: user_id, library_type, library_id and library_path ("users/" or "groups/"). Pass library_path to the zotero-mcp-integrations skill script (inject.js) to generate Zotero field code URIs. Not needed when using the inject_citations MCP tool, which reads the library internally. |
| add_linked_url_attachmentA | Attach a linked URL to an existing Zotero item, or create a standalone linked-URL attachment. Use this to link external PDFs, web pages, or other resources to items already in your library. If parent_item is provided, the attachment is added as a child; otherwise it is standalone. A linked URL stores no file and no full text (get_item_fulltext cannot read it): to store a PDF in Zotero use import_pdf_to_zotero. |
| add_itemsA | Add items to Zotero by providing metadata directly. Supports ALL 37 Zotero item types. WHEN TO USE:
BATCH: Pass multiple items in the 'items' array (one tool call). COMMON FIELDS (available for most types): title, date, abstractNote, url, DOI, publisher, place, pages, volume, language, extra ITEM TYPE QUICK REFERENCE:
CREATORS: Array of {firstName, lastName, creatorType} or {name, creatorType} for institutional. Default creatorType is "author". Some types use different primary types (e.g., "director" for film, "inventor" for patent, "artist" for artwork). Invalid fields or creatorTypes for a given type are rejected with helpful error messages listing the valid options. |
| import_pdf_to_zoteroA | Download a PDF from a URL and upload it to Zotero storage as an imported_url attachment. Unlike linked URL attachments, imported files are stored in Zotero's storage and become fulltext-indexed (searchable via get_item_fulltext). Use this when you need the PDF content to be indexed by Zotero. The URL must lead straight to the PDF file (no login, paywall or HTML landing page); files up to 100 MB, counted against the user's Zotero file storage. For items with a DOI, find_and_attach_pdfs finds open-access PDFs by itself. |
| find_and_attach_pdfsA | For each Zotero item, check Unpaywall for open access PDFs and attach them. Items must have a DOI; needs UNPAYWALL_EMAIL in the server settings. Uploads use the user's Zotero file storage; dry_run only reports what is available. Uses the same source as Zotero Desktop's 'Find Available PDFs'. |
| delete_collectionA | Delete a collection (folder) from your Zotero library; confirm with the user first. Items inside the collection are NOT deleted — they remain in your library. Disabled unless the server setting UNSAFE_OPERATIONS is 'all'. |
| delete_itemsA | Delete one or more items from your Zotero library: they are permanently deleted (not moved to the Zotero trash), so confirm with the user first. Accepts up to 50 item keys per call. Disabled unless the server setting UNSAFE_OPERATIONS is 'items' or 'all'. |
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 15 tools
Most tools have clearly distinct purposes, and the descriptions explicitly differentiate potentially overlapping pairs such as add_items vs add_items_by_doi and add_linked_url_attachment vs import_pdf_to_zotero. The three attachment-related tools (linked URL, imported PDF, find-and-attach OA PDFs) could still be confused at a glance, but the descriptions resolve the boundary reasonably well.
All tool names use snake_case and follow a predictable verb_noun or verb_object pattern (get_collections, create_collection, add_items, delete_items, search_library). Minor multi-verb names like find_and_attach_pdfs still fit the overall convention cleanly.
With 15 tools, the server is well-scoped for Zotero library management: reads, searches, collection operations, item creation, attachment handling, full-text retrieval, citation injection, and deletion are all represented without excessive redundancy. Each tool appears to earn its place.
Core workflows are well covered: collection listing/creation/deletion, item add/search/details/delete, PDF import/fulltext, and citation injection. Notable gaps include updating existing item metadata, moving items between collections, and removing items from a collection without deleting them, but these are workaroundable or secondary for the apparent purpose.