TWZRD Agent Intelligence
Server Details
Pre-spend x402 reputation from observed behavior, plus portable signed V6 receipts.
- Status
- Healthy
- 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 22 tools
Several tools occupy nearly the same slot: evaluate_x402_resource, get_readiness_card_tool, and low_level_preflight all produce a block/warn/allow spending decision, and get_provider_reputation vs get_merchant_card both profile the inbound payment graph of a seller wallet. The long descriptions partially compensate, but an agent will still struggle to pick the correct one without reading deeply.
The majority are readable verb_noun get_* names, but the set mixes conventions: bare verbs (compare_wallets, evaluate_x402_resource, verify_receipt), an is_ prefix (is_wash_fleet), and the twzrd_watch_* / twzrd_demo_gate prefix group. Everything is snake_case and mostly predictable, so it is not chaotic, just inconsistent.
22 tools is at the heavy end for a single MCP server, and several free discovery variants (score_wallet_for_intel, score_wallets_batch, compare_wallets, get_poec_score, get_merchant_card, get_provider_reputation) could plausibly be consolidated. Each has a distinct query shape, but the count feels higher than the core workflow requires.
The core trust-intel lifecycle is well covered: pre-spend readiness (readiness/preflight/block/warn/allow), post-payment verification (verify_receipt), ongoing monitoring (twzrd_watch_add/list/remove), and wallet/seller scoring. Minor gaps remain: the paid full trust report is only referenced as an HTTP endpoint rather than exposed as a tool, and get_solana_market_status is peripheral to the stated domain.
Available Tools
22 toolscompare_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_resourceARead-onlyIdempotentInspect
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.
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?
Adds substantial behavioral context beyond the readOnlyHint/idempotentHint annotations: decision semantics, wash_flagged hard-stops, price_kind caveats, and the important warning that 'unknown' is not a trust verdict because a seller can spoof non-402 responses. No contradiction with annotations; the revenue path reads as guidance for the agent, not as the tool itself making payments.
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 definition is front-loaded with a good summary and uses clear sections. However, key caveats are repeated multiple times: wash_flagged appears three times, the leftover/price caveat appears in both the opening and hard-stops, and teaser_url pricing appears twice. This redundancy makes it less concise than ideal.
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 description covers decision interpretation, dangerous edge cases, price semantics, hard-stops, and the revenue path for warn outcomes. Since an output schema exists, return-value explanation is not needed. The only undefined notions like 'agent policy' and 'the cap' are external policy concepts rather than missing tool-invocation detail.
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 all parameters. The description mostly repeats price_usdc and resource_url semantics already present in the schema, and adds nothing new about method or agent_intent. 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 states a specific behavior: fetches resource_url, extracts the seller wallet from the 402 accepts array, runs TWZRD preflight, and returns a spending decision. It is clear and resource-specific, though it does not explicitly differentiate itself from sibling tools like low_level_preflight or twzrd_demo_gate.
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?
Provides explicit action guidance for each decision value: allow, warn, block, unknown. Hard-stops and revenue-path instructions are also given. However, it does not state when not to use this tool or name alternatives, so some sibling-routing 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_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_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
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?
ReadOnly/idempotent hints are backed and heavily extended by the prose: the card is down-only and never returns allow, wash_flagged is tri-state with refusal behavior, and reason collapses edge cases into the three decision values. This gives the agent actionable knowledge about the output that annotations alone cannot.
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 and long, but front-loaded with the purpose and inputs; decision semantics and special-value caveats are grouped at the end. It could be trimmed, but nearly every sentence carries domain-specific operational 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?
Given an output schema exists and the tool is a read-only card, the description is complete: input resolution, default vs full behavior, key output fields, decision routing, tri-state flag semantics, and caveats about price fields are all covered. There are no obvious gaps that would prevent correct invocation.
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 schema already documents all three parameters at 100% coverage, and the description adds clarifying behavior on top: dual wallet/resource_id resolution via PR-3, full vs compact output surfaces, and what full=true does with catalog services. It does not add much syntax-level detail, but the extra meaning is useful.
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 names the exact resource ('merchant card') and the exact data observed ('inbound payment-graph quality around a Solana receive wallet'), so an agent immediately knows what this tool computes. It also adds negative scope ('Does NOT claim service quality') and a decision surface, distinguishing it from service-quality or business-attestation siblings.
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 clear invocation context: pass wallet and/or resource_id, default is compact, full=true pulls catalog services, and consumers should route on next_action.decision. It does not name sibling tools or provide an explicit when-not-to-use statement, so it stops short of full alternative routing guidance.
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 Solana wallet public key (the pay_to address) to score on inbound corpus reputation. |
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?
Beyond the readOnly/idempotent annotations, the description discloses critical runtime behavior: wash_flagged is tri-state where null means 'never evaluated, not clean', fail-open behavior on DB gaps returns an 'unevaluated' verdict rather than a clean one, and wash_flagged=true blocks preflight/buyer refusal. This is exactly the kind of non-obvious behavior an agent 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?
The description is dense but purposeful: purpose, output semantics, fallback behavior, sibling contrast, and paid alternatives are all packed in without fluff. A few parenthetical asides make it slightly run-on, but every sentence earns its place and the core purpose is front-loaded.
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, idempotent tool with an output schema, the description is complete. It covers call semantics, failure behavior, pricing, and the relationship to the paid API, leaving no material gap in what an agent needs to invoke or interpret 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 schema already documents the sole parameter 'merchant' with 100% coverage, so the description does not need to carry much weight. It adds the useful nuance that the merchant is the pay_to address scored on 'inbound corpus reputation', but no new format or constraints 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?
The description opens with a specific verb and resource: 'free discovery: corpus-backed SELLER reputation for a merchant/provider wallet.' It names the exact questions answered and the computed signals (wash_label, reputation tier, wash_flagged), and explicitly differentiates from score_wallet_for_intel as the seller-side complement to the payer side.
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 clearly frames this as the free seller signal, states that it complements score_wallet_for_intel, and names the paid upgrade paths with prices. It does not explicitly state when NOT to use it relative to siblings like is_wash_fleet or low_level_preflight, so exclusion guidance is slightly incomplete.
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.
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
when you have a V6 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'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. | |
| queried_pubkey | No | Consumer pubkey for velocity attribution (echoed on output when provided). | |
| marketplace_score | No | Optional upstream marketplace trust score (0-100) to blend into preflight context. |
Output Schema
| Name | Required | Description |
|---|---|---|
| proof | No | Proof block: v5_receipt_upsell_available, has_v5_receipts, receipt_endpoint, known_seller_wallets, provider_reputation. |
| stale | No | True when uploaded-corpus age exceeds the high-confidence re-check window. 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. |
| 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). |
| observed_at | No | ISO-8601 watermark of the uploaded Dune complete day (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. |
| recheck_hint | No | 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. |
| 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 (velocity attribution; not a settle gate). |
| staleness_days | No | Recommended re-check cadence in days (7 high-quality, 3 partial/stale). ADVISORY AND UNSIGNED on a paid receipt. |
| corpus_age_days | No | Whole days since corpus_complete_day. |
| data_as_of_unix | No | Anchor time for the staleness calculation (seller last activity or card build time). |
| paid_price_usdc | No | Price of the optional V7 receipt in USDC (0.05). |
| root_provenance | No | 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. |
| 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 AND UNSIGNED on a paid receipt. |
| 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 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. |
| corpus_complete_day | No | Uploaded corpus complete day (YYYY-MM-DD). Snapshot boundary, not live ingest. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and idempotentHint annotations, the description explains that the result is advisory, that decision=block means do_not_pay, that wash_flagged=true never soft-allows, and that trust_score is 'a free heuristic, NOT the full corpus.' It also discloses the optional next_action enrollment handoff and states the aop_bind registry 'never mutates decision / can_spend.' This is substantial behavioral context consistent with 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 long but well-structured with headers, a front-loaded purpose, and compact bullet lists. Some redundancy exists—'wash_flagged=true never soft-allows' and 'free'/'advisory' appear more than once—so it is not maximally concise, but the density and organization justify its length.
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 complex advisory tool, the description covers when to call it, hard stops, decision semantics, return fields, next-step handoffs, pricing, and safety caveats. An output schema exists, so full return-value documentation is not required in the description. Nothing needed to invoke it correctly appears to be 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 schema already documents all eight parameters. The description adds extra semantic guidance beyond the schema by saying 'Pass seller_wallet OR resource_name,' warning against pasting path templates as seller_wallet, and clarifying that 'Unlabeled leftover 0.05 / leftover=0 is not a unit price.' It does not restate every param, but it strengthens the most error-prone ones.
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 'PRIMARY free pre-spend gate (advisory)' and immediately specifies the action context: 'before any x402 payment to a seller/resource.' It states the tool returns a readiness assessment rather than executing payment, and differentiates itself from verify_receipt by saying that sibling is 'for signed receipts only.' This is a specific verb+resource with sibling differentiation.
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 explicit: 'When to use: before any x402 payment to a seller/resource.' It also gives a clear exclusion: 'When not to use: after you already decided to refuse; use verify_receipt for signed receipts only.' The description even routes follow-up behavior to verify_receipt and twzrd_watch_add, so an agent knows exactly when this gate applies.
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 so MCP stays at 24 tools. 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 adds behavioral context beyond that: it mentions the wash overlay is Solana-only (the only wash graph), while Base and Polygon listings carry wash_unknown and remain wash_unknown. It also states the query parameters mirror GET /v1/intel/x402-directory, which signals expected API alignment. It doesn't fully describe output shape or pagination, but output schema exists and the behavioral semantics of filtering/overlay are clearly disclosed.
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 reasonably concise and front-loaded with the core purpose, but it includes some potentially over-technical detail (e.g., EIP-3009 corpus membership, settlement reputation on pay_to) that may be useful but somewhat dense. It earns its place because it explains the tool's role and exclusions, but several sentences could be tightened for clarity without losing 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?
Given the tool has an output schema and full schema descriptions for its 3 parameters, the description provides adequate operational context: it clarifies the data domain, the indexing key (payTo), the wash-flag semantics across chains, and explicitly routes the caller away from the wrong endpoints. It doesn't mention response shape or error cases, but the output schema covers return values, and the description's exclusions plus schema are sufficient for correct invocation.
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 all three parameters (limit, source, flagged_only) with defaults and ranges. The description adds high-level context that query params mirror the HTTP endpoint but doesn't add deeper semantics beyond what the schema provides. Baseline 3 is appropriate because the schema does the heavy lifting.
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 function: it provides a wash overlay on ingested PayAI/CDP/Agentic listings indexed by payTo, and explicitly distinguishes this from the HTTP GET /v1/intel/resources resource join surface and from GET /v1/intel/bazaar/offers (TWZRD Bazaar catalog) and 402 extensions.bazaar. This differentiates it well from sibling tools and gives an agent a specific action and resource.
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 explicit guidance: 'Use this tool when you need the ingested listing overlay indexed by payTo', and explicitly states what not to use ('Not GET /v1/intel/bazaar/offers (TWZRD Bazaar catalog) and not 402 extensions.bazaar'). It names alternatives (GET /v1/intel/resources) and gives the reason those alternatives exist, so an agent knows when this tool is appropriate.
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 3-cycle ring detection does not run
(Solana-only precomputed matview), so ring_events=0 there 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 already declare readOnlyHint and idempotentHint. The description adds critical behavioral details beyond these: fail-open DB gap returns 'unknown', and Base-specific limitation where ring_events=0 means NOT EVALUATED. This transparently discloses edge cases and platform differences, going well beyond annotation coverage.
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 purpose and then organized behavioral details. Each sentence adds value, no redundancy. The structure flows logically from what it does, to platform caveats, to what is not returned, making it efficient and scannable.
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?
Output schema exists, so return format is covered. The description covers edge cases (DB gap, Base behavior), what is not returned, and usage context. It gives an agent all necessary information to decide when to call and what to expect, with no missing critical details.
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 covers 100% of parameter details (wallet formats). The description reinforces this and adds platform-specific behavior for the parameter, e.g., 'On Base the signal reads the high-confidence x402 rollup only, and 3-cycle ring detection does not run.' This adds meaningful context beyond the schema's type description.
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 tool as a 'cheap circular-flow (wash) check for a payer wallet' with specific outputs (classification, is_circular bool, counts). It distinguishes itself from paid alternatives by noting the free discovery aspect and that the wash discount is not returned, making its purpose unambiguous.
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 states 'Use as a fast Sybil/wash gate before trusting a counterparty.' It also clarifies what is not returned (paid wash factor), implying when to seek a paid alternative. However, it does not explicitly name a sibling tool as the alternative, so guidance is strong but not exhaustive.
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's Solana wallet public key 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 v6-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?
Even with readOnlyHint and idempotentHint already present, the description adds materially useful behavior: wash_flagged=true never soft-allows and yields decision=block with no warn/allow/quick, and an unlabeled leftover 0.05 or leftover=0 is not a unit price. It also discloses pricing hints for the paid endpoints. These are non-obvious behaviors an agent needs to interpret results correctly.
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 contains a clear 'Hard-stops' section, but it repeats 'wash_flagged=true never soft-allows' and 'Unlabeled leftover 0.05 / leftover=0 is not a unit price' in both the opening and the hard-stop list. The redundancy makes it less concise than it could be, though the length is still manageable.
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 low-level tool with 7 optional parameters and an output schema, the description covers the essential context: when to prefer the sibling, which output fields justify this tool, and what edge-case behaviors to expect. It points to the outputSchema for the readiness_card shape rather than duplicating it, so nothing critical 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 carries the parameter meanings, including the price_usdc leftover caveat. The description reinforces that caveat but does not add new per-parameter semantics beyond what the input schema provides. The 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 opening sentence names a specific operation—'low-level preflight check'—and states it returns a 'richer result object' with named fields such as paid_quick_endpoint and paid_trust_endpoint. It also distinguishes itself from get_readiness_card_tool by positioning itself as the lower-level variant that returns richer detail. This is enough for an agent to know what the tool does and how it relates to its siblings.
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 says 'Prefer get_readiness_card_tool for most callers' and then states exactly when to choose this tool: when max_spend_recommendation_usdc, full_report_hint, or suggest_full_report are needed. It even explains that the embedded readiness_card has the same shape as get_readiness_card_tool, providing clear routing between alternatives.
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: real 0-100 intel score for a wallet from its observed x402
payment history across the broader x402 ecosystem (paid calls, distinct
counterparties, volume, recency). 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. |
| 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 already declare readOnlyHint=true and idempotentHint=true, and the description adds rich behavioral detail: it discloses the transparent heuristic, states the exact formula is returned as `score_model`, lists all output fields including wash_flag/wash_factor, and describes the clean failure path for malformed pubkeys. It also reveals the Base-specific wash_flag behavior explicitly. This goes well beyond the annotations and provides exceptional transparency.
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 moderately long but well-structured, moving from core purpose to heuristic, output, and data source details. Each sentence provides useful information with no fluff. The purpose is front-loaded, making it easy to scan, though the length is above average. It earns a 4 for density and structure without being overly verbose.
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 parameter and an output schema present, the description covers the essential aspects: input types, scoring model, output fields, failure behavior, and data source. It also mentions optional paid endpoints for deeper verification. Minor ambiguity remains in the relationship between intel_score and effective_score, but overall it is complete enough for an agent to invoke 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 schema already describes the 'wallet' parameter as a Solana base58 pubkey or Base 0x address, and the description reinforces this while adding meaningful nuance: it explains how a Base wallet is scored differently due to the lack of a wash graph, and that malformed pubkeys are cleanly rejected. This adds value beyond the schema's simple type description.
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 explicitly states the tool scores a wallet from 0-100 based on observed x402 payment history, listing exact inputs (paid calls, counterparties, volume, recency). It clearly focuses on a single wallet, differentiating it from the sibling 'score_wallets_batch', and specifies accepted wallet types (Solana base58 and Base 0x). The verb 'score' plus resource and score range make the purpose unambiguous.
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 context about the data source and notes it is a free discovery tool, with optional paid endpoints for signed receipts. However, it does not explicitly state when to prefer this tool over siblings like 'score_wallets_batch' or 'compare_wallets', nor does it mention exclusions or prerequisites. The guidance is implied from the singular-wallet focus and free nature, but not made explicit.
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
Runnable, no-spend proof of the TWZRD buyer-side x402 trust gate - 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: proof still requires a
non-VPS source_ip and matching your run_id to your own transcript via
packages/twzrd-agent-intel/scripts/count_attributed_runs.py --confirm.
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?
Annotations already declare readOnlyHint and idempotentHint, but the description adds rich behavioral detail: no wallet/signer contact, no USDC spend, ledger candidate surface with real inbound IP, and the requirement for non-VPS source_ip and run_id matching to promote a candidate to an EXTERNAL_RUN. This goes far beyond the structured 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 front-loaded with the core purpose and safety characteristics, then moves to caveats and proof requirements. It is somewhat dense and technical, but every sentence contributes needed context and there is no 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?
With an output schema present, the description still covers behavior, side-effect-like attribution implications, safety, and proof verification steps. It fully explains the candidate-vs-run distinction and references the returned not_external_run_proof, making it complete for a tool of this 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?
The input schema already provides 100% parameter coverage for run_id and integration. The description reinforces the semantic role of run_id in transcript correlation and mentions the integration id in the attribution ledger context, adding 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 opens with a specific verb+resource statement: 'Runnable, no-spend proof of the TWZRD buyer-side x402 trust gate.' It then concretely states what happens (block path ABORTS, allow path would proceed, ok=true), clearly distinguishing it from sibling tools that perform other x402/intel operations.
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 clearly conveys when to use this tool: as a no-install, no-human, no-spend proof/demo of the gate. It adds important context about the EXTERNAL_RUN candidate versus a real EXTERNAL_RUN, but it does not explicitly name alternative tools or provide when-not-to-use instructions.
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.
Returns 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 |
|---|---|---|---|
| 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?
The description discloses behaviors beyond annotations: proactive re-checking when 'recheck_after_unix' elapses, posting to webhook on material changes, and returning the watch row with a timestamp. No contradiction with annotations (openWorldHint, idempotentHint, destructiveHint are all false, consistent with registration).
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 three short paragraphs, front-loaded with the core action. Every sentence provides useful context: registration, lifecycle, return value. No redundant or vague language.
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 tool with 3 parameters, an output schema, and annotations, the description covers the registration process, follow-up behavior, and return details. It does not explain what a 're-call watch' is in depth, but the context is sufficient for an agent to understand its use.
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?
All 3 parameters are described in the schema (100% coverage). The description adds value by explaining the purpose of 'webhook_url' (optional, POST on staleness) and clarifying the role of 'payer_wallet' and 'seller_wallet'. It also notes the return value includes 'recheck_after_unix', enhancing understanding.
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 registers a re-call watch on a seller wallet, using a specific verb ('Register') and resource ('watch on seller wallet'). It distinguishes itself from sibling tools like 'twzrd_watch_list' and 'twzrd_watch_remove' by focusing on creation.
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 what the tool does and its lifecycle (proactive re-check, webhook notification), but does not explicitly state when to use it vs. alternatives or when not to use it. This is adequate but lacks explicit exclusions.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| 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 declare readOnlyHint and idempotentHint, yet the description adds substantial non-obvious behavior: it names the fields returned, flags recheck_after_unix as an untrusted V5/V6 hint, and explicitly warns not to treat due / shouldRecheck as a trusted allow. That untrusted-data warning is exactly the kind of guidance structured fields cannot convey for an agent deciding how to act on 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?
Three short sentences with the core purpose front-loaded and no filler. The terminology is dense but each sentence contributes: purpose, return fields, and the trust warning. Slightly more idiomatic phrasing for the evaluateRecall reference would tighten it further.
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?
Output schema exists, so return-value documentation is technically optional; the description nonetheless summarizes the key fields and, more importantly, warns about their trust level. Safety profile and return shape are both covered, so an agent has what it needs, though nothing addresses volume, ordering, or empty-result 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 single parameter payer_wallet has 100% schema description coverage ("Your agent wallet address"), so the schema carries the burden. The description does not add syntax, format, or defaulting detail beyond it, making the baseline 3 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 specific verb and resource ("List active re-call watches") with an explicit scope ("for your agent wallet"). This cleanly distinguishes it from the watch-mutating siblings twzrd_watch_add and twzrd_watch_remove, so an agent can select it 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?
The description implies the tool is a read of existing watches, but it never explicitly states when to call it versus twzrd_watch_add, twzrd_watch_remove, or the scoring tools like get_poec_score. It does name evaluateRecall / shouldRecheckTrusted as the downstream consumer gate, which is helpful context, but that is semantic guidance rather than a when-to-use routing rule.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| watch_id | Yes | Watch ID from twzrd_watch_list. | |
| 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 already indicate non-destructive behavior. The description adds the owner-matching constraint, which is useful behavioral context. However, it does not elaborate on side effects or reversibility.
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 sentence that directly states the purpose and key constraint with no extraneous words.
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 simple removal tool with an output schema, the description covers the essential information. It could mention return behavior, but the output schema likely handles that.
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 description adds little beyond what the schema provides. It reiterates the payer_wallet constraint, but the schema already includes that information.
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 action ('Deactivate a re-call watch by ID') and includes a specific constraint. It distinguishes from sibling tools like twzrd_watch_add and twzrd_watch_list.
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 tells when to use (to deactivate a watch) and includes a prerequisite (payer_wallet must match owner). It does not explicitly mention when not to use or alternatives, but the context is sufficient.
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 v5/v6 trust receipt — 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 v6 PaidReceipt object (leaf + preimage + signature + signing_pubkey) returned by the paid /v1/intel/trust surface. | |
| 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 already declare readOnlyHint and idempotentHint. The description adds behavioral details: offline, no DB/network/payment, returns multiple validity flags and errors, and warns about trust anchoring. Contradictions none.
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?
Well-structured with a bold opening statement. Information is front-loaded and each section adds value. Slightly verbose but not excessive.
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 inputs, trust model, return values (valid/leaf_valid/signature_valid plus leaf and errors). Output schema exists, so return details are not needed. Complete for a verification tool.
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?
All four parameters have descriptions in the schema (100% coverage). The description adds value by providing source context for receipt, cross-referencing Python library/CLI for max_age_seconds, and usage guidance for require_signature.
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?
Description clearly states the tool's purpose: offline verification of v5/v6 trust receipts. It specifies the actions (recomputes Keccak256 leaf, verifies Ed25519 signature) and distinguishes from sibling tools by focusing on 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?
Provides explicit usage guidance: pass the full PaidReceipt object, trust anchored on published key, and explains optional parameters like max_age_seconds and require_signature. No explicit when-not-to-use, but sufficient for correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_root_inputsCRead-onlyIdempotentInspect
Independent root verification (see tools/root_verifier.py for the recompute logic).
| 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 | WZRD protocol resource (deposit/claim/settle etc.) for auto-detection and seq hints. | |
| seller_wallet | No | Seller wallet for WZRD 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=true and idempotentHint=true, so the read-only nature is clear. The description adds 'via recompute logic' implying computation, but doesn't contradict annotations. Provides minimal extra context.
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?
Extremely concise at two sentences with no waste. Could benefit from slightly more detail, but front-loads the core 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 100% schema coverage, output schema present, and annotations, the description is minimally adequate. However, it lacks contextual completeness for a verification tool that might need explanation of what verification entails.
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 has 100% description coverage. The description adds nothing about parameters, 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 states 'Independent root verification' which identifies the tool's action and resource, but lacks specificity about what 'root' refers to and does not differentiate from sibling tools like verify_receipt.
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?
No guidance on when to use this tool versus alternatives (e.g., verify_receipt). The description provides no context for selection.
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.
1 tool update
- Changed
get_readiness_card_tool4 fields changed- added
Output schema / properties / corpus_age_daysAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Whole days since corpus_complete_day.", + "title": "Corpus Age Days" +} - added
Output schema / properties / corpus_complete_dayAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Uploaded corpus complete day (YYYY-MM-DD). Snapshot boundary, not live ingest.", + "title": "Corpus Complete Day" +} - added
Output schema / properties / observed_atAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "ISO-8601 watermark of the uploaded Dune complete day (not card-build time).", + "title": "Observed At" +} - added
Output schema / properties / staleAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "True when uploaded-corpus age exceeds the high-confidence re-check window. Warning only; not a wash refuse.", + "title": "Stale" +}
3 tool updates
- Changed
evaluate_x402_resource4 fields changed- changed
Output schema / properties / receipt_url / descriptionPrevious value: -"URL to fetch the paid trust receipt ($0.05 USDC to TWZRD)."New value: +"Optional $0.05 V7 portable receipt URL." - added
Output schema / properties / receipt_usdcAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Cost of the optional V7 receipt in USDC (0.05).", + "title": "Receipt Usdc" +} - added
Output schema / properties / teaser_urlAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "First paid hop: $0.001 score-only teaser URL.", + "title": "Teaser Url" +} - changed
Output schema / properties / upsell_usdc / descriptionPrevious value: -"Cost of the TWZRD paid trust receipt in USDC."New value: +"Cost of the first paid hop in USDC (0.001 teaser)."
- Changed
get_readiness_card_tool4 fields changed- changed
Output schema / properties / paid_deep_dive / descriptionPrevious value: -"Path to the paid full-trust surface (/v1/intel/trust/{wallet})."New value: +"Optional Path A V7 receipt surface (/v1/intel/trust/{wallet})." - changed
Output schema / properties / paid_price_usdc / descriptionPrevious value: -"Price of the paid deep dive in USDC."New value: +"Price of the optional V7 receipt in USDC (0.05)." - added
Output schema / properties / paid_teaserAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "First paid hop: $0.001 score-only teaser (/v1/intel/quick/{wallet}).", + "title": "Paid Teaser" +} - added
Output schema / properties / paid_teaser_usdcAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Price of the first paid hop in USDC (0.001).", + "title": "Paid Teaser Usdc" +}
- Changed
low_level_preflight2 fields changed- added
Output schema / properties / paid_quick_endpointAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "First paid hop: $0.001 score-only teaser, if seller identity is known.", + "title": "Paid Quick Endpoint" +} - changed
Output schema / properties / paid_trust_endpoint / descriptionPrevious value: -"Paid trust endpoint path, if seller identity is known."New value: +"Optional $0.05 V7 receipt path, if seller identity is known."
4 tool updates
- Changed
evaluate_x402_resource3 fields changed- changed
Input schema / properties / price_usdc / descriptionPrevious value: -"Known price in USDC — overrides what the 402 reports. Leave unset to use the 402-reported amount."New value: +"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." - changed
Output schema / properties / decision / descriptionPrevious value: -"Spend decision: \"allow\" | \"warn\" | \"block\" | \"unknown\". \"unknown\" means is_x402 is False -- no 402 challenge was issued, so no trust evaluation happened. Never treat \"unknown\" as a green light."New value: +"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." - changed
Output schema / properties / price_usdc / descriptionPrevious value: -"Quoted unit price in USDC from the 402 response. Null when the accept is scheme=upto (a cap, not a per-request price)."New value: +"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)."
- Changed
get_provider_reputation1 field changed- changed
Output schema / properties / wash_flagged / descriptionPrevious value: -"true = fleet/wash/captive/scripted-fleet signals tripped; false = evaluated and clean; null = never evaluated (unknown - do NOT coerce to false)."New value: +"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)."
- Changed
get_readiness_card_tool5 fields changed- changed
Input schema / properties / price_usdc / descriptionPrevious value: -"Quoted price in USDC for the action you are evaluating."New value: +"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." - changed
Output schema / properties / decision / descriptionPrevious value: -"Spend decision: \"allow\" | \"warn\" | \"block\"."New value: +"Spend decision: \"allow\" | \"warn\" | \"block\". wash_flagged=true never soft-allows — this field is block (no warn/allow/quick)." - added
Output schema / properties / max_price_usdcAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Advertised maximum USDC when price_kind is upto_cap. Not a unit price.", + "title": "Max Price Usdc" +} - added
Output schema / properties / price_kindAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "exact | upto_cap | unknown. upto_cap means price_usdc is not a unit price.", + "title": "Price Kind" +} - changed
Output schema / properties / price_usdc / descriptionPrevious value: -"Quoted price in USDC."New value: +"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)."
- Changed
low_level_preflight2 fields changed- changed
Input schema / properties / price_usdc / descriptionPrevious value: -"Quoted payment amount in USDC for this intended request."New value: +"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." - changed
Output schema / properties / decision / descriptionPrevious value: -"Spend decision: \"allow\" | \"warn\" | \"block\"."New value: +"Spend decision: \"allow\" | \"warn\" | \"block\". wash_flagged=true never soft-allows — this field is block (no warn/allow/quick)."
1 tool update
- Changed
evaluate_x402_resource3 fields changed- added
Output schema / properties / max_price_usdcAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Advertised maximum USDC when price_kind is upto_cap.", + "title": "Max Price Usdc" +} - added
Output schema / properties / price_kindAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "exact | upto_cap | unknown. upto_cap means price_usdc is not a unit price.", + "title": "Price Kind" +} - changed
Output schema / properties / price_usdc / descriptionPrevious value: -"Quoted price in USDC from the 402 response."New value: +"Quoted unit price in USDC from the 402 response. Null when the accept is scheme=upto (a cap, not a per-request price)."
1 tool update
- Changed
get_readiness_card_tool4 fields changed- changed
Output schema / properties / recheck_after_unix / descriptionPrevious value: -"UNIX timestamp after which this intel is stale; re-call the paid trust surface when now >= this value."New 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." - changed
Output schema / properties / recheck_hint / descriptionPrevious value: -"One-line instruction: re-verify via GET /v1/intel/trust/{pubkey} once now >= recheck_after_unix."New 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." - changed
Output schema / properties / score_decay_model / descriptionPrevious value: -"step:<=7d=1.0,<=30d=0.8,<=90d=0.5,>90d=0.25 (the actual recency decay on paid scores)."New 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." - changed
Output schema / properties / staleness_days / descriptionPrevious value: -"Recommended re-check cadence in days (7 high-quality, 3 partial/stale)."New value: +"Recommended re-check cadence in days (7 high-quality, 3 partial/stale). ADVISORY AND UNSIGNED on a paid receipt."
1 tool update
- Changed
get_merchant_card1 field changed- added
Input schema / properties / fullAdded value: +{ + "default": false, + "description": "If true, include catalog services. Default is the compact decision surface.", + "title": "Full", + "type": "boolean" +}
1 tool update
- Changed
evaluate_x402_resource1 field changed- changed
Output schema / properties / decision / descriptionPrevious value: -"Spend decision: \"allow\" | \"warn\" | \"block\"."New value: +"Spend decision: \"allow\" | \"warn\" | \"block\" | \"unknown\". \"unknown\" means is_x402 is False -- no 402 challenge was issued, so no trust evaluation happened. Never treat \"unknown\" as a green light."
1 tool update
- Changed
get_poec_score2 fields changed- changed
Output schema / properties / evidence_gaps / descriptionPrevious value: -"Inputs with no live source. \"success_rate\" has none today, so success_quality and poec_score read 0.0 until a settlement-success join exists."New value: +"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." - added
Output schema / properties / success_rateAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "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.", + "title": "Success Rate" +}
1 tool update
- Changed
submit_contribution_claims7 fields changed- added
Output schema / properties / as_ofAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "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.", + "title": "As Of" +} - changed
Output schema / properties / attestation_class / descriptionPrevious value: -"\"CORPUS_CROSS_CHECKED\" — verified against TWZRD-observed corpus, not TWZRD-attested settlement."New value: +"\"CORPUS_CROSS_CHECKED\" when the corpus was observed; \"CORPUS_UNAVAILABLE\" when lookup could not run (not a miss). Not TWZRD-attested settlement." - added
Output schema / properties / classification_versionAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Base cluster-pin / KNOWN_CLUSTERS snapshot id. Moves when corpus reclassify changes high/unknown/excluded meaning; distinct from score_version.", + "title": "Classification Version" +} - added
Output schema / properties / corpus_availableAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "False when DSN/query failed so claims were not corpus-checked. Distinct from a genuine miss.", + "title": "Corpus Available" +} - changed
Output schema / properties / verified_usdc / descriptionPrevious value: -"Sum of observed USDC for verified claims only. Read verified_usdc_by_confidence before treating this as confirmed x402 volume."New value: +"Sum of observed USDC for verified claims across all tiers, including excluded. Use verified_usdc_x402_high for allowlist-attributed Base volume." - changed
Output schema / properties / verified_usdc_by_confidence / descriptionPrevious value: -"Verified USDC split by evidence tier: \"high\" = confirmed x402 settlement; \"unknown\" = an on-chain transfer TWZRD observed but could not confirm as x402; \"untiered\" = a chain whose ingest has no confidence tier (Solana)."New value: +"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)." - added
Output schema / properties / verified_usdc_x402_highAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Sum of observed USDC for verified claims whose observed_x402_confidence is high (allowlist attribution, not protocol confirmation). Excluded/unknown/untiered are omitted.", + "title": "Verified Usdc X402 High" +}
2 tool updates
- Changed
get_provider_reputation1 field changed- changed
Output schema / properties / wash_confidence / descriptionPrevious value: -"\"full\" when self+reciprocal+ring ran; \"base_2cycle\" when only the Base 2-cycle overlay ran (3-cycle ring not evaluated — not a full screen); \"partial_inbound_only\" when the circular-flow overlay did not run."New value: +"\"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."
- Changed
is_wash_fleet1 field changed- changed
Output schema / properties / ring_evaluated / descriptionPrevious value: -"True only when the precomputed Solana ring aggregate was actually read for this wallet. False on Base (no ring matview), when the ring lookup failed, or when the wallet has no aggregate row yet - in all of which ring_events=0 means not evaluated, never none found."New value: +"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."
1 tool update
- Changed
get_provider_reputation1 field changed- changed
Output schema / properties / wash_confidence / descriptionPrevious value: -"\"full\" when the circular-flow overlay ran; \"partial_inbound_only\" when it did not."New value: +"\"full\" when self+reciprocal+ring ran; \"base_2cycle\" when only the Base 2-cycle overlay ran (3-cycle ring not evaluated — not a full screen); \"partial_inbound_only\" when the circular-flow overlay did not run."
2 tool updates
- Changed
is_wash_fleet1 field changed- changed
Output schema / properties / ring_evaluated / descriptionPrevious value: -"Whether 3-cycle ring detection ran. True on Solana (precomputed matview); false on Base, where no such matview exists."New value: +"True only when the precomputed Solana ring aggregate was actually read for this wallet. False on Base (no ring matview), when the ring lookup failed, or when the wallet has no aggregate row yet - in all of which ring_events=0 means not evaluated, never none found."
- Changed
submit_contribution_claims3 fields changed- changed
Input schema / properties / claims / descriptionPrevious value: -"Self-reported settlements to cross-check. Each item: {\"tx_signature\": str, \"chain\": \"solana\"|\"base\", \"amount_usdc\": float (optional)}. Any other chain value is rejected before it ever reaches a query."New value: +"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." - changed
Output schema / properties / claims_duplicates / descriptionPrevious value: -"Repeated chain/transaction claims within the capped input; included in claims_unverified and excluded from value totals."New value: +"Repeated chain/transaction/leg claims within the capped input; included in claims_unverified and excluded from value totals." - changed
Output schema / properties / claims_verified / descriptionPrevious value: -"Unique chain/transaction claims whose wallet and amount matched TWZRD's independently-observed corpus."New value: +"Unique chain/transaction/leg claims whose wallet and amount matched TWZRD's independently-observed corpus."
1 tool update
- Changed
submit_contribution_claims3 fields changed- added
Output schema / properties / claims_duplicatesAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Repeated chain/transaction claims within the capped input; included in claims_unverified and excluded from value totals.", + "title": "Claims Duplicates" +} - changed
Output schema / properties / claims_unverified / descriptionPrevious value: -"Claims not found on-chain, or found with a mismatched amount."New value: +"Claims not found, with a mismatched wallet or amount, or duplicated within this report." - changed
Output schema / properties / claims_verified / descriptionPrevious value: -"Claims whose tx_signature and amount matched TWZRD's independently-observed corpus."New value: +"Unique chain/transaction claims whose wallet and amount matched TWZRD's independently-observed corpus."
2 tool updates
- Changed
is_wash_fleet4 fields changed- changed
Input schema / properties / wallet / descriptionPrevious value: -"Solana wallet public key (32-44 base58 chars) to check for circular-flow / wash behavior."New value: +"Wallet to check for circular-flow / wash behavior: a Solana public key (32-44 base58 chars) or a Base/EVM address (0x + 40 hex)." - added
Output schema / properties / chainAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Which corpus answered: \"solana\" or \"base\". Base reads the high-confidence x402 rollup only.", + "title": "Chain" +} - added
Output schema / properties / ring_evaluatedAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Whether 3-cycle ring detection ran. True on Solana (precomputed matview); false on Base, where no such matview exists.", + "title": "Ring Evaluated" +} - added
Output schema / properties / ring_eventsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Events forming a 3-cycle ring. Meaningless unless ring_evaluated is true: 0 with ring_evaluated false means NOT LOOKED FOR, not none found.", + "title": "Ring Events" +}
- Changed
submit_contribution_claims3 fields changed- changed
Output schema / properties / verified / descriptionPrevious value: -"Per-claim detail for verified claims."New value: +"Per-claim detail for verified claims, each carrying observed_x402_confidence and observed_facilitator_id." - changed
Output schema / properties / verified_usdc / descriptionPrevious value: -"Sum of observed USDC for verified claims only."New value: +"Sum of observed USDC for verified claims only. Read verified_usdc_by_confidence before treating this as confirmed x402 volume." - added
Output schema / properties / verified_usdc_by_confidenceAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Verified USDC split by evidence tier: \"high\" = confirmed x402 settlement; \"unknown\" = an on-chain transfer TWZRD observed but could not confirm as x402; \"untiered\" = a chain whose ingest has no confidence tier (Solana).", + "title": "Verified Usdc By Confidence" +}
4 tool updates
- Changed
compare_wallets2 fields changed- changed
Input schema / properties / wallet_a / descriptionPrevious value: -"First Solana wallet pubkey to compare."New value: +"First wallet (Solana base58 or Base 0x) to compare." - changed
Input schema / properties / wallet_b / descriptionPrevious value: -"Second Solana wallet pubkey to compare."New value: +"Second wallet (Solana base58 or Base 0x) to compare."
- Changed
get_poec_score2 fields changed- changed
Input schema / properties / wallet / descriptionPrevious value: -"Solana payer wallet public key (32-44 base58 chars) to score for Proof of Economic Contribution."New value: +"Payer wallet (Solana base58 or Base 0x) to score for Proof of Economic Contribution." - added
Output schema / properties / base_observedAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "description": "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.", + "title": "Base Observed" +}
- Changed
score_wallet_for_intel6 fields changed- changed
Input schema / properties / wallet / descriptionPrevious value: -"Solana wallet public key (32-44 base58 chars) to score using x402 payment-history intelligence."New value: +"Wallet to score: a Solana base58 pubkey or a Base 0x address, using x402 payment-history intelligence." - added
Output schema / properties / chainAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "\"base\" when scored from the Base corpus; null on the Solana path.", + "title": "Chain" +} - added
Output schema / properties / networkAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "CAIP-2 network of the corpus used, e.g. \"eip155:8453\"; null on the Solana path.", + "title": "Network" +} - changed
Output schema / properties / wallet / descriptionPrevious value: -"The scored Solana wallet."New value: +"The scored wallet: Solana base58 pubkey or Base 0x address (lowercased)." - added
Output schema / properties / wash_coverageAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Which wash signals exist for this chain. Base: single-counterparty only, so wash_flag is \"unknown\" (never \"clean\") for multi-counterparty wallets.", + "title": "Wash Coverage" +} - added
Output schema / properties / window_daysAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Observation window in days when the corpus is windowed (Base: 90); null on the Solana path.", + "title": "Window Days" +}
- Changed
score_wallets_batch1 field changed- changed
Input schema / properties / wallets / descriptionPrevious value: -"List of Solana wallet pubkeys to score in one call (hard cap 25; extras are dropped)."New value: +"List of wallets (Solana base58 or Base 0x) to score in one call (hard cap 25; extras are dropped)."
Related MCP Connectors
Trust scores and on-chain payment receipts for x402 services.
Verify before your agent acts on data it paid for. Signed verdicts, checkable offline, via x402.
x402 provider rankings + Ed25519-signed payment receipts + signature verification (3 tools).
Evidence observatory for agentic commerce: x402 preflight, receipt checks, settlement attestations.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides cryptographic governance receipts for AI agents, enabling pre-execution evaluation and signed verdicts (EXECUTE/BLOCK/REVIEW/SHADOW) with offline-verifiable audit trails.MIT
- FlicenseNot gradedqualityBmaintenanceEnables auditing x402 payment logs against delivery logs to issue signed proof-of-delivery receipts and verify payer spend health.-

EVIDIQ Notary MCPofficial
AlicenseNot gradedqualityBmaintenanceCryptographic receipt layer for AI inferences. Enables notarization and verification of AI outputs with on-chain proofs via x402 payment.1MIT- AlicenseNot gradedqualityAmaintenanceEnables autonomous agents to calculate deterministic profit and loss, attribute revenue and costs, and generate signed operational reports using x402 micropayments.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.