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. |
Capabilities
Features and capabilities supported by this server
| 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