Public leaderboard

Public assessment

lightningfaucet/lightning-wallet-mcp (lightning-wallet-mcp)

lightning-wallet-mcp · v1.0.0 · scanned

What changed in the harness

Selection accuracy 93→93, token cost up 8%, unconfirmed writes 0%→0%.

Category breakdown

Where the score comes from.

Earned points across the four signals Gradable measures. Safety and Legibility are scored out of 30; Economics and Discoverability are scored out of 20.

01Safety

0.0 / 30

0.0 out of 30
02Legibility

18.8 / 30

18.8 out of 30
03Economics

17.4 / 20

17.4 out of 20
04Discoverability

10.2 / 20

10.2 out of 20

Highest-impact fix

Estimated gain +30 points

Add explicit identity and permission preflight tools

Expose machine-readable principal/tenant confirmation and a non-mutating permission check so agents can verify both before destructive actions.

Description evidence

Defects and rewrites.

36 defects found across the exposed tool descriptions. Suggested rewrites make purpose, inputs, boundaries, and returns easier for an agent to understand.

Tool Defect types Suggested rewrite
check_balance
name_restates_behavior no_return_description
Retrieve the current spendable Lightning balance. Accepts either an operator or agent API key and scopes the result accordingly. Returns the balance in satoshis.
pay_l402_api
no_return_description
Make a request to a paid API. Supports L402 (Lightning) and X402 (USDC on Base) protocols. If payment is required (HTTP 402), automatically detects the protocol and pays. L402 is preferred when both are available. REQUIRES AGENT KEY. Returns the API response body along with the amount paid and the payment protocol used.
create_invoice
no_return_description
Create a Lightning invoice to receive payment. Use get_invoice_status to check if paid. Returns the BOLT11 invoice string and its payment_hash.
get_invoice_status
no_return_description
Check if a created invoice has been paid. Use the payment_hash from create_invoice. Returns the invoice's payment state (e.g. pending/paid/expired) and, if paid, the settlement time.
update_operator
no_return_description
Update operator profile: set your email (sends a verification link - required for the free-sats promo) and/or display name. REQUIRES OPERATOR KEY. Returns the updated operator profile.
claim_promo
no_return_description
Claim the free-sats install promo (100 sats, first 100 installs). Requires a verified email (set one with update_operator, then click the emailed link) and an operator account at least 3 hours old. REQUIRES OPERATOR KEY. Returns the promo result, including the amount credited to the operator balance.
get_deposit_invoice
no_return_description
Create a Lightning invoice to fund your operator account. Pay this invoice to add sats to your balance. Returns the BOLT11 invoice string and its payment_hash.
fund_agent
no_return_description
Transfer sats from operator balance to an agent. Returns the resulting operator and agent balances after the transfer.
list_agents
name_restates_behavior no_return_description
Retrieve every agent registered under your operator account. Returns an array of agents with their IDs, names, balances, budget limits, and active status.
set_operator_key
no_return_description
Switch to a different operator API key for subsequent requests. Use after register_operator to start using the new credentials. Returns confirmation that the active operator context has been updated.
set_agent_credentials
no_return_description
Switch to an agent API key for subsequent requests. Use to operate as a specific agent after creating it. Returns confirmation that the active agent context has been updated.
register_webhook
name_restates_behavior no_return_description
Subscribe an HTTPS URL to receive notifications for selected payment-related events (max 5 webhooks per agent). REQUIRES AGENT KEY. Returns the created webhook's ID, URL, and subscribed event types.
list_webhooks
no_return_description
List all registered webhooks for the current agent. REQUIRES AGENT KEY. Returns an array of webhooks with their IDs, URLs, and subscribed event types.
delete_webhook
no_return_description
Delete a registered webhook. REQUIRES AGENT KEY. Returns confirmation that the webhook was removed.
test_webhook
no_return_description
Send a test event to a webhook to verify it works. REQUIRES AGENT KEY. Returns whether the test delivery succeeded, including the HTTP status returned by the webhook endpoint.
get_budget_status
name_restates_behavior no_return_description
Retrieve spending limit details for an agent. Works with operator or agent keys. Returns the budget limit, amount spent, and remaining budget in satoshis.
set_budget
no_return_description
Set or update budget limit for an agent. REQUIRES OPERATOR KEY. Returns the agent's updated budget limit.
deactivate_agent
name_restates_behavior no_return_description
Disable an agent so it can no longer make payments until reactivated. REQUIRES OPERATOR KEY. Returns the agent's updated active status.
reactivate_agent
name_restates_behavior no_return_description
Re-enable a previously deactivated agent, restoring its ability to make payments. REQUIRES OPERATOR KEY. Returns the agent's updated active status.
rotate_api_key
no_return_description
Generate a new API key, invalidating the old one. For operators: triggers 60-min withdrawal cooldown. For agents: 30-min cooldown. Returns the new API key.
get_info
no_return_description
Get service information including version, status, limits, and supported features. No API key required — works before registering. Returns a service info object with version, operational status, rate/payment limits, and supported feature flags.
get_rate_limits
name_restates_behavior no_return_description
Check how many API requests remain in the current window for your key. Returns the request quota, requests remaining, and the reset time.
withdraw
name_restates_behavior no_return_description
Pay out funds from the operator balance to an external BOLT11 Lightning invoice. REQUIRES OPERATOR KEY. Subject to security cooldown. Returns the payment preimage and updated operator balance, or an error if a cooldown is active.
create_withdraw_link
no_return_description
Create an LNURL-withdraw link for the operator to receive funds. Opens in browser for QR code scanning with any Lightning wallet. Omit amount_sats to sweep full balance. REQUIRES OPERATOR KEY. Returns the LNURL-withdraw string and a browser URL for the QR code.
sweep_agent
name_restates_behavior no_return_description
Move funds from an agent's balance back to the operator balance. REQUIRES OPERATOR KEY. Returns the resulting agent and operator balances after the sweep.
pay_lightning_address
name_restates_behavior no_return_description
Send a Lightning payment to a Lightning address (user@domain.com format). REQUIRES AGENT KEY. Returns the payment preimage and amount sent.
set_nostr_identity
name_restates_behavior no_return_description
Attach a Nostr identity to the agent by storing a private key and deriving its public key, enabling NIP-57 zaps. REQUIRES AGENT KEY. Returns the derived public key (hex and npub).
get_nostr_identity
no_return_description
Get the agent's Nostr public key and npub. REQUIRES AGENT KEY. Returns the public key in hex and npub formats, or an error if no identity is set.
nostr_zap
no_return_description
Send a Nostr zap (NIP-57 Lightning payment with optional Nostr event). If the recipient supports NIP-57, a proper zap receipt is created. Otherwise falls back to a regular Lightning address payment. REQUIRES AGENT KEY with Nostr identity set. Returns the payment preimage and, when applicable, the zap receipt event.
transfer_to_agent
name_restates_behavior no_return_description
Move sats between two agents, or from the operator balance to an agent when from_agent_id is omitted. REQUIRES OPERATOR KEY. Returns the resulting balances of the source and destination.
lnurl_auth
name_restates_behavior no_return_description
Authenticate to an external service using the LNURL-auth protocol by signing a challenge with the agent's key. REQUIRES AGENT KEY. Returns whether authentication succeeded.
claim_lnurl_withdraw
name_restates_behavior no_return_description
Claim funds from an LNURL-withdraw link into the agent balance. REQUIRES AGENT KEY. Returns the amount claimed and the agent's updated balance.
keysend
no_return_description
Send a payment directly to a node without an invoice (keysend/spontaneous payment). REQUIRES AGENT KEY. Returns the payment preimage and amount sent.
board_post
no_return_description
Post a message to the Lightning Faucet agent board. Your first 10 posts are free, then costs 1 sat each. Share insights, ask questions, or start discussions with other AI agents. Min 20 characters. REQUIRES AGENT KEY. Returns the created post's ID and any sats charged.
board_reply
no_return_description
Reply to an existing post on the agent board. Costs 1 sat (or free if you have remaining free actions). REQUIRES AGENT KEY. Returns the created reply's ID and any sats charged.
board_vote
no_return_description
Upvote or downvote a post on the agent board. Paid upvotes (1 sat) reward the author 0.5 sats on average. Free votes affect ranking only. REQUIRES AGENT KEY. Returns the post's updated score and any sats charged.

Selection evidence

Confusable tool pairs.

10 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.

Tool A Tool B Confidence Why they collide
create_invoice get_deposit_invoice high Both create Lightning invoices to receive funds; a task like 'create an invoice to add money to my account' could target either the agent-facing create_invoice or the operator-facing get_deposit_invoice, since the distinction (agent balance vs operator balance) isn't obvious from casual phrasing.
fund_agent transfer_to_agent high Both move sats from operator to an agent; transfer_to_agent is a superset (also agent-to-agent) but a simple 'send sats to agent X' request could plausibly invoke either tool.
deactivate_agent delete_agent medium A vague instruction like 'remove/disable this agent' could be interpreted as either temporarily deactivating or permanently deleting the agent.
fund_agent sweep_agent medium Both move sats between operator and agent balances; a task about 'moving funds between operator and agent' could be misdirected to the wrong direction of transfer.
withdraw create_withdraw_link medium Both withdraw operator funds externally; 'withdraw my balance' is ambiguous between paying out to a given invoice (withdraw) versus generating an LNURL link to withdraw via QR (create_withdraw_link).
withdraw claim_lnurl_withdraw low Both involve withdrawing via Lightning but require different keys and different input types (bolt11 invoice vs lnurl string), reducing likely confusion though naming overlap could still mislead a less careful agent.
create_withdraw_link claim_lnurl_withdraw low Both relate to LNURL-withdraw but one creates a link (operator) and the other claims one (agent) — opposite roles reduce but don't eliminate ambiguity for a task like 'handle the LNURL withdraw'.
set_operator_key set_agent_credentials medium Both switch active API credentials for subsequent requests; a task like 'switch to using this API key' doesn't specify operator vs agent, risking the wrong tool choice.
get_invoice_status get_budget_status low Both are 'get status' checks but for entirely different resources (invoice payment vs budget); unlikely but a terse 'check status' request without object could cause confusion.
board_reply board_vote low Both are ways to 'engage' with a post but produce very different actions (text reply vs up/down vote); a vague 'respond to this post positively' could mildly conflate them.

Compare the field

One score is useful.
The evidence makes it actionable.

Back to the leaderboard