Skip to main content
Glama

payment_receipt

Signed receipt for one verdict-governed payment: endpoint, network, asset, max amount, payer, facilitator verdict, settlement id, denial reason, and retry state. retry_state is read from the token's authorizationState, so retrying with the same nonce cannot double-pay. Pass the signed review event and the payment args it bound; optional tx_hash. Refuses unsigned when the verdict does not verify or does not bind those args. The receipt itself checks with verify_proof. Free, no sign-in. Does not move funds. Docs: https://github.com/babyblueviper1/invinoveritas/tree/main/examples/qbtlabs-x402-verdict-gate#payment-receipt-safe-to-retry

Input Schema

NameRequiredDescriptionDefault
argsYesThe payment args that verdict bound. Their hash must match the verdict's action_binding_args_hash.
eventYesThe signed /review verdict (Nostr event) that governed the payment.
tx_hashNoOptional 0x + 64 hex settlement transaction. settlement_id is set only when this tx is the payment the verdict bound.
terms_hashNoOptional sha256 (64 hex, optionally sha256:) of the terms the payment was for. A terms hash bound in the verdict's args takes precedence; a supplied one is labelled not bound.
output_hashNoOptional sha256 of the delivered result. With it, a settled payment reads paid_output_recorded; without it, paid_no_output_recorded (a possible ghost result: do not pay again for the same job).
resource_urlNoOptional https URL of the resource the payment was for, when the verdict bound no endpoint.
authorization_signatureNoOptional: the payer's 65-byte EIP-3009 signature (hex). The receipt verifies it recovers to the payer over the bound amount, payee, validity window and the verdict's nonce, under the token's on-chain EIP-712 domain.
max_verdict_age_secondsNoOptional max age of the verdict in seconds (1..86400). Default 120.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A4.1/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, destructiveHint=false, openWorldHint=true), it discloses that the tool does not move funds, is free with no sign-in, that retry_state derives from the token's authorizationState so reusing a nonce cannot double-pay, and it spells out refusal semantics plus the ghost-result hazard ('do not pay again for the same job'). That is substantial behavioral context an agent cannot get from the annotation block.

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?

It is dense and front-loaded: the receipt contents and the retry-safety guarantee lead, followed by inputs, refusal behavior, and the docs link. Some sentences are compressed into run-ons ('denial reason, and retry state'), but every clause carries information.

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

Completeness4/5

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

For an 8-parameter tool with nested objects and no output schema, the description compensates by enumerating the receipt's returned fields (settlement id, denial reason, retry state, paid_output_recorded vs paid_no_output_recorded) and by covering refusal and retry semantics. A few details of the returned structure remain implicit, keeping it at 4 rather than 5.

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%, so the baseline is 3. The prose adds the binding relationship between event and args and flags tx_hash as optional, but it largely restates what the schema fields already document, offering little additional syntax or constraint detail.

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

Purpose4/5

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

The opening clause names the resource precisely ('Signed receipt for one verdict-governed payment') and enumerates the receipt's contents (endpoint, asset, payer, verdict, settlement id, retry state), which lets an agent distinguish it from siblings like verify_proof or ledger. It is a noun phrase rather than a crisp verb+resource, and it never states the operation in imperative terms, so it falls short of 5.

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?

It states the call conditions clearly ('Pass the signed review event and the payment args it bound; optional tx_hash'), the refusal condition ('Refuses unsigned when the verdict does not verify or does not bind those args'), and routes verification to verify_proof. It does not explicitly contrast itself with sibling tools such as ledger or validate, so it stops short of explicit when/when-not/alternatives.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.