Added
- Listed in the official MCP Registry (
registry.modelcontextprotocol.io) asio.github.54yyyu/zotero-mcp. Aserver.jsonat the repo root describes the PyPI package, its stdio transport, and the four env vars a client needs to prompt for (ZOTERO_LOCAL,ZOTERO_API_KEY,ZOTERO_LIBRARY_ID,ZOTERO_LIBRARY_TYPE); ownership is proven by themcp-name:marker in the README, which is what PyPI serves as the package description. The release workflow republishes on every tag via GitHub OIDC, so the registry version can't drift from PyPI. Registry clients install by the distribution name rather than the console-script name, sozotero-mcp-serveris now also a console-script alias forzotero-mcpanduvx zotero-mcp-server serveworks without--from.
Fixed
zotero-mcp updateno longer offers, or performs, a downgrade. The check wascurrent_version != latest_version, so any install ahead of the last PyPI release — every git checkout and dev build — was told an update was available, and running it replaced the newer code with the older release. Ordering is now compared rather than inequality, viapackaging.version.Versionwhere available and a numeric-tuple fallback where it isn't (packagingis not a declared dependency, only a common transitive one). Being ahead is reported as such instead of as a bare "already up to date", and--forcefrom an ahead version warns before downgrading. As a side effect the comparison is numeric rather than lexical, so0.10.0is correctly newer than0.9.0.- Linked-file attachments are readable in local mode.
download_attachment_filestarted atzot.dump(), and for a linked attachment Zotero's local API answers/filewith a 302 to afile://URL that httpx refuses to follow ("unsupported protocol"). A linked file is by definition never uploaded to WebDAV or Zotero storage either, so all three remaining sources failed on a file sitting readable on the same disk. The attachment path is now resolved out ofzotero.sqlitefirst, which also spares ordinary stored files an API round trip.zotero_get_annotationswas the visible casualty — unlike the fulltext andread_pdfpaths it had no local-database step in front of the downloader — and its "linked attachments cannot be accessed remotely" error now points atZOTERO_LOCAL=trueinstead, since that is the condition under which they do work. The resolved file is copied rather than handed back by path: callers treat the result as scratch and delete it, which on a linked file would have destroyed the user's original (the_cleanup_pathfailure mode from #372).
Install: uv tool install zotero-mcp-server or pip install zotero-mcp-server
Now listed in the official MCP Registry as io.github.54yyyu/zotero-mcp.