Zotero MCP

listing.by

Search, read, annotate and add papers in your Zotero research library, using the local app or the web API.

state.local.long (state.local.title)listing.badge.runs_withstate.key.long

listing.install

listing.local.explain

uvx --from zotero-mcp-server zotero-mcp serve

listing.local.needs listing.local.note

  • ZOTERO_LOCAL listing.env.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 listing.env.secret listing.env.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…
  • ZOTERO_LIBRARY_ID listing.env.optional Zotero user or group library ID. Only needed when ZOTERO_LOCAL is false, or for write operations in hybrid mode.
  • ZOTERO_LIBRARY_TYPE listing.env.optional Whether ZOTERO_LIBRARY_ID refers to a personal or a group library.
  • ZOTERO_MCP_TOOLSETS listing.env.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…

listing.share.h

listing.share.p_local

mcp.tc/i/zotero

listing.about

Connects an AI assistant to a Zotero research library. You can search by title, author, tag, collection, full text or meaning (semantic search), read metadata, BibTeX and PDF text, place highlights and notes on PDFs, and add papers by DOI, URL, ISBN, BibTeX or file. Collections, tags and duplicates can be managed, and optional Scite citation tallies are available.

Runs locally over stdio as the Python package zotero-mcp-server (uvx or pip, Python 3.10+). Local mode reads from the Zotero 7+ desktop app with its local API enabled and needs no key. Web or hybrid mode needs ZOTERO_API_KEY and ZOTERO_LIBRARY_ID. Optional tool groups are chosen with ZOTERO_MCP_TOOLSETS.

listing.can

  • Search the library by title, author, tag, collection, full text or meaning
  • Read item metadata, BibTeX, full text and PDF page ranges
  • Create highlights, area boxes and notes on PDFs
  • Add papers by DOI, URL, ISBN, BibTeX or file
  • Manage collections and tags and merge duplicates
  • Check citation tallies and retraction alerts with Scite (optional)

listing.tools

listing.notools.key

listing.prompts

  • Find papers in my library on attention mechanisms

  • Summarize the key findings of this paper

  • Highlight the main claims in this PDF

  • Add the paper with DOI 10.1000/xyz123 to my Zotero library

listing.setup.h

listing.setup.local

Claude Code

  1. Run this in a terminal, in your project folder:
claude mcp add --transport stdio zotero --env "ZOTERO_API_KEY=<YOUR_ZOTERO_API_KEY>" -- uvx --from zotero-mcp-server zotero-mcp serve
  1. Start Claude Code and type /mcp. zotero should show as connected.

Add --scope user to make it available in every project. Replace the placeholders with your own values.

Claude Desktop

  1. Open Settings → Developer → Edit Config. It opens claude_desktop_config.json. Add:
claude_desktop_config.json
{
  "mcpServers": {
    "zotero": {
      "command": "uvx",
      "args": [
        "--from",
        "zotero-mcp-server",
        "zotero-mcp",
        "serve"
      ],
      "env": {
        "ZOTERO_API_KEY": "<YOUR_ZOTERO_API_KEY>"
      }
    }
  }
}
  1. Save the file and restart Claude Desktop. Replace the placeholders with your own values.

Needs uv (Python) on your computer. The file lives in ~/Library/Application Support/Claude/ on macOS and %APPDATA%\Claude\ on Windows.

Cursor

Or add it by hand to ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (this project):

mcp.json
{
  "mcpServers": {
    "zotero": {
      "command": "uvx",
      "args": [
        "--from",
        "zotero-mcp-server",
        "zotero-mcp",
        "serve"
      ],
      "env": {
        "ZOTERO_API_KEY": "<YOUR_ZOTERO_API_KEY>"
      }
    }
  }
}

Needs uv (Python) on your computer. Replace the placeholders with your own values.

VS Code

Add it to .vscode/mcp.json. VS Code asks for the secret the first time and stores it securely:

.vscode/mcp.json
{
  "servers": {
    "zotero": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "--from",
        "zotero-mcp-server",
        "zotero-mcp",
        "serve"
      ],
      "env": {
        "ZOTERO_API_KEY": "${input:zotero-api-key}"
      }
    }
  },
  "inputs": [
    {
      "type": "promptString",
      "id": "zotero-api-key",
      "description": "ZOTERO_API_KEY",
      "password": true
    }
  ]
}

Needs uv (Python) on your computer.

Devin Desktop

  1. Add it to ~/.config/devin/mcp_config.json (macOS and Linux) or %APPDATA%\devin\mcp_config.json (Windows):
mcp_config.json
{
  "mcpServers": {
    "zotero": {
      "command": "uvx",
      "args": [
        "--from",
        "zotero-mcp-server",
        "zotero-mcp",
        "serve"
      ],
      "env": {
        "ZOTERO_API_KEY": "<YOUR_ZOTERO_API_KEY>"
      }
    }
  }
}
  1. Refresh the MCP server list in Cascade. Replace the placeholders with your own values.

Devin Desktop is the new name for Windsurf.

Codex

codex mcp add zotero --env "ZOTERO_API_KEY=<YOUR_ZOTERO_API_KEY>" -- uvx --from zotero-mcp-server zotero-mcp serve

Or edit ~/.codex/config.toml directly:

config.toml
[mcp_servers.zotero]
command = "uvx"
args = ["--from", "zotero-mcp-server", "zotero-mcp", "serve"]
env = { ZOTERO_API_KEY = "<YOUR_ZOTERO_API_KEY>" }

Needs uv (Python) on your computer. Replace the placeholders with your own values.

Gemini CLI

gemini mcp add -e "ZOTERO_API_KEY=<YOUR_ZOTERO_API_KEY>" zotero uvx -- --from zotero-mcp-server zotero-mcp serve

This adds it to the current project. Add -s user to use it everywhere.

Any client

Most clients that start local servers accept this shape:

{
  "mcpServers": {
    "zotero": {
      "command": "uvx",
      "args": [
        "--from",
        "zotero-mcp-server",
        "zotero-mcp",
        "serve"
      ],
      "env": {
        "ZOTERO_API_KEY": "<YOUR_ZOTERO_API_KEY>"
      }
    }
  }
}

Zed puts servers under context_servers in its settings, with the same command, args and env fields.

Needs uv (Python) on your computer. Replace the placeholders with your own values.

listing.faq

Can I paste mcp.tc/i/zotero into my MCP client?

No. Zotero MCP runs on your own computer, started by your client, so it has no web address to connect to. The quick link is the page to share; the install command is uvx --from zotero-mcp-server zotero-mcp serve.

Does Zotero MCP need an API key?

Yes. It reads ZOTERO_API_KEY from its environment, and ZOTERO_API_KEY is a secret. Put the value in your client's config on your own machine, never in a shared file.

Is Zotero MCP a remote or a local server?

Local. Your client starts it as a process on your computer with uvx --from zotero-mcp-server zotero-mcp serve, which needs uv (Python).

What can Zotero MCP do?

You can search the library by title, author, tag, collection, full text or meaning, read item metadata, BibTeX, full text and PDF page ranges and create highlights, area boxes and notes on PDFs.

Which clients can use it?

Any client that starts local servers: Claude Code, Claude Desktop, Cursor, VS Code, Devin Desktop, Codex, Gemini CLI, Zed and others. claude.ai and ChatGPT only connect to remote servers.

Who wrote this page?

mcp.tc's robot read Zotero MCP's public metadata (its package and repository pages), and an AI model drafted the text from it. A person reviews anything the checks can't confirm. The text can still be wrong, so if you spot a mistake, use Report this listing on this page.

listing.em.h

listing.em.lead_local listing.em.how

listing.em.badge

em.prev_lightem.prev_dark
Markdown
[![Zotero MCP on mcp.tc](https://mcp.tc/i/zotero/badge.svg)](https://mcp.tc/i/zotero)
HTML
<a href="https://mcp.tc/i/zotero"><img src="https://mcp.tc/i/zotero/badge.svg" alt="Zotero MCP on mcp.tc" height="20"></a>

listing.em.badge_note

listing.em.widget

HTML
<script src="https://mcp.tc/w/zotero.js" async></script>

listing.em.widget_note

iframe

HTML
<iframe src="https://mcp.tc/embed/zotero" title="Zotero MCP on mcp.tc" width="420" height="200" loading="lazy" allow="clipboard-write" style="border:0;border-radius:8px;max-width:100%"></iframe>

listing.em.iframe_note

JSON

listing.em.json_local

https://mcp.tc/i/zotero.json

listing.em.fields

listing.disclaimer_checked