Zotero MCP seamlessly connects your Zotero research library with ChatGPT, Claude, and other AI assistants (e.g., Cherry Studio, Chorus, Cursor) via the Model Context Protocol. Review papers, get summaries, analyze citations, extract PDF annotations, and more!
- Vector-based similarity search over your entire research library (requires
[semantic]extra) - Multiple embedding models: Default (free, local), OpenAI, and Gemini
- Intelligent results with similarity scores and contextual matching
- Auto-updating database with configurable sync schedules
- Find papers, articles, and books by title, author, or content
- Perform complex searches with multiple criteria
- Browse collections, tags, and recent additions
- Semantic search for conceptual and topic-based discovery
- Retrieve detailed metadata for any item (markdown or BibTeX export)
- Get full text content (when available)
- Look up items by BetterBibTeX citation key
- Extract and search PDF annotations with page numbers
- Access Zotero's native annotations
- Create and update notes and annotations
- Extract PDF table of contents / outlines (requires
[pdf]extra)
- Add papers by DOI with auto-fetched metadata and open-access PDF cascade (Unpaywall, arXiv, Semantic Scholar, PMC)
- Add papers by URL (arXiv, DOI links, generic webpages) or from local files
- Create and manage collections, update item metadata, batch-update tags
- Find and merge duplicate items with dry-run preview
- Hybrid mode: local reads + web API writes for local-mode users
- Citation tallies: See how many papers support, contrast, or mention each item β the MCP version of the Scite Zotero Plugin
- Retraction alerts: Scan your library for retracted or corrected papers
- No Scite account required β uses public API endpoints
- Local mode for offline access (no API key needed)
- Web API for cloud library access
- Hybrid mode: read from local Zotero, write via web API
- Search, browse, and edit your library directly from the terminal β no AI assistant required
- Ideal for scripting, automation, and quick lookups
- Short aliases (
s,g,ann,coll) for interactive use
New to the command line? Try the community-built Zotero MCP Setup β includes a macOS GUI installer (DMG), one-click install scripts for Mac/Windows, and a step-by-step guide. No Terminal experience needed.
The base install is lightweight β it includes search, metadata retrieval, annotations, and write operations. No ML/AI dependencies are pulled in.
uv tool install zotero-mcp-server
zotero-mcp setup # Auto-configure (Claude Desktop supported)pip install zotero-mcp-server
zotero-mcp setup # Auto-configure (Claude Desktop supported)pipx install zotero-mcp-server
zotero-mcp setup # Auto-configure (Claude Desktop supported)Heavy ML/PDF dependencies are separated into optional extras so the base install stays fast and small:
| Extra | What it adds | Install command |
|---|---|---|
semantic |
Semantic search via ChromaDB, sentence-transformers, OpenAI/Gemini embeddings | pip install "zotero-mcp-server[semantic]" |
pdf |
PDF outline extraction (PyMuPDF) and EPUB annotation support | pip install "zotero-mcp-server[pdf]" |
scite |
Scite citation intelligence β tallies and retraction alerts (no account needed) | pip install "zotero-mcp-server[scite]" |
all |
Everything above | pip install "zotero-mcp-server[all]" |
For example, with uv:
uv tool install "zotero-mcp-server[all]" # Full install with all features
uv tool install "zotero-mcp-server[semantic]" # Just semantic searchIf you only need basic library access (search, read, annotate, write), the default install with no extras is all you need.
Keep zotero-mcp up to date with the smart update command:
# Check for updates
zotero-mcp update --check-only
# Update to latest version (preserves all configurations)
zotero-mcp updateZotero MCP now includes powerful AI-powered semantic search capabilities that let you find research based on concepts and meaning, not just keywords.
During setup or separately, configure semantic search:
# Configure during initial setup (recommended)
zotero-mcp setup
# Or configure semantic search separately
zotero-mcp setup --semantic-config-onlyAvailable Embedding Models:
- Default (all-MiniLM-L6-v2): Free, runs locally, good for most use cases
- OpenAI: Better quality, requires API key (
text-embedding-3-smallortext-embedding-3-large) - Gemini: Better quality, requires API key (
gemini-embedding-001)
Update Frequency Options:
- Manual: Update only when you run
zotero-mcp update-db - Auto on startup: Update database every time the server starts
- Daily: Update once per day automatically
- Every N days: Set custom interval
After setup, initialize your search database:
# Build the semantic search database (fast, metadata-only)
zotero-mcp update-db
# Build with full-text extraction (slower, more comprehensive)
zotero-mcp update-db --fulltext
# Use your custom zotero.sqlite path
zotero-mcp update-db --fulltext --db-path "/Your_custom_path/zotero.sqlite"
# If you have embedding conflicts or changed models, force a rebuild
zotero-mcp update-db --force-rebuild
# Check database status
zotero-mcp db-statusExample Semantic Queries in your AI assistant:
- "Find research similar to machine learning concepts in neuroscience"
- "Papers that discuss climate change impacts on agriculture"
- "Research related to quantum computing applications"
- "Studies about social media influence on mental health"
- "Find papers conceptually similar to this abstract: [paste abstract]"
The semantic search provides similarity scores and finds papers based on conceptual understanding, not just keyword matching.
Full documentation is available at Zotero MCP docs.
Requirements
- Python 3.10+
- Zotero 7+ (for local API with full-text access)
- An MCP-compatible client (e.g., Claude Desktop, ChatGPT Developer Mode, Cherry Studio, Chorus)
For ChatGPT setup: see the Getting Started guide.
After installation, either:
-
Auto-configure (recommended):
zotero-mcp setup
-
Manual configuration: Add to your
claude_desktop_config.json:{ "mcpServers": { "zotero": { "command": "zotero-mcp", "env": { "ZOTERO_LOCAL": "true", "ZOTERO_API_KEY": "YOUR_API_KEY", "ZOTERO_LIBRARY_ID": "YOUR_LIBRARY_ID" } } } }For local read-only use,
ZOTERO_LOCAL: "true"is all you need β drop theZOTERO_API_KEYandZOTERO_LIBRARY_IDlines entirely. Add them only to enable write mode: the local API is fast but read-only, so the server uses the Zotero web API for write operations.- Generate an API key from https://www.zotero.org/settings/security#applications.
ZOTERO_LIBRARY_IDis your numeric userID, shown on that same page (for a group library, use the group's ID and also setZOTERO_LIBRARY_TYPE: "group").
Tip: if Claude Desktop reports it can't find the
zotero-mcpcommand, use the absolute path instead (runzotero-mcp setup-infoorwhich zotero-mcpto find it) β GUI apps don't always inherit your shellPATH.
- Start Zotero desktop (make sure local API is enabled in preferences)
- Launch Claude Desktop
- Access the Zotero-MCP tool through Claude Desktop's tools interface
Example prompts:
- "Search my library for papers on machine learning"
- "Find recent articles I've added about climate change"
- "Summarize the key findings from my paper on quantum computing"
- "Extract all PDF annotations from my paper on neural networks"
- "Search my notes and annotations for mentions of 'reinforcement learning'"
- "Show me papers tagged '#Arm' excluding those with '#Crypt' in my library"
- "Search for papers on operating system with tag '#Arm'"
- "Export the BibTeX citation for papers on machine learning"
- "Find papers conceptually similar to deep learning in computer vision" (semantic search)
- "Research that relates to the intersection of AI and healthcare" (semantic search)
- "Papers that discuss topics similar to this abstract: [paste text]" (semantic search)
Go to Settings -> MCP Servers -> Edit MCP Configuration, and add the following:
{
"mcpServers": {
"zotero": {
"name": "zotero",
"type": "stdio",
"isActive": true,
"command": "zotero-mcp",
"args": [],
"env": {
"ZOTERO_LOCAL": "true"
}
}
}
}Then click "Save".
Cherry Studio also provides a visual configuration method for general settings and tools selection.
For accessing your Zotero library via the web API (useful for remote setups):
zotero-mcp setup --no-local --api-key YOUR_API_KEY --library-id YOUR_LIBRARY_IDZotero Connection:
ZOTERO_LOCAL=true: Use the local Zotero API (default: false)ZOTERO_API_KEY: Your Zotero API key (for web API)ZOTERO_LIBRARY_ID: Your Zotero library ID (for web API)ZOTERO_LIBRARY_TYPE: The type of library (user or group, default: user)ZOTERO_WEBDAV_URL: Optional WebDAV folder URL for direct attachment downloads in remote modeZOTERO_WEBDAV_USERNAME: Optional WebDAV usernameZOTERO_WEBDAV_PASSWORD: Optional WebDAV password
Semantic Search:
ZOTERO_EMBEDDING_MODEL: Embedding model to use (default, openai, gemini)OPENAI_API_KEY: Your OpenAI API key (for OpenAI embeddings)OPENAI_EMBEDDING_MODEL: OpenAI model name (text-embedding-3-small, text-embedding-3-large)OPENAI_BASE_URL: Custom OpenAI endpoint URL (optional, for use with compatible APIs)GEMINI_API_KEY: Your Gemini API key (for Gemini embeddings)GEMINI_EMBEDDING_MODEL: Gemini model name (gemini-embedding-001)GEMINI_BASE_URL: Custom Gemini endpoint URL (optional, for use with compatible APIs)ZOTERO_DB_PATH: Customzotero.sqlitepath (optional)
# Run the server directly
zotero-mcp serve
# Specify transport method
zotero-mcp serve --transport stdio|streamable-http|sse
# Setup and configuration
zotero-mcp setup --help # Get help on setup options
zotero-mcp setup --semantic-config-only # Configure only semantic search
zotero-mcp setup-info # Show installation path and config info for MCP clients
# Updates and maintenance
zotero-mcp update # Update to latest version
zotero-mcp update --check-only # Check for updates without installing
zotero-mcp update --force # Force update even if up to date
# Semantic search database management
zotero-mcp update-db # Update semantic search database (fast, metadata-only)
zotero-mcp update-db --fulltext # Update with full-text extraction (comprehensive but slower)
zotero-mcp update-db --force-rebuild # Force complete database rebuild
zotero-mcp update-db --fulltext --force-rebuild # Rebuild with full-text extraction
zotero-mcp update-db --fulltext --db-path "your_path_to/zotero.sqlite" # Customize your zotero database path
zotero-mcp db-status # Show database status and info
# General
zotero-mcp version # Show current versionzotero-cli is a standalone terminal interface to your Zotero library. It uses the same tools as the MCP server but without needing an AI assistant β useful for quick lookups, shell scripts, and automation.
Use zotero-mcp when your AI client supports MCP (Claude Desktop, ChatGPT). Use zotero-cli for shell scripts, cron jobs, or agentic pipelines with shell access (e.g. Claude Code) β CLI commands cost far fewer tokens than MCP tool schemas and compose naturally with Unix pipes.
Both share the same configuration set up by zotero-mcp setup.
# Search
zotero-cli search "machine learning" # keyword search
zotero-cli s "neural networks" --limit 5 # short alias, limit results
zotero-cli search --mode semantic "attention mechanisms"
zotero-cli search --mode tag "important,reviewed"
# Get item details
zotero-cli get metadata ABC123 # markdown metadata
zotero-cli g metadata ABC123 --format bibtex # BibTeX export
zotero-cli get fulltext ABC123 # full text
zotero-cli get children ABC123 # attachments and notes
# Edit item metadata
zotero-cli edit ABC123 --title "New Title"
zotero-cli edit ABC123 --add-tags "reviewed,important" --date "2024"
# Notes and annotations
zotero-cli notes list ABC123
zotero-cli notes create --item-key ABC123 --text "My note" --tags "idea"
zotero-cli notes create --item-key ABC123 --text - # read from stdin
zotero-cli ann list ABC123 # annotations (short alias)
zotero-cli ann search "highlight text"
# Add items
zotero-cli add doi 10.1038/s41586-021-03819-2
zotero-cli add url https://arxiv.org/abs/2301.00001
zotero-cli add file /path/to/paper.pdf
# Collections and tags
zotero-cli coll list # list collections (short alias)
zotero-cli coll search "PhD Research"
zotero-cli tags list
# Semantic search database
zotero-cli db update
zotero-cli db update --fulltext --force-rebuild
zotero-cli db status
# Library and duplicates
zotero-cli library info
zotero-cli duplicates findAdd -v anywhere to see progress messages (e.g., which API calls are made):
zotero-cli -v search "CRISPR"Zotero MCP includes advanced PDF annotation extraction capabilities:
- Direct PDF Processing: Extract annotations directly from PDF files, even if they're not yet indexed by Zotero
- Enhanced Search: Search through PDF annotations and comments
- Image Annotation Support: Extract image annotations from PDFs
- Seamless Integration: Works alongside Zotero's native annotation system
For optimal annotation extraction, it is highly recommended to install the Better BibTeX plugin for Zotero. The annotation-related functions have been primarily tested with this plugin and provide enhanced functionality when it's available.
The first time you use PDF annotation features, the necessary tools will be automatically downloaded.
Zotero MCP now supports managing relationships between items in your library. This is useful for linking related papers, tracking versions, or connecting preprints to their published versions.
zotero_get_item_related(item_key="ABCD1234")
Create a bidirectional link between two items:
zotero_add_item_relation(
item_key="ABCD1234",
related_item_key="EFGH5678",
relation_type="dc:relation" # Optional, defaults to "dc:relation"
)
zotero_remove_item_relation(
item_key="ABCD1234",
related_item_key="EFGH5678",
remove_bidirectional=True # Also remove the reverse relation (default: true)
)
Relation Types:
dc:relationβ General related items (default)owl:sameAsβ Items that are the same work (e.g., preprint and published version)
zotero_semantic_search: AI-powered similarity search with embedding modelszotero_update_search_database: Manually update the semantic search databasezotero_get_search_database_status: Check database status and configuration
zotero_search_items: Search your library by keywordszotero_advanced_search: Perform complex searches with multiple criteriazotero_get_collections: List collectionszotero_get_collection_items: Get items in a collectionzotero_get_tags: List all tagszotero_get_recent: Get recently added itemszotero_search_by_tag: Search your library using custom tag filters
zotero_get_item_metadata: Get detailed metadata (supportsformat="markdown",format="json"for complete raw Zotero metadata, andformat="bibtex")zotero_get_item_fulltext: Get full text contentzotero_get_item_children: Get attachments and notes
zotero_get_annotations: Get annotations (including direct PDF extraction)zotero_get_notes: Retrieve notes from your Zotero libraryzotero_search_notes: Search in notes and annotations (including PDF-extracted)zotero_create_note: Create a new note for an item (beta feature)zotero_get_page_layout: Detect figure/table regions on a PDF page (with captions and normalized coordinates) for accurate area annotation placement
scite_enrich_item: Get Scite citation tallies and retraction alerts for a paperscite_enrich_search: Search your Zotero library with Scite-enriched results (tallies + alerts inline)scite_check_retractions: Scan items for retractions and editorial notices
zotero_add_by_doi: Add a paper by DOI with automatic metadata and open-access PDF attachmentzotero_add_by_url: Add a paper by URL (arXiv, DOI URLs, and general webpages)zotero_add_from_file: Import a local PDF or EPUB file with automatic DOI extractionzotero_create_collection: Create a new collection (folder/project) in your libraryzotero_search_collections: Search for collections by name to find their keyszotero_manage_collections: Add or remove items from collectionszotero_update_item: Update metadata for an existing item (title, tags, abstract, date, etc.)zotero_find_duplicates: Find duplicate items by title and/or DOIzotero_merge_duplicates: Merge duplicate items with dry-run preview; consolidates all child itemszotero_get_pdf_outline: Extract the table of contents / outline from a PDF attachmentzotero_search_by_citation_key: Look up items by BetterBibTeX citation key (with Extra field fallback)
zotero_get_item_related: Get all related items for a specific Zotero itemzotero_add_item_relation: Add a related item relationship (creates bidirectional link)zotero_remove_item_relation: Remove a related item relationship
uv run pytest tests/ # 294 tests, ~2 secondsA 45-point live integration test plan is included at docs/integration-test-plan.md. It's designed to be given to Claude in Claude Desktop, which will execute each test against your real Zotero library. Tests cover all tools, PDF attachment cascade, attach_mode, BetterBibTeX lookups, and multi-step showcase prompts. See the file for full instructions.
- No results found: Ensure Zotero is running and the local API is enabled. You need to toggle on
Allow other applications on this computer to communicate with Zoteroin Zotero preferences. - Can't connect to library: Check your API key and library ID if using web API
- Full text not available: Make sure you're using Zotero 7+ for local full-text access
- Local library limitations: Some functionality (tagging, library modifications) may not work with local JS API. Consider using web library setup for full functionality. (See the docs for more info.)
- Installation/search option switching issues: Database problems from changing install methods or search options can often be resolved with
zotero-mcp update-db --force-rebuild
- "Missing required environment variables" when running update-db: Run
zotero-mcp setupto configure your environment, or the CLI will automatically load settings from your MCP client config (e.g., Claude Desktop) - ChromaDB / stale embedding model errors: If you changed embedding models and see 404 errors (e.g.,
text-embedding-004 is not found), runzotero-mcp update-db --force-rebuildto recreate the collection with your current model. If that doesn't work, delete~/.config/zotero-mcp/chroma_db/and rebuild. - Database update takes long: By default,
update-dbis fast (metadata-only). For comprehensive indexing with full-text, use--fulltextflag. Use--limitparameter for testing:zotero-mcp update-db --limit 100 - Semantic search returns no results: Ensure the database is initialized with
zotero-mcp update-dband check status withzotero-mcp db-status - Limited search quality: For better semantic search results, use
zotero-mcp update-db --fulltextto index full-text content (requires local Zotero setup) - OpenAI/Gemini API errors: Verify your API keys are correctly set and have sufficient credits/quota
- Update command fails: Check your internet connection and try
zotero-mcp update --force - Configuration lost after update: The update process preserves configs automatically, but check
~/.config/zotero-mcp/for backup files
If you find Zotero MCP useful, consider buying me a coffee!
MIT