Skip to main content

Local Zotero MCP

An MCP server that gives an LLM read-only access to your local Zotero library via the desktop app's Local API. It talks to Zotero over http://127.0.0.1:23119, so nothing leaves your machine and no API keys are required.

Requirements

  • Zotero desktop app, running, with Settings > Advanced > "Allow other applications on this computer to communicate with Zotero" enabled.
  • uv installed.

Quickstart

No cloning or installing required - uvx fetches the published package from PyPI and runs it. Add this to your Claude Desktop config (claude_desktop_config.json):

{
  "mcpServers": {
    "zotero": {
      "command": "uvx",
      "args": ["--from", "local-zotero-mcp", "zotero-mcp"]
    }
  }
}

Restart Claude Desktop and the Zotero tools should be available. uvx caches the environment after the first run, so subsequent launches are fast; add --refresh to args if you want to force-pull the latest version.

Tools

Every library-scoped tool takes an optional library argument - "user" (default) for your personal library, or a group ID to read a group library synced locally. Use list_groups to find group IDs.

Tool Description
list_groups List group libraries available to the local Zotero install
search_items Search the library by title/creator/year or full text
get_item Get full data for an item, optionally with citation/bibliography
get_item_children List an item's notes and attachments
list_top_level_items List top-level items in the library
list_trashed_items List items in the trash
list_publications List items in "My Publications"
list_collections List collections
get_collection Get full data for a single collection
get_subcollections List the direct subcollections of a collection
get_collection_items List items in a collection
get_collection_tags List tags used on items in a collection
list_tags List tags
get_item_tags List tags attached to a single item
get_bibliography Generate a formatted bibliography for one or more items
get_attachment_file_path Get the local file path of an attachment
get_item_types List item types supported by Zotero

The two tools below have no equivalent in the Zotero Web API - they read the attachment file resolved by get_attachment_file_path and process it locally with PyMuPDF. Both accept remove_headers_footers: when true, lines that repeat near the top/bottom of most pages (running titles, page numbers, etc.) are detected and stripped from the returned/saved text. For convert_document this only applies to output_format="txt" - PDF output preserves the original pages as-is.

Tool Description
read_document Read the text content of a PDF or EPUB attachment
convert_document Convert a PDF or EPUB attachment to TXT or PDF and save it to a location you specify

Local development

Clone the repo and install it locally:

uv sync

Run it directly from the checkout:

uv run zotero-mcp

Point Claude Desktop at your local checkout instead of GitHub with:

{
  "mcpServers": {
    "zotero": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/Local-Zotero-MCP", "zotero-mcp"]
    }
  }
}

Run the tests:

uv run pytest

Tests mock the Zotero HTTP responses, so a running Zotero instance isn't required. To smoke-test against your own Zotero library:

uv run mcp dev zotero_mcp/server.py

Metadata

Release files for local-zotero-mcp 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for local-zotero-mcp 0.2.1
File Size Uploaded
local_zotero_mcp-0.2.1.tar.gz 12.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for local-zotero-mcp 0.2.1
File Interpreter ABI Platform
local_zotero_mcp-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 23.7 kB

Release files / local_zotero_mcp-0.2.1.tar.gz

Download URL local_zotero_mcp-0.2.1.tar.gz
Size 12.5 kB
Tags Source
SHA-256 checksum
How to use checksums
981299b0022b2b625c2e9bc3c6ad8aea41930822690e3cca5d6fb779411d275f
BLAKE2b-256 checksum
How to use checksums
f65fe6b89fa55946c4a5e89f7e46a5e3406ed7d1bd7011f8a28016bf1f3d84a8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / local_zotero_mcp-0.2.1-py3-none-any.whl

Download URL local_zotero_mcp-0.2.1-py3-none-any.whl
Size 11.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
30d751f7728e71fdfe8b0ab44718f6f3c9ae462d04a9c899fff47f858b5f67c5
BLAKE2b-256 checksum
How to use checksums
4fb641102093f0ff5d1dc8c347b315151100902fe510e2e77bbc1badd92ec350
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

0.3.0

2 release files

This release

0.2.1 This release

2 release files

0.2.0

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.2

2 release files

0.1.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page