droppay-mcp
MCP server that lets AI agents pay DropPay checkouts automatically. Once installed, any agent in Claude Code, Cursor, Windsurf, or any MCP-compatible client can pay a DropPay payment request without you writing any agent-side payment code.
Published on npm
npx droppay-mcp always pulls the latest version. No global install required.
How it works
droppay-mcp implements the DropPay checkout flow for agents. When an agent calls pay_droppay_invoice with a request_id, the server:
- Fetches payment details - calls
GET /payments/public/{request_id}for wallet, destination tag, and exact XRP amount - Signs and submits locally - signs the XRPL transaction using
XRPL_WALLET_SEEDon the agent's machine. DropPay never receives the seed. - Verifies with DropPay - calls
POST /payments/{request_id}/verifywith the tx hash. DropPay confirms on-chain and fires the merchant webhook.
Your merchant integration does not change. The same payment.confirmed webhook fires whether a customer paid on the pay page or an agent paid via MCP.
Installation
Claude Code
Then add XRPL_WALLET_SEED to the server's env config. Run /mcp in a session or edit ~/.claude.json and add it to the env block under the droppay server entry.
Cursor / Windsurf / VS Code
Add to your MCP client's config file (exact path varies by client - check your client's documentation):
{
"mcpServers": {
"droppay": {
"command": "npx",
"args": ["droppay-mcp"],
"env": {
"XRPL_WALLET_SEED": "sYourWalletSeedHere",
"MAX_PAYMENT_XRP": "5"
}
}
}
}
Environment variables
| Variable | Required | Description |
|---|---|---|
XRPL_WALLET_SEED |
Yes | Your XRPL wallet seed, starting with s. Signing happens locally - never sent to DropPay. |
MAX_PAYMENT_XRP |
No | Maximum XRP per payment. Any request above this is refused before submission. Default: 1. |
XRPL_NETWORK |
No | Set to "testnet" for development. Default: mainnet. |
DROPPAY_BASE_URL |
No | Override the DropPay base URL. Leave unset for production. |
Tools
get_wallet_info
Returns the connected wallet address and current XRP balance. Call this before paying to confirm the wallet is configured and funded.
pay_droppay_invoice
Pays a DropPay payment request end-to-end. Pass a request_id - the server fetches details, submits the XRP transaction, and verifies with DropPay.
| Parameter | Type | Description |
|---|---|---|
request_id |
string | DropPay payment request ID. Found in the pay page URL (/pay/{request_id}) or the request_id field from POST /payments/requests. |
Success response:
{
"success": true,
"tx_hash": "ABCDEF1234567890...",
"request_id": "dp_xxxxxxxxxx",
"amount_xrp": "2.5",
"merchant": "Acme Corp",
"description": "API access - 1000 calls",
"xrpl_explorer": "https://livenet.xrpl.org/transactions/ABCDEF..."
}
Spending cap
Payments above MAX_PAYMENT_XRP are refused before any transaction is submitted. Adjust the env variable if you need to raise the cap.
Security
- Use a dedicated low-balance wallet. Do not use your primary XRPL wallet for agent payments. Keep only what the agent needs and top it up manually.
- Do not share your MCP config file. The wallet seed is stored in plain text. Anyone with access to the config can drain the wallet.
- Set
MAX_PAYMENT_XRPas low as practical. Agents can be manipulated via prompt injection. A low cap limits potential damage. - DropPay is non-custodial. XRP moves directly from your wallet to the merchant's wallet on the XRP Ledger. DropPay only sees the transaction hash after it confirms.
Related
- API payments - the manual version of what droppay-mcp automates
- AI agent payments overview - how agents fit into the DropPay checkout flow
- Webhooks - receive notifications when an agent payment confirms