# Zotero MCP

> A community MCP server for Zotero: your agent searches, reads, annotates and adds papers to your research library, locally or on the web.

Zotero MCP connects your agent to your Zotero research library. It's an open-source community project by Steven Yu (54yyyu on GitHub), not made by the Zotero project. Your agent can search your papers, read them, highlight and take notes, and add or organize items.

What you can do with it
- Search by title, author, tag, collection or full text, or by meaning with semantic search (an optional extra)
- Read metadata, BibTeX, full text and chosen PDF pages, with page images where text extraction garbles math, figures or tables
- Highlight passages, box figures, tables and equations, and create or edit notes
- Pull together the highlights and notes across a paper or a collection
- Add papers by DOI, URL, ISBN, BibTeX or file, with open-access PDFs attached, and manage collections and tags
- Format a bibliography or in-text citations with Zotero's citation styles
- Turn on optional tool groups for Scite citation tallies and retraction checks, duplicate merging, related papers via OpenAlex, feeds and item relations

How it connects
It runs on your machine with uvx zotero-mcp-server serve (Python 3.10 or newer). Choose a mode with environment variables:
- Local: set ZOTERO_LOCAL=true, and in Zotero 7 or newer tick "Allow other applications on this computer to communicate with Zotero" under Settings, Advanced. No account is needed to read.
- Web API: set ZOTERO_API_KEY (from zotero.org/settings/keys) and ZOTERO_LIBRARY_ID, plus ZOTERO_LIBRARY_TYPE=group for a group library.
Without one of these the server starts, but its tools can't reach your library.

Good to know
- Writing to a local library needs Zotero 10 or newer: run zotero-mcp authorize-local once and choose Always Allow. On older Zotero, add the web API key and library ID, and writes go through the web API.
- ZOTERO_MCP_TOOLSETS picks which optional tool groups it exposes. Every tool it exposes is sent with each request, so the optional ones are off by default.
- Its docs cover Claude Desktop and Claude Code. Agents with a shell, such as Claude Code, Codex and Cursor, can use the same package's agent skill (zotero-mcp install-skill), which drives zotero-cli instead.
- ChatGPT can only reach it through a tunnel you run yourself, in Developer mode. The server has no sign-in of its own, so keep that address private.

- Type: Plugin
- Made by: 54yyyu
- Category: Research
- Formats: Local MCP
- Version: 0.15.1
- Website: https://stevenyuyy.com/zotero-mcp/
- Source: https://github.com/54yyyu/zotero-mcp
- Page: https://pluginboard.ai/plugins/zotero-mcp

## Works with

- Claude
- GitHub Copilot
- Cursor
- Claude Code
- Codex
- Antigravity
- Gemini CLI
- OpenClaw
- OpenCode
- Hermes Agent

## Install

You'll need:

- `ZOTERO_LOCAL` (optional): Read from the local Zotero desktop app instead of the web API. Requires Zotero 7+ with the local API enabled in Settings > Advanced.
- `ZOTERO_API_KEY` (optional): Zotero Web API key from https://www.zotero.org/settings/keys. Only needed when ZOTERO_LOCAL is false, or for write operations in hybrid mode.
- `ZOTERO_LIBRARY_ID` (optional): Zotero user or group library ID. Only needed when ZOTERO_LOCAL is false, or for write operations in hybrid mode.
- `ZOTERO_LIBRARY_TYPE` (optional): Whether ZOTERO_LIBRARY_ID refers to a personal or a group library.
- `ZOTERO_MCP_TOOLSETS` (optional): Which optional tool groups to expose, as a comma-separated list. Every tool is sent to the model on each request, so optional capabilities are off by default. Use 'all' for the full surface, 'none' for core only, named groups (scite, duplicates, discovery, feeds, relations, libraries, search-admin, pdf-geometry) to add them, or a leading '-' to subtract.

Replace each `<NAME>` placeholder with your own value.

### Claude

Add to claude_desktop_config.json:

```json
{
  "mcpServers": {
    "zotero-mcp": {
      "command": "uvx",
      "args": [
        "zotero-mcp-server==0.15.1",
        "serve"
      ]
    }
  }
}
```

### GitHub Copilot

Add to VS Code: vscode:mcp/install?%7B%22name%22%3A%22zotero-mcp%22%2C%22command%22%3A%22uvx%22%2C%22args%22%3A%5B%22zotero-mcp-server%3D%3D0.15.1%22%2C%22serve%22%5D%7D

Run in your terminal:

```shell
code --add-mcp '{"name":"zotero-mcp","command":"uvx","args":["zotero-mcp-server==0.15.1","serve"]}'
```

Copilot CLI:

```shell
copilot mcp add zotero-mcp -- uvx zotero-mcp-server==0.15.1 serve
```

### Cursor

Add to Cursor: cursor://anysphere.cursor-deeplink/mcp/install?name=zotero-mcp&config=eyJjb21tYW5kIjoidXZ4IiwiYXJncyI6WyJ6b3Rlcm8tbWNwLXNlcnZlcj09MC4xNS4xIiwic2VydmUiXX0%3D

Add to .cursor/mcp.json:

```json
{
  "mcpServers": {
    "zotero-mcp": {
      "command": "uvx",
      "args": [
        "zotero-mcp-server==0.15.1",
        "serve"
      ]
    }
  }
}
```

### Claude Code

Run in your terminal:

```shell
claude mcp add zotero-mcp -- uvx zotero-mcp-server==0.15.1 serve
```

### Codex

Run in your terminal:

```shell
codex mcp add zotero-mcp -- uvx zotero-mcp-server==0.15.1 serve
```

### Antigravity

Add to ~/.gemini/config/mcp_config.json:

```json
{
  "mcpServers": {
    "zotero-mcp": {
      "command": "uvx",
      "args": [
        "zotero-mcp-server==0.15.1",
        "serve"
      ]
    }
  }
}
```

### Gemini CLI

Run in your terminal:

```shell
gemini mcp add zotero-mcp uvx zotero-mcp-server==0.15.1 serve
```

### OpenClaw

In a terminal: Run openclaw mcp add zotero-mcp --command uvx, with --arg before each argument (zotero-mcp-server==0.15.1 serve) and --env NAME=value for each variable it needs.

### OpenCode

Run in your terminal:

```shell
opencode mcp add zotero-mcp -- uvx zotero-mcp-server==0.15.1 serve
```

### Hermes Agent

Add to ~/.hermes/config.yaml:

```json
{
  "mcp_servers": {
    "zotero-mcp": {
      "command": "uvx",
      "args": [
        "zotero-mcp-server==0.15.1",
        "serve"
      ]
    }
  }
}
```

---
From Pluginboard (https://pluginboard.ai).
