Connect Claude to your Zotero library with a local MCP server
Claude is good at reasoning over a paper once you paste it in. The friction is everything before that: finding the right PDF, copying the abstract, remembering which of your 600 references made that one argument. Meanwhile 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 so 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.
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, it calls Zotero’s built-in local API, and the answer comes back, all three pieces running on your own machine.
Because we use the local API rather than Zotero’s web API, you need no account key and your data never touches zotero.org. The trade-off: Zotero has to be running on your machine. For reading and analysis, the thing you actually want, that’s the right deal.
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;piporpipxwork 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"
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, and leave Zotero running whenever you want Claude to reach your library.
One command
Install the zotero-mcp-server package with whichever tool you have. uv is the cleanest because it installs into an isolated 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
Let the setup command wire it up
The package ships a helper that writes the Claude Desktop config for you, 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"
}
}
}
}
Quit Claude completely, then test
Fully quit Claude Desktop (the Desktop app, not claude.ai in a browser, and closing the window isn’t enough, quit the app) and reopen it. 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, and 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 sanity check too:
zotero-mcp setup-info
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 so Claude finds papers by meaning, not just matching words. This 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 read-focused, well suited to 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 | |
|---|---|---|
| Setup | One toggle in Zotero | API key + library ID |
| Privacy | Stays on your device | Goes via zotero.org |
| Zotero must be open | Yes | No |
| Add / edit items | Read-focused | Full read + write |
| Best for | Reading, search, analysis | Headless or write-heavy use |
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-readfrom 2024 onward, newest first.”
This is, quietly, retrieval-augmented generation over your own library, except 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.
That’s the whole setup: a toggle, one install, one config block, and a restart. Ten minutes of plumbing for a research assistant that finally knows what’s on your shelves.
Cited sources