Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
PORTNoPort for TRANSPORT=http (default: 3000)3000
TRANSPORTNoTransport protocol: 'stdio' (default) or 'http'stdio
ZOTERO_API_KEYYesThe Zotero API key generated from https://www.zotero.org/settings/keys
ZOTERO_LIBRARY_IDYesNumeric user ID or group ID
ZOTERO_API_BASE_URLNoOverride for the local Zotero desktop API (http://localhost:23119/api/) instead of https://api.zotero.org
ZOTERO_LIBRARY_TYPEYesEither '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

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
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:

  • query (string, optional): Quick-search text

  • query_mode ('titleCreatorYear' | 'everything'): search scope (default: 'titleCreatorYear')

  • item_type (string, optional): Zotero item type filter, supports '||' (OR) and leading '-' (NOT)

  • tag (string, optional): tag filter, supports the same boolean syntax

  • collection_key (string, optional): restrict to one collection

  • include_trashed (boolean): include trashed items (default: false)

  • limit (number): 1-100 (default: 25)

  • offset (number): pagination offset (default: 0)

  • response_format ('markdown' | 'json')

Returns: matching items with type, creators, year, title, DOI/URL, tags, and a trimmed abstract.

Examples:

  • Use when: "find items about resistencia cotidiana in my library" -> query="resistencia cotidiana"

  • Use when: "list all journal articles tagged putumayo" -> item_type="journalArticle", tag="putumayo"

  • Don't use when: you need items from a specific known key (use zotero_get_item instead)

Error Handling:

  • Returns "Error: Permission denied (403)" if the API key lacks access to this library

  • Returns "No items found matching the given criteria" if the search is empty

zotero_get_itemA

Retrieve full metadata for a single item by its key, optionally including a formatted bibliography entry.

Args:

  • item_key (string): 8-character Zotero item key

  • include_bibliography (boolean): also return a formatted reference (default: false)

  • citation_style (string): CSL style name for the bibliography, e.g. 'apa' (default: 'apa')

  • response_format ('markdown' | 'json')

Returns: full item data (type, creators, title, date, DOI/URL, abstract, tags, collections, notes count), plus a formatted bibliography entry if requested.

Examples:

  • Use when: "get the full record for item X42A7DEE" -> item_key="X42A7DEE"

  • Use when: "give me an APA citation for this item" -> include_bibliography=true, citation_style="apa"

  • Don't use when: searching by title/author (use zotero_search_items instead)

Error Handling:

  • Returns "Error: Not found (404)" if the item key doesn't exist in this library

zotero_get_item_childrenA

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

Args:

  • item_key (string): 8-character Zotero key of the PARENT item

  • only_notes (boolean): return only notes, excluding attachments (default: false)

  • limit (number): 1-100 (default: 25)

  • offset (number): pagination offset (default: 0)

  • response_format ('markdown' | 'json')

Returns: child items with their type (note/attachment), and for notes, the note text.

Examples:

  • Use when: "does this item have any notes attached?" -> item_key=, only_notes=true

  • Don't use when: you want top-level library items (use zotero_search_items instead)

Error Handling:

  • Returns "Error: Not found (404)" if the parent item key doesn't exist

zotero_list_collectionsA

List the collections (folders) in a Zotero library, optionally scoped to one parent collection.

Args:

  • top_level_only (boolean): only top-level collections (default: false)

  • parent_collection_key (string, optional): list subcollections of this collection instead of the whole library

  • limit (number): 1-100 (default: 25)

  • offset (number): pagination offset (default: 0)

  • response_format ('markdown' | 'json')

Returns: collections with their key, name, parent, and item count.

Examples:

  • Use when: "what collections do I have?" -> top_level_only=true

  • Use when: "list the subfolders inside my 'Putumayo' collection" -> parent_collection_key=

  • Don't use when: you want the items inside a collection (use zotero_search_items with collection_key instead)

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:

  • name (string): collection name, 1-255 characters

  • parent_collection_key (string, optional): parent collection key, for a subcollection

Returns: the key of the newly created collection.

Examples:

  • Use when: "create a collection called 'Estado del arte - Resistencia'" -> name="Estado del arte - Resistencia"

  • Don't use when: the collection may already exist — check with zotero_list_collections first to avoid duplicates

Error Handling:

  • Returns "Error: Permission denied (403)" if the API key lacks write access

  • Returns "Error: Library locked (409)" if a sync is in progress — retry shortly

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:

  • name_filter (string, optional): substring (or prefix, with starts_with) to match against tag names

  • starts_with (boolean): match only the start of tag names (default: false)

  • collection_key (string, optional): restrict to tags used within one collection

  • limit (number): 1-100 (default: 25)

  • offset (number): pagination offset (default: 0)

  • response_format ('markdown' | 'json')

Returns: tag names with the number of items carrying each one.

Examples:

  • Use when: "what tags start with 'linea-'?" -> name_filter="linea-", starts_with=true

  • Use when: "list all tags used in my Putumayo collection" -> collection_key=

  • Don't use when: you want the items with a specific tag (use zotero_search_items with tag= instead)

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:

  • item_type (string): e.g. 'journalArticle', 'book', 'thesis', 'report', 'webpage'

  • title (string): required

  • creators (array, optional): [{creator_type, first_name, last_name}] or [{creator_type, name}] for institutional authors

  • date, abstract_note, url, doi, publication_title, publisher, place, language, extra (all optional strings)

  • tags (string array, optional)

  • collection_keys (string array, optional): file the item into one or more existing collections

Returns: the key of the newly created item.

Examples:

  • Use when: "add this article to my library: Hollander & Einwohner (2004), 'Conceptualizing Resistance', Sociological Forum" -> item_type="journalArticle", title="Conceptualizing Resistance", creators=[{creator_type:"author", first_name:"Jocelyn A.", last_name:"Hollander"}, {creator_type:"author", first_name:"Rachel L.", last_name:"Einwohner"}], publication_title="Sociological Forum", date="2004"

  • Don't use when: the item may already be in the library — search first with zotero_search_items to avoid duplicates

Error Handling:

  • Returns "Error: Permission denied (403)" if the API key lacks write access

  • Returns "Error: Zotero rejected the item" with the specific field/type problem if item_type is invalid

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:

  • parent_item_key (string): 8-character key of the item to attach the note to

  • note_text (string): note content — plain text or basic HTML

  • tags (string array, optional): tags for the note itself

Returns: the key of the newly created note.

Examples:

  • Use when: "add a note to item ABCD1234 saying it belongs to the 'resistencia cotidiana' line" -> parent_item_key="ABCD1234", note_text="Línea teórica: resistencia cotidiana."

  • Don't use when: you want to change the item's own fields (use zotero_update_item_tags for tags, or edit directly in Zotero for other fields)

Error Handling:

  • Returns "Error: Not found (404)" if parent_item_key doesn't exist

  • Returns "Error: Permission denied (403)" if the API key lacks write access

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:

  • item_key (string): 8-character key of the item to update

  • add_tags (string array): tags to add

  • remove_tags (string array): tags to remove

Returns: the item's updated tag list.

Examples:

  • Use when: "tag item ABCD1234 as verified and remove the 'pendiente' tag" -> item_key="ABCD1234", add_tags=["verificado"], remove_tags=["pendiente"]

  • Don't use when: you're creating a new item (use zotero_create_item, which accepts tags directly)

Error Handling:

  • Returns "Error: Version conflict (412)" if the item changed since being read — retry the call, which re-fetches the current version each time

  • Returns "Error: Not found (404)" if item_key doesn't exist

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/andresrocha99/zotero-mcp-server-v2'

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