Give AI agents a Bitcoin wallet with Lightning Network payments and L402 support.
Give AI agents a Bitcoin wallet with Lightning Network payments and L402 support.
Valid MCP server (2 strong, 1 medium validity signals). No known CVEs in dependencies. Package registry verified. Imported from the Official MCP Registry.
3 files analyzed · 1 issue found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
This plugin requests these system permissions. Most are normal for its category.
Add this to your MCP configuration file:
{
"mcpServers": {
"io-github-lightningfaucet-lightning-wallet-mcp": {
"args": [
"-y",
"lightning-wallet-mcp"
],
"command": "npx"
}
}
}From the project's GitHub README.
Give your AI agent a Bitcoin wallet. MCP server + CLI. Works with Claude Code, OpenClaw, Cursor, and any agent framework.
Note: This package was previously published as
lightning-faucet-mcp. The functionality is identical.
First 100 installs get 100 free sats — one per person!
npm i -g lightning-wallet-mcplw register --name "YourAgent"lw deposit 100We verify the invoice cryptographically and pay automatically. No trust required — the destination pubkey in the invoice proves it came from lw.
v1.3.0 - L402 protocol v0 support per the latest Lightning Labs spec.
version="0", token=, backward compatible with macaroon=.well-known/l402.json on lightningfaucet.com and certvera.comv1.1.0 - X402 protocol support (USDC on Base) as automatic fallback alongside L402 (Lightning).
pay_l402_api seamlessly handles both L402 and X402For CLI-first agents (OpenClaw, Pi, KiloCode, or any agent with Bash access):
npm install -g lightning-wallet-mcp
This installs the lw command:
# Register and save your API key
export LIGHTNING_WALLET_API_KEY=$(lw register --name "My Bot" | jq -r '.api_key')
# Check balance
lw balance | jq '.balance_sats'
# Pay an L402 API
lw pay-api "https://lightningfaucet.com/api/l402/fortune"
# Create and fund an agent
lw create-agent "Research Bot" --budget 5000
lw fund-agent 1 1000
# Check identity
lw whoami
Output is JSON by default (pipe to jq). Use --human for readable output.
Run lw help for all commands.
For MCP-native clients, configure as an MCP server:
Option A: Self-Registration
{
"mcpServers": {
"lightning-wallet": {
"command": "npx",
"args": ["lightning-wallet-mcp"]
}
}
}
Then ask Claude: "Register a new Lightning Wallet operator account"
Option B: Pre-configured API Key
~/.claude/settings.json):{
"mcpServers": {
"lightning-wallet": {
"command": "npx",
"args": ["lightning-wallet-mcp"],
"env": {
"LIGHTNING_WALLET_API_KEY": "your-api-key-here"
}
}
}
}
| Tool | Description |
|---|---|
get_info | Get service status, version, and supported features |
decode_invoice | Decode a BOLT11 invoice to see amount, destination, and expiry |
| Tool | Description |
|---|---|
whoami | Get current context - shows if operating as operator or agent |
check_balance | Check current Lightning balance in satoshis |
get_rate_limits | Check current rate limit status and requests remaining |
| Tool | Description |
|---|---|
pay_l402_api | Access paid APIs (L402/X402) - auto-detects protocol and pays |
pay_invoice | Pay any BOLT11 Lightning invoice |
keysend | Send payment directly to a node pubkey (no invoice needed) |
pay_lightning_address | Pay to a Lightning address (user@domain.com format) |
create_invoice | Generate invoice to receive payments |
get_invoice_status | Check if an invoice has been paid |
get_transactions | View transaction history |
| Tool | Description |
|---|---|
lnurl_auth | Authenticate to a service using LNURL-auth protocol |
claim_lnurl_withdraw | Claim funds from an LNURL-withdraw link |
| Tool | Description |
|---|---|
register_operator | Create new operator account |
recover_account | Recover account using recovery code |
rotate_api_key | Generate a new API key (60-min cooldown on withdrawals) |
get_deposit_invoice | Create invoice to fund operator account |
withdraw | Withdraw funds to external Lightning destination |
set_operator_key | Switch to operator credentials |
| Tool | Description |
|---|---|
create_agent | Create agent under operator |
list_agents | List all agents under operator |
fund_agent | Transfer sats from operator to agent |
transfer_to_agent | Transfer sats between agents or from operator to agent |
sweep_agent | Sweep funds from agent back to operator |
deactivate_agent | Temporarily disable an agent |
reactivate_agent | Re-enable a deactivated agent |
delete_agent | Permanently delete an agent (returns balance to operator) |
get_budget_status | Get agent's budget limit and spending |
set_budget | Set or update agent's spending limit |
set_agent_credentials | Switch to agent credentials |
| Tool | Description |
|---|---|
register_webhook | Register a URL to receive event notifications |
list_webhooks | List all registered webhooks |
delete_webhook | Delete a webhook |
test_webhook | Send a test event to verify webhook connectivity |
Webhook Events:
invoice_paid - Payment received on an invoicepayment_completed - Outgoing payment succeededpayment_failed - Outgoing payment failedbalance_low - Balance dropped below thresholdbudget_warning - 80% of budget consumedtest - Manual test eventAll commands output JSON to stdout. Errors go to stderr with exit code 1.
| Command | Description |
|---|---|
lw register [--name "name"] | Create operator account, prints API key |
lw whoami | Current identity (operator or agent) |
lw balance | Balance in satoshis |
lw info | Service status and capabilities |
lw deposit <amount> | Generate deposit invoice |
lw withdraw <invoice> | Withdraw to external wallet |
lw pay <invoice> | Pay BOLT11 invoice [--max-fee <sats>] |
lw pay-api <url> | Pay L402/X402 API [--method GET] [--body "{}"] [--max-sats 1000] |
lw decode <invoice> | Decode BOLT11 invoice |
lw create-agent <name> | Create agent [--budget <sats>] |
lw fund-agent <id> <amount> | Transfer sats to agent |
lw list-agents | List all agents |
lw transactions | Recent transactions [--limit 10] [--offset 0] |
lw help | Show all commands |
# 1. Register (one-time)
export LIGHTNING_WALLET_API_KEY=$(lw register --name "My Agent" | jq -r '.api_key')
# 2. Fund the account (pay the invoice with any Lightning wallet)
lw deposit 10000 | jq -r '.bolt11'
# 3. Create an agent with a budget
AGENT=$(lw create-agent "Worker" --budget 5000)
AGENT_ID=$(echo $AGENT | jq -r '.agent_id')
AGENT_KEY=$(echo $AGENT | jq -r '.agent_api_key')
# 4. Fund the agent
lw fund-agent $AGENT_ID 2000
# 5. Switch to agent context and make payments
export LIGHTNING_WALLET_API_KEY=$AGENT_KEY
lw pay-api "https://api.example.com/data" --max-sats 100
# 6. Check what happened
lw transactions --limit 5
Lightning Wallet MCP supports two HTTP 402 payment protocols:
When you call pay_l402_api, the server automatically detects which protocol the API uses. L402 always takes priority if both headers are present. Agents always pay in sats regardless of protocol — X402 amounts are converted at market rate.
The L402 protocol (formerly LSAT) enables APIs to charge per-request using Lightning. When you call an L402-protected endpoint:
X402 uses USDC on Base for API payments. The flow is transparent to agents:
PAYMENT-REQUIRED headerPAYMENT-SIGNATURE headerThe response includes payment_protocol: "x402" and usdc_amount so agents know which protocol was used.
We maintain a directory of L402-enabled APIs at lightningfaucet.com/l402-registry - perfect for testing your agents.
Try these endpoints to test L402 payments:
# Get a fortune (costs ~10-50 sats)
pay_l402_api({ url: "https://lightningfaucet.com/api/l402/fortune" })
# Get a joke (costs ~10-50 sats)
pay_l402_api({ url: "https://lightningfaucet.com/api/l402/joke" })
# Get an inspirational quote (costs ~10-50 sats)
pay_l402_api({ url: "https://lightningfaucet.com/api/l402/quote" })
See the L402 API Registry for more endpoints and resources.
// 1. Register as operator (if no API key configured)
register_operator({ name: "My AI Company" })
// Returns: { api_key: "lf_abc...", recovery_code: "xyz...", operator_id: 123 }
// 2. Activate the operator key
set_operator_key({ api_key: "lf_abc..." })
// 3. Check who you are
whoami()
// Returns: { type: "operator", id: 123, name: "My AI Company", balance_sats: 0 }
// 4. Fund your operator account
get_deposit_invoice({ amount_sats: 10000 })
// Pay this invoice with any Lightning wallet
// 5. Create an agent with budget limit
create_agent({ name: "Research Assistant", budget_limit_sats: 5000 })
// Returns: { agent_id: 456, agent_api_key: "agent_def..." }
// 6. Fund the agent
fund_agent({ agent_id: 456, amount_sats: 1000 })
// 7. Set up a webhook for payment notifications
register_webhook({
url: "https://your-server.com/webhooks/lightning",
events: ["invoice_paid", "payment_completed"]
})
// Returns: { webhook_id: 1, secret: "..." } <- Save this secret!
// 8. Switch to agent mode for payments
set_agent_credentials({ api_key: "agent_def..." })
// 9. Check budget status
get_budget_status()
// Returns: { budget_limit_sats: 5000, total_spent_sats: 0, remaining_sats: 5000 }
// 10. Make payments!
pay_l402_api({ url: "https://api.example.com/premium-data" })
Send payments directly to a Lightning node without needing an invoice:
// Send 100 sats to a node with an optional message
keysend({
destination: "03864ef025fde8fb587d989186ce6a4a186895ee44a926bfc370e2c366597a3f8f",
amount_sats: 100,
message: "Hello from my AI agent!"
})
Check invoice details before paying:
decode_invoice({ invoice: "lnbc1000n1..." })
// Returns: {
// amount_sats: 1000,
// description: "Test payment",
// destination: "03abc...",
// expires_at: "2026-01-16T12:00:00Z",
// is_expired: false
// }
Get service status and capabilities.
{
"success": true,
"version": "1.0.1",
"api_version": "1.0",
"status": "operational",
"max_payment_sats": 1000000,
"min_payment_sats": 1,
"supported_features": ["l402", "x402", "webhooks", "lightning_address", "keysend"]
}
Get current operating context.
Returns for Operator:
{
"type": "operator",
"id": 123,
"name": "My Company",
"balance_sats": 50000,
"agent_count": 3
}
Returns for Agent:
{
"type": "agent",
"id": 456,
"name": "Research Bot",
"balance_sats": 1000,
"budget_limit_sats": 5000,
"operator_id": 123
}
Access paid APIs with automatic payment. Supports both L402 (Lightning) and X402 (USDC on Base) protocols. Protocol is auto-detected from the 402 response headers.
| Parameter | Type | Required | Description |
|---|---|---|---|
| url | string | Yes | The URL to request |
| method | string | No | HTTP method (GET, POST, PUT, DELETE). Default: GET |
| body | string | No | Request body for POST/PUT |
| max_payment_sats | number | No | Maximum payment amount. Default: 1000 |
Send payment to a node without an invoice.
| Parameter | Type | Required | Description |
|---|---|---|---|
| destination | string | Yes | Target node public key (66 hex chars) |
| amount_sats | number | Yes | Amount in satoshis |
| message | string | No | Optional message (max 1000 chars) |
Register a URL to receive payment notifications.
| Parameter | Type | Required | Description |
|---|---|---|---|
| url | string | Yes | HTTPS URL to receive webhooks |
| events | array | No | Event types to subscribe to. Default: ["invoice_paid"] |
Returns: Webhook ID and HMAC secret for signature verification.
┌─────────────────────────────────────────────────────────┐
│ OPERATOR │
│ • Holds main funds │
│ • Creates and manages agents │
│ • Sets spending limits │
│ • Receives webhook notifications │
│ • Can recover account with recovery code │
├─────────────────────────────────────────────────────────┤
│ AGENT 1 AGENT 2 AGENT 3 │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ 1000 sat│ │ 5000 sat│ │ 2500 sat│ │
│ │ Budget: │ │ Budget: │ │ Budget: │ │
│ │ 5000 │ │ 10000 │ │ Unlimited│ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ │ │ │ │
│ L402 APIs Keysend Receive │
│ Pay Invoice Payments Payments │
└─────────────────────────────────────────────────────────┘
get_transactions to review activityrotate_api_keyWebhooks include HMAC-SHA256 signatures for verification:
import hmac
import hashlib
def verify_webhook(payload, signature, secret):
expected = hmac.new(
secret.encode(),
payload.encode(),
hashlib.sha256
).hexdigest()
return hmac.compare_digest(signature, expected)
Check the X-Webhook-Signature header against the payload.
Lightning Faucet charges a 2% platform fee (min 1 sat) on outgoing payments:
All payment responses include platform_fee_sats, routing_fee_sats, and total_cost for full transparency.
lw command for CLI-first agents (OpenClaw, Pi, KiloCode, any Bash agent)npm install -g lightning-wallet-mcp gives you both MCP server and CLIpay_l402_api detects L402 or X402 from 402 response headerspayment_protocol and usdc_amount included when X402 is usedplatform_fee_sats, routing_fee_sats, and total_costlightning-faucet-mcp to lightning-wallet-mcpLIGHTNING_FAUCET_API_KEY → LIGHTNING_WALLET_API_KEYSee the lightning-faucet-mcp changelog for v1.6.0 through v2.0.7 history.
We ran a 100-round economic experiment with 16 AI agents (8 Claude, 8 GPT-4o) using real Bitcoin on Lightning. Agents could trade, form alliances, invest, and compete — all powered by this MCP server.
Results: Agents completed 2,839 real Lightning transactions. Claude agents dominated through aggressive early trading while GPT-4o agents adopted conservative strategies.
MIT License - see LICENSE for details.
Built with Bitcoin | Lightning Faucet
Maintainer here. We just published v1.2.5 which updates @modelcontextprotocol/sdk to 1.27.1 and all transitive dependencies. npm audit now returns 0 vulnerabilities, so the 3 supply chain findings should clear on rescan. A few notes on the remaining findings: "Hardcoded Bearer token" is a false positive. There are no Bearer tokens, API keys, or credentials anywhere in the source. All authentication is done via environment variables (LIGHTNING_WALLET_API_KEY). "Global client state" is intentional and documented in the source code. MCP tools execute sequentially per the protocol spec, so there's no risk of credential leakage between concurrent requests. If MCP adds concurrent execution in the future, we'll refactor to per-request context. Happy to answer questions or address any other concerns.
by Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.
by mcp-marketplace · Developer Tools
Create, build, and publish Python MCP servers to PyPI — conversationally.
by Microsoft · Content & Media
Convert files (PDF, Word, Excel, images, audio) to Markdown for LLM consumption
by mcp-marketplace · Developer Tools
Scaffold, build, and publish TypeScript MCP servers to npm — conversationally
by mcp-marketplace · Finance
Free stock data and market news for any MCP-compatible AI assistant.
by Taylorwilsdon · Productivity
Control Gmail, Calendar, Docs, Sheets, Drive, and more from your AI