Skip to main content
Glama
verax-ai

Verax

Official

spend

Authorize a payment by validating amount, currency, payee, and daily limit against policy, returning a signed approval or a specific denial reason for later execution.

Instructions

Asks the body to authorize a payment and records the decision; the body never moves money, so authorized: true is a signed permission for a later payment step, not a transfer. Use it before any payment so that amount, currency, payee and reference are checked against the policy: the one currency the policy names, a cap per call, a payee list and a daily limit. A call outside those bounds is refused with a signed deny naming the bound: denied:spend-cap, denied:spend-payee, denied:spend-currency or denied:spend-daily. A call within them is held for an operator on this machine and answers deferred:approval-required:; once that ref is approved (verax approve, or the panel), resending the same call with the same _ref answers allowed:, and the authorization is recorded as {authorized: true, ref, amountMinor, currency, payee, reference}. Without a spend rule in the policy every call answers denied:spend-not-wired.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
_refNoOptional reference you choose for this call, 1 to 64 characters of letters, digits, '.', '_' or '-', starting with a letter or digit. Resend the same call with the same _ref after an operator approved it to receive allowed:<ref>; a _ref reused for a different call is refused with denied:ref-reuse.
payeeYesWho is to be paid, spelled exactly as the policy's payee list spells it (a merchant or account name). A payee off the list is refused.
currencyYesISO 4217 code in upper case, for example USD, EUR or TRY. Must equal the currency the policy's spend rule names.
referenceYesYour own reference for this payment, such as an invoice or order id. Recorded with the authorization and used by verax reconcile to match the card statement.
amountMinorYesAmount in the currency's minor unit as a positive integer: cents, kuruş or pence, so 1250 means 12.50. Compared against the policy's cap per call and daily limit.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.1

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full disclosure burden — and it excels: it reveals that 'authorized: true is a signed permission... not a transfer,' enumerates every refusal token (denied:spend-cap, denied:spend-payee, denied:spend-currency, denied:spend-daily, denied:spend-not-wired), explains the deferred:approval-required flow, and specifies the recorded result shape {authorized: true, ref, amountMinor, currency, payee, reference}. This far exceeds typical behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a dense single paragraph, but every sentence earns its place: purpose and non-transfer caveat, when-to-use and policy checks, refusal modes, approval flow, and the not-wired fallback. It is front-loaded with the core purpose, though breaking the wall of text into shorter sentences would improve scannability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description must cover result states and does: every possible answer (denied tokens, deferred:approval-required:<ref>, allowed:<ref>) is specified, along with the recorded authorization object and the not-wired case. For a complex async approval tool, an agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% — each parameter already has detailed descriptions including the policy constraints (amountMinor compared against cap and daily limit, currency must equal the policy currency, payee must be on the list, _ref reuse rules). The description reinforces how parameters map to refusal tokens but adds little beyond what the schema provides, so the high-coverage baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource — 'asks the body to authorize a payment and records the decision' — and immediately disambiguates by clarifying 'the body never moves money... not a transfer.' None of the sibling tools (memory.get, message.send, audit.explain) overlap with payment authorization, so an agent can identify this tool's role unmistakably.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use guidance: 'Use it before any payment so that amount, currency, payee and reference are checked against the policy.' It also narrates the full acceptance/rejection flow and the approval path via 'verax approve, or the panel.' It stops short of explicitly naming alternatives or exclusions, though no sibling is a payment alternative, so 4 rather than 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.