Manage Zotero reference libraries via the pyzotero Python client: retrieve, create, update, and delete items, collections, tags, and attachments through the Zotero Web API v3.
How this skill is triggered — by the user, by Claude, or both
Slash command
/alterlab-writing-tools:alterlab-pyzoteroThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Pyzotero is a Python wrapper for the [Zotero API v3](https://www.zotero.org/support/dev/web_api/v3/start). Use it to programmatically manage Zotero libraries: read items and collections, create and update references, upload attachments, manage tags, and export citations.
references/authentication.mdreferences/cli.mdreferences/collections.mdreferences/error-handling.mdreferences/exports.mdreferences/files-attachments.mdreferences/full-text.mdreferences/pagination.mdreferences/read-api.mdreferences/saved-searches.mdreferences/search-params.mdreferences/tags.mdreferences/write-api.mdPyzotero 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.
Required credentials — get from https://www.zotero.org/settings/keys:
/groups/ in the group URLStore 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.
uv add pyzotero
# or with CLI support:
uv add "pyzotero[cli]"
from pyzotero import Zotero
zot = Zotero(library_id='123456', library_type='user', api_key='ABC1234XYZ')
# 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())
Zotero instance is bound to a single library (user or group). All methods operate on that library.item['data']. Access fields like item['data']['title'], item['data']['creators'].zot.everything(zot.items()) to get all items.True on success or raise a ZoteroError.| File | Contents |
|---|---|
| references/authentication.md | Credentials, library types, local mode |
| references/read-api.md | Retrieving items, collections, tags, groups |
| references/search-params.md | Filtering, sorting, search parameters |
| references/write-api.md | Creating, updating, deleting items |
| references/collections.md | Collection CRUD operations |
| references/tags.md | Tag retrieval and management |
| references/files-attachments.md | File retrieval and attachment uploads |
| references/exports.md | BibTeX, CSL-JSON, bibliography export |
| references/pagination.md | follow(), everything(), generators |
| references/full-text.md | Full-text content indexing and retrieval |
| references/saved-searches.md | Saved search management |
| references/cli.md | Command-line interface usage |
| references/error-handling.md | Errors and exception handling |
item = zot.item('ITEMKEY')
item['data']['title'] = 'New Title'
zot.update_item(item)
template = zot.item_template('journalArticle')
template['title'] = 'My Paper'
template['creators'][0] = {'creatorType': 'author', 'firstName': 'Jane', 'lastName': 'Doe'}
zot.create_items([template])
zot.add_parameters(format='bibtex')
bibtex = zot.top(limit=50)
# bibtex is a bibtexparser BibDatabase object
print(bibtex.entries)
zot = Zotero(library_id='123456', library_type='user', local=True)
items = zot.items()
npx claudepluginhub alterlab-ieu/alterlab-academic-skills --plugin alterlab-visualizationManage Zotero reference libraries via Python using the pyzotero client. Retrieve, create, update, delete items, collections, tags, and attachments through the Zotero Web API v3.
Performs standalone Zotero library operations — adding abstracts, attaching PDFs, enriching metadata, deduplicating, and fixing BBT citation keys. Not for systematic review pipelines.
Audits Zotero libraries for duplicates, orphan items, bloated collections, and tag issues; emits preview-only cleanup plans. Defers CRUD to zotero-skills skill or research-hub CLI.