# Zoteus

Connects Claude Code to Zotero for library searches, PDF passages and formatted references. Useful when you want an agent to work with research sources in chat.

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

## What it does

Zoteus lets an agent search a Zotero library by keywords or meaning, retrieve PDF excerpts with page numbers, and format bibliographies using CSL styles. It can add a record from a DOI or arXiv identifier. The server also supports creating and editing entries, applying tags, and moving items to a recoverable trash.

With the Zotero desktop app open, Zoteus accesses the libraries available through that app. A Zotero API key is needed for syncing, group libraries outside the app, and access while Zotero is closed. Those cases depend on the key. Claude Code can connect over HTTP or run the server locally with `npx`; Zoteus is written in TypeScript.

## Requirements
- Needs: Node.js (commands run via npx)
- Remote server: `https://mcp.zoteus.com/mcp`
- Environment variables: `ZOTERO_API_KEY`, `ZOTEUS_LOCAL`, `ZOTEUS_ALLOW_DELETE` — keys and tokens: ask the human for the values, never commit them or put them in shared files.

## Install

### Claude Code (native platform)

1. **Platform CLI: remote server**
```bash
claude mcp add --transport http zoteus https://mcp.zoteus.com/mcp
```

2. **Platform CLI**
```bash
claude mcp add --env ZOTERO_API_KEY=<ZOTERO_API_KEY> --env ZOTEUS_LOCAL=<ZOTEUS_LOCAL> --env ZOTEUS_ALLOW_DELETE=<ZOTEUS_ALLOW_DELETE> --transport stdio zoteus -- npx -y @oscardvs/zoteus
```
Replace <…> with your own values

### Codex

1. **Platform CLI: remote server**
```bash
codex mcp add zoteus --url https://mcp.zoteus.com/mcp
```

2. **Platform CLI**
```bash
codex mcp add zoteus --env ZOTERO_API_KEY=<ZOTERO_API_KEY> --env ZOTEUS_LOCAL=<ZOTEUS_LOCAL> --env ZOTEUS_ALLOW_DELETE=<ZOTEUS_ALLOW_DELETE> -- npx -y @oscardvs/zoteus
```
Replace <…> with your own values

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "zoteus": {
            "url": "https://mcp.zoteus.com/mcp"
        }
    }
}
```
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "zoteus": {
            "command": "npx",
            "args": [
                "-y",
                "@oscardvs/zoteus"
            ],
            "env": {
                "ZOTERO_API_KEY": "<ZOTERO_API_KEY>",
                "ZOTEUS_LOCAL": "<ZOTEUS_LOCAL>",
                "ZOTEUS_ALLOW_DELETE": "<ZOTEUS_ALLOW_DELETE>"
            }
        }
    }
}
```
Replace <…> with your own values

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "zoteus": {
            "type": "http",
            "url": "https://mcp.zoteus.com/mcp"
        }
    }
}
```
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "zoteus": {
            "type": "stdio",
            "command": "npx",
            "args": [
                "-y",
                "@oscardvs/zoteus"
            ],
            "env": {
                "ZOTERO_API_KEY": "<ZOTERO_API_KEY>",
                "ZOTEUS_LOCAL": "<ZOTEUS_LOCAL>",
                "ZOTEUS_ALLOW_DELETE": "<ZOTEUS_ALLOW_DELETE>"
            }
        }
    }
}
```
Replace <…> with your own values

### Gemini CLI

1. **Platform CLI: remote server**
```bash
gemini mcp add -t http zoteus https://mcp.zoteus.com/mcp
```

2. **Platform CLI**
```bash
gemini mcp add -e ZOTERO_API_KEY=<ZOTERO_API_KEY> -e ZOTEUS_LOCAL=<ZOTEUS_LOCAL> -e ZOTEUS_ALLOW_DELETE=<ZOTEUS_ALLOW_DELETE> zoteus npx -y @oscardvs/zoteus
```
Replace <…> with your own values

## When to use it
- search a Zotero library for research on a topic
- retrieve a PDF excerpt with its page number
- format references in a CSL style
- add a paper using its DOI or arXiv identifier
- edit a Zotero record and move it to trash

## Example prompts
- Find Zotero sources about sleep and memory, then return relevant PDF excerpts with page numbers.
- Format the references you found in APA style.
- Add the paper with DOI `10.xxxx/example` to Zotero.

## 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
