Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Description from the maker (original English)
Preflight x402 payments. Base ERC-8004 agent #1151628; wallet binding verified Nov 3, 2026.
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
You need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Works in Claude on the web, desktop and mobile:
https://api.spendpreflight.com/mcpRun this in your terminal
claude mcp add --transport http spendpreflight https://api.spendpreflight.com/mcpPaste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"spendpreflight": {
"url": "https://api.spendpreflight.com/mcp"
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"spendpreflight": {
"type": "http",
"url": "https://api.spendpreflight.com/mcp"
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
ChatGPT connects only to servers on the internet:
https://api.spendpreflight.com/mcpMenu names can differ slightly by plan and over time.
Your choice stays on this device in a cookie; no account needed.
These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Tool names and descriptions exactly as the server reported them on Nov 6, 2026. The maker wrote them, not us; we show them as plain text.
preflight_paymentUse when you are about to sign an x402 payment for allow, hold or block, reasons and a signed decision receipt. Covers payee sanctions screening, spending rules and cached price/recipient evidence where available. For separate evidence, use lint_endpoint/listing_guard for technic
check_payeeUse when you need standalone payee screening without a payment decision. 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 a
lint_endpointUse when you sell via x402 and want a free check of your public payment challenge. 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:
check_tokenUse when you need a bounded Base token assessment with explicit unassessed areas. 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 ob
payment_receiptUse when you need a signed observation of an existing Base USDC transfer. 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, co
get_service_infoUse when you need more tools: browse Buyers, Sellers, Books and Data APIs, prices, rules and examples. If you have a payment challenge, call preflight_payment directly. Free, read-only service reference. Use when you need prices, default spending rules, payment setup, trial allow
verify_payee_bindingUse when a seller advertises an ERC-8004 identity and you need an ERC-8478 Draft wallet-binding observation. 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 unchar
quote_checkUse when you need an exact quote compared with cached public price and recipient evidence. 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 s
listing_guardUse when you need a detailed public listing metadata check. 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 categ
check_listingUse when an existing integration calls the listing_guard compatibility alias. 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 tec
security_checkUse when you need the full passive evidence from a current complete saved Lint report. 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
seller_indexUse when you need sellers from the existing cached public catalog. Search cached public x402 sellers. First three matches free; up to12 cost0.01 USDC only with extra matches. Bounded unpaid availability, 402, quote history and public Lint evidence; missing evidence unknown. Parti
domain_authUse when you need public DNS email-authentication observations for a domain. 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 m
check_endpointUse when you need cached public endpoint evidence. 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
wallet_statementUse when you need a reconciled Base USDC statement for a bounded UTC window. 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/
find_rv_stationsUse when you need nearby RV stations from the dated FillPoint snapshot; see Data APIs. 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 roa
size_solarUse when you need solar energy arithmetic from supplied assumptions; see Data APIs. 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
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 6, 2026
The registry name was verified with the GitHub account spendpreflight, which owns the repo
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
Responded in 227 ms (HTTP 200)
No sign-in needed
Read 17 tool descriptions and found no hidden instructions to the AI
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 3 of 3 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
The registry does not list a required key, though some servers ask you to sign in on first use.
It runs in the maker’s cloud. Connect over the internet with nothing to install, but what you send passes through the maker’s servers.
The GitHub repo last changed –, and the latest version (1.2.0-metadata.8) reached the registry yesterday.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. It connects by URL, so apps that accept remote MCP servers work too, such as ChatGPT in developer mode.
In the same category: Spec Driven Development, Remote Desktop Commander, AI Deprecations
Servers in the same category from other makers, sorted by stars.
Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
AI model shutdown dates, replacements, change feed and webhook alerts for 8 providers.
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
Call preflight_payment before signing an x402 payment. Get allow, hold or block, reasons and a signed decision receipt; enforce the decision within your approved wallet and budget. Preflight combines payee screening, spending rules and cached price/recipient evidence where available. ERC-8478 wallet binding remains a separate verify_payee_binding call.
About to pay? Start with Preflight. Selling via x402? Start with free Lint and monitoring.
Three runnable examples: a guarded x402 client, Claude Code / Cursor MCP setup, and seller CI. The examples run offline by default; no payment or live probe is needed to try them.
MCP core tools appear first: preflight_payment, check_payee, lint_endpoint, check_token, payment_receipt. Free get_service_info groups the complete enabled catalog into Buyers, Sellers, Books and Data APIs. All products and prices remain available in the catalog; solar and FillPoint have their own Data APIs page.
verify_payee_binding or POST /v1/payee-binding, 0.01 USDC with the existing shared trial. Signed JSON reports exactly one of nine outcomes at a pinned registry block; not-read is uncharged. Checks direct agent-wallet equality or EIP-712 delegation, including ERC-1271, rotation and expiry. An observation is not payment approval. Base first, plus public Robinhood reads; the Draft may change.Read the announcement and tool-selection guide. These are operated remote-service tools; this metadata update does not publish a new npm package or enable automatic payments.
createQuoteCheckHook attaches to onBeforePaymentCreation. It compares the selected exact-scheme quote with a dated cached public unpaid quote, never requests the merchant, and aborts on above_expected, payTo_changed, unknown or an error. ok only means the supplied amount is not above the last comparable observation with the same recipient; it is not payment approval or loss prevention. Keep the local guard for allowlists, per-payment limits and its in-process daily budget.
import { createQuoteCheckHook, guard } from 'spendpreflight';
// comparisonFetch is a SEPARATE locally guarded x402 fetch configured by you. // It can pay the comparison API's $0.001 fee; no shared trial or auto-renewal. client.onBeforePaymentCreation(createQuoteCheckHook({ fetch: comparisonFetch })); guard(client, { remote: false, rules: { maxPerPaymentUsd: 0.10, dailyCapUsd: 1 } });
Without an explicitly supplied paid fetch, plain fetch stops at the 402 offer. The same client cannot pay its own hook fee: recursion is rejected before signing. Missing/stale/ambiguous history returns unknown without a charge. No automatic retry, target refresh, signature replay or application of a suggested cap occurs. The informational suggested_max_amount_per_payment uses atomic units for the stated asset/network and expires with the cached observation; it is not a personal budget. Use quoteCheck(input, options) for a standalone comparison, or signed GET /quote-check / MCP quote_check. URL and quote fields are sent transiently to the comparison API; do not use private URLs or query secrets.
SpendPreflight — trust and verification tools for stablecoin payments, built for AI agents and the people who run them.
Product catalog · Trust and privacy
Allow, hold or block every x402 payment before your agent pays.
Maintained by the operator of SpendPreflight, the optional paid screening API linked below.
Drop-in spend guard for the official x402 client (@x402/core, @x402/fetch, @x402/axios). It checks each payment *before anything is signed*:
A blocked payment is aborted before signing. A hold goes to your onHold callback, or is denied. Every decision is passed to onDecision so you can log it.
npm i spendpreflight @x402/fetch @x402/evm viem
import { x402Client, wrapFetchWithPayment } from "@x402/fetch";
import { ExactEvmScheme } from "@x402/evm/exact/client"; import { privateKeyToAccount } from "viem/accounts"; import { guard } from "spendpreflight";
const account = privateKeyToAccount(process.env.AGENT_KEY as 0x${string}); const client = new x402Client().register("eip155:8453", new ExactEvmScheme(account)); const pay = wrapFetchWithPayment(fetch, client);
guard(client, { rules: { maxPerPaymentUsd: 1, holdAboveUsd: 0.25, dailyCapUsd: 20 }, remote: false, // local rules; separate screening client shown below onHold: async v => askHuman(v), // return true to approve onDecision: v => console.log(v.decision, v.reasons, v.receiptId), });
const res = await pay("https://api.some-paid-service.com/data"); // guarded
guard(client, { remote: { trial: true } }); // 3 free remote checks per day per IP
Or use local rules only, with no network call:
guard(client, { remote: false });
Copy-paste examples maintained by the operator of SpendPreflight:
/v1/preflight before paying ($0.02 screening fee).See setup and safety notes. The screening tools never pay the merchant under review. Enforce decisions in the actual payment client; a model selecting a tool alone is not a spending gate. Tests use local mocks and throwaway signers, with no paid calls.
| Decision | What happens | Typical reasons |
|---|---|---|
allow | Payment proceeds | All rules passed |
hold | onHold(verdict) decides; denied if you don't provide one | Above hold threshold, domain not on allowlist, new domain, possible sanctions name match, remote check unavailable |
block | Payment aborted before signing | Over max, daily cap hit, wrong network or asset, blocklisted, payee wallet on the OFAC SDN list |
The remote check fails safe: if the API is unreachable, the decision is hold. Set remote.onError: "allow" to fail open instead.
Version0.2.0 requires Node20+ and a separate screening payment client, with its own local-only guard, exact payTo/asset/network allowlist and screening budget. A claimed resource hostname never bypasses the merchant guard. Reusing the merchant client recursively fails closed before signing.
| Option | Default |
|---|---|
maxPerPaymentUsd | 1 |
holdAboveUsd | 0.25 |
dailyCapUsd | 25 (in-process, UTC day) |
allowedNetworks | ["eip155:8453"] (Base) |
usdcOnly | true |
domainAllowlist / domainBlocklist | [] (subdomains match) |
payToAllowlist / payToBlocklist | [] |
strictAllowlist | false (hold anything not on an allowlist) |
maxPriceMultiple | 5 (remote only; null disables category price comparison) |
requireLive | true (remote only; hold after three usable failed unpaid probes) |
holdOnPayToChange | true (remote only; hold on a seven-day payTo change) |
Version 0.2.0 adds these three settings when remote is enabled. They use the public Endpoint Health Index: the price rule compares the current quote with a category median; liveness counts usable unpaid probes; payee changes are compared within the same network and asset. They do not run locally or trigger a crawl, and no merchant endpoint is paid to gather this data.
Missing, ambiguous or stale index data is explicitly reported in verdict.remote.index_evidence. It does not become an invented healthy result or a failed probe; the other spending and sanctions rules still apply. A failed remote request retains the existing fail-safe hold. Cart-only checkout has no endpoint history. The corresponding service rules are deployed. Index coverage is still being populated; inspect index_evidence instead of assuming full-catalog coverage.
Any agent or language can call the same checks over HTTP with x402. No account, no API key:
POST https://api.spendpreflight.com/v1/preflight: send the 402 body plus your rules; get allow, hold or block with a receipt. $0.02.POST https://api.spendpreflight.com/v1/check: JSON body with address, domain or name; payee sanctions and domain risk. $0.01.llms.txt alongside it.October22 migration: all paid API execution uses POST JSON. GET/HEAD return discovery challenges only and never settle, even with query parameters or payment headers. Build the POST request and obtain its challenge before signing; do not sign a GET quote for execution. ?trial=1 remains an optional URL flag on POST. The 0.2.1 Scout helpers and current LangChain source examples use this method; Scout production availability is still gated. The core remote preflight guard already used POST. Version0.2.0 is not republished.
Don't take our word for any of this; each point can be checked:
src/index.ts; it's about 250 lines.hold, not allow.Only the beginning is shown; read the rest in the repo