# Zotero MCP: Your Citation Library as an Agent Tool

URL: https://research-memex.org/docs/toolkit/zotero-mcp
Description: Connect Zotero to Claude, Codex, ChatGPT, and other MCP clients so agents can search, retrieve, cite, annotate, and update a research library.



*A reference manager becomes much more useful when the agent can ask it directly.*

Zotero MCP connects your Zotero library to AI assistants through the Model Context Protocol. The agent can search the library, retrieve metadata and full text, inspect annotations, and export BibTeX. When you configure write access, it can also add or update items.

<ToolMeta slug="zotero-mcp" runtime="Python" note="Carrel can install Zotero MCP when a researcher uses Zotero for citation and PDF-library work. It is a practical bridge between the reference manager and the agentic research stack." />

Current source version: [0.6.2](https://github.com/54yyyu/zotero-mcp/releases)

Package: [`zotero-mcp-server`](https://pypi.org/project/zotero-mcp-server/)

## Why it matters [#why-it-matters]

<Aside label="THE POINT">
  The important move is locality. The agent does not need to hallucinate what is in your library; it can ask Zotero.
</Aside>

A Zotero library is accumulated judgment: years of deciding what was worth keeping, which collection it belonged in, which passages deserved a highlight. Without a connection, an agent writes around that record, drawing on its training-data impression of the field instead - the path by which plausible but unverifiable citations enter drafts.

Connecting the library changes what can be checked. Citation keys come from your bibliography rather than pattern-matching; a claim can be tested against the paper you actually read; the annotations you made at reading time resurface at writing time. The library remains the source of record, and the agent finally treats it as one.

## Tools [#tools]

| Capability                 | Research use                                                                                                             |
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
| Library search             | Find papers by title, author, tag, collection, or concept                                                                |
| Item retrieval             | Pull metadata, citation keys, abstracts, notes, and available full text                                                  |
| Annotation access          | Recover page-grounded notes and highlighted passages from PDFs                                                           |
| BibTeX export              | Insert citation keys into drafts or check bibliography coverage                                                          |
| Adding items               | By DOI, URL, ISBN, BibTeX, CSL JSON, or a local PDF or EPUB, with metadata and open-access PDFs fetched where they exist |
| Library maintenance        | Update metadata and tags, manage collections, find and merge duplicates behind a dry-run preview, link related items     |
| Optional semantic search   | Search a library by conceptual similarity when lexical search is too narrow                                              |
| Optional Scite integration | Check supporting, contrasting, or mentioning citation tallies, and scan the library for retractions                      |

## Host support [#host-support]

Zotero MCP is a standard MCP server. It works anywhere a host can launch Python tools over stdio.

<HostSupport
  rows="[
{ host: 'Claude Code (CLI / Desktop)', status: 'full', note: 'Add as a project or user MCP; Carrel can add it during setup when Zotero is in scope.' },
{ host: 'Codex CLI / Codex Desktop', status: 'full', note: 'Register the same stdio command with Codex MCP.' },
{ host: 'Claude Desktop (chat)', status: 'full', note: 'Supported by the upstream setup flow.' },
{ host: 'ChatGPT / MCP-capable clients', status: 'full', note: 'Full where the host supports MCP. Use the upstream instructions for the host-specific config shape.' },
{ host: 'Cursor / VS Code / Cherry Studio', status: 'full', note: 'Standard MCP server entry.' },
]"
/>

The server supports local, web, and hybrid modes. Local mode is best when Zotero is installed on the same machine and you want offline reads. Web or hybrid modes make sense when writes or cloud-library access matter.

## Install [#install]

Two practical routes:

* Via [Carrel](/docs/toolkit/carrel) — run `/carrel-setup` and say yes when the interview asks about Zotero or citation-library integration. Carrel adds the MCP at project level and prompts for the relevant setup.
* Manually — install the server and register it with your MCP host.

You need Python 3.10 or newer, and Zotero 7 or newer if you want local full-text access.

Default install:

```bash
uv tool install zotero-mcp-server
zotero-mcp setup
```

`zotero-mcp setup` writes the host configuration for you. `pip` and `pipx` install the same package.

With heavier extras:

```bash
uv tool install "zotero-mcp-server[semantic]"   # embeddings + vector index
uv tool install "zotero-mcp-server[pdf]"        # PDF outlines, EPUB annotations
uv tool install "zotero-mcp-server[scite]"      # citation tallies, retraction alerts
uv tool install "zotero-mcp-server[all]"        # all of the above
```

The base install is the right default for most researchers. Add extras only when you need semantic search, PDF outline extraction, EPUB annotation support, or citation-intelligence features.

### Let Zotero answer [#let-zotero-answer]

Nothing works until Zotero is willing to be asked. In Zotero's settings, under Advanced, turn on *Allow other applications on this computer to communicate with Zotero*, and leave Zotero running while you work.

### Register it with the host [#register-it-with-the-host]

For Claude Desktop, `zotero-mcp setup` does this for you. For Claude Code, the server goes in `~/.claude.json`:

```json
{
  "mcpServers": {
    "zotero": {
      "command": "zotero-mcp",
      "env": {
        "ZOTERO_LOCAL": "true"
      }
    }
  }
}
```

`ZOTERO_LOCAL: "true"` on its own is enough for reading, and reading is most of the work. The local API cannot write, so writes travel over Zotero's web API instead: add `ZOTERO_API_KEY` and `ZOTERO_LIBRARY_ID` (your numeric user ID, printed on the same [Zotero security settings page](https://www.zotero.org/settings/security#applications) that issues the key) and the server runs hybrid, reading locally and writing over the web.

Two traps are worth naming. Environment variables set in the shell you launch the host from will override whatever the config file says. And GUI applications do not reliably inherit your shell `PATH`, so if a host reports that it cannot find `zotero-mcp`, give it the absolute path that `zotero-mcp setup-info` prints.

## The CLI, for agents with a shell [#the-cli-for-agents-with-a-shell]

The same package installs `zotero-cli`, a standalone terminal interface to the library that needs no AI assistant at all. This matters more than it first sounds. An agent that already has a shell, such as Claude Code or Codex, can call the CLI directly, and a shell command costs far fewer tokens than the equivalent MCP tool schemas, which occupy context whether or not the agent ends up using them.

```bash
zotero-cli search "attention mechanisms" --mode semantic
zotero-cli get metadata ABC123 --format bibtex
zotero-cli add doi 10.1038/s41586-021-03819-2 --collections "Reading List"
zotero-cli ann search "boundary condition"
```

Adds are idempotent by default: run the same `add` twice and the second run files the existing item into any collections it was missing rather than creating a duplicate. Both surfaces read the configuration that `zotero-mcp setup` already wrote, so there is nothing further to arrange.

Full documentation, including the ChatGPT setup path, lives at the [Zotero MCP docs](https://stevenyuyy.com/zotero-mcp/).

## Part of Research Memex [#part-of-research-memex]

Zotero MCP is the citation-library counterpart to the document and memory tools:

* [Carrel](/docs/toolkit/carrel) sets it up when the interview surfaces Zotero.
* [MinerU](/docs/toolkit/mineru-mcp) turns difficult PDFs into AI-ready text; Zotero MCP keeps the reference graph and annotations reachable.
* [Memex Plugin](/docs/toolkit/memex-plugin) remembers why papers mattered in a session; Zotero remains the bibliographic source of record.
* [Research Scanner](/docs/toolkit/research-scanner) can feed new candidates into Zotero for durable tracking.

Use Zotero MCP when the answer depends on what is actually in your library. You can check citation coverage, what you already read, which annotations support a claim, or whether a draft cites the right sources.