SpendPreflight
Server Details
Operated by SpendPreflight: sanctions screening and allow/hold/block preflight for x402 payments.
- Status
- Healthy
- Uptime
- 99.9% over 28 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 17 tools
Several tools overlap heavily: check_listing is explicitly an alias of listing_guard (same operation, admitted in the description), security_check is a paid extension of lint_endpoint, and payee screening appears in check_payee, verify_payee_binding, and inside preflight_payment. check_endpoint, quote_check, and seller_index all reason over cached x402 observations, making selection non-obvious. Only the off-domain tools (find_rv_stations, size_solar) are cleanly distinct.
All names are snake_case, which helps, but conventions are mixed: some are verb_noun (check_endpoint, verify_payee_binding, find_rv_stations), others are noun phrases (payment_receipt, wallet_statement, seller_index, domain_auth). Related tools don't share a family prefix, so grouping (e.g., check_* vs listing_guard) is unpredictable.
17 tools is on the heavy side for a spend-preflight service, and two of them (find_rv_stations, size_solar) are unrelated marketplace-style extras that don't serve the stated purpose. The core payment-safety set is reasonably scoped, but the alias plus tiered variants (lint_endpoint/security_check, check_listing/listing_guard) inflate the surface.
The core lifecycle is well covered: discovery (seller_index), screening (check_payee, check_token, verify_payee_binding), decisioning (preflight_payment, quote_check), and post-payment verification (payment_receipt, wallet_statement), plus free service info and lint. Minor gaps exist—no tool for registering/managing persistent spending rules or ongoing monitoring despite mentions of monitoring links—but agents can work around them.
Available Tools
17 toolscheck_endpointRead an x402 endpoint's observed healthARead-onlyIdempotentInspect
Cached x402 endpoint observations, operated by SpendPreflight. Returns a transparent score (or unknown), its components and seven-day unpaid probe history for an already publicly listed URL. Never fetches the caller's URL or pays the endpoint. Unlisted, unavailable or stale data is not charged. This is not a paid-delivery or compliance guarantee. Provide the exact resource URL; add method when the URL has multiple advertised methods. Use for endpoint history and price context before paying. Use check_payee for wallet/name screening or preflight_payment for an allow/hold/block decision. Price $0.005 per cached lookup (shared free trial first). An unknown score means missing evidence; repeated paid calls may incur another charge. Price: 0.005 USDC. Minimal input example: {"url":"https://api.spendpreflight.com/v1/check","method":"GET"}. Illustrative output excerpt: {"score":null,"components":{},"history":[],"disclaimer":"An unknown score is missing evidence, not an endpoint failure."}. Illustrative output excerpt, not a live result, signature, approval or guarantee. Freshness/data/availability checks still apply. How to pay (MCP): First use the existing shared allowance of 3 eligible calls per IP per UTC day, without payment metadata. This is shared with eligible HTTP trials, not a new allowance. Use an x402-capable MCP client. A generic MCP connector without payment support cannot complete a paid continuation. On payment required, STOP. Inspect the exact accepts amount, asset, network and payTo; obtain explicit wallet/budget approval before continuing. Only after approval, let the configured x402 MCP client attach its signed payload in _meta["x402/payment"] and retry the same tools/call arguments. Never send a separate USDC transfer or paste keys into tool arguments. Never silently fall back from free access to payment. If a signed attempt has an unknown outcome, inspect that authorization/transaction; do not create another automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Exact public HTTP(S) URL already listed by Bazaar or x402scan | |
| method | No | Advertised method such as GET or POST; required if the URL is ambiguous |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| score | Yes | |
| method | Yes | |
| history | Yes | |
| sources | Yes | |
| category | Yes | |
| operator | Yes | |
| assessment | Yes | |
| components | Yes | |
| data_as_of | Yes | |
| disclaimer | Yes | |
| methodology | Yes | |
| observed_at | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnly/openWorld=false/idempotent, and the description adds substantial non-redundant behavior: no fetching of the caller's URL, no payment to the endpoint, no charge for unlisted/unavailable/stale data, $0.005 per cached lookup, a shared 3-call/day free trial, and the exact payment continuation protocol with 'stop and get approval' semantics. It also pre-empts a likely misinterpretation by explaining that an unknown score means missing evidence, not endpoint failure.
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 core purpose and sibling routing are front-loaded and effective, but the body is heavily padded: disclaimers repeat ('not a guarantee', 'illustrative output excerpt, not a live result...', 'freshness/data/availability checks still apply'), and the multi-sentence payment walkthrough dominates the tool's description. Useful information is present but buried in boilerplate that could be trimmed.
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 cached lookup with an output schema and full annotation coverage, the description covers everything an agent needs: input exactness, pricing and free-tier limits, unknown-score semantics, scope exclusions, and safe payment handling. Nothing required to call it correctly or interpret a null result is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are documented, so the baseline is 3; the description slightly exceeds it by reinforcing that the URL must be exact and already public, and by supplying a concrete minimal input example. It does not add new format or syntax detail beyond what the schema already says about the method parameter.
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 resource and scope: cached x402 endpoint observations returning a transparent score, its components, and seven-day unpaid probe history for an already-listed URL. It explicitly distinguishes itself from siblings by naming check_payee and preflight_payment and stating what each is for, so an agent can route without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('endpoint history and price context before paying'), explicit alternatives with conditions ('check_payee for wallet/name screening or preflight_payment for an allow/hold/block decision'), and a parameter-level usage rule ('add method when the URL has multiple advertised methods'). Negative guidance is also present: it never fetches the caller's URL and is not a compliance guarantee.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_listingListing Guard compatibility aliasARead-onlyInspect
Compatibility alias of listing_guard for existing clients. Prefer listing_guard for a new detailed metadata check; these are the same operation, not two independent checks. Bazaar Listing Guard: CDP technical validation plus a bounded heuristic metadata screen for agent-directed instructions, embedded URLs, tool calls, invisible Unicode, long fields and prices above 100x a fresh Scout category median. Returns riskScore, flagged spans and rewrite suggestions. Not Coinbase policy certification or guaranteed detection. Public HTTPS only; no target payment or request bodies stored. Price $0.05 USDC on Base; shared trial may apply. Price: 0.05 USDC. Minimal input example: {"url":"https://api.spendpreflight.com/v1/check","method":"GET"}. Illustrative output excerpt: {"cdpPreflight":{"valid":true,"preflight":[],"index":null},"riskScore":0,"flags":[],"suggestedRewrite":[],"screenComplete":true,"priceCompared":false,"indexActive":null,"example_note":"Illustrative response only; not a live result or safety guarantee."}. Illustrative output excerpt, not a live result, signature, approval or guarantee. Freshness/data/availability checks still apply. How to pay (MCP): First use the existing shared allowance of 3 eligible calls per IP per UTC day, without payment metadata. This is shared with eligible HTTP trials, not a new allowance. Use an x402-capable MCP client. A generic MCP connector without payment support cannot complete a paid continuation. On payment required, STOP. Inspect the exact accepts amount, asset, network and payTo; obtain explicit wallet/budget approval before continuing. Only after approval, let the configured x402 MCP client attach its signed payload in _meta["x402/payment"] and retry the same tools/call arguments. Never send a separate USDC transfer or paste keys into tool arguments. Never silently fall back from free access to payment. If a signed attempt has an unknown outcome, inspect that authorization/transaction; do not create another automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| method | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond readOnlyHint/openWorldHint, it discloses that only public HTTPS targets are accepted, that no payment or request bodies are stored, that pricing is $0.05 USDC on Base, that a shared 3-calls-per-IP-per-UTC-day trial exists and is shared with HTTP trials, and that a generic MCP connector cannot complete a paid continuation. It also sets explicit expectations about the result (riskScore, flagged spans, rewrite suggestions) and states the important limitation that this is not Coinbase policy certification or guaranteed detection.
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 alias/routing statement is correctly front-loaded, but the body is roughly 350 words mixing purpose, screening scope, pricing, two illustrative output excerpts, payment-protocol steps and wallet-safety policy. The payment walkthrough and repeated 'illustrative only, not a live result' disclaimers are operational boilerplate that crowds out the tool's actual contract.
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 no output schema, the illustrative response excerpt (cdpPreflight, riskScore, flags, suggestedRewrite, screenComplete) valuably conveys the return shape, and the safety disclaimers and cost model are all present. The main gap is method-parameter behavior, but otherwise an agent has enough to call it correctly and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it only partly does: 'Public HTTPS only' constrains the url parameter, the 'no request bodies stored' note hints at POST semantics, and one minimal input example is repeated from the schema. The method enum (GET/HEAD/POST) is never explained — what method means for the target fetch, or when to choose each — so half the parameter surface remains undocumented.
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 plainly that this is a compatibility alias of listing_guard performing the same operation, and then describes the resource concretely: CDP technical validation plus a heuristic metadata screen covering URLs, tool calls, invisible Unicode, long fields and outlier prices. An agent can distinguish it from listing_guard without opening either schema. It falls short of 5 only because the core purpose is buried mid-sentence inside a long single-sentence block.
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 an explicit routing rule: use listing_guard for a new detailed metadata check, keep this only for existing clients, and warns the two are 'the same operation, not two independent checks' so they should not both be called. It also spells out the exact escalation path (try the shared free allowance first; on payment required, stop; obtain approval; retry with the x402 payload) and explicitly forbids silent fallback to payment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_payeeCheck payee before payingARead-onlyIdempotentInspect
Payee risk check. Screens a payee wallet address and name against the OFAC SDN sanctions list and checks the merchant domain's registration age and DNS. Returns risk low|medium|high|unknown with flags such as sanctioned_address, sanctioned_name_possible, new_domain. Call this before a USDC payment when you only have a payee name, wallet or domain. Provide at least one of domain, address, or name; inputs may be combined, and domain accepts a hostname or URL. For an x402 challenge or cart and an allow/hold/block spending-rule decision, use preflight_payment instead. Price $0.01 per call (free trial first). Price: 0.01 USDC. Minimal input example: {"name":"Example Shop LLC"}. Illustrative output excerpt: {"risk":"low","flags":[],"sanctions":{"address_match":null,"name_matches":[]},"domain":null,"data_as_of":"2026-10-30T00:00:00Z","disclaimer":"Illustrative non-match, not sanctions clearance."}. Illustrative output excerpt, not a live result, signature, approval or guarantee. Freshness/data/availability checks still apply. How to pay (MCP): First use the existing shared allowance of 3 eligible calls per IP per UTC day, without payment metadata. This is shared with eligible HTTP trials, not a new allowance. Use an x402-capable MCP client. A generic MCP connector without payment support cannot complete a paid continuation. On payment required, STOP. Inspect the exact accepts amount, asset, network and payTo; obtain explicit wallet/budget approval before continuing. Only after approval, let the configured x402 MCP client attach its signed payload in _meta["x402/payment"] and retry the same tools/call arguments. Never send a separate USDC transfer or paste keys into tool arguments. Never silently fall back from free access to payment. If a signed attempt has an unknown outcome, inspect that authorization/transaction; do not create another automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Merchant or payee legal name | |
| domain | No | Merchant domain or URL, e.g. shop.example.com | |
| address | No | Payee wallet address (EVM 0x…, BTC, etc.) |
Output Schema
| Name | Required | Description |
|---|---|---|
| risk | Yes | Overall payee risk |
| flags | Yes | e.g. sanctioned_address, sanctioned_name_exact, sanctioned_name_possible, new_domain, domain_no_dns |
| domain | No | Domain age/DNS signals, or null if no domain given |
| sanctions | Yes | OFAC SDN matches |
| data_as_of | Yes | Timestamp of the sanctions data used |
| disclaimer | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnly/idempotent/openWorld; the description adds the actual screening sources, the risk enum returned, example flags, the freshness disclaimer, and the full free-trial-then-paid-x402 flow including what not to do. The only deduction is the boilerplate payment prose restated in several forms, some of which repeats rather than adds.
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?
Essential purpose, trigger and alternative are front-loaded in the first three sentences. The tail, however, is a long payment-mechanics block plus two overlapping 'illustrative output excerpt / not a live result' disclaimers that pad rather than inform.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet the description still explains the risk levels and flags usefully; combined with pricing, the at-least-one-input rule, and the sibling routing, an agent has everything needed to call it. Minor redundancy with the output schema rather than a gap.
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% (baseline 3), but the description adds a constraint the schema does not express: all three params are optional yet 'at least one of domain, address, or name' is required, and inputs may be combined. It also restates that domain accepts hostname or URL, which the schema already says.
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 ('Screens a payee wallet address and name against the OFAC SDN sanctions list and checks the merchant domain's registration age and DNS') and names the sibling it is not (preflight_payment). An agent can distinguish it from check_token, check_endpoint and preflight_payment without opening a 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?
Explicit trigger condition ('Call this before a USDC payment when you only have a payee name, wallet or domain') plus an explicit alternative and the condition that selects it ('For an x402 challenge or cart... use preflight_payment instead'). Nothing 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.
check_tokenBase token / contract safety signalsARead-onlyInspect
Base contract safety signals from bounded public-chain reads and OFAC. Basic: deployed bytecode and SDN match. Deep adds standard owner(), paused(), totalSupply(), decimals() and ERC-1967 storage observations, exact ERC-1167 minimal-proxy target detection, a Sourcify runtime-verification claim matched to current bytecode, and direct-deployment age when independently supported by the creation receipt. Honeypot/sellability, liquidity locks, holder concentration and scam lists are NOT assessed. Missing data is unknown; never a safe-to-buy verdict. Informational, not financial advice. Basic $0.02; deep $0.05. Shared trial first. Price: 0.02 basic; 0.05 deep USDC. Minimal input example: {"address":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","chain":"eip155:8453","tier":"basic"}. Illustrative output excerpt: {"verdict":"unknown","assessment_complete":false,"unassessed":["honeypot_and_sellability","mint_and_blacklist_privileges","liquidity_lock_or_removability","holder_concentration","non_OFAC_scam_lists","complete_owner_privilege_and_proxy_analysis"]}. Illustrative output excerpt, not a live result, signature, approval or guarantee. Freshness/data/availability checks still apply. How to pay (MCP): First use the existing shared allowance of 3 eligible calls per IP per UTC day, without payment metadata. This is shared with eligible HTTP trials, not a new allowance. Use an x402-capable MCP client. A generic MCP connector without payment support cannot complete a paid continuation. On payment required, STOP. Inspect the exact accepts amount, asset, network and payTo; obtain explicit wallet/budget approval before continuing. Only after approval, let the configured x402 MCP client attach its signed payload in _meta["x402/payment"] and retry the same tools/call arguments. Never send a separate USDC transfer or paste keys into tool arguments. Never silently fall back from free access to payment. If a signed attempt has an unknown outcome, inspect that authorization/transaction; do not create another automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| tier | No | basic | |
| chain | No | ||
| address | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, open-world, non-destructive behavior, and the description adds substantial context: bounded public-chain reads, OFAC screening, unknown data handling, absence of a safe-to-buy verdict, trial limits, and payment requirements. It also discloses unassessed risk categories and the informational-only nature.
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 purpose is front-loaded and the information is mostly relevant, but the text is very long and repeats pricing and trial details. Payment mechanics and disclaimers dominate, reducing conciseness even though the structure remains readable.
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 complexity, paid access flow, tiered behavior, and lack of output schema, the description is highly complete. It includes an illustrative output excerpt, unassessed categories, pricing, trial limits, and payment handling 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 description coverage is 0%, so the description must carry parameter meaning. It explains the basic/deep tier distinction and provides an example input, but it does not fully define the address and chain parameters beyond the example and schema constraints.
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 resource and operation: Base contract safety signals from public-chain reads and OFAC. It clearly differentiates basic versus deep tiers, but does not name or distinguish itself from sibling tools such as security_check or check_payee.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains what basic and deep cover and explicitly lists what is NOT assessed, which helps set expectations. However, it gives no explicit guidance on when to choose this tool over alternatives like security_check, check_payee, or check_listing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
domain_authDomain email-auth DNS observationsARead-onlyInspect
Observe a public domain’s MX, SPF, direct DMARC record, supplied DKIM selectors and resolver-reported DNSSEC evidence.0.005 USDC per usable report, no shared trial. Fixed public Cloudflare DoH only, at most7 queries/shared8s/128KiB, no SMTP, sender authentication test, DNS changes or query storage. Missing selectors and inherited DMARC policy stay unknown. Published records and resolver AD are not proof of inbox delivery, alignment, DNSSEC validation by this service or a secure domain. Price: 0.005 USDC. Minimal input example: {"domain":"example.org","selectors":["selector1"]}. Illustrative output excerpt: {"spf":{"status":"unknown"},"dmarc":{"status":"unknown","alignment_verified":false},"mx":{"status":"unknown","smtp_reachability":"untested"}}. Illustrative output excerpt, not a live result, signature, approval or guarantee. Freshness/data/availability checks still apply. How to pay (MCP): No shared free trial for this tool. Use an x402-capable MCP client. A generic MCP connector without payment support cannot complete a paid continuation. On payment required, STOP. Inspect the exact accepts amount, asset, network and payTo; obtain explicit wallet/budget approval before continuing. Only after approval, let the configured x402 MCP client attach its signed payload in _meta["x402/payment"] and retry the same tools/call arguments. Never send a separate USDC transfer or paste keys into tool arguments. Never silently fall back from free access to payment. If a signed attempt has an unknown outcome, inspect that authorization/transaction; do not create another automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | ||
| selectors | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Substantial disclosure beyond the annotations: fixed Cloudflare DoH resolver, 7 queries per shared 8s window, 128KiB cap, no SMTP, no query storage, no DNS changes, and explicit 'unknown' semantics for missing selectors or inherited DMARC. The idempotentHint=false annotation is consistent with the warning that live DNS results vary. It stops short of 5 because much of the behavioral text is defensive boilerplate repeated around payment rather than crisp operational fact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, which is good, but the text is a dense wall that repeats the price twice ('0.005 USDC' then 'Price: 0.005 USDC'), packs a full x402 payment protocol into a tool description, and appends multiple disclaimer sentences. A large share of the content does not help an agent decide or invoke, so it fails the 'every sentence earns its place' test.
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 no output schema, the description compensates by supplying an illustrative output excerpt showing spf.status, dmarc.status, dmarc.alignment_verified, mx.status and smtp_reachability, plus explicit unknown semantics. Coupled with rate limits and payment requirements, an agent has enough to call it correctly; only the illustrative (non-normative) nature of the return shape leaves a small gap.
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 0%, so the description carries the burden. It does clarify that 'domain' is a public domain and that 'selectors' are DKIM selectors the caller supplies, and provides a minimal input example plus the rule that absent selectors yield 'unknown'. However it never states that selectors is optional or capped at 3, and the maxLength/pattern constraints in the schema are unexplained in prose.
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 sentence names a specific verb and a well-defined resource set: MX, SPF, direct DMARC, supplied DKIM selectors and resolver-reported DNSSEC evidence. An agent can immediately tell this is an email-authentication DNS observation tool. It loses a point only because it never references a sibling, and the closest-sounding sibling (security_check) is left un-contrasted.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: 'Observe a public domain's ... records' plus the caveat that 'Missing selectors and inherited DMARC policy stay unknown' and 'Published records and resolver AD are not proof of inbox delivery.' There is no explicit when-to-use/when-not or named alternative, so the agent must infer that this is the pre-check for domain-based mail posture.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_rv_stationsFillPoint archived station proximityARead-onlyInspect
Nearest RV dump/water stations from FillPoint RV's dated September 17, 2026 ODbL snapshot. $0.01 for bounded straight-line proximity calculation, not live access, potable-water assurance or road routing. Snapshot age and unknown current conditions are explicit. Full underlying projection is free under ODbL. Price: 0.01 USDC. Minimal input example: {"latitude":42.07,"longitude":-88.36,"radius_km":50,"limit":10,"service":"dump"}. Illustrative output excerpt: {"results":[],"distance_method":"great_circle_not_road_distance"}. Illustrative output excerpt, not a live result, signature, approval or guarantee. Freshness/data/availability checks still apply. How to pay (MCP): First use the existing shared allowance of 3 eligible calls per IP per UTC day, without payment metadata. This is shared with eligible HTTP trials, not a new allowance. Use an x402-capable MCP client. A generic MCP connector without payment support cannot complete a paid continuation. On payment required, STOP. Inspect the exact accepts amount, asset, network and payTo; obtain explicit wallet/budget approval before continuing. Only after approval, let the configured x402 MCP client attach its signed payload in _meta["x402/payment"] and retry the same tools/call arguments. Never send a separate USDC transfer or paste keys into tool arguments. Never silently fall back from free access to payment. If a signed attempt has an unknown outcome, inspect that authorization/transaction; do not create another automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| service | No | either | |
| latitude | Yes | ||
| longitude | Yes | ||
| radius_km | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover readOnlyHint and openWorldHint (both consistent with a static archived snapshot read), so the description's additions are genuinely load-bearing: snapshot staleness, unknown current conditions, cost of $0.01 USDC, the shared free allowance, and the exact x402 retry protocol including '_meta["x402/payment"]' and the prohibition on separate USDC transfers or silent fallback. That is unusually rich behavioral disclosure an agent cannot get from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, but the text is bloated with near-duplicate hedging ('Illustrative output excerpt' repeated, 'not a live result, signature, approval or guarantee' stacked with 'Freshness/data/availability checks still apply') and a payment walkthrough longer than the tool description itself. Many sentences do not add distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does supply an illustrative response shape and the key caveat that distances are 'great_circle_not_road_distance', and it covers cost and payment mechanics thoroughly. What's missing is coverage area of the snapshot and parameter meanings, but an agent could call it correctly from this text.
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 0%, so the description must compensate. It provides a concrete example object covering all five parameters and the phrase 'straight-line proximity' implicitly explains radius_km, but it never defines what 'service' enum values mean, what 'limit' bounds, or how radius and limit interact. Partial compensation only.
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 sentence states a specific verb and resource (nearest RV dump/water stations) and names the exact data source (FillPoint's dated September 17, 2026 ODbL snapshot), with the computation method spelled out as bounded straight-line proximity. It doesn't need sibling differentiation because no sibling in the list is a proximity/station lookup, but the signal is diluted by payment boilerplate that follows.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly lists what the tool is NOT for: 'not live access, potable-water assurance or road routing', plus 'Freshness/data/availability checks still apply', which effectively tells an agent when to reach for other tools. It also clearly defines the free-trial path (3 eligible calls per IP per UTC day) versus paid continuation and instructs STOP-and-approve before paying. No named alternatives are given, which keeps it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_service_infoSpendPreflight: pricing, defaults, how to payARead-onlyIdempotentInspect
Free, read-only service reference. Use when you need prices, default spending rules, payment setup, trial allowance, or a ready-to-use example call. If you already have a payment challenge or cart, call preflight_payment directly; this reference call is optional. Takes no arguments and performs no payee screening or payment decision. Use check_payee for standalone payee risk; use preflight_payment for an x402 challenge or cart and an allow/hold/block decision.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| site | Yes | |
| trust | Yes | |
| payment | Yes | |
| pricing | Yes | |
| http_api | Yes | |
| disclaimer | Yes | |
| guarantees | Yes | |
| when_to_use | Yes | |
| client_guard | Yes | |
| example_call | Yes | |
| example_note | Yes | |
| default_rules | Yes | |
| guidance_version | Yes | |
| free_trial_per_day | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint=false, so safety is covered. The description adds genuinely new behavioral scope in the negative: it 'performs no payee screening or payment decision' and takes no arguments, which prevents an agent from wrongly expecting a decision from it. Return format is left to the output schema.
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 sentences, front-loaded with the identity of the tool and its contents, then routing guidance. Dense but every clause carries routing or scope information; the middle 'optional' clause is slightly redundant with the preceding conditional but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. For a zero-argument reference tool with full annotation coverage, the description supplies everything needed to choose it correctly versus its three siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4; the description correctly reinforces this with 'Takes no arguments,' matching the empty schema and the 'Example arguments: {}' note. No parameter semantics are needed or missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('free, read-only service reference') and enumerates the exact content it returns: prices, default spending rules, payment setup, trial allowance, and an example call. An agent can distinguish this from check_payee and preflight_payment immediately.
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 gives when-to-use conditions and names both alternatives with their selecting conditions: 'If you already have a payment challenge or cart, call preflight_payment directly; this reference call is optional' and 'Use check_payee for standalone payee risk.' Nothing 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.
lint_endpointFree x402 LintAInspect
Free x402 Lint by SpendPreflight. Includes a free passive Security Check summary; optional full report with fixes is $0.10, no automatic payment. Checks a public HTTPS endpoint with an unpaid GET: v1/v2 challenge shape, payTo/asset/network syntax, price, Bazaar metadata and browser CORS headers. Returns a heuristic Listing Guard riskScore (0–100 or unknown), fixes and a public seven-day report link. Positive scores include optional paid Listing Guard and monitoring links; no paid call is made. Scores are not safety or Bazaar acceptance guarantees. No payment or credentials; GET cannot validate a POST-only endpoint or paid delivery. Do not submit private URLs. CI Action: https://github.com/spendpreflight/x402-lint-action; report badge: /v1/lint/reports/{id}/badge.svg reads only the existing seven-day snapshot, never runs a check.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: discloses the pricing model, that no payment or credentials are transmitted, what the heuristic riskScore means, and explicit caveats that scores are not safety or Bazaar-acceptance guarantees. Minor tension: annotations set readOnlyHint=false while the description frames the call as a passive, unpaid, non-mutating GET; openWorldHint=true does explain the external reach, so this reads as conservative annotation rather than a real conflict.
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 branding ('Free x402 Lint by SpendPreflight') and then packed with pricing, caveats, a CI Action URL, and a badge path that most agents will never need. The useful routing and constraint sentences are there, but they are buried among promotion and infrastructure detail.
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 no output schema, the description still enumerates the return payload (riskScore 0–100 or unknown, fixes, seven-day report link) and the failure modes it cannot cover. What is missing is only shape-level detail, such as field names or how 'unknown' is distinguished, which is a modest gap for a one-parameter diagnostic 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?
Schema coverage is 0% for the single url parameter, so the description has to carry the meaning, and it does: the argument must be a public HTTPS endpoint and must not be a private URL. That constraint, plus the schema's embedded example, is enough to fill the parameter's semantics even without a formal field 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?
States a specific verb and resource (lints a public HTTPS endpoint via an unpaid GET) and enumerates exactly what is inspected: v1/v2 challenge shape, payTo/asset/network syntax, price, Bazaar metadata, CORS headers. That scope is distinct from siblings like check_endpoint or security_check, so an agent can route without opening a 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?
Gives clear operating conditions: free passive check by default, optional $0.10 full report but 'no automatic payment', and 'no paid call is made', which tells the agent the free path is the default. It also states exclusions ('GET cannot validate a POST-only endpoint or paid delivery') and a privacy rule ('Do not submit private URLs'), though it never names a sibling tool or the situation that would select one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listing_guardBazaar Listing GuardBRead-onlyInspect
Bazaar Listing Guard: CDP technical validation plus a bounded heuristic metadata screen for agent-directed instructions, embedded URLs, tool calls, invisible Unicode, long fields and prices above 100x a fresh Scout category median. Returns riskScore, flagged spans and rewrite suggestions. Not Coinbase policy certification or guaranteed detection. Public HTTPS only; no target payment or request bodies stored. Price $0.05 USDC on Base; shared trial may apply. Price: 0.05 USDC. Minimal input example: {"url":"https://api.spendpreflight.com/v1/check","method":"GET"}. Illustrative output excerpt: {"cdpPreflight":{"valid":true,"preflight":[],"index":null},"riskScore":0,"flags":[],"suggestedRewrite":[],"screenComplete":true,"priceCompared":false,"indexActive":null,"example_note":"Illustrative response only; not a live result or safety guarantee."}. Illustrative output excerpt, not a live result, signature, approval or guarantee. Freshness/data/availability checks still apply. How to pay (MCP): First use the existing shared allowance of 3 eligible calls per IP per UTC day, without payment metadata. This is shared with eligible HTTP trials, not a new allowance. Use an x402-capable MCP client. A generic MCP connector without payment support cannot complete a paid continuation. On payment required, STOP. Inspect the exact accepts amount, asset, network and payTo; obtain explicit wallet/budget approval before continuing. Only after approval, let the configured x402 MCP client attach its signed payload in _meta["x402/payment"] and retry the same tools/call arguments. Never send a separate USDC transfer or paste keys into tool arguments. Never silently fall back from free access to payment. If a signed attempt has an unknown outcome, inspect that authorization/transaction; do not create another automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| method | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only and open-world, and the description adds substantial context beyond them: it states limitations (not policy certification or guaranteed detection), data-handling constraints (no target payment or request bodies stored), public-HTTPS-only scope, trial/payment behavior, and what happens if payment is required. These details materially improve safe invocation.
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 purpose is front-loaded, but the description is heavily bloated with repeated disclaimers, duplicate price statements, illustrative-output caveats, and lengthy payment instructions. Much of this is useful operationally, but the repetition and volume reduce clarity and make it harder to extract the core tool-selection and invocation guidance.
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 no output schema, the description usefully names returned fields and includes an illustrative output excerpt, and it covers key safety and payment constraints. It is complete enough to understand the tool's scope and billing model, though the lack of method semantics and sibling-routing guidance leaves minor gaps.
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 0%, so the description needs to compensate for two required parameters. It adds only the useful constraint that the URL must be public HTTPS and repeats a minimal example; it does not explain the method enum values GET/HEAD/POST, when each is appropriate, or why method matters for the screen.
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 verb and resource: CDP technical validation plus a bounded heuristic metadata screen for Bazaar listings. It also enumerates what is screened (agent-directed instructions, embedded URLs, tool calls, invisible Unicode, long fields, anomalous prices) and what is returned. It is clear, but it does not explicitly distinguish itself from close siblings such as check_listing or check_endpoint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the screening behavior and heavily covers payment mechanics, but it gives no explicit when-to-use guidance versus alternatives. With siblings like check_listing, check_endpoint, and lint_endpoint present, an agent must infer selection rather than being routed by the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
payment_receiptUSDC payment receiptARead-onlyInspect
Verify a native Base USDC transfer by tx_hash (optional log_index), or exact pay_to + decimal amount + past start/end (max 90 days). Ambiguous matches fail without charge. Signed observation, OFAC flags, confirmations and printable HTML. Not invoice ownership or finality proof. Price $0.01 USDC on Base. No free trial. Price: 0.01 USDC. Minimal input example: {"tx_hash":"0x9ede68ce1d33fd5d49d402d11de3127710102235ac5bdf020344345dfeb8ce4f"}. Illustrative output excerpt: {"result":{"kind":"payment_receipt","receipt":{"amount":"0.050000","time":"2026-10-22T22:07:07.000Z"}},"jws":"illustrative-not-a-live-signature"}. Illustrative output excerpt, not a live result, signature, approval or guarantee. Freshness/data/availability checks still apply. How to pay (MCP): No shared free trial for this tool. Use an x402-capable MCP client. A generic MCP connector without payment support cannot complete a paid continuation. On payment required, STOP. Inspect the exact accepts amount, asset, network and payTo; obtain explicit wallet/budget approval before continuing. Only after approval, let the configured x402 MCP client attach its signed payload in _meta["x402/payment"] and retry the same tools/call arguments. Never send a separate USDC transfer or paste keys into tool arguments. Never silently fall back from free access to payment. If a signed attempt has an unknown outcome, inspect that authorization/transaction; do not create another automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| start | No | ||
| amount | No | ||
| pay_to | No | ||
| tx_hash | No | ||
| log_index | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, openWorldHint), it discloses cost ($0.01 USDC on Base), that ambiguous matches fail without charge, what a successful response contains (signed observation, OFAC flags, confirmations, printable HTML), and a detailed x402 payment-continuation protocol. The payment boilerplate is somewhat generic and the price is stated twice, which keeps it from a 5, but the safety-relevant context (never send a separate transfer, never paste keys, inspect unknown-outcome authorizations) is genuinely valuable.
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 useful content is front-loaded, but the text is bloated: the price appears twice ('Price $0.01 USDC on Base... Price: 0.01 USDC'), and the illustrative-output disclaimer is restated two sentences apart. The long payment-procedure block, while relevant, crowds out the input contract.
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?
There is no output schema, but the description compensates with an illustrative response shape and a list of returned artifacts, and it explains the payment handshake an agent must follow. With six optional parameters and a novel pricing model, the definition is nearly sufficient to invoke correctly; only the parameter-level edge cases and effective timeout/retry behavior remain thin.
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 0%, so the description must carry the load, and it does: log_index is framed as a disambiguator for tx_hash, amount is required to be exact decimal, and start/end must be past and span at most 90 days — constraints absent from the schema. It does not describe log_index bounds or the amount precision limit of 6 decimals that the schema encodes.
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 names a specific verb and resource ('Verify a native Base USDC transfer') and enumerates the two accepted lookup modes. It also bounds scope negatively ('Not invoice ownership or finality proof'), which helps an agent avoid over-reading results, though it never positions itself against the sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the two concrete input paths (tx_hash with optional log_index, or pay_to + amount + start/end within 90 days) and the failure condition ('Ambiguous matches fail without charge'). It also states there is no free trial and that a non-x402 MCP client cannot complete a paid call, which is clear when-to-use context. It stops short of naming an alternative tool for cases this one declines.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preflight_paymentPreflight a payment (allow / hold / block)ARead-onlyInspect
Call this before any x402/USDC payment to evaluate the actual challenge or cart before signing. Spend preflight for AI agents. Send the x402 PaymentRequired body (v1 or v2) you received, or a cart, plus optional rules (per-payment max, hold threshold, daily cap, allowlists, new-domain days, endpoint category price multiple, liveness and payTo changes). Returns allow|hold|block with reasons, the cheapest acceptable payment option, and a receipt id. Read-only: never signs, settles, or holds funds. Use before every payment. It includes payee screening in its spending-rule decision. For standalone wallet, name, or domain screening without a payment, use check_payee instead. Each repeat call creates a new receipt and may consume another trial or paid call. Price $0.02 per call (free trial first). Price: 0.02 USDC. Minimal input example: {"cart":{"merchant_name":"Example Shop LLC","total_usd":0.01},"rules":{"max_per_payment_usd":1},"spent_today_usd":0}. Illustrative output excerpt: {"decision":"hold","reasons":["hold: missing fresh index evidence"],"chosen_option":null,"options_evaluated":0,"payee":null,"index_evidence":{"status":"unknown","observed_at":null,"note":"Missing evidence remains unknown."},"receipt":{"id":"illustration","ts":"2026-10-30T00:00:00Z","input_sha256":"0000000000000000000000000000000000000000000000000000000000000000","decision":"hold","jws":"illustrative-not-a-live-signature"}}. Illustrative output excerpt, not a live result, signature, approval or guarantee. Freshness/data/availability checks still apply. How to pay (MCP): First use the existing shared allowance of 3 eligible calls per IP per UTC day, without payment metadata. This is shared with eligible HTTP trials, not a new allowance. Use an x402-capable MCP client. A generic MCP connector without payment support cannot complete a paid continuation. On payment required, STOP. Inspect the exact accepts amount, asset, network and payTo; obtain explicit wallet/budget approval before continuing. Only after approval, let the configured x402 MCP client attach its signed payload in _meta["x402/payment"] and retry the same tools/call arguments. Never send a separate USDC transfer or paste keys into tool arguments. Never silently fall back from free access to payment. If a signed attempt has an unknown outcome, inspect that authorization/transaction; do not create another automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| cart | No | Use instead of challenge for agent checkout / card payments | |
| rules | No | Spending rules; all optional. See get_service_info for defaults. | |
| challenge | No | The x402 PaymentRequired body (v1 or v2) your agent received with HTTP 402 | |
| resource_url | No | URL that returned the 402, if not inside the challenge | |
| resource_method | No | Advertised method for an indexed URL with multiple methods | |
| spent_today_usd | No | What this agent already spent today, for the daily cap |
Output Schema
| Name | Required | Description |
|---|---|---|
| payee | No | Payee screening details |
| reasons | Yes | Every rule that fired, prefixed with its decision |
| receipt | Yes | Signed decision; keep privately for audit |
| decision | Yes | Pay on allow, ask a human on hold, never pay on block |
| chosen_option | No | The cheapest acceptable payment option |
| index_evidence | Yes | |
| options_evaluated | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=false; the description adds substantial context beyond that. It explains the allow|hold|block decision, receipt creation on repeat calls, the no-sign/no-settle/no-hold guarantee, pricing, trial allowance, and the requirement to stop and inspect payment terms before continuing.
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 opening sentence is well front-loaded, but the description is long and contains redundancy, such as the price appearing twice and repeated 'illustrative' caveats around the output excerpt. The payment how-to is useful but could be tightened for an agent that mainly needs selection and invocation guidance.
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 x402 payment flows, nested inputs, annotations, and an output schema, the description covers what the tool returns and how to invoke it safely. Nothing critical is missing for an agent to decide whether to call it and how to proceed after a payment-required response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds practical meaning: it says to send the x402 PaymentRequired body (v1 or v2) or a cart, enumerates the optional rules categories, and notes spent_today_usd's role in the daily cap. The minimal input example further clarifies intended argument shape.
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 sentence states a specific verb and resource: call before any x402/USDC payment to evaluate a challenge or cart before signing. It clearly distinguishes itself from check_payee by scope (payment preflight vs. standalone screening), so an agent can choose without opening either 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?
Explicitly says when to use it ('before any x402/USDC payment', 'before every payment') and names the alternative for a different need: check_payee for standalone wallet/name/domain screening without a payment. It also covers the retry path after payment approval, which is unusual and valuable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quote_checkHistorical x402 Quote CheckBRead-onlyInspect
Compare a supplied x402 quote with the latest comparable cached public unpaid quote and disclosed retained history. Scout keeps only the latest probe; the separate public index can retain seven days. $0.001 USDC on Base for a usable comparison, no trial. Missing/stale/ambiguous evidence returns unknown without charge. Never fetches or pays the target. Informational historical comparison, not payment approval or loss prevention. Price: 0.001 USDC. Minimal input example: {"url":"https://api.example.com/data","amount":"10000","payTo":"0x1111111111111111111111111111111111111111","asset":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","network":"eip155:8453"}. Illustrative output excerpt: {"status":"unknown","baseline":null,"multiple":null,"suggested_max_amount_per_payment":null,"not_charged":true}. Illustrative output excerpt, not a live result, signature, approval or guarantee. Freshness/data/availability checks still apply. How to pay (MCP): Unknown evidence returns without charge; a usable comparison requires payment. No shared trial. Use an x402-capable MCP client. A generic MCP connector without payment support cannot complete a paid continuation. On payment required, STOP. Inspect the exact accepts amount, asset, network and payTo; obtain explicit wallet/budget approval before continuing. Only after approval, let the configured x402 MCP client attach its signed payload in _meta["x402/payment"] and retry the same tools/call arguments. Never send a separate USDC transfer or paste keys into tool arguments. Never silently fall back from free access to payment. If a signed attempt has an unknown outcome, inspect that authorization/transaction; do not create another automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| asset | Yes | ||
| payTo | Yes | ||
| amount | Yes | ||
| method | No | ||
| network | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description contains rich behavioral detail, but it contradicts the readOnlyHint=true annotation by repeatedly stating that a usable comparison costs $0.001 USDC, requires payment, and requires a signed x402 payment payload. A paid operation that settles or requires wallet approval is a side effect and cannot be treated as read-only, so the description contradicts the structured annotation.
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 purpose and price are front-loaded, but the description is long and repetitive: it repeats the price, payment warning, illustrative-output caveat, and x402 payment procedure multiple times. Much of the payment safety guidance is useful, but the text is not tightly edited.
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 paid comparison tool with no output schema, the description supplies an illustrative output excerpt, explains unknown/no-charge behavior, and details the x402 payment flow. It still omits parameter semantics and explicit sibling routing, but otherwise gives an agent enough operational context to avoid unsafe payment handling.
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 0% and there are six parameters, so the description must carry the burden. It provides an example covering url, amount, payTo, asset, and network, but does not explain amount units, asset/network formats, payTo semantics, or the optional method parameter, leaving important parameter meaning implicit.
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 verb and resource: compare a supplied x402 quote against cached public unpaid quote data and retained history. It is clear enough to distinguish this as a historical quote comparison rather than a payment approval tool, though it does not explicitly differentiate itself from sibling tools such as preflight_payment or security_check.
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 usage context: this is informational historical comparison, not payment approval or loss prevention, and it explains that missing/stale/ambiguous evidence returns unknown without charge. It does not name specific sibling alternatives, but it does set useful boundaries around when this tool is and is not appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
security_checkx402 Security Check (Lint Pro)ARead-onlyInspect
x402 Security Check (Lint Pro). Detailed passive findings and source-linked fixes from an existing, unexpired free Lint report. $0.10 USDC on Base, no trial or automatic payment. No new target request. Resource binding is advertised only; paid-response caching, replay/idempotency, header parser behavior and settlement-before-delivery remain unknown. Not an audit or safety guarantee. Price: 0.10 USDC. Minimal input example: {"report_id":"00000000-0000-4000-8000-000000000000"}. Illustrative output excerpt: {"mode":"passive_unpaid","assessment_complete":false,"unknown_count":5,"methodology":{"target_requests_added":0,"payment_tests":0}}. Illustrative output excerpt, not a live result, signature, approval or guarantee. Freshness/data/availability checks still apply. How to pay (MCP): Inspect the free Lint security summary first; a current complete report_id is required for the paid detail. No automatic refresh or shared trial. Use an x402-capable MCP client. A generic MCP connector without payment support cannot complete a paid continuation. On payment required, STOP. Inspect the exact accepts amount, asset, network and payTo; obtain explicit wallet/budget approval before continuing. Only after approval, let the configured x402 MCP client attach its signed payload in _meta["x402/payment"] and retry the same tools/call arguments. Never send a separate USDC transfer or paste keys into tool arguments. Never silently fall back from free access to payment. If a signed attempt has an unknown outcome, inspect that authorization/transaction; do not create another automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| report_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, and the description goes well beyond them: exact price (0.10 USDC on Base), no trial and no automatic payment, what is explicitly NOT disclosed (paid-response caching, replay/idempotency, header parser behavior, settlement-before-delivery), that resource binding is 'advertised only', and that results are not an audit or safety guarantee. It even gives an illustrative output showing assessment_complete=false and unknown_count=5, correctly labeled as not a live result, and prescribes behavior for an unknown payment outcome rather than auto-retrying.
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?
Core facts are front-loaded, but the body is heavily padded with near-duplicate disclaimers: two separate 'Illustrative output excerpt' passages and repeated 'not a live result / signature / approval / guarantee' caveats around an already-shown example. The payment safety instructions are valuable yet restated in multiple forms, roughly doubling the length without adding new 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?
For a paid, no-output-schema tool this is thorough: price and asset/network, example arguments, an illustrative (clearly marked non-live) response shape, explicit statement of which risks remain unmeasured, and the exact payment handshake. An agent has everything needed to decide whether it can call this and how to proceed if payment is demanded.
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 0% for the single report_id parameter, so the description must carry the meaning — and it does: the id must come from an existing, unexpired, complete free Lint report, and an example UUID is supplied. What is missing is whether an expired or incomplete id produces a specific failure mode beyond the generic 'freshness/data/availability checks still apply' line.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states the resource and scope precisely: detailed passive findings plus source-linked fixes drawn from an already-existing, unexpired free Lint report, with 'No new target request' making clear it does not scan anything new. That implicitly separates it from the scanning sibling (lint_endpoint), though the sibling is never named directly, so an agent must infer the handoff relationship.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit sequencing: inspect the free Lint summary first, obtain a current complete report_id, use only an x402-capable MCP client, and on payment-required STOP and get explicit wallet/budget approval before letting the client attach _meta["x402/payment"] and retry the identical arguments. It also names the failure mode ('a generic MCP connector without payment support cannot complete a paid continuation') and forbids silent fallback from free to paid, which is unusually complete routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seller_indexx402 Seller IndexARead-onlyInspect
Search cached public x402 sellers by capability. First three matches free; extended results up to12 cost0.01 USDC on Base, no trial. Rank a bounded candidate pool by observed unpaid availability, 402 shape, same-asset atomic price consistency and current matching public Lint metadata risk. Missing evidence stays unknown; scores are not safety, uptime guarantees, identity or proof of paid delivery. No new endpoint request or private monitoring data. Price: 0.01 USDC. Minimal input example: {"capability":"weather forecast","limit":3}. Illustrative output excerpt: {"results":[],"free_top":3,"paid_available":false,"not_charged":true}. Illustrative output excerpt, not a live result, signature, approval or guarantee. Freshness/data/availability checks still apply. How to pay (MCP): Top three cached matches are free; extended results cost the quoted fee only when extra matches exist. No shared trial. Use an x402-capable MCP client. A generic MCP connector without payment support cannot complete a paid continuation. On payment required, STOP. Inspect the exact accepts amount, asset, network and payTo; obtain explicit wallet/budget approval before continuing. Only after approval, let the configured x402 MCP client attach its signed payload in _meta["x402/payment"] and retry the same tools/call arguments. Never send a separate USDC transfer or paste keys into tool arguments. Never silently fall back from free access to payment. If a signed attempt has an unknown outcome, inspect that authorization/transaction; do not create another automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| network | No | ||
| capability | Yes | ||
| max_price_usd | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnly/openWorld=false; the description adds substantial context beyond them: results come from a cache with no new endpoint request, ranking inputs (observed unpaid availability, 402 shape, price consistency, Lint risk), that missing evidence stays unknown, and that scores are not safety or proof of paid delivery. The payment-failure and unknown-outcome handling rules are exactly the kind of behavioral disclosure an agent needs and cannot infer.
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 purpose and pricing are front-loaded and the 'How to pay (MCP)' section gives readable structure. However, the 'Illustrative output excerpt' and its 'not a live result / signature / approval or guarantee' boilerplate appear twice, and the stacked Never/Only-after hedges add bulk without new 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?
For a paid, stateful-looking read tool with no output schema and 0% param coverage, the description does cover pricing, payment handshake, failure handling and a sample response shape. It is still incomplete on two of four parameters and never states what the ranked result fields actually contain beyond the empty-results excerpt.
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 0%, so the description carries the full burden, yet only 'capability' and 'limit' get any treatment (example input plus 'up to 12' free-vs-paid framing). The 'network' and 'max_price_usd' parameters are never explained, leaving half the inputs with no semantics anywhere.
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 'Search cached public x402 sellers by capability' states a specific verb, resource and scope, and 'cached public' implicitly separates it from the check_* / lint_* siblings that probe live endpoints. It stops short of naming an alternative tool, so a 5 is not warranted.
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 concrete conditions: first three matches free, extended results cost 0.01 USDC, no shared trial, and a generic MCP connector without payment support cannot complete a paid continuation. It also prescribes the STOP / inspect accepts / obtain approval / retry with _meta['x402/payment'] flow. What it lacks is guidance on when to choose this index versus check_endpoint, check_listing or lint_endpoint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
size_solarWattpath solar energy-balance estimateARead-onlyInspect
Off-grid PV energy-balance estimate based on Wattpath by Nomad Energy Club. Supply daily loads, peak sun hours, PV losses, and optional battery assumptions. No location/weather lookup, electrical design, surge or installation certification. $0.02 per calculation; no stored inputs. Price: 0.02 USDC. Minimal input example: {"loads":[{"watts":100,"hours_per_day":5,"quantity":1,"kind":"dc"}],"peak_sun_hours":4,"pv_loss_fraction":0.2,"panel_watts":200,"battery":{"voltage":12,"usable_fraction":0.8,"autonomy_days":2}}. Illustrative output excerpt: {"daily_energy_wh":{"battery_side":400},"pv":{"minimum_nameplate_watts":125,"rounded_up_watts":125},"assumptions":{"energy_balance_only":true,"weather_or_location_lookup":false}}. Illustrative output excerpt, not a live result, signature, approval or guarantee. Freshness/data/availability checks still apply. How to pay (MCP): First use the existing shared allowance of 3 eligible calls per IP per UTC day, without payment metadata. This is shared with eligible HTTP trials, not a new allowance. Use an x402-capable MCP client. A generic MCP connector without payment support cannot complete a paid continuation. On payment required, STOP. Inspect the exact accepts amount, asset, network and payTo; obtain explicit wallet/budget approval before continuing. Only after approval, let the configured x402 MCP client attach its signed payload in _meta["x402/payment"] and retry the same tools/call arguments. Never send a separate USDC transfer or paste keys into tool arguments. Never silently fall back from free access to payment. If a signed attempt has an unknown outcome, inspect that authorization/transaction; do not create another automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| loads | Yes | ||
| battery | No | ||
| panel_watts | No | ||
| peak_sun_hours | Yes | ||
| pv_loss_fraction | Yes | ||
| inverter_efficiency | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=true and openWorldHint=false; the description goes far beyond them, disclosing cost ($0.02 per calculation / 0.02 USDC), that inputs are not stored, a 3-call-per-IP-per-UTC-day free allowance shared with HTTP trials, that a non-x402 MCP client cannot complete a paid continuation, and explicit stop/retry semantics via _meta['x402/payment']. It also states the results are illustrative and not live, and warns against silent free-to-paid fallback and automatic retries on unknown outcomes — exactly the operational hazards 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 purpose is correctly front-loaded in sentence one, and the input/output examples are useful. But roughly two-thirds of the text is payment and legal boilerplate, and the output excerpt is presented twice with redundant disclaimers ('Illustrative output excerpt...' repeated), which dilutes the signal an agent needs to decide and call.
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 read-only calculation with no output schema, the description does supply an illustrative output shape (daily_energy_wh.battery_side, pv.minimum_nameplate_watts, assumptions flags), plus the nested-argument example, so an agent knows roughly what comes back. Remaining gaps are per-field semantics for panel_watts and inverter_efficiency rather than anything about behavior or return values.
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 0% (only a bare example sits in the schema's description field), so the description must carry the load; it partially does by naming loads, peak sun hours, PV losses and optional battery assumptions, and by giving a concrete nested example. But panel_watts and inverter_efficiency appear only in the example or not at all, and nothing explains units or meaning for peak_sun_hours or how load watts/quantity interact. Partial compensation, not full.
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 sentence names a specific artifact ('Off-grid PV energy-balance estimate') and the computation it performs (loads + peak sun hours + PV losses -> energy balance). It also states explicit non-scope (no location/weather lookup, electrical design, surge or installation certification), which prevents the common misread of this as a full design tool. It does not name a sibling alternative, but the sibling set (endpoint/listing/payment checks) is so far from this domain that no differentiation is needed.
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 lists the inputs to supply and marks the battery assumptions as optional, which implies the calling context, and the exclusion sentence rules out weather/location-based sizing. However, it never states positively when an agent should reach for this tool versus reasoning about PV sizing itself, nor what result to expect from omitting battery versus providing it. The lengthy payment procedure is 'how to pay', not 'when to use'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_payee_bindingERC-8478 Draft Payee VerificationARead-onlyInspect
ERC-8478 Draft payee verification: endpoint origin and ERC-8004 agent wallet or EIP-712 delegation at one pinned registry block. Nine explicit outcomes; not-read is uncharged. Signed JSON observation, not payment approval or a safety guarantee. Shared trial may apply. Price: 0.01 USDC. Minimal input example: {"requirement":{"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","amount":"10000","payTo":"0xBf4164e07552e4c1b1B1597E72C7acAA3F0a1c58"},"resource_url":"https://api.spendpreflight.com/v1/check"}. Illustrative output excerpt: {"result":{"kind":"payee_binding","outcome":"no-identity","block_number":null,"block_timestamp":null},"jws":"illustrative-not-a-live-signature"}. Illustrative output excerpt, not a live result, signature, approval or guarantee. Freshness/data/availability checks still apply. How to pay (MCP): First use the existing shared allowance of 3 eligible calls per IP per UTC day, without payment metadata. This is shared with eligible HTTP trials, not a new allowance. Use an x402-capable MCP client. A generic MCP connector without payment support cannot complete a paid continuation. On payment required, STOP. Inspect the exact accepts amount, asset, network and payTo; obtain explicit wallet/budget approval before continuing. Only after approval, let the configured x402 MCP client attach its signed payload in _meta["x402/payment"] and retry the same tools/call arguments. Never send a separate USDC transfer or paste keys into tool arguments. Never silently fall back from free access to payment. If a signed attempt has an unknown outcome, inspect that authorization/transaction; do not create another automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | No | ||
| registry | No | ||
| requirement | Yes | ||
| resource_url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Well beyond the annotations, the description discloses cost (0.01 USDC), a shared trial of 3 calls per IP per UTC day, that 'not-read is uncharged', that there are nine explicit outcomes, that the result is a signed JSON observation rather than an approval, and that payment requires explicit wallet/budget approval with no silent fallback. These are exactly the side-effect and failure-mode details annotations cannot convey. It stops short of enumerating the nine outcomes or saying what triggers each, which would be the full 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and the pinned-block scope are front-loaded, which is good, but the body is bloated: the illustrative-output disclaimer is stated twice ('not a live result, signature, approval or guarantee'), and the x402 payment walkthrough runs several sentences longer than needed. Dense but padded with repeated caveats.
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?
There is no output schema, and the description compensates by showing an illustrative result object with kind/outcome/block_number/block_timestamp plus a jws field, which is genuinely useful. However, with a nested requirement object, an undocumented agentId/registry, and nine unenumerated outcomes, an agent still lacks enough to predict what it will get back or how to fill the optional fields.
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 0%, so the description must carry the parameter burden, and it only partially does. The inline example illustrates the nested requirement object (scheme/network/asset/amount/payTo) and resource_url, but agentId and registry — including that registry expects an eip155:chainId:0x... form — are never explained in prose.
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 clause names a specific verb and resource: verify a payee binding via endpoint origin plus ERC-8004 agent wallet or EIP-712 delegation at a pinned registry block. That is far more specific than a restated title. It does not, however, distinguish itself from sibling tools such as check_payee, preflight_payment, or security_check, which an agent would need to choose between.
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 only implied: the tool verifies payee binding before paying, and the description says the result is 'not payment approval' and that freshness/data checks still apply. No sentence says when to call this instead of check_payee or preflight_payment. The bulk of the 'how' text is payment-transport mechanics, not tool-selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wallet_statementUSDC wallet statementARead-onlyInspect
Export native Base USDC wallet transfers as JSON or CSV for a past range up to 90 days, start inclusive/end exclusive. Exact decimal running balances, counterparties and OFAC flags. Up to 1000 transfers/128 RPC calls/25 seconds; oversized or unavailable historical data fails without charge. Informational, not tax advice. Price $0.05 USDC on Base. No free trial. Price: 0.05 USDC. Minimal input example: {"address":"0xBf4164e07552e4c1b1B1597E72C7acAA3F0a1c58","start":"2026-10-22T22:07:00Z","end":"2026-10-22T22:08:00Z","format":"json"}. Illustrative output excerpt: {"kind":"wallet_statement","opening_balance":"4.188374","closing_balance":"4.238374","complete":true,"rows":[{"direction":"in","amount":"0.050000","running_balance":"4.238374"}]}. Illustrative output excerpt, not a live result, signature, approval or guarantee. Freshness/data/availability checks still apply. How to pay (MCP): No shared free trial for this tool. Use an x402-capable MCP client. A generic MCP connector without payment support cannot complete a paid continuation. On payment required, STOP. Inspect the exact accepts amount, asset, network and payTo; obtain explicit wallet/budget approval before continuing. Only after approval, let the configured x402 MCP client attach its signed payload in _meta["x402/payment"] and retry the same tools/call arguments. Never send a separate USDC transfer or paste keys into tool arguments. Never silently fall back from free access to payment. If a signed attempt has an unknown outcome, inspect that authorization/transaction; do not create another automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | ||
| start | Yes | ||
| format | No | json | |
| address | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations: hard limits (1000 transfers / 128 RPC calls / 25 seconds), failure-without-charge semantics, exact price and network, x402 payment mechanics including _meta["x402/payment"] retry, and warnings against silent fallback or duplicate authorizations. This is rich context an agent could not infer from readOnlyHint/openWorldHint.
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 purpose is front-loaded, but the body is heavily bloated: price is stated three times ('Price $0.05 USDC on Base. No free trial. Price: 0.05 USDC.'), disclaimers repeat ('Illustrative output excerpt' twice, 'not tax advice'), and payment instructions dominate over core tool semantics. Meaningful content is buried in redundancy.
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 the essentials an agent needs for a paid, read-only export: input example, output shape excerpt, limits, failure behavior, and payment flow. Output schema is absent but an illustrative excerpt is supplied. The verbosity costs some clarity, but 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?
With 0% schema description coverage, the description carries the burden and largely does: it gives a full minimal input example, states start/end boundary semantics, and identifies format as json/csv. The address parameter is only conveyed via the example rather than explained (no mention that it must be a 40-hex 0x address), so a small gap remains.
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?
Opens with a specific verb and resource: 'Export native Base USDC wallet transfers as JSON or CSV for a past range up to 90 days.' The scope (native Base USDC, 90-day window, json/csv) is unambiguous. It does not explicitly contrast with any sibling, but the resource is distinct enough from the check_*/quote_* siblings that an agent can select it correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives usable preconditions: past ranges only, max 90 days, start inclusive/end exclusive, no free trial, and a detailed payment-required workflow with an explicit instruction to STOP and seek approval. It lacks explicit routing to alternatives (e.g., when to prefer payment_receipt or check_* instead), which keeps it below 5.
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
- Added
verify_payee_binding
2 tool updates
- Changed
payment_receipt1 field changed- changed
Input schema / descriptionPrevious value: -"Example arguments: {\"tx_hash\":\"0x1111111111111111111111111111111111111111111111111111111111111111\"}"New value: +"Example arguments: {\"tx_hash\":\"0x9ede68ce1d33fd5d49d402d11de3127710102235ac5bdf020344345dfeb8ce4f\"}"
- Changed
wallet_statement1 field changed- changed
Input schema / descriptionPrevious value: -"Example arguments: {\"address\":\"0x1111111111111111111111111111111111111111\",\"start\":\"2026-10-01T00:00:00Z\",\"end\":\"2026-10-02T00:00:00Z\",\"format\":\"json\"}"New value: +"Example arguments: {\"address\":\"0xBf4164e07552e4c1b1B1597E72C7acAA3F0a1c58\",\"start\":\"2026-10-22T22:07:00Z\",\"end\":\"2026-10-22T22:08:00Z\",\"format\":\"json\"}"
1 tool update
- Added
domain_auth
1 tool update
- Added
seller_index
1 tool update
- Added
quote_check
1 tool update
- Added
security_check
2 tool updates
- Added
payment_receipt - Added
wallet_statement
1 tool update
- Added
check_listing
1 tool update
- Added
listing_guard
2 tool updates
- Added
find_rv_stations - Added
size_solar
1 tool update
- Added
check_token
1 tool update
- Added
lint_endpoint
4 tool updates
- Changed
check_endpoint1 field changed- added
Input schema / descriptionAdded value: +"Example arguments: {\"url\":\"https://api.spendpreflight.com/v1/check\",\"method\":\"GET\"}"
- Changed
check_payee1 field changed- added
Input schema / descriptionAdded value: +"Example arguments: {\"name\":\"Example Shop LLC\"}"
- Changed
get_service_info6 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / descriptionAdded value: +"Example arguments: {}" - added
Output schema / properties / example_callAdded value: +{ + "additionalProperties": {}, + "type": "object" +} - added
Output schema / properties / example_noteAdded value: +{ + "type": "string" +} - added
Output schema / properties / guidance_versionAdded value: +{ + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "when_to_use", - "pricing", - "free_trial_per_day", - "payment", - "default_rules", - "http_api", - "client_guard", - "site", - "guarantees", - "trust", - "disclaimer" -]New value: +[ + "guidance_version", + "example_call", + "example_note", + "when_to_use", + "pricing", + "free_trial_per_day", + "payment", + "default_rules", + "http_api", + "client_guard", + "site", + "guarantees", + "trust", + "disclaimer" +]
- Changed
preflight_payment1 field changed- added
Input schema / descriptionAdded value: +"Example arguments: {\"cart\":{\"merchant_name\":\"Example Shop LLC\",\"total_usd\":0.01},\"rules\":{\"max_per_payment_usd\":1},\"spent_today_usd\":0}"
1 tool update
- Changed
check_payee1 field changed- changed
Input schema / properties / address / descriptionPrevious value: -"Payee wallet address (EVM 0x…, BTC, etc.)"New value: +"Payee wallet address (EVM 0x…, BTC, etc.)"
Publisher details
- Operator
- SpendPreflight · Publisher source
- Operator website
- https://spendpreflight.com · Publisher source
- Vendor relationship
- First-party · Publisher source
- Documentation
- https://spendpreflight.com/#assistants · Publisher source
- Trust center
- https://spendpreflight.com/trust.html · Publisher source
- Restrictions
- No account, API key or OAuth required. Service info is free. Check/preflight share 3 free calls per IP per UTC day with HTTP; further calls require x402-over-MCP and USDC on Base ($0.01 check, $0.02 preflight). Informational screening; never signs, holds or settles the payment reviewed. · Publisher source
Related MCP Connectors
x402 payment verification: safe-to-pay preflight, on-chain receipt proof, OFAC/scam wallet screen
Hosted x402 preflight for action authority, payment mandate, destination, expiry and replay.
Screen a party vs OFAC, EU and UK sanctions lists before paying. $0.02/call via x402.
Pay-per-call checks for AI agents: sanctions, MiCA, French KYB, AI Act. USDC via x402.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceProvides a pre-signature payment-risk verdict (GO/HOLD/STOP) for x402 payments based on counterparty reputation, price anomaly, and OFAC sanctions.-
- AlicenseAqualityAmaintenanceEnables agents and developers to check x402 endpoints, assess scores and wallet risks, authorize payments with spending rules, and report outcomes before an agent pays.6MIT
- AlicenseNot gradedqualityFmaintenanceArchived and no longer maintained. Tools and prices shown here are out of date. Use the maintained server: glama.ai/mcp/servers/OceanAlt666/oceanalt-aml-mcp (GitHub: OceanAlt666/oceanalt-aml-mcp).220 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to run a free fail-closed preflight gate on x402 payment challenges and transactions before signing, plus five USDC-paid on-chain truth checks covering arbitrage profitability, token safety, swap routing, quote validation, and trade sizing. Each check returns a verdict with pinned-block evidence and a verifiable receipt.Apache 2.0
Glama MCP Gateway
Add one secure layer between your agents and this server.