About Piprail
Piprail is a local MCP server that gives AI agents a self-custodial wallet for x402 payments, with operator-defined spending limits. It supports discovery and registration as well as payment, and offers additional wallet capabilities in sovereign mode.
Key features
- 01Budget-capped x402 payments
- 02Discover and register payment URLs
- 03Read-only operation without a key
- 04Support for multiple chains
- 05Optional sovereign wallet tools
Use cases
- 01Let an agent pay for an x402-gated URL
- 02Discover and register payment endpoints
- 03Set payment limits for an agent wallet
- 04Enable selling and wallet tools in sovereign mode
MCP support
Piprail exposes eight default tools to MCP clients for discovery, quotes, payment planning and execution, registration, budget, guidance, and receipt verification. Sovereign mode adds tools for swaps, selling, collections, earnings, and wallet information.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
npx -y @piprail/mcpPIPRAIL_PRIVATE_KEYSecretYour wallet's private key/seed for the chosen chain. Optional: omit it to run read-only (discover/quote/register/budget/guide); set it to let the agent pay. Stays on your machine; the spend policy caps every payment.PIPRAIL_CHAINChain to pay on (default: base).PIPRAIL_CHAINSPay across several chains (instead of PIPRAIL_CHAIN): a comma-separated list, e.g. base,polygon,solana. Give each its own PIPRAIL_<CHAIN>_KEY (+ optional PIPRAIL_<CHAIN>_RPC_URL). The agent pays whichever chain a 402 asks for — the first listed that can settle — under one shared budget.PIPRAIL_MAX_AMOUNTMax spend per single payment, in token units (default: 0.10).PIPRAIL_MAX_TOTALLifetime spend cap per token, in token units (default: 10.00).PIPRAIL_MAX_TOTAL_DENOMCross-token GRAND TOTAL: one spend cap per denomination across every stablecoin and chain, e.g. USD:20.00,EUR:5.00. Not a price oracle — sums tokens of the same unit, each counted 1:1. Native coins are excluded.PIPRAIL_MAX_PAYMENTSLifetime cap on the NUMBER of payments, across every chain + token (e.g. 100).PIPRAIL_MAX_PAYMENTS_PER_WINDOWCap on the number of payments within PIPRAIL_WINDOW_SECONDS (a rolling rate limit; set PIPRAIL_WINDOW_SECONDS too).PIPRAIL_WARN_AT_FRACTIONEmit an early-warning event when spend crosses this fraction of any cap, e.g. 0.8 (80%). Needs PIPRAIL_EVENT_LOG to be visible.PIPRAIL_SPEND_LOGPath to a local append-only spend log. When set, the budget (lifetime, grand total, counts) SURVIVES a restart — hydrated from this file. No backend; you own the file.PIPRAIL_EVENT_LOGMirror payment events (settled / declined / budget-threshold) as one-line JSON to 'stderr' or a file path — the operator's notification stream. Default: off.PIPRAIL_TOKENSSecretComma-separated allowed token symbols, plus the alias 'native' for the chain's coin (default: USDC).PIPRAIL_SCHEMESComma-separated payment schemes to settle (default: onchain-proof). Add 'exact' (onchain-proof,exact) to also pay standard x402 servers GASLESS on EVM + Solana (method auto-selected). Add 'upto' to also pay metered x402 servers on EVM (Permit2): sign a MAX, the server settles the actual <= max.Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.
Tools
8Saved tool list · updated 2w ago
| Parameter | Type | Required | Description |
|---|---|---|---|
| query | string | No | Free-text topic to search for (optional). Multi-word queries are fanned out per word and results are ranked by relevance, so "crypto price feed" finds the best matches even when no single listing contains that exact phrase. |
| network | string | No | CAIP-2 id, 'self' (your chain — default), or 'any' (all chains). |
| category | string | No | Keep ONLY this category, e.g. 'ai', 'finance', 'data' (strict). |
| asset | string | No | Keep only resources paying in this token symbol, e.g. 'USDC'. |
| maxPrice | number | No | Drop results advertised above this USD price. |
| minReliability | number | No | Drop results below this health score (0–100); unscored pass. |
| verified | boolean | No | Prefer verified listings (402 Index). |
| sort | enum | No | Ordering. Default 'relevance' with a query, else first-seen.relevance | reliability | price | uptime | name |
| limit | number | No | Max results to fetch per index (default 20). |
Details
From the project README@piprail/mcp
Hand any AI agent a budget-bound payment wallet. An MCP server wrapping @piprail/sdk so any MCP client — Claude Desktop, Cursor, Claude Code, Windsurf, VS Code, Cline, OpenClaw, Hermes — can pay x402 URLs on its own, capped by a spend policy the model cannot exceed. Runs locally with your wallet and your limits — no backend, no custody, no facilitator.
npx -y @piprail/mcp # speaks MCP over stdio
📖 Full documentation → docs.piprail.com/mcp
The docs are the single source of truth — every client's config, the complete env-var reference, the modes, per-chain setup, and the tools reference. This README is just the front door.
Add it to your client
Two things: your wallet private key and (optionally) a budget. The defaults are deliberately small and safe (0.10 per payment, 10.00 lifetime per token, USDC on Base).
{ "mcpServers": { "piprail": {
"command": "npx", "args": ["-y", "@piprail/mcp"],
"env": { "PIPRAIL_PRIVATE_KEY": "0xYOUR_KEY", "PIPRAIL_CHAIN": "base", "PIPRAIL_MAX_AMOUNT": "0.10" }
} } }
Restart the client and the PipRail tools appear (VS Code uses servers, not mcpServers). Never commit your key — keep it in the client's env block. → Per-client setup · Configuration
8 tools — piprail_discover · piprail_quote_payment · piprail_plan_payment · piprail_pay_request · piprail_register · piprail_budget · piprail_guide · piprail_verify_receipt. Only piprail_pay_request moves money; piprail_register writes a listing to an external index; the other six are read-only. → Tools reference
14 tools in sovereign mode. PIPRAIL_MODE=sovereign appends the swap tools, the seller tools (piprail_sell · piprail_collect · piprail_earnings) and piprail_wallet (what it holds, and the address it gets paid at), so the agent owns both halves of its wallet: it can be paid, not only pay. It appends rather than replaces, so the default above is untouched. → Modes
No key? It still runs. Without PIPRAIL_PRIVATE_KEY the server boots in read-only mode — discover, quote, register, budget, and guide all work; only piprail_pay_request (and piprail_plan_payment) ask for a wallet. Add a key when you're ready to actually pay.
Pay across chains? List several chains and give each its own key — the tools then pay whichever chain a 402 asks for (one server, one budget):
"env": {
"PIPRAIL_CHAINS": "base,polygon,solana",
"PIPRAIL_BASE_KEY": "0x…", "PIPRAIL_POLYGON_KEY": "0x…", "PIPRAIL_SOLANA_KEY": "<base58-secret>",
"PIPRAIL_MAX_AMOUNT": "1.00"
}
One EVM key works on every EVM chain; non-EVM families each need their own key (and that family's peer libs). A chain with no key is read-only. → Configuration
Listed in the official MCP registry as io.github.piprail/mcp.
What it will not do by default
There is no swap tool in the default set, and that is deliberate: the spend policy does not govern swaps. Every budget cap here governs paying a merchant, while a swap moves your own funds between denominations, so an agent able to swap could drain a wallet through fees and slippage without tripping a single budget check.
That is a reason to bound the capability, not to pretend it does not exist. PIPRAIL_MODE=sovereign
unlocks it for an operator who says the agent owns this wallet, and requires PIPRAIL_MAX_PER_SWAP
before the server will start, because the payment caps cannot bound a swap. A model can never set
its own mode.
Sovereign also unlocks selling, which needs no ceiling: it takes money rather than spending it, and the receiving side holds no private key at all.
Documentation
| Overview · Getting started | What it is · first run |
| Client setup · Configuration | Per-client config · every env var |
| Tools · Modes | The 8 default tools (14 in sovereign) · headless vs supervised |
| Security · Chains | Why it's safe · per-chain setup |
| Use as a library · FAQ | Embed it · common questions |
Spread the word
Free, open-source, self-custodial — no backend to sell you. If PipRail gave your agent a wallet it can trust, help others find it:
⭐ Star on GitHub · 𝕏 Follow @piprailhq · 🌐 piprail.com · 📖 docs.piprail.com
Docs · PipRail · @piprail/sdk · x402 · Model Context Protocol
MIT · no backend, no fee, ever.
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.