Rand Stats

MCP::Server::Tool::Web

zef:apogee
Revision history for MCP::Server::Tool::Web

0.1.2  2026-10-24T18:55:04+01:00
    - CHANGE: [2026-09-28] Requires JSON::Fast 0.21.0 or later (zef:timo).
      0.19 (cpan:TIMOTIMO) fails its own tests under the RakuAST compiler
      frontend that Rakudo 2026.09 makes the default, so installing this
      distribution stopped at that dependency.
    - CHANGE: [2026-09-19] the published input schema now advertises every
      default the handlers apply: `count = 10` on web_search, `depth = 1` and
      `max-pages = 20` on web_crawl, and `regex = false`, `context = 0`,
      `max-results = 50`, `depth = 0` and `max-pages = 20` on web_grep. The
      tables in the Pod always said so; the schema the model actually reads
      did not. No handler changed, and the new t/20-schema-contract.rakutest
      pins every claim against the handler: each required parameter is called
      with that parameter missing and has to be refused, and each declared
      default is checked by calling the tool with the argument omitted and
      with the declared value, and demanding the same answer both times.
      (The defaults reach the wire with the MCP::Server release that
      carries a param spec's `default` into the emitted schema; against an
      older one they are simply not published.)
    - MAINT: [2026-08-27] moved the shared test fixtures from
      C into
      C
      (C). A C directory is
      its own CompUnit repo that starts cold on a fresh C, and parallel test files pulling the fixture's
      dependency chain into that cold store can race and fail the
      install outright. C is staged and precompiled before the
      test phase runs, so shipping test support inside the dist's own
      namespace dissolves the race. This is the fleet-wide convention
      going forward.

0.1.1  2026-08-21T21:45:32+01:00
    - All four tools (web_search, web_fetch, web_crawl, web_grep) now declare
      the MCP annotations readOnlyHint and idempotentHint -- every one of them
      is a GET and nothing here ever submits anything -- so a host may run a
      batch of them side by side and ask for one URL once however many slots
      wanted it.
    - Fixed: the Brave provider built its HTTP client in an unguarded lazy
      initialiser, so two searches arriving at once could each build one and
      leak the loser. It is built under a lock now, at most once per provider.

0.1.0  2026-08-20T22:43:57+01:00
    - Initial release: web_search, web_fetch, web_crawl, web_grep tool pack
    - Fixed: Brave.rakumod sent `Accept-Encoding: gzip`, but Cro's
      body-blob never decompresses a gzipped response unless the optional
      Compress::Zlib module is installed, and this class hand-decodes
      body-blob itself — so real (non-error) Brave responses came back
      gzip-compressed, got mangled by the latin-1 decode fallback, and
      web_search failed with a "not JSON" error on every live search.
      The header is no longer sent, and !blob-text now recognises the
      gzip magic bytes and dies with a clear diagnostic instead of
      feeding compressed bytes to from-json, in case a proxy forces
      compression regardless.