Troubleshooting
One rule first: run doctor
zot --json doctorIf zot is not in PATH:
cargo run -q -p zot-cli -- --json doctorCommon issues
1. Cannot write to Zotero
Check doctor output under write_credentials. The usual missing pieces are:
ZOT_API_KEYZOT_LIBRARY_ID
Without them, local read-only analysis still works. They only gate Zotero Web API writes.
2. library citekey returns nothing
Check doctor for better_bibtex.available:
- when available, citekey lookup can use Better BibTeX JSON-RPC
- when unavailable, lookup falls back to citation keys stored in the Extra field
3. PDF / outline / annotation actions fail
Check these doctor fields:
pdf_backend.availablepdf_backend.auto_download_supportedpdf_backend.cachedannotation_support.pdf_outlineannotation_support.annotation_creation
Without a working backend, do not assume PDF text, outlines, or annotation creation are available.
- If
auto_download_supported=true, the first real local PDF read will auto-download managed Pdfium. - If
auto_download_supported=false, provide Pdfium manually withZOT_PDFIUM_LIB_PATHorPDFIUM_LIB_PATH. doctorprobes only; it does not download Pdfium by itself.
4. semantic search is not very semantic
Check:
embedding.configuredsemantic_index
Without embeddings, library and workspace retrieval degrade to BM25 or the available mode.
5. feeds do not show up
Check doctor for libraries.feeds_available. Also remember:
- feeds are not targeted through
--library - use
library feeds - then use
library feed-items <library-id>
6. attach-mode auto did not attach a PDF
That is not always an error. auto tries the OA cascade in this order:
- Unpaywall
- arXiv relation
- Semantic Scholar
- PubMed Central
If no open-access PDF exists, the item may still be created successfully.
7. How to target a group library
--library only supports:
usergroup:<id>
8. Why MCP is unavailable
Because zot mcp serve is still scaffolding only and does not have a usable implementation yet.
If it still fails
Check, in order:
- the config file path
- required environment variables
- a consistent invocation path
- the returned
code / message / hint