Lumière PayCheck
Server Details
Check any x402 endpoint before your AI agent pays it: trust grade, verdict, and hijack checks.
- Status
- Healthy
- Uptime
- 99.1% over 21 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- Book0fEli/lumiere-paycheck
- GitHub Stars
- 0
- Server Listing
- Lumière PayCheck
TDQS
Scored across 6 tools
Each tool targets a distinct resource and action: aggregate stats (catalog_stats), single-endpoint lookup (check_endpoint), pre-payment gating (check_payment), discovery (top_endpoints), paid report (get_full_report), and post-payment feedback (report_outcome). The descriptions explicitly cross-reference each other ('use check_payment instead', 'use top_endpoints for discovery'), eliminating overlap.
All names use consistent snake_case, and most follow a verb_noun pattern (check_endpoint, check_payment, get_full_report, report_outcome). The two noun-first names (catalog_stats, top_endpoints) are minor deviations but remain clear and predictable.
Six tools is well-scoped for a monitoring/trust service, with no redundancy. Each tool earns its place by covering a distinct step in the endpoint-trust workflow.
The surface covers the full lifecycle: catalog overview, discovery, per-endpoint grading, payment approval, paid deep-dive, and buyer feedback. Minor gaps exist (e.g. no explicit search or batch-check tool on the free surface), but core workflows have no dead ends.
Available Tools
6 toolscatalog_statsx402 catalog statisticsARead-onlyIdempotentInspect
Get an overview of the whole monitored x402 catalog: how many endpoints are monitored, how many fall into each verdict (proceed, caution, avoid, free, insufficient_data), and when scores were last computed. Use it for context or reporting, for example to tell a user how much of the x402 ecosystem passes checks. It says nothing about any single endpoint: use check_endpoint for one endpoint, top_endpoints for a ranked list, or check_payment before paying. Read-only, free, no parameters.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| forTeams | No | Short note about team plans (per-agent keys, spend limits, audit trail) |
| scoredAt | Yes | When scores were last computed |
| byVerdict | Yes | Endpoint count per verdict |
| endpoints | Yes | Endpoints monitored |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds that the tool is free and parameterless and characterizes the data as catalog-wide aggregates rather than per-endpoint detail, which is useful scoping context. It does not add anything beyond that (no rate limits, caching, or freshness caveats), so it is good but not rich.
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 scope and returned content before the routing guidance. Every sentence carries information, though the verdict enumeration and the 'for context or reporting' example add a little redundancy that keeps it short of maximally tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description need not detail return values, and it still sketches the shape of the result (counts per verdict, last computed). With zero parameters, full annotation coverage, and explicit sibling routing, an agent has everything needed to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, which is the baseline-4 case. The description's closing 'no parameters' statement is consistent with the empty input schema and confirms that no filtering or pagination options exist.
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 ('Get an overview of the whole monitored x402 catalog') and enumerates the exact content returned: endpoint counts, verdict breakdown (proceed, caution, avoid, free, insufficient_data), and last-computed timestamps. It explicitly distinguishes itself from siblings by naming check_endpoint, top_endpoints, and check_payment as the tools for single-endpoint or ranked-list needs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('for context or reporting, for example to tell a user how much of the x402 ecosystem passes checks') and explicit when-not ('says nothing about any single endpoint'), with a named alternative for each adjacent use case. Nothing is left to inference about routing between this and its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_endpointCheck an x402 endpointARead-onlyIdempotentInspect
Get the trust verdict for one x402 endpoint: score (0-100), grade (A-F), and verdict (proceed, caution, avoid, free, or insufficient_data), plus uptime, delivery-test status, payout-wallet incidents, and how many independent buyers stand behind the seller's buyer wallets (we count customers, not wallets). Use it when you're deciding whether an endpoint is trustworthy at all, before you have a price quote. When you already have the 402 quote (amount and payTo) and are about to pay, use check_payment instead: it runs this same check and also verifies the price and wallet. To discover good endpoints rather than check a known one, use top_endpoints. Read-only and free; reflects monitoring every 30 minutes and real test payments, so a brand-new endpoint may return insufficient_data. Endpoints not in the catalog return monitored: false. API docs: https://github.com/Book0fEli/lumiere-paycheck/blob/main/docs/api.md
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Full URL of the x402 endpoint including path, exactly as the agent will call it, e.g. https://api.example.com/v1/price. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | The endpoint checked |
| auth | No | Present when our paid test was refused for want of the seller's own sign-in (no money was taken). Have access? Send hasAccess: true to check_payment. |
| page | No | Public page with the full history |
| grade | No | A delivered cleanly; B delivered with a caveat; C unconfirmed; D doesn't work as listed, no money lost; F costs money or unsafe; ? with too little data |
| score | No | 0-100; null for free resources |
| advice | No | What the verdict means for paying it, naming the actual cause |
| buyers | No | Who is really behind the seller's buyers. Never changes the grade. |
| points | No | The points behind the score: uptime /40, speed /15, stability /25, delivery /20 |
| probes | No | Checks counted in the last 7 days |
| values | No | Automatic value checks on the latest paid response. A warning caps the grade at B, never avoid. |
| listing | No | Present only when the latest paid response differs from the listing's example or schema. The data is delivered. |
| reasons | No | Every factor behind the grade, most important first: paid tests (with date and what came back), uptime, speed, payout wallet, price, listing |
| verdict | Yes | proceed | caution | avoid | free | insufficient_data |
| delivery | No | verified = a real test payment was delivered; failing (see advice: an error after payment that didn't collect the money is D/caution; taking the money and failing is F/avoid); or unverified |
| forTeams | No | Short note about team plans (per-agent keys, spend limits, audit trail) |
| headline | No | One sentence: the verdict and its main reason |
| decidedBy | No | Which rule set the final score (e.g. a ceiling from a failed paid test), or that it came straight from the points |
| monitored | Yes | false if the endpoint isn't in the monitored catalog |
| payToMode | No | fixed, or per_request when the seller issues a new payout address per request |
| uptimePct | No | Share of checks in the last 7 days that returned a valid payment quote |
| withdrawn | No | Present when the endpoint was withdrawn by its seller or is gone from the Bazaar: no longer for sale, don't pay it. |
| testedWith | No | Present when the latest passing paid test needed a sign-in or extra input: a seller-provided test account, a wallet sign-in, or the seller's declared test request. |
| buyerReports | No | What real buyers reported after paying. Never changes the grade; confirmations move the endpoint up our paid-test queue. |
| exampleInput | No | Present when the listing's own example input got 'not found' when we paid (no money taken): use real input. |
| requiredInput | No | Present when our paid test was refused for want of a header or input the listing doesn't document (no money taken). |
| valuesChecked | No | Latest paid check also passed known-answer value tests |
| walletIncidents | No | Unexplained payout-wallet changes |
| walletUnconfirmed | No | Recent wallet changes nobody could confirm yet |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing that the check is free, that it reflects monitoring every 30 minutes and real test payments, that a brand-new endpoint may return insufficient_data, and that uncataloged endpoints return monitored:false. These are concrete behavioral traits an agent needs to interpret the result.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and return values, then usage routing, then caveats and a docs link. It is fairly long but nearly every sentence carries decision-relevant information; the trailing API docs URL is the only mildly extraneous element.
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 helpfully previews the verdict vocabulary and edge-case return values. Combined with the weaker alternatives routing, an agent has everything needed to call this correctly and interpret results.
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?
One parameter with 100% schema description coverage, so the schema already explains the url format and example. The description adds no parameter-level guidance beyond what the schema provides, matching the baseline 3 when the schema carries the semantic load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Get the trust verdict for one x402 endpoint') and enumerates the returned signals (score, grade, verdict, uptime, payout incidents, buyer counts). It is instantly distinguishable from siblings like check_payment and top_endpoints.
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 routing: use this 'before you have a price quote,' use check_payment 'when you already have the 402 quote... and are about to pay,' and use top_endpoints 'to discover good endpoints rather than check a known one.' Both when-to-use and named alternatives are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_paymentCheck an x402 payment before payingARead-onlyIdempotentInspect
Decide whether a specific x402 payment should go through: returns allow true/false with reasons. Checks the endpoint's trust verdict, that the amount is within your cap and not above the monitored price, and that the payTo wallet matches the one we've observed (catches swapped or hijacked wallets). Optionally (minOrganicShare) it also requires that enough of the seller's volume comes from independent buyers. Intended for right before a payment, with the amount, payTo, and network from the endpoint's 402 quote; allow is true only when every rule passes. Use check_endpoint instead if you only want an endpoint's grade without a quote in hand. Read-only and free; it doesn't make or block the payment itself. When allow is false, the reasons list explains why. API docs: https://github.com/Book0fEli/lumiere-paycheck/blob/main/docs/api.md
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Full URL of the x402 endpoint you are about to pay, including path | |
| payTo | No | Wallet address from the endpoint's 402 quote | |
| amount | No | Amount about to be paid, atomic units (USDC has 6 decimals: 10000 = $0.01) | |
| network | No | Network from the quote, e.g. eip155:8453 | |
| hasAccess | No | true if you have your own account, API key or sign-in with this seller. For endpoints that need the seller's sign-in on top of x402, allowCaution/requireVerified then don't block (we couldn't confirm delivery only because we can't sign in). | |
| maxAmount | No | Your hard cap for this payment in atomic units (USDC: 1000000 = $1). Payments above it are denied. | |
| allowCaution | No | false = deny endpoints with a caution verdict too, not just avoid (default true) | |
| priceTolerance | No | Optional, 0-0.5 (default 0.02 = 2%): how far above the endpoint's recent prices still counts as the same price, for sellers whose price drifts (pegged to BTC, gas or FX). Bigger jumps are denied as overcharges. | |
| minOrganicShare | No | Optional, 0-1: deny sellers where less than this share of 30-day volume comes from independent buyers (e.g. 0.5). Not applied to sellers whose buyers haven't been reviewed yet. | |
| requireVerified | No | true = only allow endpoints that delivered on a real test payment (default false) |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | No | |
| allow | Yes | Pay only when true |
| grade | No | |
| notes | No | |
| score | No | |
| buyers | No | Who is really behind the seller's buyers. Never changes the grade. |
| values | No | Automatic value checks on the latest paid response |
| listing | No | Present only when the latest paid response differs from the listing's example or schema. The data is delivered. |
| reasons | Yes | Why it was allowed or denied |
| verdict | No | proceed | caution | avoid | free | insufficient_data |
| delivery | No | |
| forTeams | No | Short note about team plans (per-agent keys, spend limits, audit trail) |
| observed | No | The latest payment quote our monitor saw |
| monitored | Yes | Whether the endpoint is in the monitored catalog |
| payToMode | No | |
| reviewable | No | Denied only for reasons a person may approve |
| afterPaying | No | How to report the outcome after paying (free, verified on-chain) |
| authRequired | No | true: the seller needs its own sign-in on top of x402; send hasAccess: true if you have it |
| buyerReports | No | What real buyers reported after paying. Never changes the grade; confirmations move the endpoint up our paid-test queue. |
| gradeReasons | No | Every factor behind the endpoint's grade (same as check_endpoint's reasons) |
| declaredPayTo | No | Payout wallets the seller declared itself |
| gradeHeadline | No | Why the endpoint has its grade, in one sentence |
| walletUnconfirmed | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, but the description adds behavior the annotations cannot: it is free, it does not make or block the payment itself, allow is true only when every rule passes, and the reasons list explains a false result. It also discloses the rule set being evaluated (trust verdict, cap, monitored price, payTo match, optional organic-share).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core decision and the rule list, and every sentence carries new information (rules, optional rule, usage timing, alternative, safety profile, false-case behavior, docs link). It is dense and slightly long for a single paragraph, but there is no filler to cut.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be re-explained, yet the description still summarizes allow/reasons. For a 10-parameter decision tool it covers the decision logic, the preconditions, the alternative sibling, and a docs link — nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns above that by framing three parameters in context (amount/payTo/network come from the 402 quote) and by naming minOrganicShare with its intent. It still leaves maxAmount, allowCaution, and requireVerified entirely to the schema, so it does not fully substitute for per-parameter reading.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource ('Decide whether a specific x402 payment should go through') and immediately describes the return shape (allow true/false with reasons). It explicitly distinguishes itself from the sibling check_endpoint, so an agent can route 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?
Gives the exact moment to use it ('right before a payment, with the amount, payTo, and network from the endpoint's 402 quote') and names the alternative with the condition that selects it ('Use check_endpoint instead if you only want an endpoint's grade without a quote in hand'). Both when-to-use and when-to-use-something-else are explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_full_reportHow to get a full trust reportARead-onlyIdempotentInspect
Get instructions for buying the detailed paid report on one x402 endpoint (score breakdown, current price quote, wallet and price history, test-payment results). Returns the report URL, price, and network; it doesn't buy the report itself. The report is an x402 endpoint that your agent pays with any x402 client. Use it only when the free check_endpoint result isn't enough and the user wants the full history. The response also lists the other paid x402 checks (wallet risk, batch grades, watch alerts), paid the same way. Endpoints we don't monitor return 404 on the report URL and are never charged. API docs: https://github.com/Book0fEli/lumiere-paycheck/blob/main/docs/api.md
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Full URL of the x402 endpoint you want the paid report for, including path |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| price | No | |
| network | No | |
| payment | No | |
| forTeams | No | Short note about team plans (per-agent keys, spend limits, audit trail) |
| available | No | false when paid reports aren't enabled |
| reportUrl | No | Request this URL with an x402 client to buy the report |
| otherPaidChecks | No | Other pay-per-call x402 checks, paid the same way |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare a safe read-only, idempotent, non-destructive profile, and the description goes further by disclosing that the call itself does not perform the purchase, that payment happens through an x402 client on the returned report URL, and that unmonitored endpoints return 404 and are never charged. That is genuinely non-obvious behavior beyond the annotations, though actual billing mechanics (rate limits, cost of the quote call) remain unspecified.
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 and the critical 'doesn't buy the report' caveat are front-loaded in the first two sentences, and the later sentences add routing, pricing, and edge-case value. It is a dense paragraph whose later clauses, such as the catalog of other paid checks, are slightly tangential to the core 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?
An output schema exists, so return values need not be re-explained, and the description still flags what the response contains plus the 404 edge case and a docs link. For a one-parameter read tool with annotations, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single parameter at 100% schema description coverage, the schema already documents 'url' fully including the path requirement. The description implies the URL is an x402 endpoint but adds no format or validation detail beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get instructions for buying the detailed paid report on one x402 endpoint') and names the exact contents returned (score breakdown, price quote, wallet and price history). It explicitly distinguishes its scope from the free check_endpoint result, so an agent can separate it from its siblings 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 an explicit trigger ('Use it only when the free check_endpoint result isn't enough and the user wants the full history'), names the alternative by name, and clarifies the downstream action ('doesn't buy the report itself'). Nothing about when or when-not to call it 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.
report_outcomeReport how a paid x402 call wentAIdempotentInspect
After paying an x402 endpoint, report whether you got what you paid for. Free, optional, and open to every agent: send the receipt from a Lumière PayCheck allow decision (paid plans), or the endpoint url plus the payment's transaction hash (anyone; we verify the payment on-chain, Base or Solana, within 24 hours). Answer the short questions in answers: gotResponse, matchedListing (yes/partly/no), charged (as_quoted/more/twice), dataUsable (yes/unsure/no), wouldPayAgain. Reports never change a grade by themselves: confirmations from independent buyers move the endpoint up our paid-test queue, and serious problems (nothing came back, charged more or twice) trigger a re-test; only our own paid test changes the grade. One report per payment; the seller's own wallet can't report on itself.
| Name | Required | Description | Default |
|---|---|---|---|
| tx | No | The payment's transaction hash (Base 0x...) or Solana signature | |
| url | No | The endpoint you paid (with tx, when you have no receipt) | |
| answers | No | ||
| outcome | No | Optional shortcut instead of answers: delivered = usable; problem = error, empty, wrong or overcharged | |
| receipt | No | The receipt from a Lumière PayCheck 'allow' decision (paid plans). Or send url + tx instead. | |
| problems | No | Short descriptions, e.g. 'missing field price', 'HTTP 500' | |
| httpStatus | No | HTTP status the endpoint returned after payment, e.g. 200 or 500 |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | No | |
| paid | No | Amount paid on-chain, atomic units |
| reason | No | Why it wasn't accepted |
| thanks | No | |
| flagged | No | no_response, overcharged or double_charged: sent privately to the operator for an immediate re-test |
| network | No | |
| outcome | No | |
| accepted | Yes | Whether the report was recorded |
| forTeams | No | Short note about team plans (per-agent keys, spend limits, audit trail) |
| overcharge | No | Present when the on-chain payment was higher than any quote we saw |
| retestQueued | No | A paid re-test was queued because of reports |
| ourTestQueued | No | Our own paid test of this endpoint is queued (buyer confirmations or problem reports moved it up) |
| verifiedOnChain | No | The payment was found on-chain (reports sent with tx instead of a receipt) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover mutation/idempotency safety, and the description adds substantial context beyond them: reports never change a grade alone, independent confirmations move the endpoint up the paid-test queue, serious problems trigger a re-test, on-chain verification happens within 24 hours on Base or Solana, and the self-reporting ban. This is exactly the kind of behavioral disclosure annotations do not carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and submission options, and every sentence conveys information about eligibility, inputs, or effects. It is dense and the long parenthetical clauses make it slightly heavy, but there is little true filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter, nested-object tool with an output schema (so return values need not be described), the description covers submission routes, verification mechanics, eligibility limits, and downstream consequences of reporting. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 86%, so the schema carries most parameter meaning. The description still adds value by explaining the receipt-vs-url+tx choice, enumerating the answer fields, and clarifying 'outcome' as a shortcut for answers, going beyond the raw schema text.
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 object ('report whether you got what you paid for' after paying an x402 endpoint) and clearly frames it as feedback on a paid call, which separates it from siblings like check_endpoint, check_payment, and get_full_report. An agent can identify the task without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use it (after paying an x402 endpoint), eligibility ('free, optional, and open to every agent'), the two submission paths (receipt from an allow decision vs url + tx), and constraints ('one report per payment; the seller's own wallet can't report on itself'). Alternatives and exclusions are named, not implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
top_endpointsMost trustworthy x402 endpointsARead-onlyIdempotentInspect
List the x402 endpoints that are currently safest to pay (verdict proceed or caution, no payout-wallet incidents), best first, with score, grade, verdict, and whether a real test payment was delivered. Use it to discover reliable endpoints or pick between providers. To evaluate one specific endpoint use check_endpoint; to approve a payment use check_payment. Read-only and free; rankings update as monitoring runs (every 30 minutes).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many endpoints to return, 1-50 (default 10) |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| forTeams | No | Short note about team plans (per-agent keys, spend limits, audit trail) |
| endpoints | Yes | Best first |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false), and the description adds non-annotation context: it is free and rankings refresh as monitoring runs every 30 minutes. That freshness cadence is genuinely useful for an agent deciding whether to re-query, though nothing is said about pagination or result-size behavior.
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 core purpose before the sibling routing, and every clause carries information. Slightly dense when enumerating returned fields, but no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be enumerated in prose, and the description still names the key fields and the ranking rule. Combined with annotations and a fully documented parameter, an agent has what it needs to call this correctly; only pagination/truncation behavior is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single limit parameter is fully documented with range and default in the schema. The description adds no syntax or meaning beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (x402 endpoints) with explicit inclusion criteria (verdict proceed or caution, no payout-wallet incidents), ordering (best first), and returned fields (score, grade, verdict, test-payment delivery). An agent can distinguish this from check_endpoint and get_full_report 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 both the positive use case ('discover reliable endpoints or pick between providers') and explicit routing to alternatives ('To evaluate one specific endpoint use check_endpoint; to approve a payment use check_payment'). The when-to-use decision is fully specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
catalog_stats1 field changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#"
1 tool update
- Changed
check_payment1 field changed- added
Input schema / properties / priceToleranceAdded value: +{ + "description": "Optional, 0-0.5 (default 0.02 = 2%): how far above the endpoint's recent prices still counts as the same price, for sellers whose price drifts (pegged to BTC, gas or FX). Bigger jumps are denied as overcharges.", + "maximum": 0.5, + "minimum": 0, + "type": "number" +}
2 tool updates
- Changed
check_endpoint5 fields changed- changed
Output schema / properties / advice / descriptionPrevious value: -"What the verdict means for paying it"New value: +"What the verdict means for paying it, naming the actual cause" - added
Output schema / properties / decidedByAdded value: +{ + "description": "Which rule set the final score (e.g. a ceiling from a failed paid test), or that it came straight from the points", + "type": "string" +} - added
Output schema / properties / headlineAdded value: +{ + "description": "One sentence: the verdict and its main reason", + "type": "string" +} - added
Output schema / properties / pointsAdded value: +{ + "additionalProperties": false, + "description": "The points behind the score: uptime /40, speed /15, stability /25, delivery /20", + "properties": { + "delivery": { + "type": "string" + }, + "speed": { + "type": "string" + }, + "stability": { + "type": "string" + }, + "total": { + "type": "string" + }, + "uptime": { + "type": "string" + } + }, + "required": [ + "uptime", + "speed", + "stability", + "delivery", + "total" + ], + "type": "object" +} - added
Output schema / properties / reasonsAdded value: +{ + "description": "Every factor behind the grade, most important first: paid tests (with date and what came back), uptime, speed, payout wallet, price, listing", + "items": { + "additionalProperties": false, + "properties": { + "at": { + "description": "Date of the event it's based on (YYYY-MM-DD)", + "type": "string" + }, + "effect": { + "description": "positive, neutral or negative", + "type": "string" + }, + "factor": { + "description": "data, delivery, uptime, speed, wallet, price, listing, values, access or withdrawn", + "type": "string" + }, + "limit": { + "description": "The ceiling this factor puts on the grade, e.g. \"F (max 39)\"", + "type": "string" + }, + "text": { + "description": "What we found, in plain words (paid-test results include the date and what came back)", + "type": "string" + } + }, + "required": [ + "factor", + "effect", + "text" + ], + "type": "object" + }, + "type": "array" +}
- Changed
check_payment2 fields changed- added
Output schema / properties / gradeHeadlineAdded value: +{ + "description": "Why the endpoint has its grade, in one sentence", + "type": "string" +} - added
Output schema / properties / gradeReasonsAdded value: +{ + "description": "Every factor behind the endpoint's grade (same as check_endpoint's reasons)", + "items": { + "additionalProperties": false, + "properties": { + "at": { + "description": "Date of the event it's based on (YYYY-MM-DD)", + "type": "string" + }, + "effect": { + "description": "positive, neutral or negative", + "type": "string" + }, + "factor": { + "description": "data, delivery, uptime, speed, wallet, price, listing, values, access or withdrawn", + "type": "string" + }, + "limit": { + "description": "The ceiling this factor puts on the grade, e.g. \"F (max 39)\"", + "type": "string" + }, + "text": { + "description": "What we found, in plain words (paid-test results include the date and what came back)", + "type": "string" + } + }, + "required": [ + "factor", + "effect", + "text" + ], + "type": "object" + }, + "type": "array" +}
1 tool update
- Changed
check_endpoint1 field changed- added
Output schema / properties / withdrawnAdded value: +{ + "additionalProperties": false, + "description": "Present when the endpoint was withdrawn by its seller or is gone from the Bazaar: no longer for sale, don't pay it.", + "properties": { + "at": { + "type": "string" + }, + "note": { + "type": "string" + }, + "reason": { + "type": "string" + } + }, + "required": [ + "at", + "reason", + "note" + ], + "type": "object" +}
1 tool update
- Changed
check_endpoint2 fields changed- added
Output schema / properties / requiredInputAdded value: +{ + "additionalProperties": false, + "description": "Present when our paid test was refused for want of a header or input the listing doesn't document (no money taken).", + "properties": { + "documented": { + "type": "boolean" + }, + "note": { + "type": "string" + } + }, + "required": [ + "documented", + "note" + ], + "type": "object" +} - added
Output schema / properties / testedWithAdded value: +{ + "additionalProperties": false, + "description": "Present when the latest passing paid test needed a sign-in or extra input: a seller-provided test account, a wallet sign-in, or the seller's declared test request.", + "properties": { + "how": { + "type": "string" + }, + "note": { + "type": "string" + } + }, + "required": [ + "how", + "note" + ], + "type": "object" +}
1 tool update
- Changed
get_full_report1 field changed- added
Output schema / properties / otherPaidChecksAdded value: +{ + "description": "Other pay-per-call x402 checks, paid the same way", + "items": { + "additionalProperties": false, + "properties": { + "price": { + "type": "string" + }, + "request": { + "type": "string" + }, + "what": { + "type": "string" + } + }, + "required": [ + "what", + "request", + "price" + ], + "type": "object" + }, + "type": "array" +}
1 tool update
- Changed
check_endpoint3 fields changed- changed
Output schema / properties / delivery / descriptionPrevious value: -"verified = a real test payment was delivered; failing (see advice: an error after payment that didn't collect the money is caution, not avoid); or unverified"New value: +"verified = a real test payment was delivered; failing (see advice: an error after payment that didn't collect the money is D/caution; taking the money and failing is F/avoid); or unverified" - added
Output schema / properties / exampleInputAdded value: +{ + "additionalProperties": false, + "description": "Present when the listing's own example input got 'not found' when we paid (no money taken): use real input.", + "properties": { + "found": { + "type": "boolean" + }, + "note": { + "type": "string" + } + }, + "required": [ + "found", + "note" + ], + "type": "object" +} - changed
Output schema / properties / grade / descriptionPrevious value: -"A-F, or ? with too little data"New value: +"A delivered cleanly; B delivered with a caveat; C unconfirmed; D doesn't work as listed, no money lost; F costs money or unsafe; ? with too little data"
2 tool updates
- Changed
check_endpoint1 field changed- added
Output schema / properties / authAdded value: +{ + "additionalProperties": false, + "description": "Present when our paid test was refused for want of the seller's own sign-in (no money was taken). Have access? Send hasAccess: true to check_payment.", + "properties": { + "note": { + "type": "string" + }, + "required": { + "description": "true: the seller needs its own sign-in (account, API key or wallet signature) on top of x402", + "type": "boolean" + } + }, + "required": [ + "required", + "note" + ], + "type": "object" +}
- Changed
check_payment2 fields changed- added
Input schema / properties / hasAccessAdded value: +{ + "description": "true if you have your own account, API key or sign-in with this seller. For endpoints that need the seller's sign-in on top of x402, allowCaution/requireVerified then don't block (we couldn't confirm delivery only because we can't sign in).", + "type": "boolean" +} - added
Output schema / properties / authRequiredAdded value: +{ + "description": "true: the seller needs its own sign-in on top of x402; send hasAccess: true if you have it", + "type": "boolean" +}
3 tool updates
- Changed
check_endpoint3 fields changed- added
Output schema / properties / buyerReportsAdded value: +{ + "additionalProperties": false, + "description": "What real buyers reported after paying. Never changes the grade; confirmations move the endpoint up our paid-test queue.", + "properties": { + "confirmed": { + "description": "Buyers (customers or wallets) who reported a usable response in 7 days", + "type": "number" + }, + "note": { + "type": "string" + }, + "ourTestQueued": { + "description": "Our own paid test is queued for this endpoint", + "type": "boolean" + }, + "problems": { + "description": "Buyers who reported a problem in 7 days", + "type": "number" + }, + "windowDays": { + "type": "number" + } + }, + "required": [ + "confirmed", + "problems", + "ourTestQueued", + "windowDays", + "note" + ], + "type": "object" +} - changed
Output schema / properties / delivery / descriptionPrevious value: -"verified = a real test payment was delivered; failing; or unverified"New value: +"verified = a real test payment was delivered; failing (see advice: an error after payment that didn't collect the money is caution, not avoid); or unverified" - added
Output schema / properties / valuesAdded value: +{ + "additionalProperties": false, + "description": "Automatic value checks on the latest paid response. A warning caps the grade at B, never avoid.", + "properties": { + "checked": { + "description": "true: automatic value checks passed on the latest paid test", + "type": "boolean" + }, + "warning": { + "description": "A value that looks wrong (wrong subject, stale data, price far from the public spot price)", + "type": "string" + } + }, + "required": [ + "checked" + ], + "type": "object" +}
- Changed
check_payment3 fields changed- added
Output schema / properties / afterPayingAdded value: +{ + "description": "How to report the outcome after paying (free, verified on-chain)", + "type": "string" +} - added
Output schema / properties / buyerReportsAdded value: +{ + "additionalProperties": false, + "description": "What real buyers reported after paying. Never changes the grade; confirmations move the endpoint up our paid-test queue.", + "properties": { + "confirmed": { + "description": "Buyers (customers or wallets) who reported a usable response in 7 days", + "type": "number" + }, + "note": { + "type": "string" + }, + "ourTestQueued": { + "description": "Our own paid test is queued for this endpoint", + "type": "boolean" + }, + "problems": { + "description": "Buyers who reported a problem in 7 days", + "type": "number" + }, + "windowDays": { + "type": "number" + } + }, + "required": [ + "confirmed", + "problems", + "ourTestQueued", + "windowDays", + "note" + ], + "type": "object" +} - added
Output schema / properties / valuesAdded value: +{ + "additionalProperties": false, + "description": "Automatic value checks on the latest paid response", + "properties": { + "checked": { + "type": "boolean" + }, + "warning": { + "type": "string" + } + }, + "required": [ + "checked" + ], + "type": "object" +}
- Changed
report_outcome12 fields changed- added
Input schema / properties / answersAdded value: +{ + "properties": { + "charged": { + "description": "Were you charged the quoted amount, once?", + "enum": [ + "as_quoted", + "more", + "twice" + ], + "type": "string" + }, + "dataUsable": { + "description": "Did the data look real and usable?", + "enum": [ + "yes", + "unsure", + "no" + ], + "type": "string" + }, + "gotResponse": { + "description": "Did you get a response after paying?", + "type": "boolean" + }, + "matchedListing": { + "description": "Did it match what the listing promised?", + "enum": [ + "yes", + "partly", + "no" + ], + "type": "string" + }, + "wouldPayAgain": { + "description": "Would you pay this endpoint again?", + "type": "boolean" + } + }, + "type": "object" +} - changed
Input schema / properties / outcome / descriptionPrevious value: -"delivered = the response was usable; problem = error, empty, or wrong shape"New value: +"Optional shortcut instead of answers: delivered = usable; problem = error, empty, wrong or overcharged" - changed
Input schema / properties / receipt / descriptionPrevious value: -"The receipt returned with the 'allow' decision"New value: +"The receipt from a Lumière PayCheck 'allow' decision (paid plans). Or send url + tx instead." - changed
Input schema / properties / tx / descriptionPrevious value: -"Settlement transaction hash, if known (0x...)"New value: +"The payment's transaction hash (Base 0x...) or Solana signature" - added
Input schema / properties / urlAdded value: +{ + "description": "The endpoint you paid (with tx, when you have no receipt)", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "receipt", - "outcome" -] - added
Output schema / properties / flaggedAdded value: +{ + "description": "no_response, overcharged or double_charged: sent privately to the operator for an immediate re-test", + "type": "string" +} - added
Output schema / properties / networkAdded value: +{ + "type": "string" +} - added
Output schema / properties / ourTestQueuedAdded value: +{ + "description": "Our own paid test of this endpoint is queued (buyer confirmations or problem reports moved it up)", + "type": "boolean" +} - added
Output schema / properties / overchargeAdded value: +{ + "description": "Present when the on-chain payment was higher than any quote we saw", + "type": "string" +} - added
Output schema / properties / paidAdded value: +{ + "description": "Amount paid on-chain, atomic units", + "type": "string" +} - added
Output schema / properties / verifiedOnChainAdded value: +{ + "description": "The payment was found on-chain (reports sent with tx instead of a receipt)", + "type": "boolean" +}
2 tool updates
- Changed
check_endpoint3 fields changed- changed
Output schema / properties / listing / descriptionPrevious value: -"Present only when the latest paid response doesn't match the listing's example. The data is delivered; the grade is capped at B until the listing matches."New value: +"Present only when the latest paid response differs from the listing's example or schema. The data is delivered." - added
Output schema / properties / listing / properties / cappedAdded value: +{ + "description": "true: the data is reshaped vs the listing (nested, list vs item), grade capped at B; false: a minor gap, warning only", + "type": "boolean" +} - changed
Output schema / properties / listing / properties / sellerFix / descriptionPrevious value: -"What the seller changes to lift the B cap"New value: +"What the seller can change"
- Changed
check_payment3 fields changed- changed
Output schema / properties / listing / descriptionPrevious value: -"Present only when the latest paid response doesn't match the listing's example. The data is delivered; the grade is capped at B until the listing matches."New value: +"Present only when the latest paid response differs from the listing's example or schema. The data is delivered." - added
Output schema / properties / listing / properties / cappedAdded value: +{ + "description": "true: the data is reshaped vs the listing (nested, list vs item), grade capped at B; false: a minor gap, warning only", + "type": "boolean" +} - changed
Output schema / properties / listing / properties / sellerFix / descriptionPrevious value: -"What the seller changes to lift the B cap"New value: +"What the seller can change"
2 tool updates
- Changed
check_endpoint1 field changed- added
Output schema / properties / listingAdded value: +{ + "additionalProperties": false, + "description": "Present only when the latest paid response doesn't match the listing's example. The data is delivered; the grade is capped at B until the listing matches.", + "properties": { + "matchesExample": { + "description": "false: the paid response differs from the seller's own example", + "type": "boolean" + }, + "sellerFix": { + "description": "What the seller changes to lift the B cap", + "type": "string" + }, + "warning": { + "description": "How the real response differs, and where to read the fields", + "type": "string" + } + }, + "required": [ + "matchesExample", + "warning", + "sellerFix" + ], + "type": "object" +}
- Changed
check_payment1 field changed- added
Output schema / properties / listingAdded value: +{ + "additionalProperties": false, + "description": "Present only when the latest paid response doesn't match the listing's example. The data is delivered; the grade is capped at B until the listing matches.", + "properties": { + "matchesExample": { + "description": "false: the paid response differs from the seller's own example", + "type": "boolean" + }, + "sellerFix": { + "description": "What the seller changes to lift the B cap", + "type": "string" + }, + "warning": { + "description": "How the real response differs, and where to read the fields", + "type": "string" + } + }, + "required": [ + "matchesExample", + "warning", + "sellerFix" + ], + "type": "object" +}
2 tool updates
- Changed
check_endpoint1 field changed- added
Output schema / properties / buyersAdded value: +{ + "additionalProperties": false, + "description": "Who is really behind the seller's buyers. Never changes the grade.", + "properties": { + "buyerWallets30d": { + "description": "Buyer wallets that paid the seller in 30 days", + "type": "number" + }, + "estimated": { + "description": "true when counted from a sample of buyers", + "type": "boolean" + }, + "flags": { + "description": "coordinated_wallets, self_funded, concentrated_buyers, shared_operator, estimated, partial_lookup", + "items": { + "type": "string" + }, + "type": "array" + }, + "independentBuyers30d": { + "description": "Independent buyers behind the seller's buyer wallets in 30 days (wallets funded from one source count as one)", + "type": "number" + }, + "organicShare": { + "description": "0-1: share of 30-day volume from independent buyers", + "type": "number" + }, + "reviewed": { + "description": "false until the seller's buyers have been reviewed (the biggest sellers are reviewed daily)", + "type": "boolean" + } + }, + "required": [ + "reviewed" + ], + "type": "object" +}
- Changed
check_payment2 fields changed- added
Input schema / properties / minOrganicShareAdded value: +{ + "description": "Optional, 0-1: deny sellers where less than this share of 30-day volume comes from independent buyers (e.g. 0.5). Not applied to sellers whose buyers haven't been reviewed yet.", + "maximum": 1, + "minimum": 0, + "type": "number" +} - added
Output schema / properties / buyersAdded value: +{ + "additionalProperties": false, + "description": "Who is really behind the seller's buyers. Never changes the grade.", + "properties": { + "buyerWallets30d": { + "description": "Buyer wallets that paid the seller in 30 days", + "type": "number" + }, + "estimated": { + "description": "true when counted from a sample of buyers", + "type": "boolean" + }, + "flags": { + "description": "coordinated_wallets, self_funded, concentrated_buyers, shared_operator, estimated, partial_lookup", + "items": { + "type": "string" + }, + "type": "array" + }, + "independentBuyers30d": { + "description": "Independent buyers behind the seller's buyer wallets in 30 days (wallets funded from one source count as one)", + "type": "number" + }, + "organicShare": { + "description": "0-1: share of 30-day volume from independent buyers", + "type": "number" + }, + "reviewed": { + "description": "false until the seller's buyers have been reviewed (the biggest sellers are reviewed daily)", + "type": "boolean" + } + }, + "required": [ + "reviewed" + ], + "type": "object" +}
6 tool updates
- First observed
catalog_stats - First observed
check_endpoint - First observed
check_payment - First observed
get_full_report - First observed
report_outcome - First observed
top_endpoints
Publisher details
- Operator
- Lumière LLC · Publisher source
- Operator website
- https://lumierepaycheck.org
- Vendor relationship
- First-party
- Documentation
- https://lumierepaycheck.org/docs
- Trust center
- https://lumierepaycheck.org/docs/security-model
- Restrictions
- Not applicable
Related MCP Connectors
Verify x402 payment endpoints before an AI agent pays: scam scan, on-chain checks, trust scores.
Check an x402 endpoint before your agent pays it: avoid / caution / ok, proven on-chain.
Inspect and validate an x402 endpoint before an autonomous agent spends USDC.
Live x402 endpoint trust/diligence check before you pay it. $0.02/call via x402.
Related MCP Servers
- AlicenseAqualityBmaintenanceBefore an AI agent pays an x402 endpoint, checks whether it's safe to pay: liveness, scam/anomaly scan (payTo hijack, bait-and-switch, honeypot), and on-chain receiver verification. ~70% of x402 endpoints are dead or scams.3MIT
- AlicenseNot gradedqualityDmaintenanceVerify x402 endpoints before your agent spends. Three tools: verify (SPEND/CAUTION/INVESTIGATE/DO NOT SPEND backed by 50K+ services), passport (full trust identity), risk_check (deep assessment). No API keys, no signup.12 npmMIT
- 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).280 npmMIT
- AlicenseNot gradedqualityBmaintenancePay-per-call checks an AI agent runs before it moves money: token safety verdicts and wallet risk profiles on Base, on-chain payment verification, IBAN/VAT/BIC/LEI/ISIN validation, and live TLS and email-spoofing posture for a domain. Paid in USDC over x402 with no API key or account; the free payment_info tool explains the pricing.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.