pyzotero

Interact with Zotero reference management libraries using the pyzotero Python client. Retrieve, create, update, and delete items, collections, tags, and attachments via the Zotero Web API v3. Use this skill when working with Zotero libraries programmatically, managing bibliographic references, exporting citations, searching library contents, uploading PDF attachments, or building research automation workflows that integrate with Zotero.

Install

Hot:0

Download and extract to your skills directory

Copy command and send to AI Agent for auto-install:

Download and install this skill https://openskills.cc/api/download?slug=k-dense-ai-skills-pyzotero&locale=en&source=copy
name:pyzoterodescription:Interact with Zotero reference management libraries using the pyzotero Python client. Retrieve, create, update, and delete items, collections, tags, and attachments via the Zotero Web API v3. Use this skill when working with Zotero libraries programmatically, managing bibliographic references, exporting citations, searching library contents, uploading PDF attachments, or building research automation workflows that integrate with Zotero.allowed-tools:Read Write Edit Bashlicense:MIT Licensecompatibility:Requires Python 3.10+ and pyzotero 1.13+. Web API access needs a Zotero API key. Optional CLI and MCP extras require Zotero 7 with local API access enabled.required_environment_variables:[object Object],[object Object],[object Object]metadata:[object Object]

Pyzotero

Pyzotero is a Python wrapper for the Zotero API v3. Use it to programmatically manage Zotero libraries: read items and collections, create and update references, upload attachments, manage tags, and export citations.

Current upstream: pyzotero 1.13.0 (PyPI, May 2026). Docs: pyzotero.readthedocs.io.

Authentication Setup

Required credentials — get from https://www.zotero.org/settings/keys:

  • User ID: shown as "Your userID for use in API calls"

  • API Key: create at https://www.zotero.org/settings/keys/new

  • Library ID: for group libraries, the integer after /groups/ in the group URL
  • Store credentials in environment variables or a .env file:

    ZOTERO_LIBRARY_ID=your_user_id
    ZOTERO_API_KEY=your_api_key
    ZOTERO_LIBRARY_TYPE=user  # or "group"

    See references/authentication.md for full setup details.

    Installation

    uv add pyzotero              # Web API client
    uv add "pyzotero[cli]"       # + local CLI (Zotero 7)
    uv add "pyzotero[mcp]"       # + MCP server for LLM clients (Zotero 7)

    Quick Start

    import os
    from pyzotero import Zotero
    
    zot = Zotero(
        library_id=os.environ['ZOTERO_LIBRARY_ID'],
        library_type=os.environ.get('ZOTERO_LIBRARY_TYPE', 'user'),
        api_key=os.environ['ZOTERO_API_KEY'],
    )
    
    # Retrieve top-level items (returns 100 by default)
    items = zot.top(limit=10)
    for item in items:
        print(item['data']['title'], item['data']['itemType'])
    
    # Search by keyword
    results = zot.items(q='machine learning', limit=20)
    
    # Retrieve all items (use everything() for complete results)
    all_items = zot.everything(zot.items())

    Core Concepts

  • A Zotero instance is bound to a single library (user or group). All methods operate on that library.

  • Item data lives in item['data']. Access fields like item['data']['title'], item['data']['creators'].

  • Pyzotero returns 100 items by default (API default is 25). Use zot.everything(zot.items()) to get all items.

  • Write methods return True on success or raise a ZoteroError.
  • Reference Files

    FileContents
    references/authentication.mdCredentials, library types, local mode
    references/read-api.mdRetrieving items, collections, tags, groups
    references/search-params.mdFiltering, sorting, search parameters
    references/write-api.mdCreating, updating, deleting items
    references/collections.mdCollection CRUD operations
    references/tags.mdTag access and management
    references/files-attachments.mdFile download and attachment uploads
    references/exports.mdBibTeX, CSL-JSON, bibliography export
    references/pagination.mdfollow(), everything(), generators
    references/full-text.mdFull-text content indexing and access
    references/saved-searches.mdSaved search management
    references/cli.mdCommand-line interface (local Zotero 7)
    references/mcp.mdMCP server for LLM clients (local Zotero 7)
    references/error-handling.mdErrors and exception handling

    Common Patterns

    Fetch and modify an item


    item = zot.item('ITEMKEY')
    item['data']['title'] = 'New Title'
    zot.update_item(item)

    Create an item from a template


    template = zot.item_template('journalArticle')
    template['title'] = 'My Paper'
    template['creators'][0] = {'creatorType': 'author', 'firstName': 'Jane', 'lastName': 'Doe'}
    zot.create_items([template])

    Export as BibTeX


    zot.add_parameters(format='bibtex')
    bibtex = zot.top(limit=50)
    # bibtex is a bibtexparser BibDatabase object
    print(bibtex.entries)

    Local mode (read-only, no API key needed)


    zot = Zotero(library_id='123456', library_type='user', local=True)
    items = zot.items()

    Local Zotero 7 (CLI or MCP, no API key)

    For searching a locally running Zotero desktop app (including full-text PDF search), use the CLI or MCP server instead of the Web API. Both require Zotero 7 with local API access enabled. See references/cli.md and references/mcp.md.