The deployed tools/list schemas are authoritative. Unknown fields are refused by the documented argument types. Optional does not mean meaningful in every combination: identity, window, and subject rules still apply.
Money values
In Testril 0.9.0, ordinary money fields are
{"atoms":"<integer string>","usd":"$<display value>"}. Read atoms for exact
USDC arithmetic and usd for display. This includes quote totals and lines,
native estimated spend, materialize and read replay receipts, job spend, stop
refunds, pricing rates, and ask retention prices and spend.
The exceptions are intentional: x402 accepts[].amount is a bare atom string,
and NFT accounting values are bare atom strings. Payment settles the exact
quoted amount. Enforce spending caps in the agent's wallet or signer, not in
Testril tool arguments or quote objects. See
payment and execution for the complete field inventory.
health_check
Arguments: {}. Shallow process/connect diagnostics: configured chain IDs, version, catalog counts, and payment rail. It does not probe dependency health. A health response is not proof that a particular metric window is available.
inspect
Arguments: subject plus only that subject's relevant fields. Metadata and inventory, not metric values. Subject-specific stray fields are rejected.
| Subject | Required extra fields | Optional extra fields | Purpose |
|---|---|---|---|
functions |
None | None | Catalog template slugs |
function |
function_slug |
None | Template description, params schema, and row schema |
bound_functions |
None | function_slug |
Live identities; grouped inventory or filtered IDs |
bound_function |
bound_function_id |
None | Scope, materialized/materializing ranges, active jobs |
jobs |
None | None | Job inventory |
job |
job_id |
None | State, paid window, block progress, errors |
chains |
None | None | Configured chains and heads |
chain |
chain_id |
None | One chain's landmarks |
channels |
payer |
network |
Buyer's open batch-settlement escrow channels |
nft |
wallet |
None | Wallet's claim-right cards in nfts, plus unreadable-chain entries in unavailable |
pricing |
None | None | Published meter rates |
payer and wallet are public 0x addresses, not signing keys. The optional channel network is the CAIP-2 identifier advertised by the selected payment offer; do not hardcode one from an example.
bind
Required: function_slug (string), chain_id (unsigned integer). Optional: params (object; defaults to empty). Template-specific requirements come from inspect subject:function.
Returns a scope-bound identity, canonical debug name, template, chain, parameters, and created. Rebinding the same scope is idempotent. No block window belongs in this call; no metric values are returned.
ask
Required: metric (string, at most 500 characters), chain_id (unsigned
integer). Optional: function_slug, params, and the paired block, hour, day,
or month window appropriate to the Function.
Selects an existing catalog Function and binds the question's scope. It keeps
addresses written in the question or supplied in params, and asks for an
address it cannot establish. It authors nothing. A params suggestion may offer
up to five already-landed Bound Functions with the params needed to use one.
An unsupported question returns error / unsupported with needs. A success
carries the bound-function card, description, row schema, created, follow,
and retention disclosure; it is not a metric value series.
A suggested response asks for parameters or a window. Merge the operator's answer under the field named by resume and repeat. See question resolution. bind_prompt and the old address, context, shape, and explain inputs are no longer advertised.
materialize
Required: bound_function_id. Also state the appropriate paired block or
period window. Optional: extra_cache_days (unsigned integer, default 0).
Omitted or zero extra cache days adds no extra retention line.
Computes and caches unpaid holes, excluding existing coverage and open paid jobs.
An unpaid request returns the x402 payment requirement and quote. Repeat the
same call with the same work arguments and attach the signed PaymentPayload in
MCP _meta["x402/payment"]. A paid execution returns success, result: "materializing", and a job handle. Inspect its job_id until done or failed.
Coverage and progress remain on inspect.
For a Function that carries state across blocks, the window is quoted, billed, and walked from its contract's creation block. A window ending at or before creation is refused. A future tail waits until the chain head reaches those blocks; a stateful job can remain queued until its preceding coverage is complete.
read
Required: bound_function_id. Optional: key (an object mapping key-part names
to strings) and the paired block, hour, day, or month window appropriate to the
Function. Payment is MCP transport metadata, not a tool argument.
Omit both block ends to request the latest materialized block, which need not be the chain head. Every returned row includes all its attributes. key filters a leading run of the key parts listed after block in the Function's row schema; it does not change the bound scope. For example, use {"token":"<TOKEN_ADDRESS>"} only when token is the first advertised key part. Unknown names, skipped leading parts, and malformed typed values are refused before quoting. attributes and entity are retired inputs.
Returns bare values, typed by the Function’s row schema from inspect, never a coverage inventory and never new indexing. There is no cursor or limit argument. Split deliberate block windows when needed. A not-fully-covered request returns range_unavailable; it does not silently answer only the covered prefix.
provenance
Required: bound_function_id and the same paired block or period window used by
read. Expand the contributing sources for that identity and window. No
attribute argument is accepted. Provenance remains an MCP tool; there is no
HTTP provenance route.
stop
Required: bound_function_id, wallet, and quote_id (strings). The wallet
must be the current NFT owner of that quote's claim-right, checked at the chain
tip when a collection is configured. Cancels the named in-flight materialize
quote and attempts to refund its unspent part. Delivered rows and other jobs
remain. The response carries one job with job_id, quote_id,
unspent_blocks, and optional refunded or error. An error response may
still include that stopped-job detail; reconcile it before retrying.
claim_rewards
Required: nft (decimal string), the claim-right ID from an
inspect subject:nft card. Claims that NFT's eligible unclaimed USDC atoms to
the wallet its current ownerOf names. The minimum is 10,000 atoms ($0.01);
amounts below it return claimed "0" and reason: "below_minimum" without a
transfer. A card with minting: true refuses as claim_right_minting until the
mint lands. Inspect the same card before and after claiming. This operation
pays existing eligible rewards; it does not promise earnings or create a
claim-right simply from a data read.
See tool reference JSON for the same input-field inventory in a machine-readable form.