zotero-mcp-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PORT | No | Port for TRANSPORT=http (default: 3000) | 3000 |
| TRANSPORT | No | Transport protocol: 'stdio' (default) or 'http' | stdio |
| ZOTERO_API_KEY | Yes | The Zotero API key generated from https://www.zotero.org/settings/keys | |
| ZOTERO_LIBRARY_ID | Yes | Numeric user ID or group ID | |
| ZOTERO_API_BASE_URL | No | Override for the local Zotero desktop API (http://localhost:23119/api/) instead of https://api.zotero.org | |
| ZOTERO_LIBRARY_TYPE | Yes | Either 'user' or 'group' |
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 |
|---|---|
| zotero_search_itemsA | Search for bibliographic items (articles, books, webpages, etc.) in a Zotero library. This is a READ-ONLY quick search. It matches titles and creator names by default (query_mode='titleCreatorYear'); pass query_mode='everything' to also search full text of PDF attachments. Combine with item_type and/or tag filters to narrow results, and collection_key to search inside one collection only. Args:
Returns: matching items with type, creators, year, title, DOI/URL, tags, and a trimmed abstract. Examples:
Error Handling:
|
| zotero_get_itemA | Retrieve full metadata for a single item by its key, optionally including a formatted bibliography entry. Args:
Returns: full item data (type, creators, title, date, DOI/URL, abstract, tags, collections, notes count), plus a formatted bibliography entry if requested. Examples:
Error Handling:
|
| zotero_get_item_childrenA | List the child items (notes and file attachments) of a parent item. Args:
Returns: child items with their type (note/attachment), and for notes, the note text. Examples:
Error Handling:
|
| zotero_list_collectionsA | List the collections (folders) in a Zotero library, optionally scoped to one parent collection. Args:
Returns: collections with their key, name, parent, and item count. Examples:
|
| zotero_create_collectionA | Create a new collection (folder), optionally as a subcollection of an existing one. This tool WRITES to the library and requires an API key with write access. Args:
Returns: the key of the newly created collection. Examples:
Error Handling:
|
| zotero_list_tagsA | List the tags used in a Zotero library, with the count of items carrying each tag. Useful for discovering what tag vocabulary is already in use before tagging new items (e.g. for the "línea teórica" or "línea de tiempo" categories in a state-of-the-art review), or for checking whether a specific tag already exists. Args:
Returns: tag names with the number of items carrying each one. Examples:
|
| zotero_create_itemA | Create a new bibliographic item (article, book, webpage, report, etc.) in the library. This tool WRITES to the library and requires an API key with write access. It fetches the correct field template for item_type from Zotero before submitting, so only the fields you provide are set — you don't need to know the full schema for every item type. Args:
Returns: the key of the newly created item. Examples:
Error Handling:
|
| zotero_add_noteA | Attach a child note to an existing item. This tool WRITES to the library and requires an API key with write access. Args:
Returns: the key of the newly created note. Examples:
Error Handling:
|
| zotero_update_item_tagsA | Add and/or remove tags on an existing item, leaving all other fields untouched. This tool WRITES to the library and requires an API key with write access. It reads the item's current version first and sends a version-checked PATCH, so it will report a clear conflict error rather than silently overwriting a concurrent change. Args:
Returns: the item's updated tag list. Examples:
Error Handling:
|
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 9 tools
Each tool targets a distinct resource and operation: search vs. fetch by key, items vs. children, collections vs. tags, creating items vs. notes vs. collections. The descriptions explicitly cross-reference each other to prevent misselection.
All tools follow a consistent `zotero_<verb>_<noun>` pattern with snake_case verbs. The only minor deviation is `zotero_get_item_children`, which uses a compound noun, but it's still clear and predictable.
Nine tools cover the essential read and write operations for a Zotero library without bloat. The count is well within the ideal range for a domain-specific server.
The server covers search, retrieval, collection management, item creation, note attachment, and tag updates, but lacks update/delete operations for items and collections. There is no way to edit item metadata, remove items, or reorganize collection membership, which are notable gaps for full lifecycle management.