Skip to main content
Glama

TWZRD Agent Intelligence

get_readiness_card_tool

Read-onlyIdempotent
PRIMARY free pre-spend gate (advisory). Pass seller_wallet OR resource_name.
wash_flagged=true never soft-allows. Unlabeled leftover 0.05 / leftover=0 is not a unit price.

When to use: before any x402 payment to a seller/resource.
When not to use: after you already decided to refuse; use verify_receipt for signed receipts only.

Pricing: free. Result is advisory (buyer policy still applies).

Hard-stops:
  wash_flagged=true never soft-allows (decision=block / do_not_pay; no warn/allow/quick).
  Unlabeled leftover 0.05 / leftover=0 is not a unit price; read price_kind.
  Caller-supplied or scheme/price_kind=exact 0.05 stays a unit price.

Decision semantics (top-level, no nesting via MCP):
  decision=block / recommended_action=do_not_pay -> DO NOT PAY.
  decision=warn / recommended_action=proceed_with_cap -> pay only up to maximum_recommended_spend_usdc.
  decision=allow / recommended_action=proceed_for_small_spend -> proceed under agent policy (no free-tier cap).

next_action (enrollment handoff — do not stop after free card):
  next_step_type / payment_required / executable / command describe an
  optional next step. A host may use command only under its own policy.
  Never paste path templates (:pubkey / {pubkey}) as seller_wallet.

Also returns reason_codes[], confidence, model_version, decision_envelope.

No counterparty named (seller_wallet missing / a template / not a wallet, and
no resource_name or resource_url): decision=block, trust_score null, score null,
null_reason=no_subject, reason_codes NO_COUNTERPARTY (+ PLACEHOLDER_SELLER_WALLET),
seller_wallet_rejected echoes what you sent. That is an input bug, not a seller
verdict: fix the input and re-run.

trust_score is a free heuristic, NOT the full corpus.
Next: on allow/warn for material spend, next_action.command is the
optional AgentCash paid-trust or AutoGate install string, then verify_receipt
on the signed V7 receipt.
Optional: twzrd_watch_add for re-check after recheck_after_unix.

Additive: top-level aop_bind program registry (evidence hierarchy) when enabled;
never mutates decision / can_spend.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
price_usdcNoCaller-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_intentNoNatural-language intent describing the planned paid action.
buyer_walletNoBuyer's Solana wallet public key used for spend-context checks.
resource_urlNoCanonical endpoint URL for the resource, if available.
resource_nameNoProvider or resource label in a marketplace (for example marketplace:agent-name). Provide this OR seller_wallet.
seller_walletNoSeller'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_pubkeyNoConsumer pubkey, echoed on output when provided (attribution only).
marketplace_scoreNoOptional upstream marketplace trust score (0-100) to blend into preflight context.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
as_ofNoISO-8601 of data_as_of_unix. Null when the subject was never measured.
basisNoTyped evidence entries {class, kind, source, observed_at, weight, ...}; observed_at is null with observed_at_null_reason on an honest-null card.
proofNoProof block: v5_receipt_upsell_available, has_v5_receipts, receipt_endpoint, known_seller_wallets, provider_reputation.
scoreNoDraft-02 score 0..1, or null when no evidence was measured (see null_reason). An assessor never fabricates this; the legacy trust_score keeps a cautious default for old consumers.
staleNoTrue when the seller's last settle is older than 7 days, or when there is no settle and the ledger head is older than 7 days or missing. Warning only; not a wash refuse.
caveatsNoRisk factors and the always-on trust_score_basis caveat.
versionNoCard schema version, e.g. readiness_card_v1.
categoryNoResource category (e.g. defi, defi_intelligence).
decisionNoSpend decision: "allow" | "warn" | "block". wash_flagged=true never soft-allows — this field is block (no warn/allow/quick).
can_spendNoPrice-aware proceed flag (not 'true only on allow'). block → false; allow → true (unless known price exceeds free-tier ceiling); warn → true only when price_usdc is known and fits under recommended_cap_usdc, else false. Free card is advisory; AutoGate on the pay path enforces.
issued_atNoISO-8601 card issue time.
expires_atNoISO-8601 card validity end (an expired card is an absent card).
next_fixesNoActionable steps the provider can take to raise trust.
price_kindNoexact | upto_cap | unknown. upto_cap means price_usdc is not a unit price.
price_usdcNoQuoted unit price in USDC. Null when price_kind is upto_cap or the figure is unlabeled leftover 0.05 / leftover=0 (scheme=upto leftover defaults, including stale 0.05, are not a unit price).
null_reasonNoWhy score is null: "unknown_subject" | "insufficient_signal" | "evaluation_failed" | "no_subject" (no counterparty was named at all). Null when scored.
observed_atNoISO-8601 of the seller's last settle, else the ledger head day. Null when neither exists. Not card-build time.
paid_teaserNoFirst paid hop: $0.001 score-only teaser (/v1/intel/quick/{wallet}).
trust_scoreNoComposite trust signal, 0-100.
ledger_basisNoLedger head basis, for example exact or mixed_estimated.
recheck_hintNoOne-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_nameNoResolved resource/provider label.
seller_walletNoSeller Solana wallet, if known.
max_price_usdcNoAdvertised maximum USDC when price_kind is upto_cap. Not a unit price.
paid_deep_diveNoOptional Path A V7 receipt surface (/v1/intel/trust/{wallet}).
queried_pubkeyNoConsumer pubkey echoed when provided on input (attribution only; not a settle gate).
staleness_daysNoRecommended re-check cadence in days (7 high-quality, 3 partial/stale). ADVISORY AND UNSIGNED on a paid receipt.
corpus_age_daysNoWhole days since corpus_complete_day. Null when the ledger head is missing.
data_as_of_unixNoSeller last-activity unix when known. Null on unknown_subject / insufficient_signal / evaluation_failed — never card-build time. Card TTL is recheck_after_unix.
paid_price_usdcNoPrice of the optional V7 receipt in USDC (0.05).
root_provenanceNoWZRD 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_usdcNoPrice of the first paid hop in USDC (0.001).
score_decay_modelNostep:<=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_basisNoProvenance of the score; ALWAYS the free heuristic, never the paid corpus model.
recheck_after_unixNoUNIX 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_dayNoLedger head complete day (YYYY-MM-DD) from x402_ledger_head. Null when that row is missing. Not the 2026-07-09 copy floor.
ledger_exact_throughNoLast day of exact event capture on the ledger head. Later days may be estimates.
seller_wallet_rejectedNoSet when the seller_wallet you sent was discarded: {"value", "reason": "template_placeholder" | "not_a_wallet_address"}. With no resource_name/resource_url the card is decision=block, null_reason=no_subject, reason_codes NO_COUNTERPARTY (+ PLACEHOLDER_SELLER_WALLET). Fix the input; this is not a verdict about any seller.
corpus_complete_through_unixNoBehavioral corpus coverage watermark, or null when none is plumbed.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / queried_pubkey / description
      Previous value: -"Consumer pubkey for velocity attribution (echoed on output when provided)."New value: +"Consumer pubkey, echoed on output when provided (attribution only)."
    • changedOutput schema / properties / queried_pubkey / description
      Previous value: -"Consumer pubkey echoed when provided on input (velocity attribution; not a settle gate)."New value: +"Consumer pubkey echoed when provided on input (attribution only; not a settle gate)."
  2. Changed7 schema fields changed
    • addedOutput schema / properties / basis
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {},
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Typed evidence entries {class, kind, source, observed_at, weight, ...}; observed_at is null with observed_at_null_reason on an honest-null card.",
      +  "title": "Basis"
      +}
    • addedOutput schema / properties / corpus_complete_through_unix
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Behavioral corpus coverage watermark, or null when none is plumbed.",
      +  "title": "Corpus Complete Through Unix"
      +}
    • addedOutput schema / properties / expires_at
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "ISO-8601 card validity end (an expired card is an absent card).",
      +  "title": "Expires At"
      +}
    • addedOutput schema / properties / issued_at
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "ISO-8601 card issue time.",
      +  "title": "Issued At"
      +}
    • addedOutput schema / properties / null_reason
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Why score is null: \"unknown_subject\" | \"insufficient_signal\" | \"evaluation_failed\" | \"no_subject\" (no counterparty was named at all). Null when scored.",
      +  "title": "Null Reason"
      +}
    • addedOutput schema / properties / score
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Draft-02 score 0..1, or null when no evidence was measured (see null_reason). An assessor never fabricates this; the legacy trust_score keeps a cautious default for old consumers.",
      +  "title": "Score"
      +}
    • addedOutput schema / properties / seller_wallet_rejected
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": true,
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Set when the seller_wallet you sent was discarded: {\"value\", \"reason\": \"template_placeholder\" | \"not_a_wallet_address\"}. With no resource_name/resource_url the card is decision=block, null_reason=no_subject, reason_codes NO_COUNTERPARTY (+ PLACEHOLDER_SELLER_WALLET). Fix the input; this is not a verdict about any seller.",
      +  "title": "Seller Wallet Rejected"
      +}
  3. Changed6 schema fields changed
    • changedOutput schema / properties / corpus_age_days / description
      Previous value: -"Whole days since corpus_complete_day."New value: +"Whole days since corpus_complete_day. Null when the ledger head is missing."
    • changedOutput schema / properties / corpus_complete_day / description
      Previous value: -"Uploaded corpus complete day (YYYY-MM-DD). Snapshot boundary, not live ingest."New value: +"Ledger head complete day (YYYY-MM-DD) from x402_ledger_head. Null when that row is missing. Not the 2026-07-09 copy floor."
    • addedOutput schema / properties / ledger_basis
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Ledger head basis, for example exact or mixed_estimated.",
      +  "title": "Ledger Basis"
      +}
    • addedOutput schema / properties / ledger_exact_through
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Last day of exact event capture on the ledger head. Later days may be estimates.",
      +  "title": "Ledger Exact Through"
      +}
    • changedOutput schema / properties / observed_at / description
      Previous value: -"ISO-8601 watermark of the uploaded Dune complete day (not card-build time)."New value: +"ISO-8601 of the seller's last settle, else the ledger head day. Null when neither exists. Not card-build time."
    • changedOutput schema / properties / stale / description
      Previous value: -"True when uploaded-corpus age exceeds the high-confidence re-check window. Warning only; not a wash refuse."New value: +"True when the seller's last settle is older than 7 days, or when there is no settle and the ledger head is older than 7 days or missing. Warning only; not a wash refuse."
  4. Changed2 schema fields changed
    • addedOutput schema / properties / as_of
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "ISO-8601 of data_as_of_unix. Null when the subject was never measured.",
      +  "title": "As Of"
      +}
    • changedOutput schema / properties / data_as_of_unix / description
      Previous value: -"Anchor time for the staleness calculation (seller last activity or card build time)."New value: +"Seller last-activity unix when known. Null on unknown_subject / insufficient_signal / evaluation_failed — never card-build time. Card TTL is recheck_after_unix."
  5. Changed4 schema fields changed
    • addedOutput schema / properties / corpus_age_days
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Whole days since corpus_complete_day.",
      +  "title": "Corpus Age Days"
      +}
    • addedOutput schema / properties / corpus_complete_day
      Added 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"
      +}
    • addedOutput schema / properties / observed_at
      Added 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"
      +}
    • addedOutput schema / properties / stale
      Added 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"
      +}
  6. Changed4 schema fields changed
    • changedOutput schema / properties / paid_deep_dive / description
      Previous value: -"Path to the paid full-trust surface (/v1/intel/trust/{wallet})."New value: +"Optional Path A V7 receipt surface (/v1/intel/trust/{wallet})."
    • changedOutput schema / properties / paid_price_usdc / description
      Previous value: -"Price of the paid deep dive in USDC."New value: +"Price of the optional V7 receipt in USDC (0.05)."
    • addedOutput schema / properties / paid_teaser
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "First paid hop: $0.001 score-only teaser (/v1/intel/quick/{wallet}).",
      +  "title": "Paid Teaser"
      +}
    • addedOutput schema / properties / paid_teaser_usdc
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Price of the first paid hop in USDC (0.001).",
      +  "title": "Paid Teaser Usdc"
      +}
  7. Changed5 schema fields changed
    • changedInput schema / properties / price_usdc / description
      Previous 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."
    • changedOutput schema / properties / decision / description
      Previous 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)."
    • addedOutput schema / properties / max_price_usdc
      Added 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"
      +}
    • addedOutput schema / properties / price_kind
      Added 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"
      +}
    • changedOutput schema / properties / price_usdc / description
      Previous 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)."
  8. Changed4 schema fields changed
    • changedOutput schema / properties / recheck_after_unix / description
      Previous 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."
    • changedOutput schema / properties / recheck_hint / description
      Previous 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."
    • changedOutput schema / properties / score_decay_model / description
      Previous 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."
    • changedOutput schema / properties / staleness_days / description
      Previous 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."
  9. Changed1 schema field changed
    • changedOutput schema / properties / can_spend / description
      Previous value: -"True iff decision == allow."New value: +"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."
  10. Changed1 schema field changed
    • changedInput schema / properties / seller_wallet / description
      Previous value: -"Seller's Solana wallet public key associated with the listing or endpoint. Provide this OR resource_name."New value: +"Seller's Solana base58 wallet (32-44 chars) for the listing or endpoint. Provide this OR resource_name. CRITICAL: never pass OpenAPI templates (:pubkey, {pubkey}, {seller_wallet}, SELLER_WALLET, PAY_TO_WALLET) — use accepts[].payTo from a 402 challenge."
  11. Changed1 schema field changed
    • changedInput schema / properties / seller_wallet / description
      Previous value: -"Seller's Solana base58 wallet (32-44 chars) for the listing or endpoint. Provide this OR resource_name. CRITICAL: never pass OpenAPI templates (:pubkey, {pubkey}, {seller_wallet}, SELLER_WALLET, PAY_TO_WALLET) — use accepts[].payTo from a 402 challenge."New value: +"Seller's Solana wallet public key associated with the listing or endpoint. Provide this OR resource_name."
  12. Changed1 schema field changed
    • changedInput schema / properties / seller_wallet / description
      Previous value: -"Seller's Solana wallet public key associated with the listing or endpoint. Provide this OR resource_name."New value: +"Seller's Solana base58 wallet (32-44 chars) for the listing or endpoint. Provide this OR resource_name. CRITICAL: never pass OpenAPI templates (:pubkey, {pubkey}, {seller_wallet}, SELLER_WALLET, PAY_TO_WALLET) — use accepts[].payTo from a 402 challenge."
  13. Changed1 schema field changed
    • changedOutput schema / properties / root_provenance / description
      Previous value: -"WZRD protocol root metadata (for deposit/claim/settle resources): latest_root_seq, dataset_hash (if known), leaf_version (GLOBAL_V5), verification_status, onchain_match (null = call verify_root_inputs before on-chain action), dflow_velocity (when TWZRD_DFLOW_DATA_FIRST_URL set, for cross-referencing on-chain velocity/attention signals with the root's attention_bonus). Auto-populated on protocol keywords/mints/categories. Complements the verify_root_inputs tool for independent GLOBAL_V5 leaf + dataset + sorted-pair root recompute from public leaves. Null/absent on non-protocol resources."New value: +"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."
  14. Changed1 schema field changed
    • changedOutput schema / properties / trust_score_basis / description
      Previous value: -"Provenance of the score; ALWAYS the free heuristic, never the paid 42k corpus."New value: +"Provenance of the score; ALWAYS the free heuristic, never the paid corpus model."
  15. First observed

TDQS

A4.4/5.0
Behavior5/5

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

Far exceeds the annotations (readOnlyHint, idempotentHint): it documents the block/warn/allow decision mapping, hard-stop rules, the no-counterparty input-bug path, that trust_score is a free heuristic not the full corpus, and that the aop_bind registry is additive and never mutates decision/can_spend. This is rich behavioral context an agent needs before paying.

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

Conciseness3/5

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

Front-loads the primary role and uses labeled sections, but it is long and prone to repetition – the 'wash_flagged=true never soft-allows' and template-rejection rules each appear more than once. The density of edge-case bullets makes it harder to scan than necessary for a free advisory check.

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

Completeness5/5

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

With an output schema present, return values need not be explained, yet the description still covers decision semantics, next_action handoff, null_reason=no_subject behavior, and the additive aop_bind block. Nothing critical for correct invocation or interpretation of the result appears missing.

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

Parameters4/5

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

Schema coverage is already 100%, so the baseline is 3. The description adds genuine value beyond the schema: 'Pass seller_wallet OR resource_name' as the routing rule, the price_kind distinction that unlabeled 0.05 is not a unit price, and the explicit ban on passing path templates as seller_wallet. Still, most per-parameter detail lives in the schema.

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

Purpose4/5

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

States a specific role: 'PRIMARY free pre-spend gate (advisory)' that returns a decision card before x402 payments. It also names a sibling it is not ('use verify_receipt for signed receipts only'), which helps disambiguate. However the core noun ('readiness card') is never plainly defined, so an agent must infer the primary deliverable from the decision-semantics block rather than a clean one-line purpose.

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

Usage Guidelines5/5

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

Explicit 'When to use: before any x402 payment to a seller/resource' and 'When not to use: after you already decided to refuse; use verify_receipt for signed receipts only.' It names the alternative tool and the condition selecting it, plus follow-up routing (verify_receipt on the signed receipt, twzrd_watch_add for re-checks).

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.