github 54yyyu/zotero-mcp v0.6.4

4 hours ago

Added

  • Listed in the official MCP Registry (registry.modelcontextprotocol.io) as io.github.54yyyu/zotero-mcp. A server.json at 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 the mcp-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, so zotero-mcp-server is now also a console-script alias for zotero-mcp and uvx zotero-mcp-server serve works without --from.

Fixed

  • zotero-mcp update no longer offers, or performs, a downgrade. The check was current_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, via packaging.version.Version where available and a numeric-tuple fallback where it isn't (packaging is 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 --force from an ahead version warns before downgrading. As a side effect the comparison is numeric rather than lexical, so 0.10.0 is correctly newer than 0.9.0.
  • Linked-file attachments are readable in local mode. download_attachment_file started at zot.dump(), and for a linked attachment Zotero's local API answers /file with a 302 to a file:// 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 of zotero.sqlite first, which also spares ordinary stored files an API round trip. zotero_get_annotations was the visible casualty — unlike the fulltext and read_pdf paths it had no local-database step in front of the downloader — and its "linked attachments cannot be accessed remotely" error now points at ZOTERO_LOCAL=true instead, 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_path failure 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.

Don't miss a new zotero-mcp release

NewReleases is sending notifications on new releases.