Fast, Customizable & Light Zotero MCP server for AI research assistants
Project description
Zotero MCP Lite
A high-performance Model Context Protocol (MCP) server for Zotero with customizable research workflows.
- Full Local - No cloud, no API key; runs entirely via Zotero Desktop
- Atomic Tools - 9 composable tools; LLM orchestrates as needed
- MCP-Native - Works with Claude, Cursor, Gemini CLI, and any MCP client
- Extensible - User-editable prompts for customized workflows
- Easy Deploy - Single command install, auto-detects Zotero
- Parameterized - Customize analysis sections to match your research style
Architecture
flowchart LR
subgraph MCP [Zotero MCP Lite]
Read[Read Operations]
Write[Write Operations]
end
subgraph Zotero [Zotero Desktop]
LocalAPI["/api/ endpoint"]
ConnectorAPI["/connector/ endpoint"]
SQLite[(zotero.sqlite)]
end
Read -->|GET| LocalAPI
Read -->|Direct SQL| SQLite
Write -->|POST saveItems| ConnectorAPI
LocalAPI --> SQLite
ConnectorAPI --> SQLite
| Operation | Endpoint | Method |
|---|---|---|
| Search, browse, read metadata | /api/users/0/items |
GET |
| Read annotations | Direct SQLite query | SQL |
| Create notes/items | /connector/saveItems |
POST |
Quick Start
Prerequisites
- Python 3.10+ with uv installed
- Zotero 6 or 7 installed
Step 0: Enable Zotero Local API
The Local API allows third-party applications to communicate with Zotero. This is required.
Steps:
- Open Zotero → Edit → Settings (or Preferences on macOS)
- Go to Advanced tab
- Under Miscellaneous, check "Allow other applications on this computer to communicate with Zotero"
┌─────────────────────────────────────────────────────────────┐
│ Advanced │
├─────────────────────────────────────────────────────────────┤
│ │
│ Miscellaneous │
│ │
│ [V] Automatically check for updated translators and styles │
│ │
│ [V] Report broken site translators │
│ │
│ [V] Allow other applications on this computer to │
│ communicate with Zotero <- Check this │
│ │
│ Available at http://localhost:23119/api/ │
│ │
└─────────────────────────────────────────────────────────────┘
Once enabled, the API will be available at http://localhost:23119/api/
Note: This is different from the Zotero Connector (browser extension) which is enabled by default. The Local API requires explicit opt-in for security reasons.
Step 1: Install
uv tool install zotero-mcp-lite
Or with pip:
pip install zotero-mcp-lite
Alternative: Install from GitHub or source
# From GitHub (latest development version)
uv tool install "git+https://github.com/xmruuu/zotero-mcp-lite.git"
# From source (for development)
git clone https://github.com/xmruuu/zotero-mcp-lite.git
cd zotero-mcp-lite && uv sync
uv run zotero-mcp setup
# Direct run without install
uvx zotero-mcp-lite serve
Step 2: Setup
zotero-mcp setup
This detects your Zotero installation and configures MCP clients automatically.
Step 3: Connect to MCP Client
| Client | Configuration |
|---|---|
| Claude Code | claude mcp add zotero -- zotero-mcp serve |
| Claude Desktop | Auto-configured by setup, or edit claude_desktop_config.json |
| Cursor | Settings → MCP Servers → add {"zotero": {"command": "zotero-mcp", "args": ["serve"]}} |
| Other | Use command zotero-mcp with args ["serve"] (stdio transport) |
That's it! You're ready to use Zotero with AI assistants.
Features
9 Atomic MCP Tools
Search and Navigation
zotero_search_items- Keyword search with tag filteringzotero_get_recent- Recently modified/added items (excludes notes by default)zotero_get_collections- List all collectionszotero_get_collection_items- Items in a collection (excludes notes by default)zotero_search_annotations- Search all PDF highlights across library
Content Reading
zotero_get_item_metadata- Metadata, authors, abstract, tagszotero_get_item_children- Attachments, notes, and PDF annotationszotero_get_item_fulltext- Full text extraction
Writing (via local Connector API)
zotero_create_note- Create note with full formatting support (tables, lists, line breaks)
4 Research Skills (MCP Prompts)
Pre-defined workflows that guide AI through common academic tasks:
flowchart LR
A[knowledge_discovery] --> B[literature_review]
B --> C[comparative_review]
C --> D[bibliography_export]
A -.- A1["Find relevant papers"]
B -.- B1["Analyze single paper"]
C -.- C1["Compare multiple papers"]
D -.- D1["Export citations"]
| Skill | Use Case | What It Does |
|---|---|---|
knowledge_discovery(query) |
Explore a topic | Searches titles AND your annotations |
literature_review(item_key) |
Deep-dive one paper | Structured analysis from annotations or full text |
comparative_review(item_keys) |
Compare papers | Table-rich synthesis with insights |
bibliography_export(item_keys) |
Prepare citations | APA, IEEE, and BibTeX formats |
Key Features:
- Dual-mode analysis: Works with or without user annotations
- Full formatting preserved: Tables, line breaks, and lists write correctly to Zotero
- Fully customizable: Edit prompt files to match your workflow
- See Customizing Skills for details
For Claude Desktop Users: These 4 MCP Prompts automatically become powerful Skills in Claude. Simply ask Claude to help with literature review, paper comparison, or bibliography export - it will invoke the appropriate skill with your Zotero library.
Advanced
Testing & Debugging
npx @modelcontextprotocol/inspector zotero-mcp serve
Opens a web UI to test tools interactively.
Alternative Transports
zotero-mcp serve --transport streamable-http --port 8000
zotero-mcp serve --transport sse --port 8000
Environment Variables
# Direct path to Zotero database (most specific)
export ZOTERO_DATABASE_PATH=/path/to/zotero.sqlite
# Or specify Zotero data directory (will find database automatically)
export ZOTERO_DATA_DIR=/path/to/Zotero
# Group libraries
export ZOTERO_LIBRARY_ID=12345
export ZOTERO_LIBRARY_TYPE=group
Technical Notes
Annotation Retrieval
Annotations are fetched directly from Zotero's SQLite database using a three-level join:
Item -> PDF Attachment -> Annotation
This approach is significantly faster than the Web API and works offline.
Cross-Platform Support
Automatically detects Zotero data directory on Windows, macOS, and Linux.
Troubleshooting
| Problem | Solution |
|---|---|
| "Local API is not enabled" | Enable in Zotero → Settings → Advanced (see Step 0) |
| "Database is locked" | Normal when Zotero is running; API tools still work |
| General diagnostics | Run zotero-mcp setup |
Customizing Skills
Prompts are fully customizable. Copy from the package defaults and edit:
~/.zotero-mcp/prompts/
├── literature_review.md # Single paper analysis skill
├── comparative_review.md # Multi-paper comparison skill
├── knowledge_discovery.md # Topic exploration skill
└── bibliography_export.md # Citation export skill
Loading order: User files (~/.zotero-mcp/prompts/) take priority over package defaults.
How It Works
flowchart LR
Prompt[prompt.md] --> LLM[LLM Analysis]
LLM --> Review[Formatted Review]
Review --> Note["zotero_create_note()"]
Note --> Zotero[Zotero Note]
The LLM generates the complete review text with your desired formatting (tables, lists, etc.), then saves it directly via zotero_create_note. All formatting is preserved.
Prompt Files (.md)
Define how the AI should analyze papers:
## Analysis Instructions
Analyze the paper covering:
- Research Objective
- Methods
- Contribution
- Research Gaps
Use tables and bullet points as appropriate.
## Save to Zotero
Use `zotero_create_note(content=<your review>, parent_key=<item_key>)`
You can customize the analysis sections, add new ones, or change the output format entirely
Credits
Thanks to @54yyyu for the original zotero-mcp project.
License
MIT License - See LICENSE file.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file zotero_mcp_lite-0.1.3.tar.gz.
File metadata
- Download URL: zotero_mcp_lite-0.1.3.tar.gz
- Upload date:
- Size: 147.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
18e0d89b31862596d88101011ec5dc290305b4bd10355cc425a03246dad09f67
|
|
| MD5 |
141eaade0301b715c4598e2cb4d3f885
|
|
| BLAKE2b-256 |
f22ff66b7be13a50e3e9a0c8cad6900d55169675873046ba5e42dbbf39b152a0
|
Provenance
The following attestation bundles were made for zotero_mcp_lite-0.1.3.tar.gz:
Publisher:
publish.yml on xmruuu/zotero-mcp-lite
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
zotero_mcp_lite-0.1.3.tar.gz -
Subject digest:
18e0d89b31862596d88101011ec5dc290305b4bd10355cc425a03246dad09f67 - Sigstore transparency entry: 843356184
- Sigstore integration time:
-
Permalink:
xmruuu/zotero-mcp-lite@08720b3796e069065b02baf7e13dddd48b186fb0 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/xmruuu
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@08720b3796e069065b02baf7e13dddd48b186fb0 -
Trigger Event:
push
-
Statement type:
File details
Details for the file zotero_mcp_lite-0.1.3-py3-none-any.whl.
File metadata
- Download URL: zotero_mcp_lite-0.1.3-py3-none-any.whl
- Upload date:
- Size: 29.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ed99b6f477d1a5cc89593bad7c9f908a7583f7f8d24ea0278e3f9c62b710a50d
|
|
| MD5 |
337aef1764b5895c95a9ae4ef807ece3
|
|
| BLAKE2b-256 |
6bdfbe0f02738d5f00923c6dd3489ed566949f865a6857b7410e47880318f5e9
|
Provenance
The following attestation bundles were made for zotero_mcp_lite-0.1.3-py3-none-any.whl:
Publisher:
publish.yml on xmruuu/zotero-mcp-lite
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
zotero_mcp_lite-0.1.3-py3-none-any.whl -
Subject digest:
ed99b6f477d1a5cc89593bad7c9f908a7583f7f8d24ea0278e3f9c62b710a50d - Sigstore transparency entry: 843356185
- Sigstore integration time:
-
Permalink:
xmruuu/zotero-mcp-lite@08720b3796e069065b02baf7e13dddd48b186fb0 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/xmruuu
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@08720b3796e069065b02baf7e13dddd48b186fb0 -
Trigger Event:
push
-
Statement type: