Install
openclaw skills install zotero-local-import-enImport local PDF files into Zotero from the command line on Windows/macOS/Linux via the Zotero local connector (127.0.0.1). Use for single-PDF import, folder batch import, importing into an existing collection, listing collections, and verifying recent imported attachments. Requires Zotero desktop setting to allow local app communication and a user-provided connector port.
openclaw skills install zotero-local-import-enBefore using this skill, make sure Zotero Desktop is open and configured:
23119) and provide it to the agent via --portThis skill only imports into existing collections. It does not create collections. If
--collectionis not provided, imports default to My Library.
scripts/zotero_tool.pyzotero.sqlite)The agent must support all of the following user input forms and complete import automatically:
x.pdf, y.pdf, z.pdf)The agent must also collect:
Required execution flow:
doctor --auto-install-depsimportNatural-language parsing (paths, file names, port, collection) must be handled by the agent, not by the script. The script accepts structured arguments only.
Run from repository root (or use absolute script path):
python skills/zotero-local-import-en/scripts/zotero_tool.py --help
python skills/zotero-local-import-en/scripts/zotero_tool.py doctor \
--port <USER_ZOTERO_PORT> \
--auto-install-deps
This checks and auto-handles:
requests dependency (auto-installs if missing)http://127.0.0.1:<port>/connector/ping connectivityos.startfile, macOS: open, Linux: xdg-open)If auto-install fails, the agent should surface the error and suggest:
python -m pip install requests>=2.31.0
Users may say things like:
x.pdf, y.pdf, z.pdf from <folder>, port xxxx, collection xxxx”<absolute path>, port xxxx”The agent must convert NL input into structured CLI args, then call import:
--dir + optional --pick--pdf--port--collection (defaults to My Library)python skills/zotero-local-import-en/scripts/zotero_tool.py import \
--pdf "<ABSOLUTE_PDF_PATH>" \
--port <USER_ZOTERO_PORT>
--pdf)python skills/zotero-local-import-en/scripts/zotero_tool.py import \
--pdf "<PDF_PATH_1>" \
--pdf "<PDF_PATH_2>" \
--pdf "<PDF_PATH_3>" \
--port <USER_ZOTERO_PORT>
python skills/zotero-local-import-en/scripts/zotero_tool.py import \
--dir "<ABSOLUTE_FOLDER_PATH>" \
--port <USER_ZOTERO_PORT>
python skills/zotero-local-import-en/scripts/zotero_tool.py import \
--dir "<ABSOLUTE_FOLDER_PATH>" \
--recursive \
--port <USER_ZOTERO_PORT>
python skills/zotero-local-import-en/scripts/zotero_tool.py import \
--dir "<ABSOLUTE_FOLDER_PATH>" \
--recursive \
--collection "<EXISTING_COLLECTION_NAME>" \
--port <USER_ZOTERO_PORT>
python skills/zotero-local-import-en/scripts/zotero_tool.py import \
--dir "<ABSOLUTE_FOLDER_PATH>" \
--pick "x.pdf,y.pdf,z.pdf" \
--collection "<EXISTING_COLLECTION_NAME>" \
--port <USER_ZOTERO_PORT>
Or repeat --pick:
python skills/zotero-local-import-en/scripts/zotero_tool.py import \
--dir "<ABSOLUTE_FOLDER_PATH>" \
--pick "x.pdf" \
--pick "y.pdf" \
--pick "z.pdf" \
--port <USER_ZOTERO_PORT>
python skills/zotero-local-import-en/scripts/zotero_tool.py list-collections --port <USER_ZOTERO_PORT>
python skills/zotero-local-import-en/scripts/zotero_tool.py check --limit 10
--port: Zotero connector port (provided by user; defaults to ZOTERO_PORT env var, fallback 23119)--timeout: HTTP timeout in seconds (default 90)--collection: target existing collection name--db: zotero.sqlite path (override for check)openxdg-openerror=collection not found: create the collection manually in Zotero first