zoteroManage Zotero reference libraries via the Web API. Search, list, add items by DOI/ISBN/PMID (with duplicate detection), delete/trash items, update metadata and tags, export in BibTeX/RIS/CSL-JSON, batch-add from files, check PDF attachments, cross-reference citations, find missing DOIs via CrossRef, and fetch open-access PDFs. Supports --json output for scripting. Use when the user asks about academic references, citation management, literature libraries, PDFs for papers, bibliography export, or Zotero specifically.
Install via ClawdBot CLI:
clawdbot install Terwox/zoteroInteract with Zotero personal or group libraries via the REST API v3.
Requires two environment variables:
ZOTERO_API_KEY โ Create at https://www.zotero.org/settings/keys/new
ZOTERO_USER_ID โ Found on the same page (numeric, not username)
For group libraries, set ZOTERO_GROUP_ID instead of ZOTERO_USER_ID.
Optional env var for CrossRef/Unpaywall polite pool (improves DOI lookup success rate):
CROSSREF_EMAIL โ Your email (optional; uses fallback if unset)
If credentials are missing, tell the user what's needed and link them to the key creation page.
All operations use scripts/zotero.py (Python 3, zero external dependencies).
python3 scripts/zotero.py <command> [options]
| Command | Description | Example |
|---------|-------------|---------|
| items | List top-level items | zotero.py items --limit 50 |
| search | Search by query | zotero.py search "cognitive load" |
| get | Full item details + attachments | zotero.py get ITEMKEY |
| collections | List all collections | zotero.py collections |
| tags | List all tags | zotero.py tags |
| children | List attachments/notes for item | zotero.py children ITEMKEY |
| add-doi | Add item by DOI (dedup enabled) | zotero.py add-doi 10.1234/example |
| add-isbn | Add item by ISBN (dedup enabled) | zotero.py add-isbn 978-0-123456-78-9 |
| add-pmid | Add item by PubMed ID | zotero.py add-pmid 12345678 |
| delete | Move items to trash (recoverable by default) | zotero.py delete KEY1 KEY2 --yes |
| update | Modify item metadata/tags | zotero.py update KEY --add-tags "new" |
| export | Export as BibTeX/RIS/CSL-JSON | zotero.py export --format bibtex |
| batch-add | Add multiple items from file | zotero.py batch-add dois.txt --type doi |
| check-pdfs | Report which items have/lack PDFs | zotero.py check-pdfs |
| crossref | Match citations vs library | zotero.py crossref bibliography.txt |
| find-dois | Find & add missing DOIs via CrossRef | zotero.py find-dois --limit 10 |
| fetch-pdfs | Fetch open-access PDFs for items | zotero.py fetch-pdfs --dry-run |
--json โ JSON output instead of human-readable (works with items, search, get)--limit N โ Max items to return (default 25)--sort FIELD โ Sort by dateModified, title, creator, date--direction asc|desc โ Sort direction--collection KEY โ Filter by or add to collection--type TYPE โ Filter by item type (journalArticle, book, conferencePaper, etc.)--tags "tag1,tag2" โ Add tags when creating items--force โ Skip duplicate detection on add commandspython3 zotero.py add-doi "10.1093/jamia/ocaa037" --tags "review"
# Warns if already in library. Use --force to override.
Duplicate detection: translates DOI to metadata, searches library by first author, compares DOI fields.
# One identifier per line, # for comments
python3 zotero.py batch-add dois.txt --type doi --tags "imported"
Skips duplicates. Reports summary: added/skipped/failed.
python3 zotero.py export --format bibtex --output refs.bib
python3 zotero.py export --format csljson --collection COLLKEY
python3 zotero.py update ITEMKEY --add-tags "important" --remove-tags "unread"
python3 zotero.py update ITEMKEY --title "Corrected Title" --date "2024"
python3 zotero.py update ITEMKEY --doi "10.1234/example"
python3 zotero.py update ITEMKEY --url "https://example.com/paper"
python3 zotero.py update ITEMKEY --add-collection COLLKEY
python3 zotero.py delete KEY1 KEY2 --yes # Trash (recoverable, default)
python3 zotero.py delete KEY1 --permanent --yes # Permanent delete
python3 zotero.py crossref my-paper.txt
Extracts Author (Year) patterns from text and matches against library.
# Dry run (default) โ show matches without writing anything
python3 zotero.py find-dois --limit 20
# Actually write DOIs to Zotero
python3 zotero.py find-dois --apply
# Filter by collection
python3 zotero.py find-dois --collection COLLKEY --apply
Scans journalArticle and conferencePaper items missing DOIs, queries CrossRef, and matches
by title similarity (>85%), exact year, and first author last name. Dry run by default โ use
--apply to write. Only patches the DOI field; never touches other metadata. 1s delay between
CrossRef requests (polite pool with mailto).
# Dry run โ show which PDFs are available and from where
python3 zotero.py fetch-pdfs --dry-run --limit 10
# Fetch and attach as linked URLs (no storage quota used)
python3 zotero.py fetch-pdfs --limit 20
# Also save PDFs locally
python3 zotero.py fetch-pdfs --download-dir ./pdfs
# Upload to Zotero storage instead of linked URL
python3 zotero.py fetch-pdfs --upload --limit 10
# Only try specific sources
python3 zotero.py fetch-pdfs --sources unpaywall,semanticscholar
Tries three legal OA sources in order: Unpaywall โ Semantic Scholar โ DOI content negotiation.
By default creates linked URL attachments (no Zotero storage quota needed). Use --upload for
full S3 upload to Zotero storage. Use --download-dir to also save PDFs locally.
Sources: unpaywall, semanticscholar, doi (default: all three)
Rate limits: 1s between Unpaywall/Semantic Scholar requests, 2s between DOI requests.
python3 zotero.py --json items --limit 100 | jq '.items[].DOI'
python3 zotero.py --json get ITEMKEY | jq '.title'
10.xxxx/... format. Item keys are 8-char alphanumeric (e.g., VNPN6FHT). ISBNs must be valid checksums.check-pdfs fetches all items; for large libraries (500+), this may be slowfetch-pdfs also processes all items โ use --collection to scope for large librariesGenerated Mar 1, 2026
Researchers can use this skill to maintain a personal or group library of academic papers, automatically adding references via DOI/ISBN/PMID with duplicate detection. It supports tagging, organizing collections, and exporting bibliographies in formats like BibTeX for manuscript preparation, streamlining literature reviews and citation workflows.
Libraries or institutions can leverage the skill to fetch and attach open-access PDFs to existing Zotero entries from sources like Unpaywall and Semantic Scholar. This enhances resource accessibility without storage costs, supporting patrons in accessing full-text papers legally and efficiently.
Publishers or editors can use the crossref command to match citations in manuscripts against a Zotero library, verifying references and ensuring accuracy. This helps in quality control during the peer-review process, reducing errors in bibliographies and improving publication standards.
Research teams can batch-add multiple items from files containing DOIs or other identifiers, with automatic duplicate skipping. This facilitates collaborative projects by quickly populating shared Zotero libraries, saving time on manual entry and maintaining consistency across team members.
Archivists or digital repositories can use the find-dois command to identify and add missing DOIs to journal articles in Zotero via CrossRef queries. This improves metadata completeness and interoperability, making collections more discoverable and citable in academic databases.
Offer a cloud-based service that integrates this Zotero skill with additional features like advanced analytics, collaboration tools, and premium support. Institutions pay a yearly subscription per user or department, generating recurring revenue while enhancing research productivity and data management.
Provide a free basic version of the skill with core functionalities like adding items and exporting bibliographies, while charging for advanced features such as bulk PDF fetching, priority CrossRef queries, or enhanced API limits. This attracts a broad user base and converts power users to paid plans.
Offer tailored solutions for organizations needing custom workflows, such as integrating the skill with existing library systems or developing specialized commands. Charge for consulting hours, development, and ongoing maintenance, catering to niche markets like publishers or large research consortia.
๐ฌ Integration Tip
Ensure environment variables like ZOTERO_API_KEY are securely set up, and consider using the --json flag for scripting to automate workflows in research pipelines.
Search, download, and summarize academic papers from arXiv. Built for AI/ML researchers.
Search and summarize papers from ArXiv. Use when the user asks for the latest research, specific topics on ArXiv, or a daily summary of AI papers.
Assistance with writing literature reviews by searching for academic sources via Semantic Scholar, OpenAlex, Crossref and PubMed APIs. Use when the user needs to find papers on a topic, get details for specific DOIs, or draft sections of a literature review with proper citations.
Baidu Scholar Search - Search Chinese and English academic literature (journals, conferences, papers, etc.)
Use this skill when users need to search academic papers, download research documents, extract citations, or gather scholarly information. Triggers include: requests to "find papers on", "search research about", "download academic articles", "get citations for", or any request involving academic databases like arXiv, PubMed, Semantic Scholar, or Google Scholar. Also use for literature reviews, bibliography generation, and research discovery. Requires OpenClawCLI installation from clawhub.ai.
Outcome-driven scientific publishing for AI agents. Publish research papers, hypotheses, and experiments with validated artifacts, structured claims, milestone tracking, and independent replications. Claim replication bounties, submit peer reviews, and collaborate with other AI researchers.