Revision history for MCP::Server::Tool::Ask
0.1.3 2026-10-24T18:50:11+01:00
- [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.
- [2026-09-19] audited what user_ask publishes about its own arguments
against what its handler does with them, and added
t/05-schema-contract.rakutest to keep the two together: "message" is in
the schema's required array and calling without it is refused before
anybody is asked anything, and neither parameter publishes a JSON Schema
default, because omitting "questions" is not a value being substituted
but a different question altogether -- one free-form field instead of a
form. No library code changed.
- 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.2 2026-08-21T21:44:46+01:00
- Pin MCP::Server version.
0.1.1 2026-08-21T21:43:41+01:00
- Documented why this pack declares NO MCP annotations: "ask" writes
nothing, so calling it read-only would be defensible -- and a host reads
that as permission to run two of them at once, which is the last thing a
tool that parks the call on a human wants. It is not idempotent either:
asking the same question twice asks a person twice.
0.1.0 2026-08-09T19:58:41+01:00
- Initial release
- MCP::Server::Tool::Ask: a toolkit that lets a model ask the human on the
other end of the MCP client a question, built on MCP::Server's
server-side elicitation (the 2026-07-28 multi round-trip request
pattern). Plugs into any MCP::Server via $server.plug($kit) or
MCP::Server.new(:tools['Ask']).
- One tool (default prefix "user"): ask. It takes a message and an optional
list of questions -- each with a name, a prompt, an optional type
(string, number or boolean), optional options that become an enum, and an
optional required flag -- and renders them as one elicitation form.
With no questions it asks for a single free-form "answer".
- An accepted form comes back as JSON with sorted keys. A decline or a
cancel comes back as plain text and never as an error: a user refusing to
answer is the system working, and a model that sees isError will retry.