PayStage Preflight

io.github.base-buzzPublished by GitHub account base-buzzv0.2.3Updated Nov 12, 2026

Evaluate x402 PaymentRequired against a local spending policy before an agent pays

The publisher's own server: Preflight

VerifiedSTDIODesktop onlyFinanceSecurity & Monitoring

Overview

AI-generated overview

A local stdio MCP server that checks an x402 PaymentRequired payload against a JSON spending policy and returns pay, review, or do_not_pay before an agent pays.

What you can do
  • Evaluate a payment request: check an x402 PaymentRequired payload against the local policy and get one of three verdicts — pay, review, or do_not_pay.
  • Apply spending rules: allowed networks, assets and payees, per-call and per-session amount caps, a human-review threshold, and a maximum timeout.
  • Flag malformed or out-of-policy requests as do_not_pay, and requests above the human threshold as review.
When to use it
Use it when an agent can make x402 payments and you want a deterministic, local check that blocks or escalates payments outside your rules before any money moves.
Requirements
Node.js with npx to run the npm package locally over stdio, plus a policy JSON file whose absolute path is set in PAYSTAGE_POLICY_PATH. No account, API key or network access is needed to decide.
Before you install
The verdict is advisory: it does not itself pay or hold funds, so the client must actually honor pay, review and do_not_pay. Policy mistakes (wrong networks, assets, payees or caps) directly change what gets approved, so review the policy file carefully. The README notes the package reads the policy file and PAYSTAGE_POLICY_PATH, and mentions PAYSTAGE_RPC_URL used by a related package.

Installation

In SourceWeft

  1. Open PayStage Preflight in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

@paystage/preflight

Evaluate an x402 PaymentRequired against a local spending policy before your agent pays. Returns one of three verdicts: pay, review, or do_not_pay.

  • Local-first — policy lives in a JSON file on your machine. No secrets, no network calls to decide.
  • MCP-native — runs as a stdio MCP server so Claude Desktop, Cursor, and any MCP client can call it as a tool.
  • Deterministic — same input + same policy ⇒ same verdict.

Install

Run directly with npx (no global install):

bash
npx -y @paystage/preflight

Or add it to your MCP client config.

Claude Desktop

Add to claude_desktop_config.json:

json
{  "mcpServers": {    "paystage-preflight": {      "command": "npx",      "args": ["-y", "@paystage/preflight"],      "env": {        "PAYSTAGE_POLICY_PATH": "/absolute/path/to/policy.json"      }    }  }}

Cursor

Add to .cursor/mcp.json:

json
{  "mcpServers": {    "paystage-preflight": {      "command": "npx",      "args": ["-y", "@paystage/preflight"],      "env": {        "PAYSTAGE_POLICY_PATH": "/absolute/path/to/policy.json"      }    }  }}

Example policy.json

json
{  "version": 1,  "name": "standard",  "allowed_networks": ["eip155:8453", "eip155:84532"],  "allowed_assets": [    "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",    "0x036CbD53842c5426634e7929541eC2318f3dCF7e"  ],  "allowed_pay_to": ["0x209693Bc6afc0C5328bA36FaF03C514EF312287C"],  "max_amount_per_call": "1.00",  "max_amount_per_session": "10.00",  "require_human_above": "0.50",  "max_timeout_seconds": 300,  "default_verdict": "review"}

Amounts are human-readable USDC (e.g. "0.50" = 0.50 USDC). Networks use CAIP-2 identifiers.

Verdicts

VerdictMeaning
payWithin policy — safe to proceed automatically.
reviewAllowed but above a human threshold — ask a human before paying.
do_not_payViolates policy (network, asset, payTo, amount, timeout, or malformed).

Supply chain and access

Socket.dev scores this package on what it can do, not what it does with it, so the flags it raises are worth explaining rather than removing:

FlagWhy it is there
Filesystem accessReads the policy JSON you point it at (policy_path / PAYSTAGE_POLICY_PATH). Nothing is written.
Environment variable accessPAYSTAGE_POLICY_PATH only (and PAYSTAGE_RPC_URL via auth-watch).
Network access, URL stringsNone in this package. The RPC endpoints you may see in the tree belong to @paystage/auth-watch.

No shell, no eval, no telemetry, no key custody. The full table is in SECURITY.md; the deny list is published with a citation per entry in KNOWN_DRAINERS.md.

Links

Source: packages/preflight/README.md at commit 1b92c54

Tools

1

evaluate_mcp_payment

Evaluate an x402 PaymentRequired payload against a PayStage spending policy before paying

Parameterspolicypolicy_pathpayment_requiredrequired

Version history

1
  1. v0.2.3LatestNov 12, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

Other Preflight integrations