zotero-library-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ZOTERO_API_KEY | Yes | API key with read/write permissions | |
| CROSSREF_MAILTO | No | Your email for CrossRef polite pool (faster API access) | |
| ZOTERO_LIBRARY_ID | Yes | Your Zotero user or group library ID | |
| ZOTERO_WEBDAV_URL | No | WebDAV URL for file storage | |
| ZOTERO_WEBDAV_USER | No | WebDAV username | |
| ZOTERO_LIBRARY_TYPE | No | Type of library: 'user' (default) or 'group' | user |
| ZOTERO_WEBDAV_PASSWORD | No | WebDAV password |
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 |
|---|---|
| add_paper_by_doiA | Add a paper to your Zotero library by its DOI. Resolves metadata automatically via CrossRef and creates the item in Zotero. Optionally add it to a specific collection. Args: doi: The DOI of the paper (e.g. "10.1038/nature12373") collection_id: Optional Zotero collection key to add the paper to |
| add_papers_by_doisA | Add multiple papers to Zotero by their DOIs (batch, up to 50). Args: dois: List of DOIs to add collection_id: Optional Zotero collection key to add all papers to |
| add_paper_by_arxiv_idA | Add a paper to your Zotero library by its arXiv ID. Fetches metadata from the arXiv API. If the paper has a DOI, resolves it via CrossRef for richer metadata; otherwise creates a preprint entry directly. Optionally add it to a specific collection. Args: arxiv_id: The arXiv ID of the paper (e.g. "2301.07041") collection_id: Optional Zotero collection key to add the paper to |
| add_book_by_isbnA | Add a book to your Zotero library by its ISBN. Resolves metadata automatically via Open Library and creates the item in Zotero. Optionally add it to a specific collection. Args: isbn: The ISBN of the book (e.g. "9780262046824") collection_id: Optional Zotero collection key to add the book to |
| add_item_from_metadataB | Add an item from manual, CSL-like, or previously parsed metadata. The Zotero item template determines which fields are accepted for the requested item type, preventing invalid cross-type metadata. |
| get_unfiled_itemsA | Get items that are not in any collection (unfiled items). Args: limit: Maximum number of items to return (default 25) |
| search_libraryA | Search your Zotero library. Falls back to fuzzy matching if the exact search returns no results. Args: query: Search query (searches titles, authors, tags, etc.) limit: Maximum number of results per page (default 10, max 100) start: Offset of the first result; pass the value suggested by the previous call's footer to fetch the next page (default 0) |
| get_item_detailsA | Get full details of a Zotero item by its key. Args: item_key: The Zotero item key |
| get_bibtexA | Export BibTeX entries from your Zotero library. Can export specific items, an entire collection, or your whole library. Use save_bibtex when the export should be written to a local file. Args: item_keys: Optional list of item keys to export. If omitted, exports collection or full library. collection_id: Optional collection key to export all items from. include_abstract: Include abstracts in BibTeX output (default False to save tokens). biblatex: Convert output to BibLaTeX format (default False). Remaps fields like journal→journaltitle, address→location, and merges year+month into date. max_chars: Maximum response size; use save_bibtex for larger full-library exports |
| save_bibtexA | Export BibTeX or BibLaTeX and atomically write it to a local file. Path writes are available by default over local stdio. HTTP deployments must explicitly allow a confined file root. |
| get_item_fulltextA | Get bounded plain text from a paper's PDF or Zotero full-text index. Unlike download_pdf, this returns readable text directly and never exposes a server-local temporary path. Args: item_key: The Zotero item key (the parent item, not the attachment) attachment_key: Optional PDF attachment key when an item has several PDFs max_chars: Maximum number of characters to return (1,000-200,000) |
| delete_itemA | Permanently delete an item from your Zotero library. Args: item_key: The Zotero item key to delete |
| get_recent_itemsA | Get recently added items from your Zotero library. Args: limit: Maximum number of items to return (default 10) |
| verify_itemsA | Verify that recently added items have valid DOIs that match CrossRef metadata. Re-resolves each item's DOI via CrossRef and compares the title. Reports items that have no DOI, DOIs that don't resolve, or title mismatches. Args: limit: Number of recent items to check (default 10) |
| health_checkA | Check Zotero credentials, library access, and optional file storage setup. |
| list_attachmentsB | List attachment keys, filenames, MIME types, links, and sizes for an item. |
| update_item_metadataA | Update selected bibliographic fields and optionally replace creators. Immutable/internal fields such as item type, key, version, parent item, collections, tags, and deletion state cannot be changed through this tool. |
| trash_itemA | Move an item to Zotero's trash so it can be restored later. |
| restore_itemB | Restore an item from Zotero's trash. |
| find_duplicatesA | Find duplicate top-level items by DOI, ISBN, or normalized title. |
| search_fulltextA | Search Zotero metadata and indexed full text using qmode=everything. |
| searchC | Company-knowledge compatible search over Zotero items and full text. |
| fetchB | Company-knowledge compatible fetch for one Zotero item key. |
| list_collectionsA | List all collections in your Zotero library. |
| add_to_collectionA | Add an existing Zotero item to a collection. Args: item_key: The Zotero item key (from search results) collection_id: The collection key to add it to |
| remove_from_collectionA | Remove an item from a collection without deleting it from the library. Args: item_key: The Zotero item key collection_id: The collection key to remove it from |
| create_collectionA | Create a new collection in your Zotero library. Args: name: Name for the new collection parent_collection_id: Optional parent collection key to nest under |
| delete_collectionA | Permanently delete a collection from your Zotero library. Items in the collection are NOT deleted — they remain in your library. Args: collection_id: The collection key to delete |
| get_collection_itemsA | Get items in a specific collection, one page at a time. Args: collection_id: The collection key to browse limit: Maximum number of items to return per page (default 25, max 100) start: Offset of the first item; pass the value suggested by the previous call's footer to fetch the next page (default 0) |
| rename_collectionA | Rename a Zotero collection without changing its parent. |
| move_collectionA | Move a collection under another collection, or to the library root. |
| list_tagsA | List all tags in your Zotero library. Args: limit: Maximum number of tags to return (default 100) |
| delete_tagsA | Delete tags from the entire Zotero library. This removes the tags from all items. Args: tags: List of tag names to delete from the library |
| add_tagsA | Add one or more tags to a Zotero item. Optionally assign a color to all added tags. Args: item_key: The Zotero item key tags: List of tags to add color: Optional hex color code (e.g. '#FF0000') to assign to the added tags |
| remove_tagsA | Remove one or more tags from a Zotero item. Args: item_key: The Zotero item key tags: List of tags to remove |
| set_tag_colorA | Assign a color to a tag in the Zotero library. Colored tags appear in the tag selector and item lists. Args: tag: The tag name to colorize color: Hex color code (e.g. '#FF0000' for red, '#3366CC' for blue) position: Sort position for the colored tag (0-8, lower = higher priority) |
| rename_tagA | Rename a tag across all items in the Zotero library. Args: old_name: The current tag name new_name: The new tag name to replace it with |
| unset_tag_colorA | Remove a tag's assigned library color without deleting the tag. |
| add_noteA | Add a note to a Zotero item. The note is created as a child of the specified item. Supports HTML formatting (e.g. bold, italic, lists). Args: item_key: The parent Zotero item key to attach the note to note: The note content (plain text or HTML) |
| create_annotationA | Highlight a text passage in a PDF attached to a Zotero item. Searches the PDF for the quoted text and creates a visible highlight annotation in Zotero's PDF reader. Uses three strategies in order: exact match, normalized word match, and fuzzy match (for OCR errors, hyphenation differences, or minor transcription mismatches). Smart overlap handling:
Args: item_key: The Zotero item key (the parent item, not the attachment) quoted_text: The text passage to highlight in the PDF (fuzzy matching handles minor differences from the actual PDF text) comment: Optional comment to attach to the highlight color: Highlight color as hex (default "#ffd400" yellow) max_l_dist: Maximum Levenshtein distance for fuzzy matching. Default is ~20% of the search text length. Increase if the PDF has many OCR errors; decrease for stricter matching. attachment_key: Optional PDF attachment key when the item has multiple PDFs page_number: Optional one-based page number to search occurrence: One-based occurrence to highlight when text repeats |
| get_annotationsA | List all highlights and annotations on a paper's PDF. Args: item_key: The Zotero item key (the parent item, not the attachment) limit: Maximum number of annotations to return (default 100) |
| attach_fileA | Attach a ChatGPT file input or an authorized local file to an item. Args: item_key: The Zotero item key to attach the file to file: File object supplied by ChatGPT through openai/fileParams file_path: Local server path; stdio only unless HTTP roots are explicitly enabled |
| download_pdfA | Return a PDF as a remote-safe MCP resource link. Useful when Zotero's fulltext index is incomplete (e.g. for books) and you need to read the PDF directly with other tools. Args: item_key: The Zotero item key (the parent item, not the attachment) attachment_key: Optional PDF attachment key when the item has multiple PDFs |
| save_pdfB | Save a Zotero PDF to an authorized local server path. |
| list_notesA | List child notes for an item with bounded note content. |
| update_noteA | Replace the content of an existing Zotero note. |
| delete_noteA | Permanently delete a Zotero note. |
| update_annotationB | Update the comment and/or highlight color of an annotation. |
| delete_annotationA | Permanently delete a Zotero annotation. |
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/RaulSimpetru/zotero-library-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server