Pyzotero MCP Server

Python wrapper for the Zotero API

Local serverstdioPython

What is the Pyzotero MCP server?

Most developer tooling work still happens through a UI a human drives. Pyzotero MCP server moves it into the conversation instead. Python wrapper for the Zotero API.

The short version

  1. uv add pyzotero or pip install pyzotero or conda install conda-forge::pyzotero 2. You'll need the ID of the personal or group library you want to access: - Your personal library ID is available here, in the section Your userID for use in API calls - For group libraries, the ID can be found by opening the group's page: https://www.zotero.org/groups/groupname, and hovering over the group settings link. The ID is the integer after /groups/ 3. You'll also need† to get an API key [here][2] 4. Are you accessing your own Zotero

The tools it exposes

The server publishes 10 tools. What each one is for:

  • search — Search the local Zotero library by query, item type, collection, tag, or full-text content
  • get_item — Get a single Zotero item by its key
  • get_children — Get child items (attachments, notes) of a Zotero item
  • list_collections — List all collections in the library
  • list_tags — List all tags, optionally filtered by collection
  • get_fulltext — Get full-text content of a PDF or other attachment
  • find_related — Find semantically similar papers using SPECTER2 embeddings
  • get_citations — Find papers that cite a given paper
  • get_references — Find papers referenced by a given paper
  • search_semantic_scholar — Search across Semantic Scholar's paper index

Getting it running

The server ships on PyPI as pyzotero, so your MCP client can launch it on demand — there is no separate build step. Add the server block to your client's configuration, restart it, and the tools register themselves.

How it compares

This sits in the developer tooling group, where several servers overlap in what they claim to do but differ sharply once you actually set them up. Pyzotero's toolset — search, get_item, get_children and 7 more — is a fair guide to whether it matches your workflow. It is maintained by Stephan Hügel; worth a glance at recent repository activity before you build anything load-bearing on it.

We check each listing at SyncDev against the project's documentation before it goes live — if something here drifts out of date, it is a bug worth reporting.

Things to watch

  • It runs with your machine's permissions. That is convenient and also the reason to think about what you point it at before you approve a tool call.
  • With 10 tools registered it takes up a noticeable share of the context window; turn it off in projects that never touch Pyzotero.
  • Keep per-call confirmation enabled while you learn its behaviour; it is the cheapest safeguard you have.

Available tools

ToolWhat it does
searchSearch the local Zotero library by query, item type, collection, tag, or full-text content
get_itemGet a single Zotero item by its key
get_childrenGet child items (attachments, notes) of a Zotero item
list_collectionsList all collections in the library
list_tagsList all tags, optionally filtered by collection
get_fulltextGet full-text content of a PDF or other attachment
find_relatedFind semantically similar papers using SPECTER2 embeddings
get_citationsFind papers that cite a given paper
get_referencesFind papers referenced by a given paper
search_semantic_scholarSearch across Semantic Scholar's paper index

How to install the Pyzotero MCP server

{
  "mcpServers": {
    "zotero": {
      "command": "pyzotero-mcp"
    }
  }
}

Configuration as documented by the project. Restart the client after saving.

Example prompts to try

  • Use Pyzotero to search.
  • Use Pyzotero to get item.
  • Use Pyzotero to get children.

Frequently asked questions

It connects Pyzotero to MCP-compatible AI assistants such as Claude and Cursor, exposing 10 tools (search, get_item, get_children, and more) that the assistant can call on your behalf. Instead of copying data back and forth by hand, the assistant works with Pyzotero directly.