verglas-pay — give any LLM agent a spending envelope it cannot exceed
verglas-mcp defines 4 tools with clear, domain-specific descriptions (avg 180 chars, within 10-1024 baseline). All tools have input schemas with type constraints and descriptions. Naming follows verb_noun pattern (verglas_status, verglas_pay, verglas_pay_x402, verglas_check). However, output schemas are not documented, responses are text-only without structured field definitions. Error handling returns text but lacks recovery guidance or error classification. Parameters use regex patterns and optional flags correctly, but descriptions could be more explicit about constraints (e.g., 'USDC amount as decimal string' vs just 'amount in USDC'). No tool annotations (readOnlyHint/destructiveHint) despite clear risk profiles (READ_ONLY vs WRITE). Missing pagination, batch operations, and natural-identifier support (agentId is numeric-only, no name/alias resolution).
Check any agent's public Verglas record before trusting it: cleared or not at the gate, latest seal score and age, full stamp history.
Pay USDC from the agent's Verglas vault. The vault contract enforces the rules: whitelist-only recipients, per-payment limit, total budget, freeze. A payment outside the rules is refused by name and never leaves.
Pay a 402-gated (x402) API and return its response. The payment float lives in the agent's wallet and is refilled only through the Verglas vault, so the vault's rules — budget, per-payment limit, freeze — govern x402 spending too. A vault refusal comes back by name and stops the payment.
Read the agent's Verglas vault: rules (per-payment limit, whitelist), budget spent/left, frozen state, and whether this machine's key is the vault's agent.
Output schemas not documented. Tools return text-only responses without structured field definitions. LLMs cannot parse results for downstream tool chaining or data extraction.
Tool annotations missing. verglas_pay and verglas_pay_x402 are destructive (WRITE risk) but lack destructiveHint. verglas_status and verglas_check are read-only but lack readOnlyHint. Agents cannot infer safety/retry semantics.
Error handling returns text but lacks recovery guidance. Errors like 'vault refusal' or 'invalid recipient' are mentioned in descriptions but actual error responses do not classify errors as retryable/user-fixable/fatal or suggest next steps.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Parameter descriptions lack explicit format/constraint details. 'amount in USDC, e.g. "0.5"' uses example instead of formal constraint. 'recipient address' does not specify format (0x-prefixed hex, length, checksum). Agents may pass invalid values.
No natural-identifier support. agentId is numeric-only (regex ^\d+$). Agents cannot pass agent names or aliases, must know opaque numeric IDs, forcing extra lookup calls.