Skip to main content
Glama
Zotero MCP Server
by awsl5714

Zotero MCP Server

A Model Context Protocol (MCP) server for Zotero, enabling LLM-powered tools like Claude Desktop, Claude Code, and Cursor to interact with your academic library.

Features

Tools

  • search_papers - Search papers by keyword, title, or author

  • add_arxiv_paper - Add papers to Zotero by arXiv ID or URL

  • update_metadata - Update metadata fields of existing items

  • get_item - Get detailed information about a specific item

  • get_collection_items - List items in a collection

  • get_recent_items - Get recently added items

Resources

  • zotero://recent - Recently added items

  • zotero://collection/{key} - Items in a specific collection (dynamic)

Prompts

  • literature_review - Generate structured literature review template from collection papers

  • paper_summary - Summarize a specific paper with structured analysis

Related MCP server: zotero-mcp

Quick Start

Prerequisites

Installation

git clone https://github.com/awsl5714/zotero-mcp-server.git
cd zotero-mcp-server
pip install -e .

Configuration

cp .env.example .env
# Edit .env with your Zotero credentials
export ZOTERO_LIBRARY_ID=your-library-id
export ZOTERO_API_KEY=your-api-key
export ZOTERO_LIBRARY_TYPE=user  # or "group"

Claude Desktop Integration

Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "zotero": {
      "command": "zotero-mcp",
      "env": {
        "ZOTERO_LIBRARY_ID": "your-library-id",
        "ZOTERO_API_KEY": "your-api-key"
      }
    }
  }
}

Claude Code Integration

Add to your Claude Code MCP settings:

{
  "mcpServers": {
    "zotero": {
      "command": "zotero-mcp",
      "env": {
        "ZOTERO_LIBRARY_ID": "your-library-id",
        "ZOTERO_API_KEY": "your-api-key"
      }
    }
  }
}

Usage Examples

Once connected, you can use natural language in Claude:

  • "Search my Zotero library for papers about transformer architectures"

  • "Add this arXiv paper to my library: 2301.00234"

  • "Write a literature review based on my 'Deep Learning' collection"

  • "Update the tags for paper KEY123 to include 'NLP' and 'attention'"

Tech Stack

Component

Technology

Protocol

MCP SDK

Zotero API

pyzotero

Validation

Pydantic v2

HTTP

httpx

Project Structure

src/zotero_mcp/
├── server.py        # MCP server with Tools, Resources, Prompts
├── zotero_client.py # Zotero API wrapper
└── config.py        # Environment-based configuration

License

MIT

Available Tools

10 tools
get_childrenA

Get child items (attachments, notes) of a Zotero item.

Args: key: The Zotero item key.

Returns: JSON array of child items.

Inputs: key (required). Returns: result

get_citationsA

Find papers that cite a given paper using Semantic Scholar.

Args: doi: DOI of the paper. limit: Maximum results (default 100, max 1000). min_citations: Minimum citation count filter. check_library: If true, annotate results with local Zotero presence.

Returns: JSON with count and papers list.

Inputs: doi (required), limit, min_citations, check_library. Returns: result

get_fulltextA

Get full-text content of a Zotero attachment.

Args: key: The key of an attachment item (not a top-level item).

Returns: JSON with content, indexedPages, and totalPages.

Inputs: key (required). Returns: result

get_itemB

Get a single Zotero item by its key.

Args: key: The Zotero item key.

Returns: JSON with the full item data.

Inputs: key (required). Returns: result

get_referencesA

Find papers referenced by a given paper using Semantic Scholar.

Args: doi: DOI of the paper. limit: Maximum results (default 100, max 1000). min_citations: Minimum citation count filter. check_library: If true, annotate results with local Zotero presence.

Returns: JSON with count and papers list.

Inputs: doi (required), limit, min_citations, check_library. Returns: result

list_collectionsA

List all collections in the local Zotero library.

Args: limit: Maximum number of collections to return (0 for all).

Returns: JSON array of collections with id, name, items count, and parent info.

Inputs: limit. Returns: result

list_tagsA

List all tags in the Zotero library, optionally filtered by collection.

Args: collection: Optional collection key to filter tags.

Returns: JSON array of tag strings.

Inputs: collection. Returns: result

search_semantic_scholarA

Search for papers on Semantic Scholar.

Args: query: Search query string. limit: Maximum results (default 20, max 100). year: Year filter, e.g. "2020", "2018-2022", or "2020-". open_access: Only return open access papers. sort: Sort by "citations" or "year" (descending). min_citations: Minimum citation count filter. check_library: If true, annotate results with local Zotero presence.

Returns: JSON with count, total, and papers list.

Inputs: query (required), limit, year, open_access, +3 more. Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.9/5.0

    Scored across 10 tools

    Disambiguation5/5

    Each tool targets a distinct functionality: local Zotero operations (get item, children, fulltext, list collections/tags, search) are separate from Semantic Scholar operations (search, related, citations, references). No overlapping purposes.

    Naming Consistency5/5

    All tool names follow a consistent verb_noun pattern using snake_case (e.g., get_item, list_collections, search_semantic_scholar). Although verbs vary (get, list, search, find), they accurately describe the action and maintain predictability.

    Tool Count5/5

    With 10 tools, the server is well-scoped for a Zotero integration that includes both local library retrieval and external paper discovery via Semantic Scholar. Each tool serves a distinct need without bloat or deficiency.

    Completeness3/5

    The tool surface covers extensive read operations for Zotero items, collections, tags, and full-text, plus comprehensive Semantic Scholar searches. However, it lacks CRUD operations (create, update, delete items) that are typical for library management, leaving notable gaps.

    Maintenance

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      D
      maintenance
      Enables AI assistants to search and retrieve metadata, abstracts, and notes from a user's Zotero library through tools like search, get item, and list collections.
      -
    • F
      license
      Not graded
      quality
      A
      maintenance
      Enables AI assistants to search a Zotero library, retrieve item metadata, and access the full text of PDF attachments.
      -
    • F
      license
      Not graded
      quality
      A
      maintenance
      Enables AI assistants to search a Zotero library, retrieve complete metadata for individual items, and read the full text of attached PDFs, connecting through either the desktop app's local API or the Zotero Web API.
      -
    • F
      license
      Not graded
      quality
      A
      maintenance
      Enables AI assistants to search a Zotero library, retrieve complete item metadata, and fetch the full text of attached PDFs through the Zotero API.
      -