Releases: psiQAQ/zotero-agent
Releases · psiQAQ/zotero-agent
Release list
Release v2.0.2
Fixed
- TOML config: remove unnecessary quotes around bare key in
[mcp_servers]section (Codex CLI) /mcp/statusendpoint: repository and documentation URLs now point to this repo- selfTest error log filter: updated regex to match new addon ref
- Vector database filename:
zotero-agent-vectors.sqlite
Release v2.0.1
Changed
- CLI commands in client config generator now use single-line format (Claude Code, Qwen Code)
Release v2.0.0
First public release. Relative to upstream v1.5.0 (27 tools), tools expanded from 27 → 42, with PSK authentication + security model + run_javascript as core additions.
Security & Authentication
- PSK Bearer auth:
POST /mcpvalidatesAuthorization: Bearer <PSK>; PSK auto-generated on first launch and stored in prefs, copyable/regenerable from preferences panel;auth.enableddefaults to on - Defense in depth: loopback-only binding → PSK →
eval.enableddefaults to off →write.enableddefaults to off - DNS rebinding defense:
POST /mcpvalidates Origin header, returns 403 for disallowed origins (covers opaque origin / IP suffix / path suffix edge cases) - Write tools are dry-run by default,
confirm: trueto execute; read-back verification after writes
Core Tools (15 new)
run_javascript: AsyncFunction executing arbitrary JS in Zotero's privileged context, withZotero/ZoteroPane/ztoolkit/consoleinjected; structured return{result, logs, error}; guarded byeval.enabledpref (default off);timeout_ms+ 100KB result capimport_by_identifier: DOI/arXiv/ISBN/PMID import withif_existsidempotency (case-insensitive DOI dedup including Extra field, adsBibcode dedup, post-import read-back verification)find_missing_pdfs: Library/collection PDF missing audit + Unpaywall OA auto-fillcheck_retractions: scite.ai retraction check (no API key required; truthfully reports unreachable on network errors)find_related_papers: OpenAlex citation graph expansion, marked withinLibrary; fetch default reduced to 5 to prevent client timeoutssynthesize_annotations: Per-paper annotation summary bundles; unified scope resolution logic (DRY)find_duplicates/merge_duplicates: Reuse Zotero's native dedup engine, dry-run by default, merged leftovers go to trash; truncated result disclosurebatch_update_tags: Batch add/remove/rename (rename usesZotero.Tags.renamepreserving item associations), dry-run previews impactextract_identifier_from_pdf: Extract identifiers from full-text cache — DOI frequency voting + arXiv ID extractionfind_doi: CrossRef title-based DOI reverse lookup, title similarity fused scoring (with diacritic folding), dry-run by defaultenrich_item_metadata: Fill missing fields from doi.org CSL-JSON + OpenAlex, field-level merge rules, dry-run by defaultmanage_pdf_resolvers: Register Sci-Hub / Anna's Archive etc. into Zotero's nativefindPDFs.resolversprefreload_plugin/install_plugin_from_url: Deployment loop, guarded by eval gate;self_upgradeflag
Search Enhancements
- Zero-result fallback ladder, responses annotated with
fallback - Semantic search hybrid mode: RRF fusion + query-adaptive weights; keyword leg degradation noted, date field keeps year fallback
Grey-Literature PDF Download
- Sci-Hub / Anna's Archive support: Preferences panel toggle + mirror list management (11 built-in defaults, add/remove/reset), bidirectional sync with Zotero's native resolver pref
- Three entry points: preferences panel, MCP tool, native right-click "Find Available PDF"
- Relaxed PDF link selectors for mirror DOM variance
- Sci-Hub download proxy: PAC data-url mode proxying only grey-source domains (default port 7890), normal traffic direct
Developer Experience
scripts/deploy-live.mjs: One-click deploy, xpi base64 viarun_javascriptwrite +install_plugin_from_urlself-upgrade, ~5s reconnect to new version- In-process selfTest harness (26 scenarios full-stack regression, driven via
run_javascript) - Pure-function unit tests (70 cases,
test/*.test.cjs, Node.js direct run, no framework) - Eval boundary tests: timeout clamp, UTF-16 surrogate truncation, circular reference returns
- GitHub Actions CI: tag push auto build + Release + update.json; release notes auto-extracted from CHANGELOG
Fixes
- Chinese request body mojibake: HTTP read layer changed to raw byte collection + single-pass decoding, dense CJK bodies no longer trigger -32700 parse errors
- Tool execution errors return
result.isErrorinstead of JSON-RPC-32603(MCP spec compliance) - Protocol version negotiation instead of hardcoded value
- When
write.enabledis off,tools/listhides collection write tools (no more "listed but not callable") - Basic fields correctly placed per item type (conference paper venue → proceedingsTitle); date zero-pad formatting
- Subtitle splitting heuristic tightened to ≥3 tokens
buildResolverignores explicitundefinedkeys- selfTest uses privileged XHR (fetch silently drops forbidden headers)
- Protocol version string unified globally
Internationalization
- Full en / zh-CN / de / es / fr / ja six-language support
Upstream baseline: cookjohn/zotero-mcp v1.5.0 (27 tools, MCP server embedded in Zotero plugin, hand-written nsIServerSocket HTTP, port 23120). Upstream archive at refs/AI-plugins/zotero-mcp-cookjohn submodule.