Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
ZOTERO_LOCALNoSet to 'true' to use Zotero's local HTTP server (no API key required).false
ZOTERO_API_KEYNoAPI key from zotero.org settings (required for web API mode).
ZOTERO_LIBRARY_IDNoYour user or group library ID (required for web API mode).
ZOTERO_LIBRARY_TYPENoYour library type: 'user' or 'group'. Defaults to 'user'.user

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": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
zotero_item_metadataA

Get the complete metadata for a specific Zotero item, given the item key. Includes the citation key, publication details, identifiers, and timestamps.

zotero_item_fulltextA

Get the full text content of a Zotero item, given the item key of a parent item or specific attachment.

zotero_search_itemsA

Search for items in your Zotero library. Returns a summary of each match; look up individual results with zotero_item_metadata or zotero_item_fulltext.

Choosing a query mode:

  • 'titleCreatorYear' (the default) searches titles, creator names, and years. Use it for known-item lookup, where you know roughly what the item is called or who wrote it.

  • 'everything' additionally searches abstracts, the Extra field, note text, and the full text of attachments. Use it for topic and full-text search, where the term would not appear in a title.

Words match by prefix, and space-separated words must all be present though not necessarily adjacent, so 'cybor insect' matches 'Cyborg Insect'. A hyphen separates words and switches the match to OR: 'oxygen-deprived' matches anything containing 'oxygen' or 'deprived', which is far broader than intended. Write hyphenated terms with a space to require both halves.

zotero_list_collectionsA

List all collections (folders) in the Zotero library as a tree, with each collection's key, name, parent, and item count. Use these keys with the other write tools to organize your library.

zotero_list_collection_itemsA

List the top-level items (works) in a collection, with key, type, title, and date. Use to review a collection's contents before moving items in or out. Child attachments/notes are not listed.

zotero_create_collectionA

Create a new collection (folder) in the Zotero library, optionally nested under a parent collection. Returns the new collection's key.

zotero_delete_collectionA

Delete a collection. The collection's items are NOT deleted from the library unless delete_items=true — by default they just lose this folder.

zotero_add_items_to_collectionA

Add one or more items to a collection. An item can live in multiple collections; this never removes it from others. Use zotero_list_collections to get keys.

zotero_remove_items_from_collectionA

Remove one or more items from a collection. This only takes them out of that folder; the items stay in the library and in any other collections they belong to.

zotero_update_item_fieldsA

Update fields of an item, e.g. to fix a missing title, date, publication, or abstract, or to set tags (tags: [{'tag': 'x'}]). Pass only the fields to change; everything else is untouched. Use zotero_item_metadata first to see the current values. Collections are NOT edited here — use the dedicated collection tools.

zotero_delete_itemsA

Move items to Zotero's trash (recoverable via zotero_restore_items). Note: the local API's true DELETE is permanent, so this tool marks the items deleted instead; to purge permanently, list the trash and empty it with zotero_empty_trash. Use for duplicates. Requires confirm=true.

zotero_create_itemA

Create a new empty item in the library, e.g. a journalArticle, book, report, or webpage. Pass only the fields you want set (title, date, creators, ...). Use zotero_item_metadata on an existing item to see valid field names for its type. Returns the new item's key.

zotero_change_item_typeA

Change an item's type (e.g. journalArticle -> bookSection). Zotero silently drops fields that do not exist on the new type, so pass field_map to move values across, e.g. {'publicationTitle': 'bookTitle'}. The old values stay in the new fields when the names map.

zotero_create_noteA

Create a note. With parent_item_key it becomes a child note of that item; without it, a standalone note. Content is HTML, e.g. 'text'. Returns the new note's key.

zotero_update_noteA

Replace a note's content with new HTML. The old content is overwritten; fetch it first with zotero_item_metadata if you need to edit rather than replace.

zotero_create_annotationA

Create an annotation on a PDF attachment: a highlight, a note annotation, an image, or ink. annotation_position is the page placement as a JSON object, e.g. {'pageIndex': 0, 'rects': [[x1, y1, x2, y2]]} in PDF coordinates. Attach to the ATTACHMENT key (the PDF), not the parent item. Returns the new annotation's key.

zotero_create_saved_searchA

Create a saved (dynamic) search that Zotero keeps in the left sidebar and that re-evaluates automatically. Conditions format: [{'condition': 'title', 'operator': 'contains', 'value': 'x'}]. Common conditions: title, creator, date, tag, publicationTitle, abstractNote, itemType; common operators: contains, doesNotContain, is, isNot, beginsWith, isBefore, isAfter. Returns the new search's key.

zotero_update_saved_searchA

Update a saved search's name and/or its conditions. Only the parts you pass are changed; conditions are replaced wholesale when provided.

zotero_delete_saved_searchA

Delete a saved search. Its items are untouched (a saved search is just a query).

zotero_run_saved_searchA

Execute a saved search and return the matching top-level items. This is a LOCAL-API-ONLY capability: the Zotero Web API exposes saved searches as metadata but cannot run them.

zotero_upload_fileA

Attach a local file to an item: creates a stored-file (imported file) child attachment and uploads the file into it. If you pass an attachment key instead, the file is uploaded to that existing attachment (fails if one is already stored). Supported for imported-file attachments, not linked URLs.

zotero_download_fileA

Download an item's stored attachment file from Zotero to a path on disk. Works for imported_file attachments (pass the attachment key, or a parent item to auto-pick its best attachment). Link-mode attachments have no stored file.

zotero_write_fulltextA

Write (or replace) an attachment's indexed full-text content so zotero_item_fulltext and full-text search can read it. Use for attachments whose text Zotero could not extract (scans, exotic formats) — pass the text you extracted yourself.

zotero_list_tagsA

List tags used across the library, with how many items carry each. Use 'prefix' to list only tags starting with a string.

zotero_delete_tagA

Delete a tag from every item that carries it. Implemented by rewriting each affected item's tags (the local API has no direct tag-delete endpoint); a few hundred items is fine, tens of thousands is not.

zotero_list_trashA

List items currently in Zotero's trash (deleted but recoverable).

zotero_restore_itemsA

Restore items from the trash back into the library.

zotero_empty_trashA

Permanently delete EVERY item in the trash. This cannot be undone. Requires confirm=true.

zotero_list_settingsA

List all library settings stored in Zotero, as JSON.

zotero_set_settingA

Set one library setting (a key under /settings), e.g. syncing metadata used by plugins. Overwrites the previous value.

zotero_list_groupsA

List the Zotero group libraries the logged-in user belongs to (read-only metadata; group CONTENTS are maintained by the server, not locally).

zotero_list_changesA

Track what changed since a version: returns key -> version for every item, collection, or search modified since the given library version. Use since=0 (or omit) for everything, and feed the returned highest version back next time.

zotero_bulk_update_fieldsA

Apply a field patch to MANY items in one call (e.g. fixing a hundred titles). Each entry: {'key': 'ABCD1234', 'fields': {...}}. Same semantics as zotero_update_item_fields per item; each request carries its own Zotero-Write-Token for idempotency.

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/ozbayenes123-ops/zotero-mcp-local-write'

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