nanda mochammad
Applied AI

Connect Claude to your Zotero library with a local MCP server

8 min read

Good day, researchers. In this one we connect Claude Desktop to your own Zotero library with a local MCP server, so Claude can read your papers without you pasting them in.

By the end of this article, you will have Claude Desktop connected to your own Zotero library through a local MCP server. You will be able to search, summarise, and pull quotes from your papers by chatting, with nothing leaving your computer.

Claude is good at reasoning over a paper once you paste it in. The slow part comes before that: finding the right PDF, copying the abstract, and remembering which of your 600 references made that one argument. Your whole library already lives in Zotero, indexed and annotated.

This guide closes that gap. We’ll connect Claude to Zotero with a local MCP server. Then you can say “search my library for papers on retrieval and summarise the three most relevant” and Claude actually reads your collection. No uploading, no copy-paste, and nothing leaving your computer. It takes about ten minutes.

What you’re building

Claude, talking to your own library, locally

The Model Context Protocol (MCP) is a standard way to give an AI assistant tools. Here, the tool is your Zotero library. A small server, zotero-mcp, sits between Claude Desktop and Zotero. Claude asks it to search or fetch. The server calls Zotero’s built-in local API, and the answer comes back. All three pieces run on your own machine.

Diagram: Claude Desktop talks to a local zotero-mcp server, which calls Zotero's local API to read your library; every hop stays on your own computer. Runs entirely on your computer; nothing leaves it MCP HTTP reads Claude Desktop you ask in chat zotero-mcp MCP server Zotero 7 local API · :23119 Your library papers · PDFs · notes
Claude Desktop launches the zotero-mcp server over MCP; the server reads your library through Zotero's local API on localhost. No paper, query, or note is sent to an outside service.

We use the local API, not Zotero’s web API. So you need no account key, and your data never touches zotero.org. In return, Zotero has to be running on your machine. For reading and analysis, that’s a fair trade.

Step 01: Prerequisites

Three things to have ready

  • Zotero 7 (the local API this relies on ships with version 7).
  • Claude Desktop (macOS or Windows), the MCP host. This needs the Claude Desktop app (claude.ai/download), not claude.ai in a browser tab. The web app can’t launch local servers.
  • Python 3.10+ and a way to install a Python tool. I recommend uv; pip or pipx work too.

Check your Python version first. You want 3.10 or newer:

python3 --version

If you don’t have uv yet, install it:

# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
Step 02: Turn on Zotero’s local API

Let other apps talk to Zotero

Open Zotero and go to Settings → Advanced (on macOS, Zotero → Settings → Advanced). Tick:

Allow other applications on this computer to communicate with Zotero

That switches on a small local server inside Zotero at http://localhost:23119. Quit and reopen Zotero once so the change takes effect. Leave Zotero running whenever you want Claude to reach your library.

Step 03: Install the MCP server

One command

Install the zotero-mcp-server package with whichever tool you have. uv is the cleanest choice. It installs into its own environment and puts the zotero-mcp command on your path:

# recommended
uv tool install zotero-mcp-server

# or, if you prefer pip / pipx
pip install zotero-mcp-server
pipx install zotero-mcp-server

The package is zotero-mcp-server; the command it gives you is zotero-mcp. Confirm it landed:

zotero-mcp --help
Step 04: Point Claude at it

Let the setup command wire it up

The package ships a helper that writes the Claude Desktop config for you. This is the easiest path:

zotero-mcp setup

That edits Claude Desktop’s config file and registers the server with the correct absolute path. If you’d rather do it by hand, open the config file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

…and add the zotero server under mcpServers:

{
  "mcpServers": {
    "zotero": {
      "command": "zotero-mcp",
      "env": {
        "ZOTERO_LOCAL": "true"
      }
    }
  }
}
Step 05: Restart and verify

Quit Claude completely, then test

Fully quit Claude Desktop and reopen it. This means the Desktop app, not claude.ai in a browser. Closing the window isn’t enough, quit the app. MCP servers are only picked up on a fresh launch. To check it loaded: in Claude Desktop, click the tools/slider icon at the bottom-left of the message box. You should see zotero listed with its tools. If it’s not there, the config didn’t load (usually the comma issue above, or Claude Desktop needs a full quit-and-reopen). Once it’s there, try:

Search my Zotero library for papers about retrieval-augmented generation and list the five most relevant with their authors and year.

Claude will call the Zotero tools and answer from your actual collection. If you want a command-line check too:

zotero-mcp setup-info
Going further (optional)

Semantic search, and letting Claude write back

Two upgrades worth knowing about:

Semantic search. Out of the box you get keyword search. With the optional semantic extra, the server can also build an embedding index. Then Claude can find papers by meaning, which helps when you don’t remember the exact title:

uv tool install "zotero-mcp-server[semantic]"  # add the optional extra
zotero-mcp update-db                            # build the semantic index
zotero-mcp update-db --fulltext                 # include full text of PDFs

Writing to your library. The local setup is built for reading. It suits searching, summarising, and quoting. If you want Claude to add items or create collections, add web-API credentials (an API key from your Zotero account and your library ID) alongside ZOTERO_LOCAL.

 Local API (this guide)Web API
SetupOne toggle in ZoteroAPI key + library ID
PrivacyStays on your deviceGoes via zotero.org
Zotero must be openYesNo
Add / edit itemsRead-focusedFull read + write
Best forReading, search, analysisHeadless or write-heavy use
What you can ask now

A few prompts to start with

  • “Find papers in my Thesis collection about chunking strategies and compare their methods.”
  • “Summarise the key findings of [title] and pull three quotable lines with page numbers.”
  • “What gaps or disagreements show up across these five papers?”
  • “List everything I’ve tagged to-read from 2024 onward, newest first.”

This is, quietly, retrieval-augmented generation over your own library. The “retriever” is Zotero, and the corpus is the reading you already trust. That’s what makes it useful for a literature review instead of a generic chat.

Recap

The goal was to let Claude Desktop read your own Zotero library, locally, so you can search and summarise your papers by chatting. The whole setup is a toggle, one install, one config block, and a restart.

  • Turn on Zotero’s local API in Settings → Advanced, and keep Zotero running.
  • Install zotero-mcp-server, which gives you the zotero-mcp command.
  • Register it in Claude Desktop with zotero-mcp setup, or add it by hand with ZOTERO_LOCAL: "true".
  • Fully quit and reopen Claude Desktop, then check that zotero shows up in the tools list.
  • Nothing leaves your machine, but still check the source before you quote a paper.

I hope this writing helps you. Thanks for reading.

Cited sources