The search “zotero mcp” almost always comes from one specific frustration: a few thousand references sit in Zotero, Claude or ChatGPT is open in another window, and moving anything between the two means exporting, copying, or re-uploading. MCP is the standard meant to close that gap. Here is what it actually takes — and where it is more apparatus than the job needs.
MCP in one paragraph
The Model Context Protocol is an open standard for connecting an LLM client to an outside data source. Anthropic published it in late 2024 and donated it to the Linux Foundation’s Agentic AI Foundation in December 2025; the spec revision current in August 2026 is dated 2026-07-28. The shape is always the same: a client (Claude Desktop, Claude Code, Cursor, ChatGPT, and others) talks to a server — a small program that knows how to read one specific thing, such as your files, a database, or your Zotero library. The client discovers which tools the server exposes and calls them when the conversation needs them. The server either runs as a local subprocess the client launches — the stdio transport — or is reached over the network with Streamable HTTP; those are the two transports the current spec defines, and which one your client supports decides most of what follows. None of this is Zotero-specific. Zotero is simply one of many things people have written servers for.
There is no official Zotero MCP server
Worth getting straight before you start: Zotero does not publish an MCP server. Every “Zotero MCP” you will find is a third-party project. In August 2026 the official MCP registry alone listed at least six distinct Zotero servers, and others exist outside it; they are discussed on Zotero’s own forums but not endorsed there. A few of them, described as they stood in August 2026:
54yyyu/zotero-mcp— Python, MIT-licensed, published on PyPI aszotero-mcp-server. By a wide margin the most used and the most thoroughly documented of the group, still actively developed, with an auto-configuration command.richardjlyon/zotero-mcp— Rust, installed withcargo install zotero-mcp, speaking both stdio and HTTP. Much newer and much smaller: first crate release May 2026, and under 200 downloads in total.kaliaboi/mcp-zotero— Node, installed withnpm install -g mcp-zotero, working through Zotero’s Web API. Still widely linked to, but its last npm release was December 2024 and its last commit February 2025, so treat it as dormant rather than maintained.- Several more, including
cookjohn/zotero-mcp, which is a different shape again — a Zotero plugin that carries an MCP server with it — andkujenga/zotero-mcp, which owns the plainzotero-mcpname on PyPI.
They are not interchangeable. Different install methods, different configuration keys, different capabilities, different degrees of upkeep. Read the README of the one you pick, and check when it was last touched. Any setup snippet you find in an article — this one included — is a snapshot of one project at one moment; this one is a snapshot of August 2026.
The practical consequence is worth stating plainly: you are installing third-party software that reads your entire reference library, and in some configurations can write to it. Treat it the way you would treat any other unvetted plugin.
The part that is the same whichever server you pick
Zotero 7 and later expose a local copy of the Zotero Web API at
http://localhost:23119/api/, serving data straight from your local database.
This is a documented Zotero feature, not something the MCP servers invented, and
it is what most of them read.
You have to turn it on: Settings → Advanced → “Allow other applications on this computer to communicate with Zotero” — that is the wording and the location in Zotero 9, the current release in August 2026.
Per Zotero’s own documentation, read requests need no authentication, there are no rate limits, and it works offline because nothing touches the network. Only the locally logged-in user’s data is available. Writing through the local API arrived with Zotero 10 and needs a local API key that Zotero grants through a confirmation dialog — but Zotero 10 was still in beta in August 2026, so on the current release the local API is read-only.
The alternative is the Web API at api.zotero.org, using a key you create in
your Zotero account settings at https://www.zotero.org/settings/keys/new.
Unlike the local one this API does authenticate — the key travels in a
Zotero-API-Key header — and it will throttle you, answering with Backoff or
Retry-After headers, or a 429, when it wants you to slow down. You need that
route if the thing calling Zotero is not on the same machine, or if you want
writes at all today. That is why servers combine the two: richardjlyon/zotero-mcp
and 54yyyu/zotero-mcp both read through the local API and write through the
Web API.
Zotero desktop has to be running for the local path to work. That is the most common reason a correctly configured server returns nothing at all.
A worked setup: Claude Desktop
One concrete example, using 54yyyu/zotero-mcp because it is the best
documented. Its stated requirements are Python 3.10+ and Zotero 7 or later.
First, enable the local API as above and leave Zotero running. Then install:
uv tool install zotero-mcp-server
pip install zotero-mcp-server and pipx install zotero-mcp-server also work.
Watch the name. The package is zotero-mcp-server, while the repository and the
command it installs are both zotero-mcp — and zotero-mcp on PyPI is a
different project entirely, kujenga/zotero-mcp. pip install zotero-mcp
installs somebody else’s server, not this one.
Let it write the client configuration for you:
zotero-mcp setup
If you would rather do it by hand, the Claude Desktop configuration file lives at
~/Library/Application Support/Claude/claude_desktop_config.json on macOS and
%APPDATA%\Claude\claude_desktop_config.json on Windows. There is a Linux build
too — in beta in August 2026, for Ubuntu 22.04 or later and Debian 12 or later —
for which Anthropic’s documentation does not publish a path. Whichever platform
you are on, Settings → Developer → Edit Config opens the right file, and creates
it if it is not there. The entry looks like this:
{
"mcpServers": {
"zotero": {
"command": "zotero-mcp",
"env": {
"ZOTERO_LOCAL": "true"
}
}
}
}
For local read-only use, that is the entire entry. To use the Web API instead,
drop ZOTERO_LOCAL and supply ZOTERO_API_KEY and ZOTERO_LIBRARY_ID; to keep
the fast local reads but allow writes, keep ZOTERO_LOCAL and add those two,
which is what this server calls hybrid mode.
Restart Claude Desktop, then ask it something only your library could answer — “what have I saved about X?” — rather than something it could plausibly guess.
For Claude Code the same server is added from the terminal instead:
claude mcp add --env ZOTERO_LOCAL=true --transport stdio zotero -- zotero-mcp
claude mcp list then shows whether it connected.
ChatGPT is two different shapes, and which one you use changes everything.
The desktop app shares its MCP configuration with Codex on the same machine
and does launch local stdio servers, so an entry much like the one above is all
it needs; check its own MCP documentation for the file. Connectors in the
ChatGPT web app are the restrictive case: they expect a server reachable
remotely over HTTPS. There the server above has to be started on an HTTP
transport and exposed through a tunnel, then registered as a custom connector
with developer mode enabled. 54yyyu/zotero-mcp documents that route, ngrok and
all. Work out which of the two you are on before reaching for a tunnel: that step
puts a door to your library on the public internet, and the desktop app does not
need it.
Where this is worth it, and where it is not
MCP gives your AI client a standing connection to the whole library: it can search across everything, pull metadata, read annotations. Nothing else quite replaces that — provided the conditions hold.
The conditions are: one machine, which you can install software on, with Zotero desktop running, and a client that speaks stdio MCP. Remove any of those and the setup does not apply. It does not follow you to a phone, a browser tab, a lab machine you lack admin rights on, or a co-author’s laptop.
It is also a lot of apparatus for the most common actual task, which is: I want to talk to this one paper with an AI, right now.
The same job, one paper at a time, with no server
Litlas has an ✨ button that covers the narrow version of this. It takes the text of a paper’s PDF — or a saved web page, or a document you are writing — and hands it to ChatGPT, Claude, Gemini, or Gemini Notebook in a new tab, with the prompt already prepared.
To be exact about what that is and is not:
- Litlas does not provide an MCP server, and this is not MCP. It is a handoff: Litlas prepares the material and opens the AI you chose. Nothing stays connected afterwards.
- Litlas runs no model of its own. The reasoning is entirely the AI you handed the paper to. Litlas is the transport.
- It is one item at a time. It cannot answer “search my 4,000 references” from inside Claude. That is the thing MCP does and this does not.
What it buys instead is that there is nothing to install on your machine. It is a web app, so it works from a borrowed computer or a phone, and it works with whichever of the four AI destinations you feel like using that day without four separate configurations.
Getting a Zotero library in is the ordinary route: export from Zotero as BibTeX or RIS and import into Litlas. The import protects hand-written notes rather than overwriting them, and Litlas exports BibTeX and CSL-JSON back out.
The free plan gives you 3 boards, 100 saved items, and per day 3 ✨ handoffs, 5 searches, and 5 citation-graph views, with no card required. Storing an AI conversation’s link permanently against a paper is a paid feature; the handoff itself is not.
Choosing
| If you want | Use |
|---|---|
| Your AI to search your whole Zotero library unprompted | A Zotero MCP server |
| Zotero to stay the system of record | A Zotero MCP server |
| To hand one paper to an AI from any device, with nothing installed | A per-item handoff |
| To use several different AIs without configuring each one | A per-item handoff |
| Both | Both — they do not conflict |
They are not really competitors. One is infrastructure you set up once on one machine; the other is a thing you press. If you spend the day in a terminal with Claude Code open, the server is worth the half hour. If you mostly read papers and want an AI’s take on the one in front of you, it is not.
One piece of advice applies either way: whichever server you install, read its README rather than an article about it. These projects move quickly, and a configuration block that is correct in August 2026 may not be correct in six months.
