From zotero-connector
Read and analyze academic papers from Zotero library. Use when the user requests to read, access, or analyze a paper by title, author, or topic from their Zotero library. Automatically searches Zotero, converts PDFs to markdown, saves to Notes/PaperInMarkdown, and provides analysis.
How this skill is triggered — by the user, by Claude, or both
Slash command
/zotero-connector:zotero-paper-readerThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Read and analyze academic papers directly from the Zotero library. This skill handles the complete workflow from searching Zotero to converting PDFs to readable markdown format.
Read and analyze academic papers directly from the Zotero library. This skill handles the complete workflow from searching Zotero to converting PDFs to readable markdown format.
Use this skill when the user requests to:
Use the Zotero MCP tools to search for the paper:
# Search by title, author, or keywords
mcp__zotero__zotero_search_items(query="paper title or author", limit=5)
Present the search results to the user if multiple papers are found. Get the item_key from the selected paper.
Retrieve the PDF attachment information:
# Get child items (attachments) for the paper
mcp__zotero__zotero_get_item_children(item_key="ITEM_KEY")
Look for the attachment with type: application/pdf and note its Key (attachment key) and Filename.
Use the bundled script to get the PDF - it automatically tries local storage first, then downloads if needed:
uv run python ${CLAUDE_SKILL_DIR}/scripts/get_zotero_pdf.py ATTACHMENT_KEY
The script workflow:
~/Zotero/storage/ATTACHMENT_KEY/)/tmp/[original_filename]Security note: The Zotero API key and library configuration are read directly from Notes/.env by the Python script and never exposed to the LLM. Required environment variables: ZOTERO_API_KEY, ZOTERO_LIBRARY_TYPE, ZOTERO_LIBRARY_ID.
Use the mistral-pdf-to-markdown skill (a separate plugin) to convert the PDF. Invoke it via the Skill tool:
Skill(skill="mistral-pdf-to-markdown")
Then follow its instructions to convert the PDF at PATH_TO_PDF to Notes/PaperInMarkdown/CLEAN_FILENAME.md.
Filename convention: Create a clean filename from the paper metadata:
Author_Year_Title.mdDu_et_al_2023_Are_Intermediary_Constraints_Priced.mdRead the converted markdown file:
# For large papers, read in sections
Read(file_path="Notes/PaperInMarkdown/FILENAME.md", offset=1, limit=500)
Since academic papers are often large (>25k tokens), read strategically:
Provide the user with:
User request: "Read the paper 'Are Intermediary Constraints Priced' from my Zotero library"
Workflow:
mcp__zotero__zotero_search_items(query="Are Intermediary Constraints Priced")mcp__zotero__zotero_get_item_children(item_key="KPRQ2DLZ")uv run python ${CLAUDE_SKILL_DIR}/scripts/get_zotero_pdf.py 2HSELEHX
mistral-pdf-to-markdown skill to convert [PDF_PATH] → Notes/PaperInMarkdown/Du_et_al_2023_Are_Intermediary_Constraints_Priced.mdRead(file_path="Notes/PaperInMarkdown/Du_et_al_2023_Are_Intermediary_Constraints_Priced.md", limit=500)ZOTERO_API_KEY, ZOTERO_LIBRARY_TYPE, and ZOTERO_LIBRARY_ID in Notes/.envNotes/.env for PDF conversionimages/ subfolderget_zotero_pdf.py - Unified script that tries local storage first, then downloads from web API if needednpx claudepluginhub fuzhiyu/agentcontract --plugin zotero-connectorManage Zotero reference libraries via Python using the pyzotero client. Retrieve, create, update, delete items, collections, tags, and attachments through the Zotero Web API v3.
Imports and synchronizes Zotero literature with an Obsidian vault. Searches Zotero library, inspects items/collections, imports notes with attachments and annotations, and batch-ingests collections.
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.