The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Lightning Wallet MCP listing page.
Give your AI agent a Bitcoin wallet. One MCP server plus a CLI. Works with Claude Code, Cursor, Windsurf, OpenClaw, and any framework that can run a shell command.
Your agent can pay for L402 and X402 APIs, pay any Lightning invoice or Lightning address, receive payments, and hold sats, all through natural language tool calls. Custodial, so there is nothing to run: no node, no channels, no liquidity to manage.
Claude Code
Then in Claude: "Register a Lightning wallet for me with the email you@example.com".
That is it. register_operator saves your credentials to ~/.lightning-wallet/credentials.json (mode 0600) and every later session reuses them automatically. Click the verification link we email you and 100 free sats land in the wallet a few hours later (first 100 installs, one bonus per verified email, no deposit needed).
Cursor / Windsurf / any MCP host (.cursor/mcp.json, .mcp.json, or the host's MCP settings):
Already have a key? Put it in the env block instead of registering again. The env var always wins over the saved file:
CLI (any agent framework, CI, or a plain shell):
register_operator, set_operator_key, set_agent_credentials, recover_account and rotate_api_key save to ~/.lightning-wallet/credentials.json; the server loads it on start when LIGHTNING_WALLET_API_KEY is unset. forget_credentials (tool) and lw forget delete it. LIGHTNING_WALLET_NO_PERSIST=1 disables writes.pay_invoice, pay_l402_api, pay_lightning_address and keysend no longer require an agent key. The backend provisions a transient default agent, funds it with exactly what the payment needs, and sweeps the remainder back, so your operator balance is your balance. Agents are now optional: create them when you want separate budgets.pending: true (not as errors), so the model does not retry a payment that may still settle. Requests time out after 45s instead of hanging. Lightning-address payments verify the invoice amount before paying.set_budget uses the backend's set_budget action (0 = unlimited works). Partial sweep_agent no longer sweeps everything. Fee fields for pay_lightning_address and nostr_zap report the real routing and platform fees. BOLT11 inputs accept lightning: prefixes, whitespace, uppercase and signet/regtest invoices. whoami never guesses the identity type.pay-address, keysend, sweep, set-budget, recover, use-key, credentials, forget. Version is read from the package.All 46 tools work with the operator key unless noted. Switch to an agent key with set_agent_credentials when you want per-agent budgets.
| Tool | Description |
|---|---|
get_info | Service status, version and supported features (no key needed) |
decode_invoice | Decode a BOLT11 invoice: amount, destination, expiry (no key needed) |
whoami | Current identity (operator or agent), balance, where the key came from |
check_balance | Balance in sats |
get_rate_limits | Rate-limit status and requests remaining |
forget_credentials | Delete the saved credentials file |
| Tool | Description |
|---|---|
pay_l402_api | Request a paid API. Detects L402 (Lightning) or X402 (USDC on Base) on HTTP 402 and pays automatically |
pay_invoice | Pay any BOLT11 invoice; returns the preimage |
pay_lightning_address | Pay user@domain |
keysend | Pay a node pubkey directly, with an optional message |
nostr_zap | NIP-57 zap to a Nostr user or event |
lnurl_auth | Log in to a service with LNURL-auth |
claim_lnurl_withdraw | Pull funds from an LNURL-withdraw link |
| Tool | Description |
|---|---|
create_invoice | Invoice to receive sats |
get_invoice_status | Has an invoice been paid |
get_deposit_invoice | Invoice to fund the operator account |
get_transactions | Transaction history |
set_nostr_identity / get_nostr_identity | Nostr keypair for the agent |
| Tool | Description |
|---|---|
register_operator | Create an account; credentials are saved locally |
update_operator | Set email (sends a verification link) or display name |
claim_promo | Claim the install promo manually (it is also granted automatically after verification) |
withdraw | Withdraw to an external invoice (minimum 10 sats) |
create_withdraw_link | LNURL-withdraw link to sweep into any wallet by QR |
recover_account | Recover with the recovery code (rotates the key) |
rotate_api_key | New key; payments pause for 60 minutes |
set_operator_key / set_agent_credentials | Switch context and save the key |
| Tool | Description |
|---|---|
create_agent | Agent with its own key and optional budget |
list_agents | Agents under this operator |
fund_agent / transfer_to_agent | Move sats to an agent |
sweep_agent | Move sats back to the operator (amount_sats: "all" for everything) |
get_budget_status / set_budget | Read or set a spending limit (0 = unlimited) |
deactivate_agent / reactivate_agent / delete_agent | Lifecycle |
register_webhook, list_webhooks, delete_webhook, test_webhook deliver invoice_paid, payment_completed, payment_failed, balance_low, budget_warning and more to your URL. Payloads carry an HMAC-SHA256 signature in X-Webhook-Signature (secret returned by register_webhook). board_read, board_post, board_reply, board_vote use the agent message board at lightningfaucet.com (posting costs 1 sat).
Every command prints JSON to stdout (add --human for a readable view). Errors go to stderr and exit 1.
max_fee_sats to override.Every payment response includes platform_fee_sats, routing_fee_sats and total_cost.
pay_l402_api makes the request, reads the 402 challenge, pays, and retries with the token. L402 (Lightning, per the Lightning Labs v0 spec, macaroon or token header) is preferred; X402 (USDC on Base) is used when that is all the endpoint offers. Cap what one call may spend with max_payment_sats.
Try it against the demo endpoints on lightningfaucet.com:
There are 30+ pay-per-use endpoints in the API catalog, and you can list your own L402 endpoint on the gateway to get paid by other agents.
Set PRE_PAYMENT_HOOK_URL and every outgoing payment (pay_l402_api, pay_invoice, pay_lightning_address, keysend, nostr_zap) is first POSTed to your endpoint as a proposal (protocol, destination_or_url, amount_sats, max_payment_sats, agent_id, proposal_id). Reply {"decision":"allow"} or {"decision":"deny","reason":"..."}. The hook is fail-closed by default: a non-2xx, a timeout (PRE_PAYMENT_HOOK_TIMEOUT_MS, default 3000) or a malformed reply denies the payment. Set PRE_PAYMENT_HOOK_FAIL_MODE=open to allow on hook errors. Withdrawals, LNURL-withdraw claims and board actions are not gated.
~/.lightning-wallet/credentials.json with mode 0600. Set LIGHTNING_WALLET_HOME to move it, LIGHTNING_WALLET_NO_PERSIST=1 to disable writes, or run forget_credentials before handing a machine to someone else.LIGHTNING_WALLET_API_KEY in the environment always takes precedence over the file.X-Webhook-Signature with the HMAC-SHA256 of the raw body under your webhook secret.Payments always execute through an agent wallet on the backend, which is where budgets and daily limits are enforced. You only need to think about that when you want more than one wallet.
pay_l402_api reports a first-party call that the backend refunded (for example an upstream fetch that failed after payment) as not paid, with refunded_sats, instead of a paid success. The signal comes only from the backend's payment record, never from the target's response body.
Credential persistence, operator-key payments, 1% fee with no minimum, 10-sat withdrawals, pending-payment safety, timeouts, the fixes listed above, eight new CLI commands, README rewrite.
decode_invoice works before registration.
Accept real BOLT11 invoices in the tool schemas; tolerate omitted MCP args; validate withdraw-link amounts.
Pre-payment policy hook.
update_operator, claim_promo, keyless get_info, the install promo.
L402 protocol v0 headers, .well-known/l402.json discovery.
CLI (lw), X402 fallback, webhooks, keysend, analytics, budgets, recovery, agent transfers.
Renamed from lightning-faucet-mcp; env var renamed to LIGHTNING_WALLET_API_KEY.
We ran a 100-round economic experiment with 16 AI agents (8 Claude, 8 GPT-4o) using real Bitcoin on Lightning through this server: 2,839 real Lightning transactions. Repo: github.com/pfergi42/lf-game-theory.
MIT. See LICENSE.
Built with Bitcoin | Lightning Faucet