TWZRD Agent Intelligence
Server Details
Pre-spend trust for AI agents that buy: check x402 services and product listings before paying.
- Status
- Healthy
- Uptime
- 98.8% over 74 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- twzrd-sol/twzrd-trust
- GitHub Stars
- 0
- Server Listing
- TWZRD Agent Intel
TDQS
Scored across 28 tools
Several tools occupy the same pre-spend gate territory (check_listing, evaluate_x402_resource, get_readiness_card_tool, low_level_preflight), and wallet-scoring overlaps (score_wallet_for_intel, get_poec_score, compare_wallets, score_wallets_batch). The descriptions work hard to differentiate them (e.g. 'PRIMARY free pre-spend gate', 'Prefer get_readiness_card_tool for most callers'), which helps but the boundaries remain fuzzy for a first-time agent.
Most names follow a predictable snake_case verb_noun pattern (get_*, score_*, verify_*, submit_*). Minor deviations: the twzrd_ prefix on watch/demo tools and the redundant '_tool' suffix in get_readiness_card_tool break the otherwise clean convention.
28 tools is heavy and above the comfortable range, partly inflated by redundant preflight variants (check_listing, evaluate_x402_resource, get_readiness_card_tool, low_level_preflight) and multiple overlapping wallet-scoring tools. The underlying domain (x402 trust, wallet scoring, watches, receipts, shopping claims) is genuinely broad, so it is borderline rather than purely bloated.
Coverage is strong across the surface: payer scoring, seller reputation, wash detection, preflight gates, receipt verification, and a full watch lifecycle (add/list/remove). The intel/claims and receipt-verification domains are well covered, with only minor gaps such as no explicit catalog/resource listing tool beyond get_x402_directory.
Available Tools
28 toolscheck_listingARead-onlyIdempotentInspect
Pre-spend check of one product against the published listing cards. Free, read-only.
Returns unknown_seller when no published card covers the product (not a clean seller),
expired when the card is past expires_at, check_failed when the card cannot be verified
or the declared price is above the advertised one, and advertised when a current card
matches. It never authorizes a payment: authorizes_spend is always false. needs_approval
is true for every result except advertised, and also for an advertised card that
advertises nothing, advertises no price, cannot check the declared price, or is
declared below its advertised price (an unverified discount, including zero). It does
not fetch the store page, open a checkout or move money.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | Optional subject market (e.g. US); must agree with the card when given. | |
| product | No | Optional subject product; must agree with the card when given. | |
| variant | No | Optional subject variant (e.g. Ink); must agree with the card when given. | |
| merchant | No | Optional subject merchant; must agree with the card when given. | |
| product_url | No | The store product URL the agent is about to buy from. Matched against the published card's next_hop URL, ignoring scheme, host case, query, fragment and a trailing slash. Another host is unknown_seller; a miss on the card's own site also returns covered_product_url. | |
| declared_unit_price | No | Optional unit price the seller is asking, in USD, as a number or text, e.g. 78, 78.00, $78 or 78 USD; another currency is invalid. Above the card's advertised price is refused (phantom_markup_detected); below it is discount_unverified and needs approval. |
Output Schema
| Name | Required | Description |
|---|---|---|
| claims | No | The card's claims (name, value, state, reason). Unknown claims stay unknown. |
| digest | No | sha256 of the matching card's exact text (get_claim); null for unknown_seller. |
| reason | Yes | Why: e.g. no_card_for_product_url, expired_claim, phantom_markup_detected, current_card. |
| result | Yes | unknown_seller | expired | check_failed | advertised. |
| expires_at | No | Earliest claim expiry on the matching card. |
| artifact_id | No | The matching card's artifact id; null when no card covers the candidate. |
| price_check | No | verified | discount_unverified | unverified | absent | above_advertised | invalid, when a price was declared or checked. |
| needs_approval | Yes | True for every result except advertised, and for an advertised card that advertises nothing, advertises no price, cannot check the declared price, or is declared below its advertised price: a human approves before any spend. |
| authorizes_spend | Yes | Always false. advertised is current evidence, never permission to pay. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, yet the description adds substantive behavior: it never authorizes a payment (authorizes_spend is always false) and spells out exactly when needs_approval is true, including edge cases like an advertised card with no price or a below-advertised declared price. These are decision rules an agent cannot derive from readOnlyHint alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose and safety posture in the first sentence, then result semantics. The needs_approval sentence is long and nested ('advertises nothing, advertises no price, cannot check the declared price...'), which taxes readability, but nearly every clause carries decision-relevant information rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, safety guarantees, and result/approval logic thoroughly for a 6-parameter check tool, and an output schema exists so return-value structure need not be restated. The remaining gap is routing among numerous plausibly overlapping siblings, which the description does not address.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents market/product/variant/merchant matching rules, product_url normalization, and declared_unit_price parsing. The description does not add parameter-level syntax or constraints beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Pre-spend check of one product against the published listing cards,' plus scope qualifiers 'Free, read-only.' The purpose is unambiguous, but it never names or contrasts a sibling (e.g. get_shopping_check, get_merchant_card, get_publication), so an agent must infer the division of labor itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context of use ('the store product URL the agent is about to buy from') and explicit boundaries ('does not fetch the store page, open a checkout or move money'). It stops short of naming alternative tools for adjacent jobs, so there is no explicit when-to-use-something-else guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_walletsARead-onlyIdempotentInspect
Free discovery: side-by-side intel for two wallets (e.g. choosing between two
candidate providers). Returns both full score objects and which ranks higher by
the wash-discounted effective_score ("tie" on equal, null if a side is unavailable).
| Name | Required | Description | Default |
|---|---|---|---|
| wallet_a | Yes | First wallet (Solana base58 or Base 0x) to compare. | |
| wallet_b | Yes | Second wallet (Solana base58 or Base 0x) to compare. |
Output Schema
| Name | Required | Description |
|---|---|---|
| wallet_a | No | Full score object for the first wallet. |
| wallet_b | No | Full score object for the second wallet. |
| higher_effective_score | No | Wallet with the higher wash-discounted score, or "tie", or null if a side was unavailable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly and idempotent annotations, the description discloses meaningful return behavior: it returns full score objects, ranks by wash-discounted effective_score, returns 'tie' on equality, and returns null if a side is unavailable. This gives the agent important edge-case knowledge without needing to invoke the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, well-structured, and front-loaded with the core purpose. The parenthetical use case and return semantics are concise yet informative, with no filler or redundant restating of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, read-only comparison tool, the description covers the purpose, usage context, return value shape, ranking logic, tie behavior, and unavailable-side behavior. Combined with complete schema descriptions and an output schema, nothing critical is missing for an agent to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% parameter coverage with clear descriptions for wallet_a and wallet_b, including accepted formats (Solana base58 or Base 0x). The tool description does not add new parameter-level meaning, but the schema fully carries that burden, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific operation—comparing two wallets—and clearly states the resource ('two wallets') and the output ('both full score objects' and rank). It also implies the distinguishing use case ('choosing between two candidate providers'), which differentiates it from single-wallet or batch siblings like score_wallet_for_intel and score_wallets_batch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use this tool when you need side-by-side intelligence for exactly two wallets, such as comparing candidate providers. It does not explicitly name alternative tools or state when not to use it, but the 'two wallets' framing and the example make the intended usage unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evaluate_x402_resourceADestructiveInspect
One-shot x402 guard. Fetches resource_url, extracts the seller wallet from the 402 accepts
array (prefers Solana network entries), runs TWZRD preflight, and returns a spending decision.
Side effect: a live 402 observation (resource_url, payTo, price) is upserted into the
service catalog when the catalog database is configured; this tool is not read-only.
wash_flagged=true never soft-allows. Unlabeled leftover 0.05 / leftover=0 is not a unit price.
Decision:
"allow" -> proceed only under agent policy. Never when wash_flagged=true.
"warn" -> proceed with caution up to the cap; first paid hop is teaser_url ($0.001 /quick). Optional V7 receipt_url is $0.05.
"block" -> DO NOT PAY. Stop immediately.
"unknown" -> is_x402 == False: no 402 challenge was issued at all, so nothing was
evaluated -- this is NOT a trust verdict. A seller can trivially make
this happen by returning a non-402 status to this probe while charging
through a different path for a real caller. Never treat "unknown" as
a green light; if the caller actually intends to pay this resource_url,
that separate payment path needs its own evaluation.
Hard-stops:
wash_flagged=true never soft-allows (decision=block).
price_usdc is a unit price only when price_kind=exact. Unlabeled leftover 0.05 /
leftover=0 and scheme=upto leftover defaults are not a per-request price.
Revenue path: when decision is "warn", fetch teaser_url first ($0.001 USDC to TWZRD,
GET /v1/intel/quick/{seller}). Optional receipt_url is the $0.05 V7 signed credential.
| Name | Required | Description | Default |
|---|---|---|---|
| method | No | HTTP method to use when probing the resource. Default: GET. | GET |
| price_usdc | No | Caller-supplied exact unit price in USDC — overrides a 402 exact quote. Leave unset to use the 402-reported amount when price_kind=exact. Unlabeled leftover 0.05 / leftover=0 is not a unit price. | |
| agent_intent | No | Natural-language description of what the agent intends to purchase. | |
| resource_url | Yes | URL of the x402 resource to evaluate before paying. Will be fetched to extract 402 payment requirements. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | No | The evaluated resource URL. |
| error | No | Error or info message; present on non-402 and degraded paths. |
| is_x402 | No | True if the resource returned HTTP 402 with x402 payment requirements. |
| decision | No | Spend decision: "allow" | "warn" | "block" | "unknown". wash_flagged=true never soft-allows — this field is block. "unknown" means is_x402 is False -- no 402 challenge was issued, so no trust evaluation happened. Never treat "unknown" as a green light. |
| price_kind | No | exact | upto_cap | unknown. upto_cap means price_usdc is not a unit price. |
| price_usdc | No | Quoted unit price in USDC from the 402 response. Null when the accept is scheme=upto / price_kind=upto_cap, or the figure is unlabeled leftover 0.05 / leftover=0 (not a unit price). |
| teaser_url | No | First paid hop: $0.001 score-only teaser URL. |
| receipt_url | No | Optional $0.05 V7 portable receipt URL. |
| trust_score | No | Composite trust signal, 0-100. |
| upsell_usdc | No | Cost of the first paid hop in USDC (0.001 teaser). |
| receipt_usdc | No | Cost of the optional V7 receipt in USDC (0.05). |
| seller_wallet | No | Seller wallet extracted from the 402 accepts array (Solana preferred). |
| max_price_usdc | No | Advertised maximum USDC when price_kind is upto_cap. |
| readiness_card | No | Full readiness card from the preflight evaluation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses the key side effect (a live 402 observation is upserted into the service catalog, explicitly 'not read-only'), which is exactly the kind of context annotations cannot convey. It also spells out hard-stops (wash_flagged, price_kind=exact) and warns that 'unknown' is not a trust verdict, adding genuine behavioral depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose well and uses a scannable decision table, but several lines are verbatim repeats ('wash_flagged=true never soft-allows' and the 'Unlabeled leftover 0.05 / leftover=0' caveat each appear twice). The redundancy costs space without adding information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the prose still covers the side effect, decision semantics, hard-stops, and the follow-up revenue path. Nothing an agent needs to invoke and interpret this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description nonetheless adds real meaning by explaining that price_usdc overrides a 402 exact quote and that unlabeled leftover 0.05 / leftover=0 is not a unit price. Method and agent_intent get no extra color in the prose, keeping it short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('One-shot x402 guard') and then unpacks the exact pipeline: fetch resource_url, extract seller wallet from the 402 accepts array, run TWZRD preflight, return a spending decision. This is far more specific than any sibling and lets an agent place it precisely among low_level_preflight and the verify_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives strong context on how to act on each decision value (allow/warn/block/unknown) and the revenue path for 'warn'. It does not explicitly contrast itself against siblings like low_level_preflight or verify_x402_settled_claim, so the when-not-to-use-this angle is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_claimARead-onlyIdempotentInspect
Read the Vuori Kore Short listing-claim artifact (com.twzrd.shopping.listing_claims/1.1).
Tool twin of the twzrd://claims/vuori-kore resource: what is claimed about this
checkout, by whom, in what state, on what evidence. Verified on every read
(publication signature, artifact digest, schema, evidence binding); a read that
fails any check is refused, never served. `unknown` claims stay unknown. Each claim
carries expires_at; after it, treat the claim as historical. Read-only; this never
starts a payment or checkout.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| uri | Yes | The MCP resource this tool mirrors. |
| text | Yes | The artifact or evidence bundle, byte-for-byte as the resource serves it. Parse it after checking `digest`. |
| digest | Yes | sha256 of the exact bytes in `json`, as bound in the signed publication. |
| artifact_id | Yes | Artifact id of the signed publication that was read. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, idempotentHint), the description discloses detailed verification behavior: publication signature, artifact digest, schema, evidence binding, and that a failing read is refused. It also notes that unknown claims stay unknown and that claims carry an expiry. This exceeds the annotation coverage significantly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose, then adds verification, state behavior, and safety. Each sentence contributes new information; there is no filler or repetition. It is slightly long but appropriate for the complexity of the resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool with an output schema, the description fully covers what the tool does, its safety profile, edge cases (unknown, expired), and verification guarantees. Nothing an agent needs to decide whether to call it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description need not explain any. The schema is trivially covered at 100%. Per calibration, a baseline of 4 applies, and the description adds no parameter-related confusion.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the specific artifact (Vuori Kore Short listing-claim), states the resource it twins, and enumerates the information it provides (what is claimed, by whom, state, evidence). It also distinguishes its read-only nature from any payment/checkout actions, making its purpose unambiguous among sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states the tool is read-only and never starts a payment or checkout, which is a clear usage constraint. It also explains that unknown claims remain unknown and that after expires_at the claim is historical, providing context on when to rely on the result. However, it does not name alternative tools for comparison, so it lacks explicit exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_counterpartiesARead-onlyIdempotentInspect
Free discovery (capped teaser): the top-N merchants a wallet actually pays, by
event count, with per-edge tx_count / total_usdc / first+last timestamps.
See WHO a counterparty transacts with before trusting it. The list is capped
(default 10, max 25) and `capped`/`total_distinct_merchants` disclose how much
is withheld; the FULL deduped payment graph and numeric edge weights are part
of the paid intel surface (GET /v1/intel/trust/{wallet}). Fail-open.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max counterparties to return (default 10, hard cap 25 - this is a capped teaser). | |
| wallet | Yes | Payer Solana wallet public key (32-44 base58 chars) whose counterparties (merchants paid) to list. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present only on the degraded path. |
| capped | No | True if the full merchant set exceeds the returned list. |
| wallet | No | The payer wallet looked up. |
| returned | No | Number of counterparties returned (<= limit). |
| teaser_note | No | States that the full deduped graph + edge weights are paid. |
| total_events | No | Total observed payment events for this payer. |
| counterparties | No | Capped top-N merchants paid, each with tx_count, total_usdc, first_at, last_at. |
| data_available | No | False when the corpus/DB was unavailable. |
| total_distinct_merchants | No | Total distinct merchants this payer has paid (full, uncapped). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, idempotentHint), the description adds behavioral traits: it's a capped teaser, returns top-N by event count, includes 'capped' and 'total_distinct_merchants' fields, and mentions 'fail-open'. This adds context about data completeness and potential partial success.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear lead sentence and subsequent details. It is somewhat verbose but contains no wasted sentences. It front-loads the main purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 2 parameters and an output schema, the description is complete. It explains the return format (per-edge details, capped/total fields), notes the paid alternative, and mentions failure behavior ('fail-open'). No critical information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds meaning by clarifying the 'wallet' parameter is a payer and the 'limit' is a cap (teaser). It also provides context about the default and maximum. This adds value beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists top-N merchants a wallet pays, with per-edge details. It uses specific verbs ('discover', 'list') and resources ('merchants', 'wallet'). However, it does not explicitly differentiate from sibling tools like get_merchant_card or get_provider_reputation, though the context suggests it's a counterparty discovery tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides usage guidance: it's a free capped teaser, useful before trusting a counterparty, and notes that the full graph is paid. It implicitly suggests when to use (free discovery) and when not (if full graph needed). It does not explicitly mention alternative tools, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_evidenceARead-onlyIdempotentInspect
Read the evidence bundle behind the Vuori Kore Short listing claims.
Tool twin of the twzrd://claims/vuori-kore/evidence resource: canonical_evidence/1
envelopes and capture records. A claim's evidence digest is the RFC 8785 SHA-256 of
its envelope; recompute it to check. Verified with the artifact on every read and
refused on any mismatch. Raw page bytes are not served. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| uri | Yes | The MCP resource this tool mirrors. |
| text | Yes | The artifact or evidence bundle, byte-for-byte as the resource serves it. Parse it after checking `digest`. |
| digest | Yes | sha256 of the exact bytes in `json`, as bound in the signed publication. |
| artifact_id | Yes | Artifact id of the signed publication that was read. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool read-only and idempotent, so the description's job is to add behavioral depth, and it does. It discloses that the evidence digest is an RFC 8785 SHA-256 of the envelope, that every read is verified against the artifact, that mismatches cause refusal, and that raw page bytes are not returned. These are non-obvious behaviors an agent would not know from annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and each subsequent sentence adds a distinct, useful fact: resource twin, digest format, verification behavior, and a content limitation. It is somewhat dense with jargon like 'RFC 8785 SHA-256' and 'canonical_evidence/1', but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool with a rich annotation set and an output schema, the description is remarkably complete. It explains what the tool accesses, how integrity is checked, what happens on mismatch, and what is excluded. An agent has enough information to invoke it correctly and interpret its behavior without further investigation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters and 100% schema coverage, the baseline is 4. The description adds meaning by identifying the exact resource being read (canonical_evidence/1 envelopes and capture records) even though no input parameters are needed, which helps the agent understand what the fixed invocation actually returns.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Read the evidence bundle behind the Vuori Kore Short listing claims.' It further distinguishes itself by naming the exact backing resource URI and framing itself as the 'Tool twin' of that evidence resource, which separates it from sibling tools like get_claim that serve the claim itself rather than the evidence bundle.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied: call this tool when you need the evidence bundle behind the claim, and it does state a limitation ('Raw page bytes are not served'). However, it never explicitly names an alternative or states when not to use it, so the guidance relies on inference rather than a clear routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_facilitator_footprintARead-onlyIdempotentInspect
Free discovery: which x402 facilitators a payer has settled through, and how many.
unique_facilitators = 1 is a thin/captive agent (locked to one rail); breadth
across facilitators indicates a more established cross-rail agent. Returns the
facilitator_ids list plus tx/merchant context. Fail-open: a DB gap returns
data_available=false rather than erroring.
| Name | Required | Description | Default |
|---|---|---|---|
| wallet | Yes | Solana wallet public key (32-44 base58 chars) to look up its x402 facilitator footprint. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present only on the degraded path. |
| found | No | True if the wallet has observed corpus activity. |
| wallet | No | The wallet looked up. |
| tx_count | No | Total observed paid calls. |
| last_seen | No | ISO timestamp of last observed activity. |
| first_seen | No | ISO timestamp of first observed activity. |
| data_available | No | False when the corpus/DB was unavailable. |
| facilitator_ids | No | The facilitator identifiers observed for this payer. |
| unique_merchants | No | Distinct merchants paid. |
| unique_facilitators | No | Distinct x402 facilitators this payer has settled through (1 = thin/captive). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint and idempotentHint. The description adds beyond these by specifying fail-open behavior (returns data_available=false on DB gap) and the exact data returned (facilitator_ids list plus tx/merchant context), which are not covered by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with four sentences covering purpose, interpretation, and behavioral details. It is front-loaded with the main purpose and avoids fluff, though could be slightly more compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only one parameter and an output schema (exists but not shown), the description provides sufficient context: purpose, interpretation hints, and fail-open behavior. It is complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already fully describes the wallet parameter (format, base58). The description does not add any additional parameter semantics, so baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it provides discovery of which x402 facilitators a payer has settled through and their count, with a specific verb (discovery) and resource (facilitator footprint). It distinguishes from sibling tools like get_x402_directory by focusing on a specific payer's settled facilitators.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives interpretive guidance (e.g., unique_facilitators = 1 indicates a thin/captive agent) and contextual hints for when to use the tool (to assess cross-rail activity). However, it does not explicitly state when not to use it or name alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_merchant_cardARead-onlyIdempotentInspect
Free merchant card: observed inbound payment-graph quality around a Solana
or Base receive wallet.
Dual input (PR-3): pass ``wallet`` and/or ``resource_id``. Resource resolves via
the first-party registry (TWZRD seed) to a pay_to, then the same graph card.
Does NOT claim service quality (resource_listing_only / catalog_listing_only).
HTTP twin: GET /v1/intel/merchant_card/{wallet_or_resource_id}.
Compact (default) includes observed_at, stale, corpus_complete_day,
corpus_age_days. Catalog services stay behind full=true.
wash_flagged is tri-state: true (flagged) | false (evaluated clean) |
null (never evaluated - NOT clean). wash_flagged=true never soft-allows
(next_action.decision=refuse; no warn/allow/quick). Unlabeled leftover
0.05 / leftover=0 is not a unit price; cheapest_listed_price_usdc omits
leftover and upto_cap amounts. Route on next_action.decision
(refuse | insufficient_evidence | no_negative_signal); the card is
down-only and never returns allow. `reason` carries the specific
finding (e.g. a soft wash risk collapsed into "refuse", or a corpus
outage collapsed into "insufficient_evidence") when the 3-value
decision alone is not enough context.
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | If true, include catalog services. Default is the compact decision surface. | |
| wallet | No | Receive wallet (x402 pay_to / merchant pubkey). Observed payment-graph card only — not a business, demand, or identity attestation. | |
| resource_id | No | Optional registry resource_id (HTTP path template or mcp:tool). Resolved to merchant_wallet via PR-3 seed; claim resource_listing_only. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover readOnly/idempotent, so the description carries the load and delivers real behavioral contract: tri-state wash_flagged semantics (null is NOT clean), that wash_flagged=true can never soft-allow, that the card is down-only and never returns 'allow', and that `reason` disambiguates a collapsed 3-value decision. This is exactly the kind of non-obvious behavior an agent needs before trusting the output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first line and the rest is dense, high-value contract detail rather than filler. The density and unexplained internal tokens ('PR-3', 'corpus_complete_day', 'upto_cap') cost it some readability, but no sentence is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values needn't be explained, yet the description still pre-empts the key output semantics (decision routing, stale/corpus fields). It does omit what happens when both optional inputs are omitted (0 required parameters) and gives no rate-limit/free-tier caveat beyond the word 'Free'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and the description adds meaning: it establishes that wallet and resource_id are interchangeable paths to the same card ('resolves ... to a pay_to, then the same graph card'), and clarifies that catalog services are gated behind full=true while the compact surface is the default decision view.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
'Free merchant card: observed inbound payment-graph quality around a Solana or Base receive wallet' states the resource and the scope precisely. It also carves out what it is not ('Does NOT claim service quality'), which separates it from catalog/listing tools. However, the heavy jargon ('PR-3', 'TWZRD seed', 'payment-graph quality') leaves the core purpose legible only to an agent already steeped in this domain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does specify input combinations ('pass wallet and/or resource_id') and how to consume the result ('Route on next_action.decision'), which implies usage. But it never states when to pick this tool over close siblings such as score_wallet_for_intel, compare_wallets, or check_listing, and the 'HTTP twin' line gives no actionable routing advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_poec_scoreARead-onlyIdempotentInspect
Free preview: PoEC v0 (Proof of Economic Contribution) for a payer wallet,
computed from the same observed x402 snapshot score_wallet_for_intel returns.
poec_score = log10(1 + observed USDC sent) x success_quality x diversity
x wash_cleanliness, behind hard floors (>=5 paid calls, >=3 distinct
counterparties, wash_factor >= 0.5, not single-counterparty, wash_flag
clean). Any failed floor, or an unobservable corpus, scores 0.0 with
floors_passed=false - the floors fail closed, never open. wash_factor is a
cleanliness multiplier (1.0 = clean) and is never inverted.
Honesty contract: `claimable` is ALWAYS false. Volume here is
corpus-observed, not a payout unlock. `success_quality` comes from the
payer join onto signed `receipt_settlement_leaves` (0211); if that join
is unobservable, `success_rate` stays in evidence_gaps and the score
reads 0.0. What this surface already shows honestly is the floor filter
(eligible_v0) and every component the score is built from. Self-reported
settlements go through submit_contribution_claims.
Base (EVM) 0x wallets are scored from the relayer-attributed x402_base_daily
rollup (90d) with the same shape, but no wash/sybil graph exists for Base
payers yet, so their wash_flag reads "unknown" (never "clean"), the wash
floor stays closed, and poec_score stays 0.0 regardless of real volume.
A wallet the corpus could not observe at all returns `error` set; on that
path any real observed Base volume is attached under `base_observed`.
| Name | Required | Description | Default |
|---|---|---|---|
| wallet | Yes | Payer wallet (Solana base58 or Base 0x) to score for Proof of Economic Contribution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| as_of | No | ISO timestamp the snapshot was scored at. |
| error | No | Present only when the wallet could not be observed at all (e.g. not a valid Solana pubkey, upstream unavailable) -- distinguishes 'not scoreable' from a genuinely inactive wallet, both of which otherwise read as poec_score 0.0. |
| wallet | No | The scored payer wallet. |
| claimable | No | Always false: volume is corpus-observed, not facilitator-attested or joined to a settlement leaf. |
| wash_flag | No | "clean" | "single_counterparty" | "unknown", from the intel snapshot. |
| components | No | observed_volume, success_quality, diversity, hop_multiplier, wash_cleanliness, solana_boost. |
| paid_calls | No | Observed x402 paid calls sent. |
| poec_score | No | log10(1 + observed USDC sent) x success_quality x diversity x wash_cleanliness; 0.0 when any floor fails. |
| eligible_v0 | No | Floors passed and observed volume > 0. A floor filter, not an unlock. |
| success_rate | No | Signed receipt_settlement_leaves for this payer / observed paid_calls, capped at 1.0. None = join unobservable; 0.0 = join ran, zero attested leaves. Never implies claimable. |
| base_observed | No | Present only for a Base (EVM) wallet TWZRD has independently observed paid calls from: real paid_calls/total_usdc/distinct_counterparties (90d, high-confidence, x402_base_daily). Informational only -- no wash/sybil evaluation exists for Base payers yet, so poec_score and floors_passed are unaffected by this field. |
| evidence_gaps | No | Inputs with no live source. Empty plus success_rate 0.0 means the 0211 join ran and this wallet has no signed settlement leaf — not a missing join. |
| floors_passed | No | All hard floors held: >=5 paid calls, >=3 distinct counterparties, wash_factor >= 0.5, not single-counterparty, wash_flag clean, corpus observable. |
| score_version | No | PoEC contract version, e.g. "poec_v0". |
| source_intel_score | No | intel_score of the underlying snapshot. |
| source_effective_score | No | effective_score of the underlying snapshot. |
| distinct_counterparties | No | Distinct counterparties observed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is highly transparent about edge-case behavior, including returning an error for unobserved wallets, Base wallets being marked wash_flag 'unknown', floors staying closed, and scores being 0.0 in those cases. This goes well beyond the readOnlyHint and idempotentHint annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is heavily repetitive, restating the same floor/failure semantics multiple times with nearly identical phrasing (e.g., 'floors fail closed, never open' and 'never inverted'). While the structure is logical, the redundancy makes it less concise than it should be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even though an output schema exists and return values need not be explained, the description covers important contextual edge cases such as unobserved wallets, Base-specific limitations, and the error path. It is complete enough for an agent to understand when and how the tool behaves.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes the wallet parameter as a payer wallet with Solana base58 or Base 0x formats, so the description adds little new parameter-level meaning. Since schema coverage is 100%, the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool scores a payer wallet for Proof of Economic Contribution and explicitly references the same x402 snapshot returned by score_wallet_for_intel, helping distinguish it from that related tool. It also mentions the alternative path for self-reported settlements via submit_contribution_claims.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives usable guidance by contrasting this tool with score_wallet_for_intel's snapshot and explicitly routing self-reported settlements to submit_contribution_claims. It could more explicitly state when to choose this tool over other siblings, but the main alternatives are addressed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_provider_reputationARead-onlyIdempotentInspect
Free discovery: corpus-backed SELLER reputation for a merchant/provider wallet.
Answers "is this provider organic, narrow, or a wash fleet?" from the merchant's
inbound payment graph over the last 90 days: unique payers, repeat-payer %,
heavy-fleet revenue concentration, captive-payer % (onboarding-sink proxy), and
a scripted-fleet uniformity signal, and top_payer_tx_pct (captive
concentration). Returns wash_label + reputation tier + wash_flagged
(tri-state: true | false | null; null = never evaluated, not clean).
Complements score_wallet_for_intel (payer side) with the seller side.
wash_flagged=true never soft-allows (buyer refuse; preflight block). Fail-open:
a DB gap returns wash_label/tier "unknown" AND wash_flagged=null (plus
wash_confidence) - an unevaluated verdict, never a clean one. This is the free
seller signal. First paid hop is GET /v1/intel/quick/{wallet} (0.001 USDC).
Optional V7 renorm + signed receipt is GET /v1/intel/trust/{wallet} (0.05 USDC).
| Name | Required | Description | Default |
|---|---|---|---|
| merchant | Yes | Seller/merchant pay_to address to score on inbound corpus reputation: a Solana base58 wallet or a Base 0x address. |
Output Schema
| Name | Required | Description |
|---|---|---|
| reason | No | Degraded-path reason (e.g. db_unavailable, no_corpus_inbound). |
| merchant | No | The seller/merchant Solana wallet looked up. |
| total_tx | No | Total inbound paid calls (90d). |
| wash_label | No | Seller class: "provider_organic_broad" | "provider_mixed" | "provider_narrow_or_unknown" | "wash_shaped" | "fleet_dominated" | "unknown". |
| wash_flagged | No | true = fleet/wash/captive/scripted-fleet signals tripped — never soft-allow (refuse / preflight block); false = evaluated and clean; null = never evaluated (unknown - do NOT coerce to false). |
| score_version | No | provider_reputation_v1. |
| unique_payers | No | Distinct payers observed paying this merchant (90d). |
| wash_confidence | No | "full" when self+reciprocal+ring ran; "base_2cycle" when the Base 2-cycle overlay ran but the live 3-cycle ring query did not return (not a full screen); "partial_inbound_only" when the circular-flow overlay did not run. |
| avg_tx_per_payer | No | Average inbound tx per payer. |
| repeat_payer_pct | No | Percent of payers who paid more than once. |
| top_payer_tx_pct | No | Percent of inbound settles supplied by the single largest payer (captive concentration; >=90 with volume floor flags wash; null = not computed). |
| captive_payer_pct | No | Percent of payers who pay ONLY this merchant (captive/onboarding-sink proxy). |
| heavy_fleet_tx_cv | No | Tx-count uniformity across heavy-fleet payers; near-zero = scripted sybil fleet. |
| total_revenue_usd | No | Total inbound USDC revenue (90d). |
| heavy_fleet_payers | No | Count of heavy single-counterparty fleet payers. |
| heavy_fleet_revenue_pct | No | Percent of revenue from heavy-fleet payers. |
| provider_reputation_tier | No | Tier: "tier_a_provider" | "tier_b_provider" | "tier_tail" | "tier_wash_demo" | "unknown". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnlyHint/idempotentHint annotations by disclosing the fail-open contract (DB gap returns 'unknown' + wash_flagged=null, never clean), the tri-state meaning of wash_flagged, and the downstream consequence that wash_flagged=true triggers a buyer refuse / preflight block. This is exactly the operational semantics an agent needs and cannot get from the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core question and keeps to a tight set of sentences, but the signal list is a dense run-on and 'captive-payer % (onboarding-sink proxy)' and 'top_payer_tx_pct (captive concentration)' restate the same captive-payer concept. Minor redundancy, otherwise every sentence carries weight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, the description correctly focuses on interpretation rather than return format, and it covers the failure mode, the tri-state null semantics, and the pricing/escalation ladder. Nothing an agent needs to invoke and interpret this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter is already fully documented (base58 Solana or 0x Base address). The description reinforces that this is the seller/merchant side of the graph but adds no format or constraint detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('corpus-backed SELLER reputation for a merchant/provider wallet') and frames the question it answers ('is this provider organic, narrow, or a wash fleet?'). It explicitly differentiates from the sibling score_wallet_for_intel by naming the seller-side vs payer-side split, so an agent can pick between them without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly positions itself as the 'free discovery' / 'free seller signal' entry point and names the paid escalation hops with prices (GET /v1/intel/quick/{wallet} at 0.001 USDC, GET /v1/intel/trust/{wallet} at 0.05 USDC). The when-to-use context (seller side, complementing the payer-side tool) is spelled out rather than inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_publicationARead-onlyIdempotentInspect
Read the signed publication record behind the current Vuori Kore Short claims.
Tool twin of the twzrd://claims/vuori-kore/publication resource. Returns the
Ed25519 publication record, the verify key and its sha256 fingerprint. Verify the
signature over the signed message, then compare sha256 of each get_claim /
get_evidence text with artifact_digest / evidence_digest. With the key fingerprint
pinned from a second source (the published fingerprint in the connector packet),
that check does not trust this server; without it, it shows only that the record
and the served bytes agree. The signature admits bytes to the resource; it is not
a merchant attestation. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| uri | Yes | The MCP resource this tool mirrors. |
| text | Yes | claim_publication_proof/1 JSON: the signed publication record, verify_key, key_fingerprint and the signed-message construction. |
| digest | Yes | sha256 of the exact bytes in `text` (the proof document itself). |
| artifact_id | Yes | Artifact id named by the signed publication record. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, yet the description adds substantial disclosure of the return shape (Ed25519 record, verify key, sha256 fingerprint) and, unusually, the trust model: the check only proves record/bytes agreement unless the fingerprint is pinned from a second source, and the signature is explicitly not a merchant attestation. Auth/error behavior is unstated, keeping it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, and each sentence carries verification or trust-model information rather than filler. The verification instructions are dense and slightly meandering, but nothing is truly wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be explained, yet the description still frames what comes back and how to use it. For a zero-param read tool, nothing an agent needs in order to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the baseline a 4 applies. The description does name fields from sibling tools (artifact_digest, evidence_digest) that contextualize the comparison, but there is nothing parameter-level for this tool to document.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: reads the signed publication record behind the current Vuori Kore Short claims. Names its relationship to the twzrd://claims/vuori-kore/publication resource and to the get_claim/get_evidence siblings, so an agent can place it precisely among the claim-verification tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains what to do with the output (verify the signature, then compare sha256 of get_claim/get_evidence text against artifact_digest/evidence_digest), which implicitly positions it as the anchoring step before those comparisons. It stops short of an explicit when-to-use vs when-not statement, but the workflow context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_readiness_card_toolARead-onlyIdempotentInspect
PRIMARY free pre-spend gate (advisory). Pass seller_wallet OR resource_name.
wash_flagged=true never soft-allows. Unlabeled leftover 0.05 / leftover=0 is not a unit price.
When to use: before any x402 payment to a seller/resource.
When not to use: after you already decided to refuse; use verify_receipt for signed receipts only.
Pricing: free. Result is advisory (buyer policy still applies).
Hard-stops:
wash_flagged=true never soft-allows (decision=block / do_not_pay; no warn/allow/quick).
Unlabeled leftover 0.05 / leftover=0 is not a unit price; read price_kind.
Caller-supplied or scheme/price_kind=exact 0.05 stays a unit price.
Decision semantics (top-level, no nesting via MCP):
decision=block / recommended_action=do_not_pay -> DO NOT PAY.
decision=warn / recommended_action=proceed_with_cap -> pay only up to maximum_recommended_spend_usdc.
decision=allow / recommended_action=proceed_for_small_spend -> proceed under agent policy (no free-tier cap).
next_action (enrollment handoff — do not stop after free card):
next_step_type / payment_required / executable / command describe an
optional next step. A host may use command only under its own policy.
Never paste path templates (:pubkey / {pubkey}) as seller_wallet.
Also returns reason_codes[], confidence, model_version, decision_envelope.
No counterparty named (seller_wallet missing / a template / not a wallet, and
no resource_name or resource_url): decision=block, trust_score null, score null,
null_reason=no_subject, reason_codes NO_COUNTERPARTY (+ PLACEHOLDER_SELLER_WALLET),
seller_wallet_rejected echoes what you sent. That is an input bug, not a seller
verdict: fix the input and re-run.
trust_score is a free heuristic, NOT the full corpus.
Next: on allow/warn for material spend, next_action.command is the
optional AgentCash paid-trust or AutoGate install string, then verify_receipt
on the signed V7 receipt.
Optional: twzrd_watch_add for re-check after recheck_after_unix.
Additive: top-level aop_bind program registry (evidence hierarchy) when enabled;
never mutates decision / can_spend.
| Name | Required | Description | Default |
|---|---|---|---|
| price_usdc | No | Caller-supplied exact unit price in USDC. Leave unset unless you have an exact quote. Unlabeled leftover 0.05 / leftover=0 is not a unit price. | |
| agent_intent | No | Natural-language intent describing the planned paid action. | |
| buyer_wallet | No | Buyer's Solana wallet public key used for spend-context checks. | |
| resource_url | No | Canonical endpoint URL for the resource, if available. | |
| resource_name | No | Provider or resource label in a marketplace (for example marketplace:agent-name). Provide this OR seller_wallet. | |
| seller_wallet | No | Seller payTo for the listing or endpoint: a Solana base58 wallet (32-44 chars) or a Base 0x address. Provide this OR resource_name. CRITICAL: never pass OpenAPI templates (:pubkey, {pubkey}, {seller_wallet}, SELLER_WALLET, PAY_TO_WALLET) — use accepts[].payTo from a 402 challenge. | |
| queried_pubkey | No | Consumer pubkey, echoed on output when provided (attribution only). | |
| marketplace_score | No | Optional upstream marketplace trust score (0-100) to blend into preflight context. |
Output Schema
| Name | Required | Description |
|---|---|---|
| as_of | No | ISO-8601 of data_as_of_unix (same back-fill rule: can be card build time on a scored read). Null when the subject was never measured. |
| basis | No | Typed evidence entries {class, kind, source, observed_at, weight, ...}; observed_at is null with observed_at_null_reason on an honest-null card. |
| proof | No | Proof block: v5_receipt_upsell_available, has_v5_receipts, receipt_endpoint, known_seller_wallets, provider_reputation. |
| score | No | Draft-02 score 0..1, or null when no evidence was measured (see null_reason). An assessor never fabricates this; the legacy trust_score keeps a cautious default for old consumers. |
| stale | No | True when the seller's last settle is older than 7 days, or when there is no settle and the ledger head is older than 7 days or missing. Warning only; not a wash refuse. |
| caveats | No | Risk factors and the always-on trust_score_basis caveat. |
| version | No | Card schema version, e.g. readiness_card_v1. |
| category | No | Resource category (e.g. defi, defi_intelligence). |
| decision | No | Spend decision: "allow" | "warn" | "block". wash_flagged=true never soft-allows — this field is block (no warn/allow/quick). |
| can_spend | No | Price-aware proceed flag (not 'true only on allow'). block → false; allow → true (unless known price exceeds free-tier ceiling); warn → true only when price_usdc is known and fits under recommended_cap_usdc, else false. Free card is advisory; AutoGate on the pay path enforces. |
| issued_at | No | ISO-8601 card issue time. |
| expires_at | No | ISO-8601 card validity end (an expired card is an absent card). |
| next_fixes | No | Actionable steps the provider can take to raise trust. |
| price_kind | No | exact | upto_cap | unknown. upto_cap means price_usdc is not a unit price. |
| price_usdc | No | Quoted unit price in USDC. Null when price_kind is upto_cap or the figure is unlabeled leftover 0.05 / leftover=0 (scheme=upto leftover defaults, including stale 0.05, are not a unit price). |
| null_reason | No | Why score is null: "unknown_subject" | "insufficient_signal" | "evaluation_failed" | "no_subject" (no counterparty was named at all). Null when scored. |
| observed_at | No | ISO-8601 of the seller's last settle, else the ledger head day. Null when neither exists. Not card-build time. |
| paid_teaser | No | First paid hop: $0.001 score-only teaser (/v1/intel/quick/{wallet}). |
| trust_score | No | Composite trust signal, 0-100. |
| ledger_basis | No | Ledger head basis, for example exact or mixed_estimated. |
| recheck_hint | No | One-line hint: re-verify via GET /v1/intel/trust/{pubkey}. Do not gate solely on recheck_after_unix (unsigned on V5/V6 receipts); use your own max_age_seconds. |
| resource_name | No | Resolved resource/provider label. |
| seller_wallet | No | Seller Solana wallet, if known. |
| max_price_usdc | No | Advertised maximum USDC when price_kind is upto_cap. Not a unit price. |
| paid_deep_dive | No | Optional Path A V7 receipt surface (/v1/intel/trust/{wallet}). |
| queried_pubkey | No | Consumer pubkey echoed when provided on input (attribution only; not a settle gate). |
| staleness_days | No | Recommended re-check cadence in days (7 high-quality, 3 partial/stale). Advisory. Leaf-bound on a paid V7 receipt; unsigned on V5/V6 receipts. |
| corpus_age_days | No | Whole days since corpus_complete_day. Null when the ledger head is missing. |
| data_as_of_unix | No | Seller last-activity unix when known. Null on unknown_subject / insufficient_signal / evaluation_failed (never wall clock there). On a scored read with no last-activity anchor it IS the card build time (the live read ran at request time); the seller clock that is never build time is observed_at. Card TTL is recheck_after_unix. |
| paid_price_usdc | No | Price of the optional V7 receipt in USDC (0.05). |
| root_provenance | No | Legacy root metadata for the parked on-chain protocol's deposit/claim/settle resources only: latest_root_seq, dataset_hash (if known), leaf_version, verification_status, onchain_match (null = call verify_root_inputs before any on-chain action), and market_velocity when that service is configured. Not part of the pre-spend check for x402 sellers. Null/absent on every other resource. |
| paid_teaser_usdc | No | Price of the first paid hop in USDC (0.001). |
| score_decay_model | No | step:<=7d=1.0,<=30d=0.8,<=90d=0.5,>90d=0.25 (the recency decay on paid scores). Advisory. Leaf-bound on a paid V7 receipt; unsigned on V5/V6 receipts. |
| trust_score_basis | No | Provenance of the score; ALWAYS the free heuristic, never the paid corpus model. |
| recheck_after_unix | No | UNIX timestamp after which this intel is stale. Advisory. On a paid V7 receipt it is leaf-bound, so an edit fails verification; on V5/V6 receipts it is outside the signed leaf and a holder can extend it. Either way, enforce your own policy via verify_receipt(max_age_seconds=...), which checks the SIGNED preimage.timestamp_unix. |
| corpus_complete_day | No | Ledger head complete day (YYYY-MM-DD) from x402_ledger_head. Null when that row is missing. Not the 2026-07-09 copy floor. |
| ledger_exact_through | No | Last day of exact event capture on the ledger head. Later days may be estimates. |
| seller_wallet_rejected | No | Set when the seller_wallet you sent was discarded: {"value", "reason": "template_placeholder" | "not_a_wallet_address"}. With no resource_name/resource_url the card is decision=block, null_reason=no_subject, reason_codes NO_COUNTERPARTY (+ PLACEHOLDER_SELLER_WALLET). Fix the input; this is not a verdict about any seller. |
| corpus_complete_through_unix | No | Behavioral corpus coverage watermark, or null when none is plumbed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover readOnly/idempotent, yet the description discloses the full behavioral surface: hard-stop rules (wash_flagged, unlabeled leftover), the three decision branches and their spend caps, a no-counterparty input-bug path that is explicitly distinguished from a seller verdict, and the caveat that trust_score is 'a free heuristic, NOT the full corpus.' That is far beyond what the annotations provide and it is internally consistent with readOnly/advisory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is well front-loaded (purpose, then when/when-not, then hard-stops and decision semantics), but it is also dense and redundant: 'wash_flagged=true never soft-allows' appears twice and the 'unlabeled leftover 0.05 is not a unit price' rule appears three times across the description. The repetition is defensible for a safety gate, but it costs efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be enumerated, yet the description still documents decision/recommended_action mappings, reason_codes, the null_reason=no_subject path, and the next_action enrollment handoff. For an 8-parameter, optional-arg gate with no required fields, an agent has everything needed to call it correctly and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds cross-parameter interaction guidance the schema cannot express: the OR-requirement between seller_wallet and resource_name, the rule that path templates must never be pasted as a wallet, and the price_kind distinction for price_usdc. Marginal overlap with schema text exists, but the selection logic is genuinely added.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first line states a specific verb+resource and a scope: 'PRIMARY free pre-spend gate (advisory). Pass seller_wallet OR resource_name.' It also names a sibling boundary ('use verify_receipt for signed receipts only'), but does not distinguish itself from other near-neighbors in the cluster (evaluate_x402_resource, low_level_preflight, get_merchant_card), so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'When to use: before any x402 payment to a seller/resource' paired with 'When not to use: after you already decided to refuse; use verify_receipt for signed receipts only.' The condition that selects the alternative is named outright, leaving no inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_shopping_checkARead-onlyIdempotentInspect
Read the free Agent Shopping Check for Vuori Kore Short, Ink, US.
Same report as https://twzrd.xyz/shopping-check/vuori-kore/: product
context, advertised claims with exact sources and observation times,
unverified purchase completion and other gaps, and editorial merchant
fixes for the reviewed gaps still open. Built from the verified signed
publication on every read.
Expired observations are historical. Never pays or starts checkout.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint and idempotentHint, so the bar is lower, yet the description adds real behavioral context: each read is 'Built from the verified signed publication' (provenance/freshness), 'Expired observations are historical' (how stale data is presented), and it performs no payment. That is useful disclosure beyond the structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb and target, then the report contents, then provenance and the no-payment guarantee. Mostly efficient; the inline URL repeats what the slash path already conveys and adds a little length without adding meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No parameters and an output schema exists, so return structure needn't be described, and the description still enumerates the report sections. The one gap is that it never routes the agent among the many sibling read tools when this check is or isn't the right one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so there is no per-parameter semantics to explain; the baseline for a parameterless tool is 4. The description compensates by making clear the report is fixed to one specific product rather than being configurable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('Read') plus a concrete resource ('Agent Shopping Check for Vuori Kore Short, Ink, US'), with the report's contents enumerated (product context, advertised claims with sources, gaps, editorial fixes). An agent can tell this delivers a curated shopping-gap report rather than raw listings. It does not, however, name a sibling it should be preferred over.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: 'free', 'Read', and 'Never pays or starts checkout' tell the agent this is a safe pre-purchase lookup that can substitute for initiating a checkout. No explicit when-to-use trigger and no alternative sibling (check_listing, get_publication, get_evidence) is offered for cases where this check doesn't apply.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_solana_market_statusARead-onlyIdempotentInspect
Health probe for the Solana Market API data backend.
Call this to gate or degrade gracefully BEFORE the other get_solana_market_*
tools: it does a short-timeout hit on the data service and reports whether it
is reachable, so an agent can tell "market has no data" from "service is down"
without failing a real query.
Free discovery tool. When the market data service exposes /status, the response
includes prod_key_configured, data_first_available, and an actionable note
describing what to configure for full on-chain visibility.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| score | No | Normalized velocity score 0.0-1.0. |
| trend | No | Velocity trend: rising | stable | declining. |
| detail | No | Human-readable status or error detail. |
| available | No | True if the Solana Market data service responded. |
| velocity_rank | No | Velocity rank from market signals (higher better). |
| market_velocity | No | Full velocity payload when present (rank/trend/score/last_updated). Populated into ReadinessCard.root_provenance.market_velocity for WZRD protocol resources. |
| base_url_configured | No | Whether the market data-service base URL is explicitly configured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds significant behavioral context: short-timeout hit, reports reachability, and mentions response fields (prod_key_configured, data_first_available, actionable note), which goes well beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (5 sentences) and front-loaded with the key purpose. Every sentence adds value, though minor tightening could be possible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and an existing output schema, the description fully explains the tool's purpose, usage guidance, and behavioral details. It is complete for the agent to decide when and how to use it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so baseline is 4. The description does not need to add parameter info; it correctly focuses on the tool's purpose and behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool is a health probe for the Solana Market API data backend, using specific verb+resource ('Health probe') and explicitly distinguishes it from sibling tools by advising to call it before other get_solana_market_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool ('Call this to gate or degrade gracefully BEFORE the other get_solana_market_* tools') and provides context about being a free discovery tool, giving clear guidelines.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_top_intel_agentsARead-onlyIdempotentInspect
Leaderboard of observed payer wallets in the x402 settlement graph, each
with its intel score. This is behavioral corpus research, not identity
proof or evidence that the wallet is a TWZRD customer.
Ranks by the wash-discounted effective_score (single-counterparty fleets are
demoted, not hidden) with a deterministic tiebreaker. Set min_paid_calls to
suppress one-shot wallets and max_days_since_last to suppress dormant ones.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of ranked payer wallets to return (default 10). | |
| min_paid_calls | No | Filter out wallets with fewer than this many observed paid calls (default 0 = no filter). Use to get credible *active* counterparties, not a raw dump. | |
| max_days_since_last | No | Only include wallets active within this many days (default null = no recency filter). Use e.g. 14 to exclude dormant or historical payers. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Number of rows returned. |
| error | No | Present only on the degraded path. |
| agents | No | Ranked agent rows, each with intel_score, effective_score, wash fields, and rank. |
| score_model | No | Self-describing scoring contract. |
| score_version | No | Scoring contract version. |
| data_available | No | False when the corpus/DB was unavailable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond annotations (readOnlyHint, idempotentHint) by explaining the ranking mechanism: 'Ranks by the wash-discounted effective_score (single-counterparty fleets are demoted, not hidden).' This reveals important behavioral context for interpreting results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (three sentences), front-loads the main purpose, and avoids extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (3 optional parameters, output schema exists), the description covers purpose, ranking logic, parameter intent, and a disclaimer about the data's nature. It is complete for effective usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description's parameter guidance ('suppress one-shot wallets', 'suppress dormant ones') largely repeats the schema descriptions, adding minimal new value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns a 'Leaderboard of observed payer wallets in the x402 settlement graph, each with its intel score.' This distinguishes it from sibling tools like score_wallet_for_intel (single wallet) and get_counterparties (different aspect).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides guidance on parameter usage: 'Set min_paid_calls to suppress one-shot wallets and max_days_since_last to suppress dormant ones.' It also includes a disclaimer about the nature of the data. However, it does not explicitly state when to use this tool versus alternatives like score_wallet_for_intel.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_x402_directoryARead-onlyIdempotentInspect
Wash overlay on ingested PayAI/CDP/Agentic listings (PayAI not_indexed).
Prefer HTTP GET /v1/intel/resources for the resource join SOT (callable URL +
discovery claim listed|live_402 + settlement reputation on pay_to). That
surface is HTTP-only. Use this tool when you need
the ingested listing overlay indexed by payTo. Not GET /v1/intel/bazaar/offers
(TWZRD Bazaar catalog) and not 402 extensions.bazaar.
Solana wash overlay is the only wash graph. Base listings additionally
carry high-confidence EIP-3009 corpus membership from x402_base_daily;
they remain wash_unknown. Polygon listings carry wash_unknown.
Query params — flagged_only, limit, source — mirror GET /v1/intel/x402-directory.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max directory rows to return (1-500). | |
| source | No | Source filter: payai_bazaar, cdp_bazaar, agentic_market, or None for all. | |
| flagged_only | No | Return only wash-flagged listings. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, and the description is consistent with those. It adds meaningful behavioral context beyond the annotations: the PayAI surface is not_indexed, 'Solana wash overlay is the only wash graph,' Base listings only carry EIP-3009 corpus membership yet 'remain wash_unknown,' and Polygon listings 'carry wash_unknown.' This flags data-coverage limitations an agent must know before trusting wash-flag results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loaded: purpose first, then alternative routing, then data caveats, then params. Every sentence earns its place. The only knock is heavy domain jargon (wash overlay, SOT, not_indexed, EIP-3009 corpus, wash_unknown), which trades readability for compactness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema (return shape covered), annotations (safety profile covered), and 100% param coverage, the description fills the remaining gaps well: when to use it, what it is not, and chain-specific wash-coverage caveats. The main residual gap is that 'mirror GET /v1/intel/x402-directory' assumes external knowledge of an HTTP surface the agent may not have, though the output schema mitigates this.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all three parameters (limit range 1-500, source filter values, flagged_only semantics). The description only adds a cross-reference that the params 'mirror GET /v1/intel/x402-directory,' which is marginal. Per the rubric, baseline 3 is correct since the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource and scope: a wash overlay on ingested PayAI/CDP/Agentic listings, retrieved 'when you need the ingested listing overlay indexed by payTo.' It explicitly distinguishes itself from GET /v1/intel/resources (resource join SOT), GET /v1/intel/bazaar/offers (TWZRD Bazaar catalog), and 402 extensions.bazaar, so an agent can route correctly without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage guidance is explicit and contrastive: 'Prefer HTTP GET /v1/intel/resources for the resource join SOT' (with the reason: callable URL + discovery claim + settlement reputation), then 'Use this tool when you need the ingested listing overlay indexed by payTo,' and 'Not GET /v1/intel/bazaar/offers... and not 402 extensions.bazaar.' When-to-use, when-not-to-use, and the preferred alternative are all named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
is_wash_fleetARead-onlyIdempotentInspect
Free discovery: cheap circular-flow (wash) check for a payer wallet.
Returns the CATEGORICAL classification (clean / self_pay / reciprocal /
self+reciprocal), an is_circular bool, and the observed event counts +
distinct_merchants from the wallet's corpus edges. Use as a fast Sybil/wash
gate before trusting a counterparty.
Accepts a Solana public key or a Base/EVM address. On Base the signal reads
the high-confidence x402 rollup only, and the 3-cycle ring runs as a live
query instead of the Solana precomputed matview. Read ring_evaluated: when it
is false, ring_events=0 means NOT EVALUATED, never "no rings observed".
Fail-open: a DB gap returns classification "unknown". The numeric wash discount
(wash_factor / wash_ratio) and the full renormalized model stay paid — they are
NOT returned here.
| Name | Required | Description | Default |
|---|---|---|---|
| wallet | Yes | Wallet to check for circular-flow / wash behavior: a Solana public key (32-44 base58 chars) or a Base/EVM address (0x + 40 hex). |
Output Schema
| Name | Required | Description |
|---|---|---|
| chain | No | Which corpus answered: "solana" or "base". Base reads the high-confidence x402 rollup only. |
| error | No | Present only on the degraded path. |
| reason | No | Degraded-path reason, if any. |
| wallet | No | The wallet checked. |
| is_circular | No | True if any self-pay or reciprocal (2-cycle) flow was observed. |
| ring_events | No | Events forming a 3-cycle ring. Meaningless unless ring_evaluated is true: 0 with ring_evaluated false means NOT LOOKED FOR, not none found. |
| self_events | No | Events where the wallet paid itself. |
| total_events | No | Total observed payment events. |
| classification | No | Circular-flow class: "clean" | "self_pay" | "reciprocal" | "self+reciprocal" | "unknown". |
| ring_evaluated | No | True only when the ring axis actually ran for this wallet: the precomputed Solana ring aggregate was read, or the live Base 3-cycle query returned. False when the ring lookup failed or the Solana wallet has no aggregate row yet - in both of which ring_events=0 means not evaluated, never none found. |
| reciprocal_events | No | Events forming a 2-cycle (counterparty also pays this wallet). |
| distinct_merchants | No | Distinct merchants this wallet paid. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover safety (readOnlyHint, idempotentHint); the description goes well beyond them, disclosing fail-open semantics ('a DB gap returns classification "unknown"'), the Base-vs-Solana implementation difference, and the critical ring_evaluated=false pitfall where ring_events=0 means NOT EVALUATED. It also bounds what is returned, noting wash_factor/wash_ratio are withheld.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first line and the remaining sentences are dense with unique operational facts rather than filler. Slightly fragmented across six short paragraphs, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite an output schema existing, the description supplies the interpretive context the schema cannot: the meaning of the four classifications, the fail-open 'unknown' case, and the ring_evaluated caveat. For a single-param gate tool with annotations covering safety, nothing needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already documents the wallet string as a Solana pubkey or Base/EVM address. The description's 'Accepts a Solana public key or a Base/EVM address' repeats that without adding format or precedence detail, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (circular-flow / wash check for a payer wallet) and scopes it as a 'free discovery' tool, which implicitly separates it from the paid scoring siblings. An agent can tell what it produces (a categorical classification plus counts) without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use as a fast Sybil/wash gate before trusting a counterparty' gives a concrete when-to-use condition. It implies a paid alternative exists ('the full renormalized model stay paid') but never names the sibling tool an agent should reach for instead, so routing is only partly resolved.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
low_level_preflightARead-onlyIdempotentInspect
Low-level preflight check. Returns a richer result object including
paid_quick_endpoint ($0.001 first hop) and optional paid_trust_endpoint ($0.05 V7).
wash_flagged=true never soft-allows. Unlabeled leftover 0.05 / leftover=0 is not a unit price.
Prefer get_readiness_card_tool for most callers. Use this when you need
max_spend_recommendation_usdc, full_report_hint, or the suggest_full_report
flag. The embedded `readiness_card` carries the SAME full shape as
get_readiness_card_tool (see the outputSchema).
Hard-stops:
wash_flagged=true never soft-allows (decision=block; no warn/allow/quick).
Unlabeled leftover 0.05 / leftover=0 is not a unit price; read readiness_card.price_kind.
| Name | Required | Description | Default |
|---|---|---|---|
| price_usdc | No | Caller-supplied exact unit price in USDC. Leave unset unless you have an exact quote. Unlabeled leftover 0.05 / leftover=0 is not a unit price. | |
| agent_intent | No | What the agent intends to do with the purchased response or tool. | |
| buyer_wallet | No | Buyer's Solana wallet public key; enables buyer-context evidence in scoring. | |
| resource_url | No | Canonical endpoint URL for the resource, if available. | |
| resource_name | No | Provider or listing identifier to evaluate before payment. | |
| seller_wallet | No | Seller payTo (Solana base58 or Base 0x address) for reputation and spend checks. | |
| marketplace_score | No | Optional marketplace-provided score (0-100) for blend-in scoring context. |
Output Schema
| Name | Required | Description |
|---|---|---|
| reason | No | Decision-consistent one-line rationale. |
| decision | No | Spend decision: "allow" | "warn" | "block". wash_flagged=true never soft-allows — this field is block (no warn/allow/quick). |
| evidence | No | Evidence bullets behind the decision. |
| trust_score | No | Composite trust signal, 0-100. |
| readiness_card | No | The full ReadinessCard shape (same keys as get_readiness_card_tool). |
| full_report_hint | No | How to fetch the paid full report. |
| paid_quick_endpoint | No | First paid hop: $0.001 score-only teaser, if seller identity is known. |
| paid_trust_endpoint | No | Optional $0.05 V7 receipt path, if seller identity is known. |
| suggest_full_report | No | Whether to upsell the paid V7 receipt report. |
| max_spend_recommendation_usdc | No | Suggested per-call spend ceiling for this decision. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool readOnly and idempotent, and the description adds meaningful behavioral details: paid endpoint costs, the hard-stop that wash_flagged=true never soft-allows, and the warning that unlabeled leftover 0.05 is not a unit price. The phrasing is somewhat cryptic and repetitive, but it discloses important constraints beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and the sibling alternative, but it repeats the two hard-stop sentences almost verbatim in both the opening paragraph and the hard-stops section. That duplication costs conciseness without adding clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full output schema, complete parameter descriptions, and readOnly/idempotent annotations, the description supplies the remaining necessary context: when to use it instead of the readiness-card tool, the richer fields it exposes, the embedded readiness_card shape, and the key hard-stop rules.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all seven parameters, including price_usdc and its caveats. The description reinforces the price caveat but does not add meaningful semantics for the other parameters beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states this is a low-level preflight check that returns a richer result object, and it explicitly distinguishes itself from get_readiness_card_tool by naming the additional fields it exposes. An agent can tell exactly what this tool is for without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to prefer get_readiness_card_tool for most callers and to use this tool only when max_spend_recommendation_usdc, full_report_hint, or suggest_full_report is needed. That is a clear when-to-use and when-not-to-use alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
score_wallet_for_intelARead-onlyIdempotentInspect
Free discovery: PAYER-side 0-100 intel score for a wallet from the x402
payments it SENT (paid calls, distinct counterparties, volume, recency).
Not a seller check: to vet a seller/payTo before paying, use
get_readiness_card_tool (gate) or get_provider_reputation / get_merchant_card
(seller reputation). A pure seller scores 0 here by construction and the
response says so in seller_side_hint. A Base 0x wallet is scored from the
relayer-attributed x402_base_daily rollup (90d) with the same shape; no Base
wash graph exists yet, so its wash_flag is "unknown" unless single-counterparty.
Uses a simple transparent heuristic (volume log + breadth + spend log + recency
decay) — the exact formula is returned inline as `score_model`. Returns
intel_score, the wash-discounted effective_score + wash_flag/wash_factor
(cheap Sybil signal), counts, component breakdown, and a data_available flag.
Malformed pubkeys are rejected cleanly; the failure path returns the same
shape as success.
Sourced from the cross-facilitator corpus via the public Rust HTTP endpoint
GET /v1/agents/{wallet}/x402 (backed by the x402_solana_payer_agg matview).
First paid hop is the score-only teaser GET /v1/intel/quick/{wallet} (0.001 USDC).
Optional V7 signed receipt (intel_renorm_v1_1: score_raw, confidence,
breadth_factor, wash_factor) is GET /v1/intel/trust/{wallet} (0.05 USDC).
| Name | Required | Description | Default |
|---|---|---|---|
| wallet | Yes | Wallet to score: a Solana base58 pubkey or a Base 0x address, using x402 payment-history intelligence. |
Output Schema
| Name | Required | Description |
|---|---|---|
| role | No | Observed role: "payer" | "merchant" | "both" | "unknown". |
| basis | No | Human-readable basis line. |
| chain | No | "base" when scored from the Base corpus; null on the Solana path. |
| error | No | Present only on the degraded path. |
| wallet | No | The scored wallet: Solana base58 pubkey or Base 0x address (lowercased). |
| network | No | CAIP-2 network of the corpus used, e.g. "eip155:8453"; null on the Solana path. |
| last_seen | No | ISO timestamp of last observed activity. |
| wash_flag | No | "clean" | "single_counterparty" | "unknown". |
| first_seen | No | ISO timestamp of first observed activity. |
| paid_calls | No | Observed x402 paid calls SENT (payer side). |
| total_usdc | No | Total observed USDC sent. |
| intel_score | No | Raw activity-reputation score, 0-100. |
| score_model | No | Self-describing scoring contract (scale, formula, component maxes, recency tiers). |
| wash_factor | No | Multiplier applied to intel_score for effective_score. |
| window_days | No | Observation window in days when the corpus is windowed (Base: 90); null on the Solana path. |
| score_version | No | Scoring contract version. |
| wash_coverage | No | Which wash signals exist for this chain. Base: single-counterparty only, so wash_flag is "unknown" (never "clean") for multi-counterparty wallets. |
| data_available | No | False when the corpus could not be observed (vs genuinely inactive). |
| effective_score | No | Wash-discounted score (single-counterparty fleets demoted). |
| score_components | No | Per-component breakdown: volume, breadth, spend, recency_factor. |
| seller_side_hint | No | Set when this wallet reads as a SELLER (role merchant, or payments received with no paid calls sent). intel_score here is the PAYER-side score and is 0 for a pure seller by construction; it is not a verdict about the seller. Points at get_provider_reputation / get_merchant_card (seller side) and get_readiness_card_tool (the pre-spend gate). |
| payments_received | No | Observed x402 paid calls RECEIVED (merchant side). |
| total_usdc_received | No | Total observed USDC received (merchant side). |
| is_single_counterparty | No | True if all payments went to one counterparty (Sybil signal). |
| distinct_counterparties | No | Distinct counterparties (merchants paid + payers received from). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover readOnly/idempotent, but the description adds substantial behavior: the transparent heuristic components, wash_flag/wash_factor semantics, Base vs Solana scoring paths and the 'unknown' wash_flag caveat, clean rejection of malformed pubkeys, and the guarantee that the failure path returns the same shape as success. These are exactly the traits annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and the exclusion, then layers in caveats and endpoints. It is dense and long, and the trailing endpoint/pricing details (quick teaser, signed receipt) are more operational than call-relevant, keeping it just short of maximally tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a scoring tool with dual-chain logic, wash signals, and a non-trivial failure path, the description covers inputs, semantics, edge cases, and downstream signals. With an output schema present it need not restate return fields, yet it still names the key ones, so nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and already documents that the wallet is a Solana base58 pubkey or Base 0x address, so the baseline is 3. The description adds real meaning beyond the schema by explaining how a Base 0x wallet is scored (relayer-attributed x402_base_daily rollup, 90d) versus the Solana path.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb/resource/scope: a 'PAYER-side 0-100 intel score for a wallet from the x402 payments it SENT', with the exact signals (paid calls, distinct counterparties, volume, recency). It also explicitly names the sibling it is not (seller checks -> get_readiness_card_tool, get_provider_reputation, get_merchant_card), so an agent can disambiguate without opening other schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use (free payer-side discovery) and when-NOT-to-use ('Not a seller check'), routing to named alternatives for seller vetting. It also flags the seller-scores-zero edge case so an agent won't misread a 0 as an error.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
score_wallets_batchARead-onlyIdempotentInspect
Free discovery: score up to 25 wallets in a single call (each via the same
transparent model as score_wallet_for_intel). Convenience for triaging a set of
candidate counterparties at once; `requested`/`capped` disclose any truncation.
| Name | Required | Description | Default |
|---|---|---|---|
| wallets | Yes | List of wallets (Solana base58 or Base 0x) to score in one call (hard cap 25; extras are dropped). |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Number of wallets scored. |
| error | No | Present only on the degraded path. |
| capped | No | True if the request exceeded max_per_call. |
| results | No | Per-wallet score objects (same shape as score_wallet_for_intel). |
| requested | No | Number of valid wallets requested. |
| max_per_call | No | Hard cap on wallets per batch call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only and idempotent behavior. The description adds valuable behavioral context by disclosing the 25-wallet cap, the fact that truncation is disclosed via requested/capped fields, and that this is a 'Free discovery' operation. These details go beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, immediately stating the key value ('score up to 25 wallets in a single call'). Every clause adds relevant information: the model reference, the triaging use case, and truncation disclosure behavior. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one fully-documented parameter, rich annotations, and an output schema, the description covers the remaining context an agent needs: batch size, relationship to the single-wallet tool, and truncation disclosure. Nothing critical is missing for selecting and invoking this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter, and the schema covers it fully, including wallet formats and the hard cap. The description adds a reference to the same transparent model as score_wallet_for_intel, but this is not essential parameter semantics. Since schema coverage is 100%, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool scores up to 25 wallets in a single call, using the same model as score_wallet_for_intel. It names the resource (wallets), the action (score), and the batch-specific scope, making it easy to distinguish from the single-wallet sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Convenience for triaging a set of candidate counterparties at once' provides clear context for when to use this tool. It does not explicitly state when not to use it or directly recommend the single-wallet alternative, but the reference to score_wallet_for_intel and the batch framing make the intended use reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_contribution_claimsARead-onlyIdempotentInspect
PoECX bridge: report settlements from your OWN rails (not TWZRD's paid
routes) for cross-check against TWZRD's independently-ingested x402
corpus, by on-chain signature.
A claim whose tx_signature, payer/merchant, and amount all match what
TWZRD's own ingest independently observed is materially stronger evidence
than either a bare self-report or the anonymous corpus alone — the
signature is real and on-chain, and a mismatch can't be forged to pass.
Unmatched claims are returned too, with a reason, never silently dropped.
This is a preview, not an unlock: `claimable` is always false. It exists
to let a real counterparty with its own settlement volume start feeding
PoECX before any on-chain payout path exists — see the PoECX plan.
Capped at 25 claims per call (discovery convenience, not bulk export);
extras are dropped, never silently ignored — see `capped`/`claims_requested`.
Within that cap, only the first claim per (chain, tx_signature,
transfer_index) is checked. Omitted transfer_index is the first leg
(dedup key 0). Later copies of the same leg appear in `unverified`
with reason_code `duplicate_claim` and `duplicate_of` pointing to the
zero-based first input index. Two legs of one tx count twice. This
deduplicates one preview report, not claims across separate calls.
| Name | Required | Description | Default |
|---|---|---|---|
| claims | Yes | Self-reported settlements to cross-check. Each item: {"tx_signature": str, "chain": "solana"|"base", "amount_usdc": float (optional), "transfer_index": int (optional, Solana transfer_index / Base log_index; omitted is first leg)}. Any other chain value is rejected before it ever reaches a query. | |
| wallet | Yes | The wallet these settlement claims are being reported for. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | Plain-language caveat on what this report does and doesn't prove. |
| as_of | No | ISO timestamp this report was built. Two reports of the same claims that differ only in tier after a backfill are distinguishable by as_of + classification_version. |
| capped | No | True if claims_requested exceeded max_per_call and extras were dropped. |
| wallet | No | The wallet the claims were submitted for. |
| verified | No | Per-claim detail for verified claims, each carrying observed_x402_confidence and observed_facilitator_id. |
| claimable | No | Always false today — this is a preview, not an on-chain payout unlock. |
| unverified | No | Per-claim detail for unverified claims, each with a reason. |
| max_per_call | No | Hard cap on claims per call. |
| score_version | No | Report contract version, e.g. "poecx_bridge_v0". |
| verified_usdc | No | Sum of observed USDC for verified claims across all tiers, including excluded. Use verified_usdc_x402_high for allowlist-attributed Base volume. |
| claims_verified | No | Unique chain/transaction/leg claims whose wallet and amount matched TWZRD's independently-observed corpus. |
| claims_requested | No | Number of claims in the original request, before any cap. |
| claims_submitted | No | Number of claims actually processed (after cap). |
| corpus_available | No | False when DSN/query failed so claims were not corpus-checked. Distinct from a genuine miss. |
| attestation_class | No | "CORPUS_CROSS_CHECKED" when the corpus was observed; "CORPUS_UNAVAILABLE" when lookup could not run (not a miss). Not TWZRD-attested settlement. |
| claims_duplicates | No | Repeated chain/transaction/leg claims within the capped input; included in claims_unverified and excluded from value totals. |
| claims_unverified | No | Claims not found, with a mismatched wallet or amount, or duplicated within this report. |
| classification_version | No | Base cluster-pin / KNOWN_CLUSTERS snapshot id. Moves when corpus reclassify changes high/unknown/excluded meaning; distinct from score_version. |
| verified_usdc_x402_high | No | Sum of observed USDC for verified claims whose observed_x402_confidence is high (allowlist attribution, not protocol confirmation). Excluded/unknown/untiered are omitted. |
| verified_usdc_by_confidence | No | Verified USDC split by evidence tier: "high" = relayer funding-cluster is on TWZRD's x402 operator allowlist (attribution, not protocol-level confirmation); "unknown" = observed on-chain transfer TWZRD could not confirm as x402; "excluded" = TWZRD affirmatively classified the settlement as not x402; "untiered" = chain ingest has no confidence tier (Solana). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses extensive behavioral traits beyond annotations: unmatched claims are returned with a reason, cap of 25 with dropped extras, dedup behavior with duplicate handling, preview status with claimable always false, and chain value rejection. This goes far beyond the readOnly and idempotent annotations, adding valuable context for the agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured, opening with the core purpose, then detailing cross-check strength, preview status, cap, and dedup. Every sentence adds necessary information for correct invocation, and it is front-loaded with the most critical purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of the tool, including dedup, caps, preview mode, and output schema, the description covers key behaviors: unmatched claims returned, cap behavior, dedup handling, preview status, and chain validation. It also references output fields like `capped`/`claims_requested` and `unverified`, ensuring the agent understands the complete response behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides full descriptions for both parameters, so baseline is 3. The description adds extra semantics for transfer_index dedup key and how duplicates are reported, which goes beyond the schema. It also clarifies that chain values other than solana/base are rejected. This additional context elevates the score to 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: reporting settlement claims from one's own rails for cross-check against TWZRD's independent corpus. It uses a specific verb ('report') and resource ('settlements'), and distinguishes from sibling tools by explicitly noting 'not TWZRD's paid routes' and that it is a preview. This is specific and not a tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: for a real counterparty with settlement volume to feed PoECX, and explicitly notes it is a preview, not an unlock. It also indicates alternatives indirectly by stating 'not TWZRD's paid routes' and references the PoECX plan. However, it does not name specific sibling alternatives, so it gets a 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.
twzrd_demo_gateARead-onlyIdempotentInspect
No-spend transcript of the TWZRD buyer-side x402 trust gate, a recorded example,
not a live run - discoverable at runtime with no install and no human.
Returns a deterministic transcript showing the gate's behaviour on a fixture
counterparty: the block path ABORTS and a wallet/signer is never contacted, the
allow path would proceed, and ok=true. Spends no USDC, contacts no wallet.
This call surfaces an EXTERNAL_RUN *candidate* in TWZRD's honest attribution
ledger (it carries a non-internal integration id + your run_id, tagged with your
real inbound IP). A candidate is NOT an EXTERNAL_RUN: TWZRD's operator still has
to match your run_id to a non-internal caller and confirm it.
See the returned not_external_run_proof.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | No | Optional caller-supplied run id to correlate with your transcript. Omit to have one generated for this call. | |
| integration | No | Stable label for your integration (e.g. your agent/app name). Echo it plus the returned run_id in your own transcript so a run can later be confirmed. Defaults to a generic MCP-discovery label. | mcp-agent-discovery |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Far exceeds the annotations (readOnlyHint/idempotentHint): it discloses that the block path ABORTS and no wallet/signer is contacted, the allow path proceeds, ok=true, no USDC is spent, and that the call writes an EXTERNAL_RUN *candidate* into an attribution ledger tagged with the caller's IP. It even clarifies that a candidate is not a confirmed EXTERNAL_RUN and points to not_external_run_proof — exactly the side-effect transparency a mutation-adjacent call needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and the critical 'not a live run / spends no USDC' caveats, and the ledger caveat is clearly segmented. Slightly verbose in the attribution-ledger paragraph, but every sentence carries real information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't explain return values, and it covers everything else an agent needs: what runs, what is and isn't touched, the deterministic transcript contents, and the ledger side effect plus its caveat. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents run_id and integration. The description references 'your run_id' and the integration id only in the context of the ledger entry, adding narrative context but no new syntax, format, or constraint detail beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource: a no-spend, recorded transcript of the TWZRD buyer-side x402 trust gate. It explicitly marks itself as 'a recorded example, not a live run', which cleanly separates it from live siblings like evaluate_x402_resource or low_level_preflight without needing to name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage ('discoverable at runtime with no install and no human', a no-spend demo), but never states when an agent should pick this over evaluate_x402_resource or a real gate run, nor any exclusions. Context is inferable but not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twzrd_watch_addAInspect
Register a re-call watch on a seller wallet.
After registration, TWZRD will proactively re-check the seller's trust intel
when `recheck_after_unix` elapses and POST a notification to your webhook_url
if the score/decision materially changes.
The watch routes are control-proof authenticated (fail closed): signature
and timestamp prove the caller holds the payer wallet's key. Return the
watch row with the computed recheck_after_unix timestamp so your agent
knows exactly when to expect a re-call or proactively re-check itself.
| Name | Required | Description | Default |
|---|---|---|---|
| signature | Yes | base58 ed25519 signature made with the payer wallet's key over the twzrd-watch/v1 message for action=register: the seven lines [twzrd-watch/v1, register, str(timestamp), payer_wallet, seller_wallet, webhook_url or '', ''] joined by newlines. | |
| timestamp | Yes | Unix seconds used in the signed message (freshness window: 300s). | |
| webhook_url | No | Optional HTTPS URL to POST when intel goes stale. | |
| payer_wallet | Yes | Your agent wallet address (the watcher). | |
| seller_wallet | Yes | The seller/merchant wallet to watch. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare openWorldHint=false, idempotentHint=false, destructiveHint=false. The description adds substantial context: control-proof, fail-closed authentication where signature+timestamp prove the caller holds the payer wallet's key, and the asynchronous re-call/webhook behavior. It stops short of 5 by not flagging the idempotentHint=false implication that repeated registrations create distinct watches.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then layers on lifecycle, auth, and return-value context. Sentences are dense but each carries signal; overall slightly longer than strictly necessary but well organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return structure need not be detailed, yet the description usefully notes the returned watch row and computed recheck_after_unix. Auth model, async lifecycle, and the freshness window (via schema) are covered, leaving little for an agent to guess before invoking.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 description references webhook_url and the auth fields conceptually, but adds no format, constraint, or default detail beyond what the schema already documents for the five parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb and resource ('Register a re-call watch on a seller wallet'), and the assembly of the watch/unwatch siblings (twzrd_watch_list, twzrd_watch_remove) makes the additive nature inferable from 'register'. It does not name any sibling explicitly, so it falls short of the top tier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the mechanism (proactive re-check after recheck_after_unix, webhook POST on material change), which implies when this tool is useful. However, it never states when to choose this over twzrd_watch_list/remove or other intel tools, and gives no explicit exclusions or prerequisites beyond it being a registration.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twzrd_watch_listARead-onlyIdempotentInspect
List active re-call watches for your agent wallet.
Each watch shows the seller, current score/decision, and recheck_after_unix
timestamp (untrusted V5/V6 hint). evaluateRecall / shouldRecheckTrusted is
the consumer gate; do not treat due / shouldRecheck as a trusted allow.
Control-proof authenticated (fail closed) via signature + timestamp.
| Name | Required | Description | Default |
|---|---|---|---|
| signature | Yes | base58 ed25519 signature made with the payer wallet's key over the twzrd-watch/v1 message for action=list: the seven lines [twzrd-watch/v1, list, str(timestamp), payer_wallet, '', '', ''] joined by newlines. | |
| timestamp | Yes | Unix seconds used in the signed message (freshness window: 300s). | |
| payer_wallet | Yes | Your agent wallet address. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint), yet the description adds material context: control-proof authentication via signature + timestamp with fail-closed behavior, and the warning that recheck_after_unix is an untrusted V5/V6 hint. These are genuinely non-obvious behavioral traits beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then layers return contents, the consumption caveat, and the auth model in short sentences. Dense but each line earns its place; internal jargon (V5/V6) is the only minor drag.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be fully spelled out, yet the description still names the key fields. Auth requirements and the untrusted-hint caveat close the main gaps; only the explicit alternative-routing guidance is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the signature message format and freshness window already documented in the schema. The description only echoes 'signature + timestamp' at a high level, adding no syntax or format detail beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List active re-call watches') scoped to 'your agent wallet,' which is unambiguous against read-oriented siblings. It does not, however, explicitly name or contrast with twzrd_watch_add/remove, so sibling differentiation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives important interpretive guidance ('do not treat due / shouldRecheck as a trusted allow' and points to evaluateRecall / shouldRecheckTrusted as the real gate), which steers correct downstream use. But it never states when to call this tool versus alternatives such as twzrd_watch_add or twzrd_watch_remove, leaving the primary when-to-use question to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twzrd_watch_removeAInspect
Deactivate a re-call watch by ID. payer_wallet must match the owner.
Control-proof authenticated (fail closed): signature + timestamp prove the
caller holds the payer wallet's key before the row is touched.
| Name | Required | Description | Default |
|---|---|---|---|
| watch_id | Yes | Watch ID from twzrd_watch_list. | |
| signature | Yes | base58 ed25519 signature made with the payer wallet's key over the twzrd-watch/v1 message for action=remove: the seven lines [twzrd-watch/v1, remove, str(timestamp), payer_wallet, '', '', str(watch_id)] joined by newlines. | |
| timestamp | Yes | Unix seconds used in the signed message (freshness window: 300s). | |
| payer_wallet | Yes | Your agent wallet address (must match the watch owner). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover openWorldHint, idempotentHint and destructiveHint, so the description adds meaningful context: the operation is control-proof authenticated, fails closed, and requires a signature + timestamp proving key possession before the row is touched. It stops short of 5 because it does not state the failure mode concretely (error vs no-op) or that deactivation is state-changing and not reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and constraint before the authentication detail; nothing is padded. The only minor waste is restating the payer_wallet ownership rule already present in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be explained, and all four required parameters are documented in the schema. The description completes the picture by covering the auth model, though it omits any note on idempotency or what the caller observes after a successful deactivation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including the exact signed-message format, the freshness window, and the owner-match requirement for payer_wallet. The description's "payer_wallet must match the owner" largely restates what the schema already documents, so it adds little beyond the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("Deactivate") and resource ("re-call watch") with an ID scoping qualifier, which cleanly separates it from the watch_add and watch_list siblings by action. It does not explicitly name or contrast with any sibling, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description supplies a real prerequisite ("payer_wallet must match the owner") but never states when this tool should be chosen over twzrd_watch_add, twzrd_watch_list, or any alternative, nor any exclusions. Usage is implied by the verb rather than guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_receiptARead-onlyIdempotentInspect
Free utility: offline-verify a portable V7 trust receipt (earlier V5/V6 receipts
still verify), the "after you pay" half of the loop.
Recomputes the Keccak256 leaf from the receipt's preimage (tamper-evidence) AND
verifies the Ed25519 signature against the published TWZRD receipt-signing key
(authenticity). Returns valid/leaf_valid/signature_valid plus the recomputed
leaf and any errors. Pure and offline — no DB, no network, no payment.
Pass the entire PaidReceipt object you were issued. Trust is anchored on the
published key (or expected_pubkey), NOT on whatever pubkey the receipt carries.
max_age_seconds: optional freshness gate (replay protection). Same semantics
as the Python library verify_paid_receipt(..., max_age_seconds=...) and the
standalone CLI --max-age.
| Name | Required | Description | Default |
|---|---|---|---|
| receipt | Yes | The full signed receipt object (leaf + preimage + signature + signing_pubkey) returned by the paid /v1/intel/trust surface (V7; earlier V5/V6 receipts still verify). | |
| expected_pubkey | No | Override the trusted signing pubkey to verify against (default: the published TWZRD receipt key). | |
| max_age_seconds | No | If > 0, reject the receipt if its preimage.timestamp_unix is older than this many seconds (replay/freshness protection, same as CLI --max-age and library). | |
| require_signature | No | Require and verify the Ed25519 signature (default true). Set false only to inspect an unsigned preview. |
Output Schema
| Name | Required | Description |
|---|---|---|
| valid | No | True iff the leaf recomputes AND the signature verifies against the trusted key. |
| domain | No | The V5 domain detected in the preimage. |
| errors | No | Issues found; empty on success. |
| leaf_valid | No | True iff the Keccak256 leaf recomputes from the preimage. |
| provided_leaf | No | The normalized leaf supplied in the receipt. |
| signing_pubkey | No | The pubkey carried by the receipt. |
| trusted_pubkey | No | The published key authenticity was checked against. |
| recomputed_leaf | No | The leaf recomputed from the preimage (0x...). |
| signature_valid | No | True iff the Ed25519 signature verifies; None if the signature check was skipped. |
| signature_checked | No | Whether the signature was checked (require_signature). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint/idempotentHint, but the description adds substantial context: pure and offline (no DB/network/payment), tamper-evidence vs authenticity semantics, the return fields, and the key-anchoring rule (trust comes from the published key, not the receipt's pubkey). Minor omission: it never states the effect of require_signature beyond what the schema says.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and mechanism, then layers in guardrails; every sentence carries information. Mild padding in phrases like 'Free utility' and 'the after you pay half of the loop' keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given annotations, 100% schema coverage, and an output schema, the description covers the remaining gaps: offline/pure nature, key-anchoring trust model, version compatibility, and freshness semantics. An agent has everything needed to call it correctly without opening the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning: max_age_seconds is tied to the library/CLI equivalents and framed as replay freshness gating, and expected_pubkey is explained as the trust anchor override. It does not add anything for require_signature beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (offline-verify) and resource (portable V7 trust receipt), plus the exact mechanisms (Keccak256 leaf recomputation, Ed25519 signature check). It is clearly distinguished from siblings like verify_root_inputs and verify_x402_settled_claim by scoping itself to receipt verification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Frames itself as the 'after you pay' half of the loop and instructs the caller to pass the entire PaidReceipt object, with a note that V5/V6 receipts still verify. Clear context for when to reach for it, though it stops short of naming when another sibling is the better choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_root_inputsBRead-onlyIdempotentInspect
Independent root verification: recomputes the leaves, dataset hash and root from the public root data.
| Name | Required | Description | Default |
|---|---|---|---|
| root_seq | No | Specific root sequence to verify. If omitted, best-effort resolution via resource metadata or latest. | |
| resource_name | No | Legacy on-chain protocol resource (deposit/claim/settle) for auto-detection and seq hints. | |
| seller_wallet | No | Seller wallet for legacy on-chain protocol resource detection. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message on the ERROR path; null on PASS/FAIL. |
| status | No | "PASS" = recomputed GLOBAL_V5 leaves + dataset_hash + sorted-pair root match the published values. "FAIL" = mismatch (do not trust the root). "ERROR" = could not run (fetch failure / missing data). |
| root_seq | No | Root sequence number that was verified. |
| leaf_count | No | Number of leaves (users) in the verified root. |
| onchain_match | No | Always null: this tool does NOT read Solana/the AO program. Use server_consistent for the recompute result; do not gate on-chain actions on this field expecting a chain anchor. |
| leaf_hash_match | No | True iff every server-provided leaf_hash matches the locally recomputed value. |
| recomputed_root | No | Independently recomputed sorted-pair keccak256 merkle root (hex). |
| server_consistent | No | True iff the recomputed root/dataset_hash matches the value the SERVER published alongside its own leaves (self-consistency). NOT an on-chain check. Null when not comparable. |
| recomputed_dataset_hash | No | Independently recomputed keccak-concat dataset_hash (hex). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds that the verification is independent and recomputes values from public data, which clarifies the trust model, but it does not cover permissions, rate limits, or return behavior beyond what the output schema provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It is appropriately concise, though its brevity leaves little room for structural aids such as usage context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema and annotations covering safety and idempotence, so return-value and safety details need not be repeated. However, the description omits any usage guidance or prerequisites, which would be valuable for an agent choosing among several verification tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already fully documents all three optional parameters. The description adds no parameter-level meaning, which is acceptable given the schema's completeness, but it does not enhance semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a clear verb ('verification') and specific method ('recomputes the leaves, dataset hash and root from the public root data'). It distinguishes the operation as root verification, but does not explicitly differentiate itself from sibling verification tools like verify_receipt or verify_x402_settled_claim.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives. It implies verification is needed, but does not state prerequisites, exclusions, or when a different verify tool is more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_x402_settled_claimARead-onlyIdempotentInspect
Verify a receipts-ledger settlement; this is evidence, not a spend decision.
| Name | Required | Description | Default |
|---|---|---|---|
| settlement_tx | Yes | Solana transaction signature only. No claim body is accepted. Verifies that signature against x402_payment_receipts and a freshly fetched finalized transaction: match requires the only positive USDC balance change to credit that row's merchant for that row's amount, and the only USDC debit to be that amount from that row's payer, which match returns as payer. Returns match, mismatch, or unknown. Unknown does not block payment. |
Output Schema
| Name | Required | Description |
|---|---|---|
| payer | No | On match, the wallet whose USDC paid: the transaction's only USDC debit, equal to the ledger payer. Reimburse this wallet, never one a claimant names. |
| digest | No | |
| reason | No | |
| status | Yes | Witness comparison only. Unknown is unavailable evidence; no status is a payment decision. |
| finalized | No | |
| artifact_id | No | |
| settlement_tx | Yes | |
| session_binding | No | |
| self_attested_merchant | No | On match, whether the verified USDC credit owner is intel's pay_to. |
| merchant_credit_verified | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only and idempotent behavior; the description adds the useful context that the result is evidentiary rather than an authorization to spend. It does not disclose more about outcome handling, but the parameter schema covers match/mismatch/unknown.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tight sentence, front-loaded with the action and ending with a meaningful boundary ('not a spend decision'). No filler or repetition of schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only verification with a rich schema and output schema, the description is mostly sufficient. The only notable gap is not addressing how it differs from verify_receipt, though this is minor given the clear scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter's description is exceptionally detailed, covering accepted input, verification logic, and return values. The tool description adds no parameter-level meaning, so the schema-heavy baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Verify a receipts-ledger settlement') and adds a clarifying role ('evidence, not a spend decision'). It does not explicitly distinguish itself from the sibling verify_receipt, so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'this is evidence, not a spend decision' gives the agent a clear caution about how to treat the result, but does not state when to prefer this tool over verify_receipt or other siblings. The usage context is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
- Changed
get_provider_reputation1 field changed- changed
Input schema / properties / merchant / descriptionPrevious value: -"Seller/merchant Solana wallet public key (the pay_to address) to score on inbound corpus reputation."New value: +"Seller/merchant pay_to address to score on inbound corpus reputation: a Solana base58 wallet or a Base 0x address."
- Changed
get_readiness_card_tool1 field changed- changed
Input schema / properties / seller_wallet / descriptionPrevious value: -"Seller's Solana base58 wallet (32-44 chars) for the listing or endpoint. Provide this OR resource_name. CRITICAL: never pass OpenAPI templates (:pubkey, {pubkey}, {seller_wallet}, SELLER_WALLET, PAY_TO_WALLET) — use accepts[].payTo from a 402 challenge."New value: +"Seller payTo for the listing or endpoint: a Solana base58 wallet (32-44 chars) or a Base 0x address. Provide this OR resource_name. CRITICAL: never pass OpenAPI templates (:pubkey, {pubkey}, {seller_wallet}, SELLER_WALLET, PAY_TO_WALLET) — use accepts[].payTo from a 402 challenge."
- Changed
low_level_preflight1 field changed- changed
Input schema / properties / seller_wallet / descriptionPrevious value: -"Seller's Solana wallet public key for reputation and spend checks."New value: +"Seller payTo (Solana base58 or Base 0x address) for reputation and spend checks."
1 tool update
- Changed
verify_root_inputs2 fields changed- changed
Input schema / properties / resource_name / descriptionPrevious value: -"WZRD protocol resource (deposit/claim/settle etc.) for auto-detection and seq hints."New value: +"Legacy on-chain protocol resource (deposit/claim/settle) for auto-detection and seq hints." - changed
Input schema / properties / seller_wallet / descriptionPrevious value: -"Seller wallet for WZRD protocol resource detection."New value: +"Seller wallet for legacy on-chain protocol resource detection."
1 tool update
- Changed
get_readiness_card_tool1 field changed- changed
Output schema / properties / root_provenance / descriptionPrevious value: -"WZRD protocol root metadata (for deposit/claim/settle resources): latest_root_seq, dataset_hash (if known), leaf_version (GLOBAL_V5), verification_status, onchain_match (null = call verify_root_inputs before on-chain action), market_velocity (when the market data service is configured, for cross-referencing on-chain velocity/attention signals with the root's attention_bonus). Auto-populated on protocol keywords/mints/categories. Complements the verify_root_inputs tool for independent GLOBAL_V5 leaf + dataset + sorted-pair root recompute from public leaves. Null/absent on non-protocol resources."New value: +"Legacy root metadata for the parked on-chain protocol's deposit/claim/settle resources only: latest_root_seq, dataset_hash (if known), leaf_version, verification_status, onchain_match (null = call verify_root_inputs before any on-chain action), and market_velocity when that service is configured. Not part of the pre-spend check for x402 sellers. Null/absent on every other resource."
1 tool update
- Changed
check_listing4 fields changed- added
Input schema / properties / declared_unit_price / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - changed
Input schema / properties / declared_unit_price / descriptionPrevious value: -"Optional unit price the seller is asking, in USD. Above the card's advertised price is refused (phantom_markup_detected); below it is discount_unverified and needs approval."New value: +"Optional unit price the seller is asking, in USD, as a number or text, e.g. 78, 78.00, $78 or 78 USD; another currency is invalid. Above the card's advertised price is refused (phantom_markup_detected); below it is discount_unverified and needs approval." - removed
Input schema / properties / declared_unit_price / typeRemoved value: -"string" - changed
Input schema / properties / product_url / descriptionPrevious value: -"The store product URL the agent is about to buy from. Matched exactly against the published card's next_hop URL, the same rule as the paid checkout brief."New value: +"The store product URL the agent is about to buy from. Matched against the published card's next_hop URL, ignoring scheme, host case, query, fragment and a trailing slash. Another host is unknown_seller; a miss on the card's own site also returns covered_product_url."
1 tool update
- Changed
get_readiness_card_tool6 fields changed- changed
Output schema / properties / as_of / descriptionPrevious value: -"ISO-8601 of data_as_of_unix. Null when the subject was never measured."New value: +"ISO-8601 of data_as_of_unix (same back-fill rule: can be card build time on a scored read). Null when the subject was never measured." - changed
Output schema / properties / data_as_of_unix / descriptionPrevious value: -"Seller last-activity unix when known. Null on unknown_subject / insufficient_signal / evaluation_failed — never card-build time. Card TTL is recheck_after_unix."New value: +"Seller last-activity unix when known. Null on unknown_subject / insufficient_signal / evaluation_failed (never wall clock there). On a scored read with no last-activity anchor it IS the card build time (the live read ran at request time); the seller clock that is never build time is observed_at. Card TTL is recheck_after_unix." - changed
Output schema / properties / recheck_after_unix / descriptionPrevious value: -"UNIX timestamp after which this intel is stale. ADVISORY AND UNSIGNED on a paid receipt -- it is outside the signed leaf, so a receipt holder can extend it and the receipt still verifies. Enforce your own policy via verify_receipt(max_age_seconds=...), which checks the SIGNED preimage.timestamp_unix."New value: +"UNIX timestamp after which this intel is stale. Advisory. On a paid V7 receipt it is leaf-bound, so an edit fails verification; on V5/V6 receipts it is outside the signed leaf and a holder can extend it. Either way, enforce your own policy via verify_receipt(max_age_seconds=...), which checks the SIGNED preimage.timestamp_unix." - changed
Output schema / properties / recheck_hint / descriptionPrevious value: -"One-line hint: re-verify via GET /v1/intel/trust/{pubkey}. Do not gate solely on recheck_after_unix -- it is unsigned on a paid receipt; use your own max_age_seconds."New value: +"One-line hint: re-verify via GET /v1/intel/trust/{pubkey}. Do not gate solely on recheck_after_unix (unsigned on V5/V6 receipts); use your own max_age_seconds." - changed
Output schema / properties / score_decay_model / descriptionPrevious value: -"step:<=7d=1.0,<=30d=0.8,<=90d=0.5,>90d=0.25 (the recency decay on paid scores). ADVISORY AND UNSIGNED on a paid receipt."New value: +"step:<=7d=1.0,<=30d=0.8,<=90d=0.5,>90d=0.25 (the recency decay on paid scores). Advisory. Leaf-bound on a paid V7 receipt; unsigned on V5/V6 receipts." - changed
Output schema / properties / staleness_days / descriptionPrevious value: -"Recommended re-check cadence in days (7 high-quality, 3 partial/stale). ADVISORY AND UNSIGNED on a paid receipt."New value: +"Recommended re-check cadence in days (7 high-quality, 3 partial/stale). Advisory. Leaf-bound on a paid V7 receipt; unsigned on V5/V6 receipts."
3 tool updates
- Changed
twzrd_watch_add3 fields changed- added
Input schema / properties / signatureAdded value: +{ + "description": "base58 ed25519 signature made with the payer wallet's key over the twzrd-watch/v1 message for action=register: the seven lines [twzrd-watch/v1, register, str(timestamp), payer_wallet, seller_wallet, webhook_url or '', ''] joined by newlines.", + "title": "Signature", + "type": "string" +} - added
Input schema / properties / timestampAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + } + ], + "description": "Unix seconds used in the signed message (freshness window: 300s).", + "title": "Timestamp" +} - changed
Input schema / requiredPrevious value: -[ - "payer_wallet", - "seller_wallet" -]New value: +[ + "payer_wallet", + "seller_wallet", + "signature", + "timestamp" +]
- Changed
twzrd_watch_list3 fields changed- added
Input schema / properties / signatureAdded value: +{ + "description": "base58 ed25519 signature made with the payer wallet's key over the twzrd-watch/v1 message for action=list: the seven lines [twzrd-watch/v1, list, str(timestamp), payer_wallet, '', '', ''] joined by newlines.", + "title": "Signature", + "type": "string" +} - added
Input schema / properties / timestampAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + } + ], + "description": "Unix seconds used in the signed message (freshness window: 300s).", + "title": "Timestamp" +} - changed
Input schema / requiredPrevious value: -[ - "payer_wallet" -]New value: +[ + "payer_wallet", + "signature", + "timestamp" +]
- Changed
twzrd_watch_remove3 fields changed- added
Input schema / properties / signatureAdded value: +{ + "description": "base58 ed25519 signature made with the payer wallet's key over the twzrd-watch/v1 message for action=remove: the seven lines [twzrd-watch/v1, remove, str(timestamp), payer_wallet, '', '', str(watch_id)] joined by newlines.", + "title": "Signature", + "type": "string" +} - added
Input schema / properties / timestampAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + } + ], + "description": "Unix seconds used in the signed message (freshness window: 300s).", + "title": "Timestamp" +} - changed
Input schema / requiredPrevious value: -[ - "watch_id", - "payer_wallet" -]New value: +[ + "watch_id", + "payer_wallet", + "signature", + "timestamp" +]
3 tool updates
- Changed
get_readiness_card_tool2 fields changed- changed
Input schema / properties / queried_pubkey / descriptionPrevious value: -"Consumer pubkey for velocity attribution (echoed on output when provided)."New value: +"Consumer pubkey, echoed on output when provided (attribution only)." - changed
Output schema / properties / queried_pubkey / descriptionPrevious value: -"Consumer pubkey echoed when provided on input (velocity attribution; not a settle gate)."New value: +"Consumer pubkey echoed when provided on input (attribution only; not a settle gate)."
- Changed
low_level_preflight1 field changed- changed
Output schema / properties / suggest_full_report / descriptionPrevious value: -"Whether to upsell the paid v6-receipt report."New value: +"Whether to upsell the paid V7 receipt report."
- Changed
verify_receipt1 field changed- changed
Input schema / properties / receipt / descriptionPrevious value: -"The full v6 PaidReceipt object (leaf + preimage + signature + signing_pubkey) returned by the paid /v1/intel/trust surface."New value: +"The full signed receipt object (leaf + preimage + signature + signing_pubkey) returned by the paid /v1/intel/trust surface (V7; earlier V5/V6 receipts still verify)."
1 tool update
- Changed
check_listing2 fields changed- changed
Input schema / properties / declared_unit_price / descriptionPrevious value: -"Optional unit price the seller is asking, in USD. Above the card's advertised price is refused (phantom_markup_detected); below it is discount_unverified."New value: +"Optional unit price the seller is asking, in USD. Above the card's advertised price is refused (phantom_markup_detected); below it is discount_unverified and needs approval." - changed
Output schema / properties / needs_approval / descriptionPrevious value: -"True for every result except advertised, and for an advertised card that advertises nothing, advertises no price, or cannot check the declared price: a human approves before any spend."New value: +"True for every result except advertised, and for an advertised card that advertises nothing, advertises no price, cannot check the declared price, or is declared below its advertised price: a human approves before any spend."
1 tool update
- Changed
check_listing1 field changed- changed
Output schema / properties / needs_approval / descriptionPrevious value: -"True for every result except advertised, and for an advertised card that advertises nothing or cannot check the declared price: a human approves before any spend."New value: +"True for every result except advertised, and for an advertised card that advertises nothing, advertises no price, or cannot check the declared price: a human approves before any spend."
3 tool updates
- Added
check_listing - Added
get_publication - Added
get_shopping_check
2 tool updates
- Changed
get_readiness_card_tool7 fields changed- added
Output schema / properties / basisAdded value: +{ + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Typed evidence entries {class, kind, source, observed_at, weight, ...}; observed_at is null with observed_at_null_reason on an honest-null card.", + "title": "Basis" +} - added
Output schema / properties / corpus_complete_through_unixAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Behavioral corpus coverage watermark, or null when none is plumbed.", + "title": "Corpus Complete Through Unix" +} - added
Output schema / properties / expires_atAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "ISO-8601 card validity end (an expired card is an absent card).", + "title": "Expires At" +} - added
Output schema / properties / issued_atAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "ISO-8601 card issue time.", + "title": "Issued At" +} - added
Output schema / properties / null_reasonAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Why score is null: \"unknown_subject\" | \"insufficient_signal\" | \"evaluation_failed\" | \"no_subject\" (no counterparty was named at all). Null when scored.", + "title": "Null Reason" +} - added
Output schema / properties / scoreAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Draft-02 score 0..1, or null when no evidence was measured (see null_reason). An assessor never fabricates this; the legacy trust_score keeps a cautious default for old consumers.", + "title": "Score" +} - added
Output schema / properties / seller_wallet_rejectedAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Set when the seller_wallet you sent was discarded: {\"value\", \"reason\": \"template_placeholder\" | \"not_a_wallet_address\"}. With no resource_name/resource_url the card is decision=block, null_reason=no_subject, reason_codes NO_COUNTERPARTY (+ PLACEHOLDER_SELLER_WALLET). Fix the input; this is not a verdict about any seller.", + "title": "Seller Wallet Rejected" +}
- Changed
score_wallet_for_intel1 field changed- added
Output schema / properties / seller_side_hintAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Set when this wallet reads as a SELLER (role merchant, or payments received with no paid calls sent). intel_score here is the PAYER-side score and is 0 for a pure seller by construction; it is not a verdict about the seller. Points at get_provider_reputation / get_merchant_card (seller side) and get_readiness_card_tool (the pre-spend gate).", + "title": "Seller Side Hint" +}
1 tool update
- Changed
verify_x402_settled_claim2 fields changed- changed
Input schema / properties / settlement_tx / descriptionPrevious value: -"Solana transaction signature only. No claim body is accepted. Verifies the one known quick-settlement claim against the TWZRD ledger and freshly fetched finalized transaction. Returns match, mismatch, or unknown. Unknown does not block payment."New value: +"Solana transaction signature only. No claim body is accepted. Verifies that signature against x402_payment_receipts and a freshly fetched finalized transaction: match requires the only positive USDC balance change to credit that row's merchant for that row's amount, and the only USDC debit to be that amount from that row's payer, which match returns as payer. Returns match, mismatch, or unknown. Unknown does not block payment." - added
Output schema / properties / payerAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "On match, the wallet whose USDC paid: the transaction's only USDC debit, equal to the ledger payer. Reimburse this wallet, never one a claimant names.", + "title": "Payer" +}
1 tool update
- Added
verify_x402_settled_claim
Related MCP Connectors
Verify x402 payment endpoints before an AI agent pays: scam scan, on-chain checks, trust scores.
x402 seller trust for AI agents: verify on-chain revenue, check delivery, diagnose listings.
Check any x402 endpoint before your AI agent pays it: trust grade, verdict, and hijack checks.
Pre-payment checks for AI agents: x402 quotes, untrusted prompts and audit receipts.
Related MCP Servers
- AlicenseAqualityAmaintenanceThis tool library gives AI agents a discovery and "know before you pay" layer to find and check the historic reputation of endpoints in the x402 ecosystem.415203 npm1MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to run a free fail-closed preflight gate on x402 payment challenges and transactions before signing, plus five USDC-paid on-chain truth checks covering arbitrage profitability, token safety, swap routing, quote validation, and trade sizing. Each check returns a verdict with pinned-block evidence and a verifiable receipt.Apache 2.0
- FlicenseNot gradedqualityCmaintenanceProvides paid and free tools for AI agents to buy from or sell to other agents over x402, including discovering sellers, verifying on-chain payment histories, running test purchases, and registering sellers for audited listings.-
- AlicenseBqualityAmaintenanceZero-key on-chain intelligence for Base, Ethereum, and Solana. Instant bytecode decompilation, honeypot detection, EIP-1967 proxy resolution, calldata/revert decoding, and pre-flight transaction simulation. No API keys or wallet connection required.131MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.