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.