name: reference-check description: Cross-check manuscript references against Zotero library
reference-check
Purpose
Cross-check manuscript references against a Zotero library and report match status.
Inputs
- manuscript_file
Outputs
- reference_check_report
Required Policies
- citation-verification
Profile Keys Read
- method.family
Constraints
- ONLY use zotero_search_items and zotero_semantic_search for lookups
- NEVER call zotero_get_item_fulltext, zotero_get_item_children, or fetch — these return full paper text and will overload context
- Use zotero_get_item_metadata (with include_abstract=false) only if additional metadata fields are needed for disambiguation
- Match decisions must be based on metadata only (title, author, year, venue, DOI)
Process Steps
- Read manuscript_file content (markdown, text, or pasted prose)
- Extract all unique references from both reference list sections and inline (Author, Year) citations
- Normalize each reference to {author, year, title} tuple; assign ref IDs (R1, R2 ...)
- For each reference, search Zotero via zotero_search_items using "author year" query (metadata-only lookup)
- If zotero_search_items returns no match, fall back to zotero_semantic_search using the title (metadata-only lookup)
- Classify each reference as matched (confident Zotero hit), possible_match (low-confidence candidate found), or not_found
- For possible_match and not_found, record the closest Zotero candidate title and key if any
- Produce reference_check_report as a markdown table with columns: ref_id, author_year, title, status, zotero_key, closest_match
- Append a summary section with counts: total references, matched, possible_match, not_found
Failure Handling
- If manuscript_file is unreadable, request a valid file path and pause
- If no references are extracted, warn that no citations were found and stop
- If Zotero MCP is unavailable, report connection error and suggest checking Zotero desktop is running
- If zotero_semantic_search fails, skip fallback and mark reference as not_found