Pay Mcp

tech.vaubanPublished by vauban.techv0.19.0Updated Oct 30, 2026

x402 pay tools for MCP clients, plus a `buy` command: read the offer, consent, pay. Starknet, Base.

VerifiedSTDIODesktop onlyFinanceAI & ML

Overview

AI-generated overview

Local MCP server that lets an assistant read x402 payment offers and pay them on Starknet or Base, with spend caps and payee allowlists.

What you can do
  • Read x402 payment offers and inspect what a resource costs before committing.
  • Pay for resources over x402 on Starknet and Base, including a buy command that reads the offer, takes consent and pays.
  • Sign payments with a configured EVM keystore or a Starknet account, or use a sponsored mode that calls a sponsor over the network.
  • Constrain spending through per-payment and per-session caps, network lists and payee allowlists.
  • Read chain state through an optional Starknet RPC endpoint.
When to use it
Useful when an assistant needs to access paid x402 resources and you want it to settle small payments automatically under explicit limits. Best suited to users who already hold a funded Starknet or EVM account and are comfortable configuring caps and payee lists.
Requirements
Runs locally over stdio from the npm package, desktop only. Needs Node.js and a funded Starknet or EVM account. EVM path requires PAY_MCP_EVM_KEYSTORE_PATH and PAY_MCP_EVM_PASSWORD_PATH, plus PAY_MCP_EVM_NETWORKS, PAY_MCP_EVM_PAYEES, PAY_MCP_EVM_MAX_PER_PAYMENT and PAY_MCP_EVM_MAX_PER_SESSION, which fail closed when unset. Spending on networks other than Sepolia requires PAY_MCP_EVM_I_ACCEPT_MAINNET_SPEND. Optional STARKNET_RPC_URL.
Before you install
This server can spend real money. Private keys may be supplied via PAY_MCP_SEPOLIA_PRIVATE_KEY and PAY_MCP_STANDARD_X402_PRIVATE_KEY; the EVM path instead reads a keystore file and its password file. Session caps are never credited back, and a wildcard payee setting pays anyone up to the cap. Mainnet spending needs explicit consent via PAY_MCP_EVM_I_ACCEPT_MAINNET_SPEND. Sponsored mode contacts a third-party sponsor over the network and settles a real transfer.

Installation

In SourceWeft

  1. Open Pay Mcp 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.

Tools

7

jcs_hash

JCS (RFC 8785) canonicalize a JSON object then compute its SHA-256 hash. Returns base64-encoded canonical bytes and the hex digest.

Parametersjson_objectrequired

make_payment

Make a payment on Starknet Sepolia testnet. Call it with no arguments to get a real, sponsored settlement: we fund the testnet payment, so you need no wallet, no account and no STRK. Returns the transaction hash of YOUR payment plus a Voyager link, and you can read it back from any Sepolia RPC you trust. Pass amount_wei (a decimal string in STRK-wei) to choose the amount, within the published cap. The payee is fixed by the sponsor, so this is a funded demo and not a faucet. If you would rather pay from your own account, set PAY_MCP_SEPOLIA_ACCOUNT_ADDRESS + PAY_MCP_SEPOLIA_PRIVATE_KEY and this tool switches to your signer ; in that mode it emits a receipt hash through the PaymentDemoEmitter contract, which moves NO value and is not proof of a settled payment.

Parametersscoperecipientamount_weicap_per_tx_weicap_per_period_wei

verify_receipt

Check a receipt. Three modes, chosen by the arguments given: 1. Hash mode: receipt + expected_hash. Canonicalizes the receipt (JCS, RFC 8785), hashes it with SHA-256 and says whether the digest equals expected_hash. Nothing else about the receipt is checked. 2. Note-receipt mode: receipt alone, whose variant is 'payment-committed-note-v1'. Recomputes note_receipt_hash from the ten cells in note_cells and checks that the fields repeating a cell agree with it. It says only that the receipt is consistent with itself: not that a proof was verified, not that the pool note exists on chain, and nothing about the amount, which no cell carries. 3. Chain mode: tx_hash. Asks the node at STARKNET_RPC_URL which chain it serves (starknet_chainId): Starknet mainnet or Starknet Sepolia, named in network and chain_id with the matching Voyager link; any other chain is refused (status unknown_network) and nothing is read. Then reads the transaction and reports one of two things, checked in this order: on Sepolia only, a PaymentDemoEmitter receipt-hash emission, which moves no value (the receipt rebuilt from the event and its JCS hash), or a STRK Transfer event other than the fee payment (receipt_type starknet-transfer: execution status, block number, amount_wei, sender, recipient; who paid it is not established). A reverted transaction returns verified: false. A transaction that SUCCEEDED but carries neither returns verified: null with status not_a_recognised_payment: it exists and succeeded, and this tool does not read its form, which says nothing against it. A transaction the node does not see, or a read that fails, returns verified: null, never a verdict. Give either receipt (with or without expected_hash) or tx_hash, not both.

Parametersreceipttx_hashexpected_hash

request_delegation_grant

Create a DelegationGrant authorization object. Builds the grant with canon_version 'x402-jcs-v1.0.0', JCS-hashes it and returns the grant hash.

Parametersscoperequireddelegateerequireddelegatorrequiredcap_per_txexpires_atrequiredcap_per_period

check_merchant

Check a merchant's proven service history (an x402 STARK-receipt history document, e.g. https://demo.pay.vauban.tech/x402/v1/history). Fetches history_url, validates the document, and verifies a sample of entries: L1 = structure + per-entry invariants + JCS canonicalization; L2 = each sampled settlement transaction is read from Starknet Sepolia and must be SUCCEEDED (a visible entry must carry a value transfer or a recognized receipt event). Four verdicts, NEVER conflated: - PROVEN_SAMPLE: document valid, sampled entries verify at the announced level. - REFUTED: an element contradicts itself or the chain -- the response names it. - NO_RECORD: no proven history at this URL. Indeterminate, NOT negative. - UNREACHABLE: transport failure; says nothing about the merchant. An RPC failure during L2 degrades the level to L1 and says so; it never becomes REFUTED. Full STARK re-verification (L3) is not run here; the response carries the public docker command.

Parametershistory_urlrequiredsample_size

pay_for_resource

Fetch a resource gated behind x402 and complete the payment flow to obtain it -- the x402 CLIENT walk, which none of the other tools here perform. GET url: if it answers 200 directly, the resource was free (outcome no_payment_required -- not a failure, x402 gates specific endpoints, not the whole internet). If it answers 402, parses the PAYMENT-REQUIRED manifest, downloads a STARK proof from proof_url (defaulted to the published demo proof only when url's host is demo.pay.vauban.tech; REQUIRED for any other host -- never guessed), gunzips it in memory, and POSTs it back to url. PROOF SOURCE: the proof submitted is the one the merchant PRE-GENERATED and published. A 'paid' outcome carries proof.honesty stating what the resulting 200 establishes (a real STARK verification, really bound to the settlement) and its scope (the proof and the settlement are the merchant's published ones, not this agent's). Four outcomes, never conflated: no_payment_required (free), paid (200 after proof -- content + receipt + manifest + honesty label), refused (402 again after the proof was submitted -- the server's own reason, verbatim: a result, not a crash), unreachable (transport failure or an unrecognized HTTP status -- says nothing about the merchant). A missing proof_url on a non-demo host that requires payment returns a plain input error instead, since no request was ever sent to guess at. STANDARD x402 v2 (since 0.7.0): if the 402 carries the x402 foundation's PaymentRequired document (standard base64 of JSON, x402Version 2) with an exact offer on a Starknet network, this tool pays it the standard way instead: the configured Starknet account signs a SNIP-9 authorization for exactly that transfer, the merchant's facilitator settles it and pays the gas, and the same GET is retried with PAYMENT-SIGNATURE. A 'paid' outcome then carries standard{scheme, network, payTo, amount, asset, payer, feePayer}, the facilitator's receipt (transaction, network, payer) and an honesty note: value mov

Parametersurlrequirednetworkproof_url

pay_shielded

Pay an x402 resource on the SHIELDED rail (scheme vauban-shielded-strk20). Starknet Sepolia only: an offer on any other network is refused as unpayable (network_not_supported). It reads the offer, builds the X-VAUBAN-SHIELDED-SETTLEMENT header (vzk20-v2: pool coordinates plus a COMMITMENT), sends the STARK proof named by proof_path as the POST body, and returns the receipt from PAYMENT-RESPONSE. THE PROOF: proof_path names a proof file you already hold, READ FROM YOUR DISK AND SENT to url as given. It is read only inside the directory named by PAY_MCP_SHIELDED_PROOF_DIR (no default: unset, nothing is read, code proof_dir_unset), relative to it or absolute inside it, never through a symbolic link (proof_path_symlink) or a '..' component (proof_path_traversal), never outside it (proof_path_outside_dir), and only when the file has the form of a proof (proof_form_invalid); each refusal comes before any request. The offer says which proof it wants (extra.proof); an offer that asks for another form is refused before any upload (proof_form_mismatch). THE WITNESS: the witness that opens the commitment is yours. Pass it and this tool checks locally that it opens the commitment, that it is strictly under the published ceiling, and that neither of its numbers appears in the receipt served back. It is never sent, never returned and never logged; only the commitment travels. Or pass amount_commitment alone and the witness never reaches this tool at all. Scope: through the pool, the payer can stay out of the payment transaction when another account submits it; the payer's deposit into the pool is a public transaction of its own. THE PURCHASE SALT: when the offer announces a private receipt (extra.privateReceipt), PAY_MCP_WITNESS_DIR names a directory and payer_pseudonym is given, this tool draws one fresh random salt for this purchase, keeps it there in a 0600 file (purchase_salt_kept_at), and sends only a value derived from it: the salt itself never leaves this process. It also

Parametersurlrequiredwitnessproof_pathrequiredsettlementrequiredpayer_pseudonymamount_commitment

Version history

2
  1. v0.19.0LatestOct 23, 2026
  2. v0.7.1Sep 16, 2026

Score

55% 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

    Publish an icon in the registry entry.

  • Documentation15 pts

    Declare a GitHub repository with a README, or serve resource_documentation in the OAuth protected-resource metadata.

  • License10 pts

    Declare a license in the repository or the registry entry.