MCP Server

Lumière PayCheck

io.github.Book0fEli/paycheck
Crypto & Web3 Security Public & reachable MCP 2025-11-25

What this MCP does

Evaluates x402 endpoints and payments for trust, pricing, wallet mismatches, uptime, delivery history, and possible payment hijacking.

catalog_stats
x402 catalog statistics
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.
Read only Idempotent
Input schema
{'type': 'object', 'properties': {}}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['scoredAt', 'endpoints', 'byVerdict'], 'properties': {'forTeams': {'type': 'object', 'required': ['message', 'plans', 'url', 'enterprise'], 'properties': {'url': {'type': 'string', 'description': 'Plans and checkout'}, 'plans': {'type': 'string'}, 'freeKey': {'type': 'string'}, 'message': {'type': 'string'}, 'enterprise': {'type': 'string', 'description': 'Private enterprise inquiry form'}}, 'description': 'Short note about team plans (per-agent keys, spend limits, audit trail)', 'additionalProperties': False}, 'scoredAt': {'type': ['string', 'null'], 'description': 'When scores were last computed'}, 'byVerdict': {'type': 'object', 'description': 'Endpoint count per verdict', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'number'}}, 'endpoints': {'type': 'number', 'description': 'Endpoints monitored'}}, 'additionalProperties': False}
check_endpoint
Check an x402 endpoint
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, and payout-wallet incidents. 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
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['url'], 'properties': {'url': {'type': 'string', 'description': '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
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['url', 'monitored', 'verdict'], 'properties': {'url': {'type': 'string', 'description': 'The endpoint checked'}, 'page': {'type': 'string', 'description': 'Public page with the full history'}, 'grade': {'type': 'string', 'description': 'A-F, or ? with too little data'}, 'score': {'type': ['number', 'null'], 'description': '0-100; null for free resources'}, 'advice': {'type': 'string', 'description': 'What the verdict means for paying it'}, 'probes': {'type': 'number', 'description': 'Checks counted in the last 7 days'}, 'verdict': {'type': 'string', 'description': 'proceed | caution | avoid | free | insufficient_data'}, 'delivery': {'type': 'string', 'description': 'verified = a real test payment was delivered; failing; or unverified'}, 'forTeams': {'type': 'object', 'required': ['message', 'plans', 'url', 'enterprise'], 'properties': {'url': {'type': 'string', 'description': 'Plans and checkout'}, 'plans': {'type': 'string'}, 'freeKey': {'type': 'string'}, 'message': {'type': 'string'}, 'enterprise': {'type': 'string', 'description': 'Private enterprise inquiry form'}}, 'description': 'Short note about team plans (per-agent keys, spend limits, audit trail)', 'additionalProperties': False}, 'monitored': {'type': 'boolean', 'description': "false if the endpoint isn't in the monitored catalog"}, 'payToMode': {'type': 'string', 'description': 'fixed, or per_request when the seller issues a new payout address per request'}, 'uptimePct': {'type': 'number', 'description': 'Share of checks in the last 7 days that returned a valid payment quote'}, 'valuesChecked': {'type': 'boolean', 'description': 'Latest paid check also passed known-answer value tests'}, 'walletIncidents': {'type': 'number', 'description': 'Unexplained payout-wallet changes'}, 'walletUnconfirmed': {'type': 'number', 'description': 'Recent wallet changes nobody could confirm yet'}}, 'additionalProperties': False}
check_payment
Check an x402 payment before paying
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). 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
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['url'], 'properties': {'url': {'type': 'string', 'description': 'Full URL of the x402 endpoint you are about to pay, including path'}, 'payTo': {'type': 'string', 'description': "Wallet address from the endpoint's 402 quote"}, 'amount': {'type': 'string', 'description': 'Amount about to be paid, atomic units (USDC has 6 decimals: 10000 = $0.01)'}, 'network': {'type': 'string', 'description': 'Network from the quote, e.g. eip155:8453'}, 'maxAmount': {'type': 'string', 'description': 'Your hard cap for this payment in atomic units (USDC: 1000000 = $1). Payments above it are denied.'}, 'allowCaution': {'type': 'boolean', 'description': 'false = deny endpoints with a caution verdict too, not just avoid (default true)'}, 'requireVerified': {'type': 'boolean', 'description': 'true = only allow endpoints that delivered on a real test payment (default false)'}}}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['allow', 'reasons', 'monitored'], 'properties': {'url': {'type': 'string'}, 'allow': {'type': 'boolean', 'description': 'Pay only when true'}, 'grade': {'type': 'string'}, 'notes': {'type': 'array', 'items': {'type': 'string'}}, 'score': {'type': ['number', 'null']}, 'reasons': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Why it was allowed or denied'}, 'verdict': {'type': ['string', 'null'], 'description': 'proceed | caution | avoid | free | insufficient_data'}, 'delivery': {'type': 'string'}, 'forTeams': {'type': 'object', 'required': ['message', 'plans', 'url', 'enterprise'], 'properties': {'url': {'type': 'string', 'description': 'Plans and checkout'}, 'plans': {'type': 'string'}, 'freeKey': {'type': 'string'}, 'message': {'type': 'string'}, 'enterprise': {'type': 'string', 'description': 'Private enterprise inquiry form'}}, 'description': 'Short note about team plans (per-agent keys, spend limits, audit trail)', 'additionalProperties': False}, 'observed': {'anyOf': [{'type': 'object', 'properties': {'payTo': {'type': ['string', 'null']}, 'amount': {'type': ['string', 'null']}, 'seenAt': {'type': ['string', 'null']}, 'network': {'type': ['string', 'null']}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'The latest payment quote our monitor saw'}, 'monitored': {'type': 'boolean', 'description': 'Whether the endpoint is in the monitored catalog'}, 'payToMode': {'type': 'string'}, 'reviewable': {'type': 'boolean', 'description': 'Denied only for reasons a person may approve'}, 'declaredPayTo': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Payout wallets the seller declared itself'}, 'walletUnconfirmed': {'type': 'number'}}, 'additionalProperties': False}
get_full_report
How to get a full trust report
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. 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
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['url'], 'properties': {'url': {'type': 'string', 'description': 'Full URL of the x402 endpoint you want the paid report for, including path'}}}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'note': {'type': 'string'}, 'price': {'type': 'string'}, 'network': {'type': 'string'}, 'payment': {'type': 'string'}, 'forTeams': {'type': 'object', 'required': ['message', 'plans', 'url', 'enterprise'], 'properties': {'url': {'type': 'string', 'description': 'Plans and checkout'}, 'plans': {'type': 'string'}, 'freeKey': {'type': 'string'}, 'message': {'type': 'string'}, 'enterprise': {'type': 'string', 'description': 'Private enterprise inquiry form'}}, 'description': 'Short note about team plans (per-agent keys, spend limits, audit trail)', 'additionalProperties': False}, 'available': {'type': 'boolean', 'description': "false when paid reports aren't enabled"}, 'reportUrl': {'type': 'string', 'description': 'Request this URL with an x402 client to buy the report'}}, 'additionalProperties': False}
report_outcome
Report whether a paid x402 call delivered
Report whether a paid x402 call delivered a usable response, using the receipt from a Lumière PayCheck allow decision (the paid /v1/authorize API). Applies only to payments made with such a receipt, within 24 hours; reporting is optional. Not for checking endpoints (use check_endpoint or check_payment). Records one vote per buyer and payment within 24 hours of the decision; repeats are ignored. Problem reports from several independent buyers trigger a paid re-test, and only that re-test can change a grade.
Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['receipt', 'outcome'], 'properties': {'tx': {'type': 'string', 'description': 'Settlement transaction hash, if known (0x...)'}, 'outcome': {'enum': ['delivered', 'problem'], 'type': 'string', 'description': 'delivered = the response was usable; problem = error, empty, or wrong shape'}, 'receipt': {'type': 'string', 'description': "The receipt returned with the 'allow' decision"}, 'problems': {'type': 'array', 'items': {'type': 'string'}, 'description': "Short descriptions, e.g. 'missing field price', 'HTTP 500'"}, 'httpStatus': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'HTTP status the endpoint returned after payment, e.g. 200 or 500'}}}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['accepted'], 'properties': {'url': {'type': 'string'}, 'reason': {'type': 'string', 'description': "Why it wasn't accepted"}, 'thanks': {'type': 'string'}, 'outcome': {'type': 'string'}, 'accepted': {'type': 'boolean', 'description': 'Whether the report was recorded'}, 'forTeams': {'type': 'object', 'required': ['message', 'plans', 'url', 'enterprise'], 'properties': {'url': {'type': 'string', 'description': 'Plans and checkout'}, 'plans': {'type': 'string'}, 'freeKey': {'type': 'string'}, 'message': {'type': 'string'}, 'enterprise': {'type': 'string', 'description': 'Private enterprise inquiry form'}}, 'description': 'Short note about team plans (per-agent keys, spend limits, audit trail)', 'additionalProperties': False}, 'retestQueued': {'type': 'boolean', 'description': 'A paid re-test was queued because of reports'}}, 'additionalProperties': False}
top_endpoints
Most trustworthy x402 endpoints
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).
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'How many endpoints to return, 1-50 (default 10)'}}}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['count', 'endpoints'], 'properties': {'count': {'type': 'number'}, 'forTeams': {'type': 'object', 'required': ['message', 'plans', 'url', 'enterprise'], 'properties': {'url': {'type': 'string', 'description': 'Plans and checkout'}, 'plans': {'type': 'string'}, 'freeKey': {'type': 'string'}, 'message': {'type': 'string'}, 'enterprise': {'type': 'string', 'description': 'Private enterprise inquiry form'}}, 'description': 'Short note about team plans (per-agent keys, spend limits, audit trail)', 'additionalProperties': False}, 'endpoints': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'score', 'grade', 'verdict', 'delivery'], 'properties': {'url': {'type': 'string'}, 'grade': {'type': 'string'}, 'score': {'type': ['number', 'null']}, 'verdict': {'type': 'string', 'description': 'proceed | caution | avoid | free | insufficient_data'}, 'delivery': {'type': 'string'}}, 'additionalProperties': False}, 'description': 'Best first'}}, 'additionalProperties': False}
Added
get_full_report
Oct. 2, 2026, 2:40 a.m.
Added
catalog_stats
Oct. 2, 2026, 2:40 a.m.
Added
top_endpoints
Oct. 2, 2026, 2:40 a.m.
Added
report_outcome
Oct. 2, 2026, 2:40 a.m.
Added
check_payment
Oct. 2, 2026, 2:40 a.m.
Added
check_endpoint
Oct. 2, 2026, 2:40 a.m.