io.github.RaulSimpetru/zotero-library-mcp
Add papers and books to Zotero by DOI, arXiv ID, or ISBN and manage your library
Ask AI about io.github.RaulSimpetru/zotero-library-mcp
Powered by Claude Β· Grounded in docs
I know everything about io.github.RaulSimpetru/zotero-library-mcp. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
zotero-library-mcp
An MCP server that lets AI assistants add papers and books to your Zotero library by DOI, arXiv ID, or ISBN β and manage your collections, tags, and items.
Tools
Adding papers
add_paper_by_doiβ Resolve a DOI via CrossRef and add the paper to Zotero (with duplicate detection)add_papers_by_doisβ Batch-add up to 50 papers at onceadd_paper_by_arxiv_idβ Add a preprint by arXiv ID (uses DOI when available, falls back to arXiv metadata)
Adding books
add_book_by_isbnβ Resolve an ISBN via Open Library and add the book to Zotero (with duplicate detection)
Searching & browsing
search_libraryβ Search your Zotero library by title, author, tag, etc.get_item_detailsβ View full metadata for any itemget_recent_itemsβ List recently added itemsget_unfiled_itemsβ Get items not in any collection
Reading & annotating
get_item_fulltextβ Get the full text of an indexed PDFget_bibtexβ Export BibTeX for one or more items, a collection, or your full library (with optionalsave_pathto write a.bibfile directly)get_annotationsβ List all highlights and annotations on a paper's PDFcreate_annotationβ Highlight a text passage in a PDF (searches for the exact text, creates a visible highlight in Zotero's reader, and returns a preview image for verification). Smart overlap handling: exact duplicates update the existing comment; sub-passages get a contrasting highlight color automatically.add_noteβ Add a note to an item
File attachments
attach_fileβ Attach a local file to an itemdownload_pdfβ Download a PDF attachment to a local file (useful when Zotero's fulltext index is incomplete)
Collections
list_collectionsβ List all collections (with nesting)create_collectionβ Create a new collection (optionally nested under a parent)get_collection_itemsβ Browse items in a collectionadd_to_collectionβ Add an existing item to a collectionremove_from_collectionβ Remove an item from a collection (keeps it in your library)
Tags
list_tagsβ List all tags in your libraryadd_tagsβ Add one or more tags to an item (with optional color)remove_tagsβ Remove tags from an itemdelete_tagsβ Delete tags from the entire libraryset_tag_colorβ Assign a color to a tag (appears in Zotero's tag selector)rename_tagβ Rename a tag across all items in your library
Verification
verify_itemsβ Re-check recent items against CrossRef to catch bad DOIs or title mismatches
Deleting
delete_itemβ Permanently delete an item from your librarydelete_collectionβ Permanently delete a collection
Prerequisites
- A Zotero account
- A Zotero API key with write permissions: https://www.zotero.org/settings/keys
- Your Zotero library ID (shown on the same page, or in your profile URL)
- uv installed
Quick Start
Claude Code
claude mcp add zotero \
-e ZOTERO_LIBRARY_ID=your_library_id \
-e ZOTERO_API_KEY=your_api_key \
-- uvx --from git+https://github.com/RaulSimpetru/zotero-library-mcp zotero-mcp
WebDAV setup
To use WebDAV file storage (e.g. Synology, Nextcloud), include the WebDAV variables:
claude mcp add zotero \
-e ZOTERO_LIBRARY_ID=your_library_id \
-e ZOTERO_API_KEY=your_api_key \
-e ZOTERO_WEBDAV_URL=https://your-webdav-server.com \
-e ZOTERO_WEBDAV_USER=your_username \
-e ZOTERO_WEBDAV_PASSWORD=your_password \
-- uvx --from git+https://github.com/RaulSimpetru/zotero-library-mcp zotero-mcp
Claude Desktop
Add this to your claude_desktop_config.json:
{
"mcpServers": {
"zotero": {
"command": "/full/path/to/uvx",
"args": ["--from", "git+https://github.com/RaulSimpetru/zotero-library-mcp", "zotero-mcp"],
"env": {
"ZOTERO_LIBRARY_ID": "your_library_id",
"ZOTERO_API_KEY": "your_api_key",
"ZOTERO_WEBDAV_URL": "https://your-webdav-server.com",
"ZOTERO_WEBDAV_USER": "your_username",
"ZOTERO_WEBDAV_PASSWORD": "your_password"
}
}
}
}
Note: Claude Desktop doesn't inherit your shell's PATH, so you need the full path to
uvx. Find it withwhich uvxin your terminal.
Run standalone
ZOTERO_LIBRARY_ID=your_id ZOTERO_API_KEY=your_key \
uvx --from git+https://github.com/RaulSimpetru/zotero-library-mcp zotero-mcp
Environment Variables
| Variable | Required | Description |
|---|---|---|
ZOTERO_LIBRARY_ID | Yes | Your Zotero user or group library ID |
ZOTERO_API_KEY | Yes | API key with read/write permissions |
ZOTERO_LIBRARY_TYPE | No | user (default) or group |
CROSSREF_MAILTO | No | Your email for CrossRef polite pool (faster API access) |
ZOTERO_WEBDAV_URL | No | WebDAV URL for file storage (e.g. https://dav.example.com) |
ZOTERO_WEBDAV_USER | No | WebDAV username |
ZOTERO_WEBDAV_PASSWORD | No | WebDAV password |
Note: If all three
ZOTERO_WEBDAV_*variables are set, file attachments are uploaded to your WebDAV server instead of Zotero's built-in storage. The server automatically appends/zoteroto the base URL, matching Zotero Desktop's behavior.
How it works
- You provide a DOI, arXiv ID, or ISBN
- The server queries the appropriate API to get full metadata:
- DOI β CrossRef API
- arXiv ID β arXiv API (with CrossRef fallback when a DOI exists)
- ISBN β Open Library API
- Metadata is mapped to Zotero's item format (title, authors, journal/publisher, date, etc.)
- The item is created in your Zotero library via the Zotero Web API
License
MIT
mcp-name: io.github.RaulSimpetru/zotero-library-mcp
