Zotero-MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ZOTERO_API_KEY | No | Your Zotero API key with library access and write permission. | |
| ZOTERO_LIBRARY_ID | No | Your Zotero user ID for API calls (numeric). | |
| ZOTERO_MCP_ENV_FILE | No | Path to the .env file containing ZOTERO_API_KEY and ZOTERO_LIBRARY_ID. If provided, the server reads credentials from this file. Alternatively, provide ZOTERO_API_KEY and ZOTERO_LIBRARY_ID directly. |
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": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| zotero_check_setupA | Diagnose the connection to Zotero. Run this first if anything fails. |
| zotero_searchA | Search the Zotero library and return matching references. Use this before citing anything, to find the item keys that the Word tools need. Args: query: Free-text search. Leave empty to browse. item_type: Restrict to a type, e.g. "journalArticle", "book". Prefix with "-" to exclude, e.g. "-attachment". tag: Restrict to a tag. Supports "tagA || tagB" for OR. collection_key: Restrict to one collection. search_mode: "titleCreatorYear" (default) or "everything" to also search full text of attachments and notes. limit: Max results, 1-100. sort: dateModified, dateAdded, title, creator, date, or itemType. direction: "asc" or "desc". top_level_only: Skip notes and attachments that hang off an item. |
| zotero_get_itemA | Fetch one reference in full, including its notes and attachments. Args: item_key: The 8-character Zotero item key. include_children: Also return child notes and attachments. |
| zotero_list_collectionsA | List collections (folders) in the library. Args: parent_collection_key: List sub-collections of this collection. Omit for top-level collections. |
| zotero_list_tagsA | List tags used in the library, optionally filtered by a substring. |
| zotero_list_saved_searchesA | List the saved searches defined in Zotero. |
| zotero_get_fulltextA | Read the indexed full text of an attachment (usually a PDF). Zotero must have indexed the attachment. Pass an attachment key, not the parent reference key -- use zotero_get_item to find it. |
| zotero_list_librariesA | List the personal library and any group libraries you can access. |
| zotero_item_type_templateA | Get the empty field template for an item type. Call this before zotero_create_item when you are unsure which fields a type accepts (they differ a lot between, say, "thesis" and "bill"). |
| zotero_list_item_typesA | List every item type Zotero supports. |
| zotero_create_itemA | Create a new reference in the Zotero library. Args: item_type: e.g. "journalArticle", "book", "bookSection", "report", "thesis", "webpage". Call zotero_list_item_types to see all. title: The item title. creators: List of {"creatorType": "author", "firstName": "...", "lastName": "..."} or {"creatorType": "author", "name": "..."} for institutional authors. date: Publication date, e.g. "2024" or "2024-03-15". fields: Any other Zotero fields for this type, e.g. {"publicationTitle": "Nature", "volume": "620", "DOI": "10.1038/..."}. Use zotero_item_type_template to see which fields are valid. tags: Tag names to attach. collection_keys: Collections to file the item into. |
| zotero_import_identifierA | Look up a DOI, arXiv id or ISBN and save it as a Zotero reference. This is the fastest way to add a source you have a citation for. The metadata comes from CrossRef (DOI/arXiv) or Open Library (ISBN). Args: identifier: e.g. "10.1038/nature12373", "arXiv:2103.00020", "isbn:9780262033848". Bare identifiers are auto-detected. collection_keys: Collections to file the new item into. tags: Tags to attach. |
| zotero_update_itemA | Change fields on an existing reference. Only the fields you pass are modified. The item's current version is read first, so a concurrent edit in Zotero surfaces as a clear conflict rather than silently overwriting. Args: item_key: The 8-character item key. changes: Fields to set, e.g. {"title": "...", "date": "2024"}. For tags pass {"tags": [{"tag": "x"}]} (this replaces all tags). |
| zotero_delete_itemA | Move a reference to the Zotero trash. This is Zotero's normal delete: the item goes to the trash, where you can restore it. It is not an immediate permanent deletion. |
| zotero_add_noteA | Attach a note to a reference, or create a standalone note. Args: text: Note content. Plain text is converted to simple HTML; if you pass HTML it is stored as-is. parent_item_key: Attach the note to this reference. Omit for a standalone note. tags: Tags for the note. |
| zotero_add_tagsA | Add tags to a reference, keeping the tags it already has. |
| zotero_attach_linkA | Attach a web link to a reference. This creates a link attachment (a URL), not an uploaded file. Uploading actual files is not supported yet -- drag them into Zotero directly. |
| zotero_create_collectionB | Create a collection (folder), optionally nested under another. |
| zotero_set_item_collectionsC | File a reference into collections, or take it out of them. |
| zotero_format_citationA | Render references as formatted citation and bibliography text. Use this for previewing, or for output that is not a Word document (email, markdown, a slide). For Word documents use word_insert_citation instead, which inserts live Zotero fields rather than dead text. Args: item_keys: Zotero item keys, from zotero_search. style: CSL style id, e.g. "apa", "ieee", "vancouver". Defaults to ZOTERO_DEFAULT_STYLE. locale: e.g. "en-US", "ca-AD", "es-ES". |
| zotero_list_stylesA | List available CSL citation styles. Args: query: Filter by substring, e.g. "chicago", "medical", "nature". |
| word_document_outlineA | Map a .docx paragraph by paragraph, so you can choose where to cite. Returns each non-empty paragraph with its index and a text preview. Read this before inserting, so anchor text matches the document exactly. |
| word_list_citationsA | List the Zotero citations already present in a .docx. |
| word_insert_citationA | Insert a live Zotero citation field into a Word document. The inserted citation is a real Zotero field, not text: in Word, Zotero's Refresh will update it and changing the document style will reformat it. The document must be CLOSED in Word. A .docx.bak backup is written next to it on every change. Args: document_path: Path to the .docx file. item_keys: One or more Zotero item keys (from zotero_search). Pass several to build a single multi-source citation. anchor_text: Insert immediately after this exact text. Get it from word_document_outline so it matches the document character for character. Use this OR paragraph_index. paragraph_index: Insert at the start or end of this paragraph. position: "end" (default) or "start", used with paragraph_index. locator: Page or range to cite, e.g. "45" or "45-47". prefix: Text before the citation, e.g. "see also". suffix: Text after the citation. suppress_author: Omit the author, for "as Smith (2020) argued". style: CSL style for the document. Only applied if the document has no Zotero style set yet. |
| word_insert_bibliographyA | Insert or refresh the bibliography field, built from the document's citations. Reads every Zotero citation already in the document, renders the corresponding bibliography entries, and writes them into a live ZOTERO_BIBL field. An existing bibliography is replaced. Args: document_path: Path to the .docx file. paragraph_index: Place the bibliography after this paragraph. Omit to append it at the end of the document. heading: Optional heading to insert above it, e.g. "References". style: Only used if the document has no Zotero style set yet. |
| word_set_citation_styleA | Set which CSL style a Word document uses. This writes Zotero's document-preferences fields. After running it, open the document in Word and click Zotero > Refresh: every citation and the bibliography reformat into the new style automatically. Args: document_path: Path to the .docx file. style: CSL style id, e.g. "apa", "ieee", "vancouver". Use zotero_list_styles to browse. locale: e.g. "en-US", "ca-AD", "es-ES". |
| word_remove_citationA | Remove a Zotero citation field from a document. Args: document_path: Path to the .docx file. citation_id: From word_list_citations. keep_text: Leave the rendered citation behind as plain text. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/RogerAylagas/Zotero-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server