Skip to main content
Glama
adolinjonathan-bot

zotero-mcp-server

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
ZOTERO_API_KEYYesYour Zotero API key
ZOTERO_LIBRARY_IDYesYour Zotero user ID (numeric) or group ID
ZOTERO_LIBRARY_TYPENoType of library: 'user' or 'group'user

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
zotero_search_itemsA

Search the Zotero library for items (references), matching against title, creator names, and full text of attached PDFs.

Args:

  • query (string, optional): search text. Omit it to browse by filter alone.

  • item_type (string, optional): filter to one Zotero item type (e.g. "journalArticle")

  • tag (string, optional): filter to items carrying this exact tag

  • collection_key (string, optional): search within one collection only

  • limit (number, default 25, max 100)

  • start (number, default 0): pagination offset

  • response_format ('markdown' | 'json', default 'markdown')

Returns matching items with key, title, creators, date, tags, and abstract. Use the item 'key' with zotero_get_item, zotero_update_item, or zotero_get_item_children for further work.

Does NOT create or modify anything - read-only.

Examples:

  • Use when: "Find items in my library about digital youth mentorship" -> query="digital youth mentorship"

  • Use when: "Show journal articles tagged 'AI literacy'" -> omit query, item_type="journalArticle", tag="AI literacy"

  • Don't use when: you already have the item key (use zotero_get_item instead)

zotero_get_itemA

Fetch full metadata for a single Zotero item by its key.

Args:

  • item_key (string, required)

  • response_format ('markdown' | 'json', default 'markdown')

Returns all fields for the item, including the current 'version' number, which is required for zotero_update_item and zotero_delete_item to avoid overwriting concurrent changes.

Error Handling:

  • Returns "Error: ... Not Found (404)" if the key does not exist in this library

zotero_get_item_childrenA

List the child items (attachments and notes) of a parent Zotero item.

Args:

  • item_key (string, required): the parent item's key

  • response_format ('markdown' | 'json', default 'markdown')

Returns attachments (PDFs, links) and notes attached to the item, each with its own key. Use this to find a PDF attachment's key or to read existing notes before adding a new one.

zotero_list_collectionsA

List collections (folders) in the Zotero library.

Args:

  • parent_collection_key (string, optional): list sub-collections of this collection; omit for top-level collections

  • response_format ('markdown' | 'json', default 'markdown')

Returns each collection's key, name, and item count. Use a collection's key with zotero_get_collection_items or zotero_add_items_to_collection.

zotero_get_collection_itemsA

List the items filed under a specific Zotero collection.

Args:

  • collection_key (string, required)

  • limit (number, default 50, max 100)

  • start (number, default 0): pagination offset

  • response_format ('markdown' | 'json', default 'markdown')

Returns the items in the collection (not sub-collections). For a broader text search restricted to a collection, use zotero_search_items with collection_key instead.

zotero_list_tagsA

List tags used in the Zotero library, optionally filtered by substring.

Args:

  • filter (string, optional): only return tags containing this text

  • limit (number, default 100, max 200)

Useful for discovering the exact tag spelling before using it in zotero_search_items or zotero_update_item.

zotero_create_itemA

Create a new top-level item (reference) in the Zotero library.

Args:

  • item_type (string, required): Zotero item type, e.g. "journalArticle", "book", "report", "webpage"

  • title, creators, date, abstract_note, url, doi (optional)

  • tags (string[], optional): tag labels to attach

  • collection_keys (string[], optional): file the item into these collections immediately

  • extra_fields (object, optional): any other valid Zotero field for the item type, e.g. {"publicationTitle": "Journal of X", "volume": "12", "issue": "3", "pages": "1-10"}

Returns the created item's key and version. This is a destructive/write operation - it permanently adds to the user's library.

Examples:

  • Use when: "Add this journal article to my Zotero library" -> item_type="journalArticle", title=..., creators=[...], extra_fields={publicationTitle: ..., volume: ...}

  • Don't use when: the item might already exist (search first with zotero_search_items to avoid duplicates)

zotero_update_itemA

Apply a partial update to an existing Zotero item.

Args:

  • item_key (string, required)

  • current_version (number, required): the item's version at the time you last read it (from zotero_get_item). Prevents accidentally overwriting a concurrent edit.

  • fields (object, required): the fields to change, e.g. {"title": "Corrected Title", "date": "2026"}. Array-valued fields (tags, collections) are REPLACED entirely, so include the full desired array, not just the additions.

Returns the updated item. Fails with a version-mismatch error if the item changed since current_version was read - in that case, call zotero_get_item again and retry.

Don't use when: adding the item to a collection is the only goal - zotero_add_items_to_collection is simpler and avoids the version-conflict risk.

zotero_delete_itemA

Delete an item from the Zotero library.

Args:

  • item_key (string, required)

  • current_version (number, required): the item's version from zotero_get_item, to confirm you're deleting the version you expect

  • permanent (boolean, default false): false moves the item to the trash (recoverable); true erases it irreversibly

This is a destructive operation, and the library is synced - the deletion propagates to the user's desktop Zotero and any other synced device. Always confirm with the user before calling this. Never pass permanent=true unless the user has explicitly asked for irreversible deletion; the default trash behaviour leaves them able to undo it.

zotero_create_noteA

Create a standalone note or a child note attached to an existing item.

Args:

  • note_html (string, required): note content as HTML (sanitised automatically by Zotero)

  • parent_item_key (string, optional): attach as a child note under this item; omit for a standalone note

  • tags (string[], optional)

Use for recording reading notes, screening decisions, or extraction summaries against a reference.

zotero_create_collectionA

Create a new collection (folder) in the Zotero library.

Args:

  • name (string, required)

  • parent_collection_key (string, optional): nest under this collection; omit for a top-level collection

Returns the new collection's key, for use with zotero_add_items_to_collection.

zotero_add_items_to_collectionA

Add one or more existing items to a Zotero collection, without needing to fetch or manage version numbers.

Args:

  • collection_key (string, required)

  • item_keys (string[], required, max 50)

This adds to the collection; it does not remove the items from any collection they're already in, and does not affect other items already in the target collection.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/adolinjonathan-bot/zotero-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server