Skip to content

v0.4.0 — ask as the public, use any discovery filter

Choose a tag to compare

@mpasternak mpasternak released this 24 Jul 22:53
· 7 commits to main since this release

Driven entirely by a report from real use: an agent working through a logged-in server could not obtain the public view of a repository, so it bypassed the server and used curl instead. That is the worst possible outcome — a request made outside this server has no enforced GET-only guarantee, no error mapping, no download size limit, and no response flattening.

Everything here closes a gap that pushed it there.

Fixed: compare_access failed in its own use case

It listed files from the ORIGINAL bundle, and that call raises when the bundle does not exist — so the tool built to answer "the user says files are missing" refused to answer exactly when files were missing. Confirmed against a live repository, where publicly visible records frequently carry only a THUMBNAIL. It now compares across every bundle, and each file reports which bundle it came from.

New: as_anonymous on every read tool

Ask as the anonymous public instead of the logged-in account, without logging out. This reverses a decision made in 0.3.0, which rejected the parameter on the grounds that it costs tokens in every conversation. That arithmetic was wrong: the cost of not having it was the server being bypassed altogether. A few dozen tokens are cheaper than losing every guarantee the server exists to provide.

Anonymous and account installs still expose byte-for-byte identical tool schemas.

New: filters on search_items

get_repository_info has always advertised which discovery filters an instance supports; now they can actually be used:

search_items(filters={"access_status": "restricted"})
search_items(filters={"title": "cancer,contains"})

Names are validated against what the instance declares, so an unknown filter gets a clear sentence instead of a raw 422. Values take a default equals operator; an explicit one is recognised by name rather than by the presence of a comma, so "Smith, John" is not mistaken for a value plus operator.

A trap this removes: query="access_status:restricted" looks like it works and quietly returns zero, because query is full-text search and never reaches the filters. The tool description now says so.

New: list_bundles, and item state flags

  • list_bundles reports which bundles an item actually has. Previously that was discoverable only from an error message — an outage doubling as an interface.
  • get_item and search results now carry withdrawn, discoverable and in_archive, so a withdrawn record can be told apart from one you simply cannot see. null means the instance did not say, not false.

Verified against a live repository

access_status=restricted returns 9153 records where MCP previously offered no way to ask at all.