# MCP Zotero

Connects an AI agent to a Zotero library for source searches, DOI-based paper additions, and PDF work. It also provides tools for adding citations to Word documents.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 38
- Author: Xevos117
- License: not stated · policy=link-only · description only; the file stays with the author
- Source: https://github.com/Xevos117/mcp-zotero
- Updated: 2026-10-22
- HTML: https://affpapa.org/en/nevibecode/mcp/mcp-zotero

## What it does

The server lets an agent search and organize Zotero records, add papers by DOI, import PDFs, and read their full text. It also includes tools for inserting citations into Word files. Workflow guidance arrives when the MCP connection opens, while tool descriptions explain how the available operations fit together.

You need Node.js 22 or newer, a Zotero API key with library read/write and file access, and a numeric `ZOTERO_USER_ID`. Deletion of items and collections is blocked by default and can be controlled with `UNSAFE_OPERATIONS`. Keep that setting in mind before letting an agent make changes to your library.

## Requirements
- Needs: Node.js (commands run via npx)
- Environment variables: `ZOTERO_API_KEY`, `ZOTERO_USER_ID`, `ZOTERO_LIBRARY_TYPE`, `ZOTERO_LIBRARY_ID`, `UNPAYWALL_EMAIL`, `UNSAFE_OPERATIONS` — keys and tokens: ask the human for the values, never commit them or put them in shared files.

## Install

### Claude Code (native platform)

**Platform CLI**
```bash
claude mcp add --env ZOTERO_API_KEY=<ZOTERO_API_KEY> --env ZOTERO_USER_ID=<ZOTERO_USER_ID> --env ZOTERO_LIBRARY_TYPE=<ZOTERO_LIBRARY_TYPE> --env ZOTERO_LIBRARY_ID=<ZOTERO_LIBRARY_ID> --env UNPAYWALL_EMAIL=<UNPAYWALL_EMAIL> --transport stdio mcp-zotero -- npx -y @xevos117/mcp-zotero
```
Replace <…> with your own values. 1 more environment variable is in the server README

### Codex

**Platform CLI**
```bash
codex mcp add mcp-zotero --env ZOTERO_API_KEY=<ZOTERO_API_KEY> --env ZOTERO_USER_ID=<ZOTERO_USER_ID> --env ZOTERO_LIBRARY_TYPE=<ZOTERO_LIBRARY_TYPE> --env ZOTERO_LIBRARY_ID=<ZOTERO_LIBRARY_ID> --env UNPAYWALL_EMAIL=<UNPAYWALL_EMAIL> -- npx -y @xevos117/mcp-zotero
```
Replace <…> with your own values. 1 more environment variable is in the server README

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "mcp-zotero": {
            "command": "npx",
            "args": [
                "-y",
                "@xevos117/mcp-zotero"
            ],
            "env": {
                "ZOTERO_API_KEY": "<ZOTERO_API_KEY>",
                "ZOTERO_USER_ID": "<ZOTERO_USER_ID>",
                "ZOTERO_LIBRARY_TYPE": "<ZOTERO_LIBRARY_TYPE>",
                "ZOTERO_LIBRARY_ID": "<ZOTERO_LIBRARY_ID>",
                "UNPAYWALL_EMAIL": "<UNPAYWALL_EMAIL>"
            }
        }
    }
}
```
Replace <…> with your own values. 1 more environment variable is in the server README

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "mcp-zotero": {
            "type": "stdio",
            "command": "npx",
            "args": [
                "-y",
                "@xevos117/mcp-zotero"
            ],
            "env": {
                "ZOTERO_API_KEY": "<ZOTERO_API_KEY>",
                "ZOTERO_USER_ID": "<ZOTERO_USER_ID>",
                "ZOTERO_LIBRARY_TYPE": "<ZOTERO_LIBRARY_TYPE>",
                "ZOTERO_LIBRARY_ID": "<ZOTERO_LIBRARY_ID>",
                "UNPAYWALL_EMAIL": "<UNPAYWALL_EMAIL>"
            }
        }
    }
}
```
Replace <…> with your own values. 1 more environment variable is in the server README

### Gemini CLI

**Platform CLI**
```bash
gemini mcp add -e ZOTERO_API_KEY=<ZOTERO_API_KEY> -e ZOTERO_USER_ID=<ZOTERO_USER_ID> -e ZOTERO_LIBRARY_TYPE=<ZOTERO_LIBRARY_TYPE> -e ZOTERO_LIBRARY_ID=<ZOTERO_LIBRARY_ID> -e UNPAYWALL_EMAIL=<UNPAYWALL_EMAIL> mcp-zotero npx -y @xevos117/mcp-zotero
```
Replace <…> with your own values. 1 more environment variable is in the server README

## When to use it
- search a Zotero library for relevant records
- add a paper to Zotero using its DOI
- import PDFs and read their full text
- insert citations into a Word document
- target a Zotero group library

## Example prompts
- Search my Zotero library for papers about this research topic.
- Add the paper with DOI `10.xxxx/example` to Zotero and look for an available PDF.
- Insert citations from the selected Zotero records into this Word document.

## Similar
- [Zotero MCP](https://affpapa.org/en/nevibecode/mcp/zotero-mcp.md) — MCP server · ★ 5548
- [arxiv-mcp-server](https://affpapa.org/en/nevibecode/mcp/arxiv-mcp-server.md) — MCP server · ★ 3231
- [PaperBanana](https://affpapa.org/en/nevibecode/mcp/paperbanana.md) — MCP server · ★ 2417
- [MATLAB MCP Server](https://affpapa.org/en/nevibecode/mcp/matlab-mcp-server.md) — MCP server · ★ 1716
- [Hex Research](https://affpapa.org/en/nevibecode/mcp/hex-research.md) — MCP server · ★ 583
- [DocsAgent — Zotero, Obsidian & Apple Notes MCP Server](https://affpapa.org/en/nevibecode/mcp/docsagent-zotero-obsidian-apple-notes-mcp-server.md) — MCP server · ★ 578

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
