Skip to main content

Fast, Customizable & Light Zotero MCP server for AI research assistants

Project description

Zotero MCP Lite

PyPI Zotero 7 Python 3.10+ MCP License: MIT uv

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

  1. Python 3.10+ with uv installed
  2. 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:

  1. Open ZoteroEditSettings (or Preferences on macOS)
  2. Go to Advanced tab
  3. 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 filtering
  • zotero_get_recent - Recently modified/added items (excludes notes by default)
  • zotero_get_collections - List all collections
  • zotero_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, tags
  • zotero_get_item_children - Attachments, notes, and PDF annotations
  • zotero_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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zotero_mcp_lite-0.1.3.tar.gz (147.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

zotero_mcp_lite-0.1.3-py3-none-any.whl (29.2 kB view details)

Uploaded Python 3

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

Hashes for zotero_mcp_lite-0.1.3.tar.gz
Algorithm Hash digest
SHA256 18e0d89b31862596d88101011ec5dc290305b4bd10355cc425a03246dad09f67
MD5 141eaade0301b715c4598e2cb4d3f885
BLAKE2b-256 f22ff66b7be13a50e3e9a0c8cad6900d55169675873046ba5e42dbbf39b152a0

See more details on using hashes here.

Provenance

The following attestation bundles were made for zotero_mcp_lite-0.1.3.tar.gz:

Publisher: publish.yml on xmruuu/zotero-mcp-lite

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file zotero_mcp_lite-0.1.3-py3-none-any.whl.

File metadata

File hashes

Hashes for zotero_mcp_lite-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 ed99b6f477d1a5cc89593bad7c9f908a7583f7f8d24ea0278e3f9c62b710a50d
MD5 337aef1764b5895c95a9ae4ef807ece3
BLAKE2b-256 6bdfbe0f02738d5f00923c6dd3489ed566949f865a6857b7410e47880318f5e9

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page