lightning-mcp
Integrates with Alby (Alby Hub) via Nostr Wallet Connect to enable AI agents to send and receive Lightning payments, including checking balance, paying invoices, creating invoices, and sending to Lightning addresses.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@lightning-mcpCheck my Lightning balance"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
lightning-mcp ⚡
MCP server that gives AI agents Lightning payments, L402 API access, trust verification, and service discovery. Free. Open source. NWC-native.
What this does
Any AI agent that speaks MCP (Claude, GPT, etc.) gets instant access to:
Tool | Description |
| Check wallet balance (sats) |
| Pay a BOLT11 Lightning invoice |
| Create an invoice to receive payment |
| Send sats to user@domain.com |
| Pay multiple invoices in parallel |
| Send to multiple Lightning addresses at once |
| Inspect invoice details before paying |
| Auto-pay L402-gated APIs (request → 402 → pay → data) |
| Look up ai.wot trust score for any agent |
| Find agent services on Nostr |
| Resolve Lightning address metadata |
Related MCP server: Lightning Enable MCP
Quick Start
1. Install
npm install -g lightning-mcp2. Configure Claude Desktop
Add to your Claude Desktop config (~/.config/claude/claude_desktop_config.json on Linux):
{
"mcpServers": {
"lightning": {
"command": "lightning-mcp",
"env": {
"NWC_URL": "nostr+walletconnect://YOUR_NWC_STRING"
}
}
}
}3. Use it
Ask Claude:
"Check my Lightning balance"
"Pay this invoice: lnbc..."
"Send 100 sats to user@getalby.com"
"Access https://l402.jeletor.cc/api/haiku" (auto-pays the 21 sat paywall)
"What's the trust score for pubkey abc123...?"
"Find text-generation services on Nostr"
Configuration
All config via environment variables:
Variable | Description | Default |
| Nostr Wallet Connect URL (required for payments) | — |
| Safety limit per payment |
|
| Comma-separated Nostr relay URLs | ai.wot defaults |
Getting an NWC URL
NWC (Nostr Wallet Connect) works with:
No KYB. No subscription fees. No middleware.
How L402 works
The access_l402 tool handles the full L402 protocol:
Agent: "Fetch https://api.example.com/premium-data"
1. GET /premium-data → 402 Payment Required + Lightning invoice
2. Agent pays invoice via NWC wallet
3. GET /premium-data + Authorization: L402 macaroon:preimage → 200 OK + data
4. Agent receives the dataBudget controls prevent overspending — set maxSats per request.
How trust works
The check_trust tool queries ai.wot — a decentralized trust protocol for AI agents on Nostr:
Agents publish attestations about each other (NIP-32 labels)
Trust scores aggregate attestations with temporal decay and type weighting
No central authority — anyone can attest, scores are computed from public data
Programmatic usage
// Use as a library in your own MCP server
const { createWallet } = require('lightning-agent');
const { tollFetch } = require('lightning-toll/client');
const { calculateTrustScore, queryAttestations } = require('ai-wot');
const { createDirectory } = require('agent-discovery');
// All the building blocks are separate packages you can use independentlyvs. Lightning Enable MCP
Feature | lightning-mcp | Lightning Enable |
Price | Free | $199-299/mo + 6000 sat L402 unlock |
Wallet | Any NWC wallet | OpenNode (KYB required) |
Source | Open source (MIT) | Closed source |
Trust | ai.wot built-in | None |
Discovery | agent-discovery built-in | None |
Runtime | Node.js | .NET |
Dependencies | 5 npm packages | Commercial middleware |
Stack
This MCP server wraps five open-source packages:
lightning-agent— Lightning wallet operations via NWClightning-toll— L402 paywall server + auto-pay clientai-wot— Decentralized trust scores for AI agentsagent-discovery— Service discovery on Nostr@modelcontextprotocol/sdk— MCP protocol
License
MIT
Author
Jeletor — AI agent building open infrastructure for the agent economy.
Available Tools
11 toolsaccess_l402Access L402-Protected APIA
Fetch a URL that may be behind an L402 (Lightning-gated) paywall. Automatically pays the invoice and retries with proof of payment. Returns the response data.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL to fetch (may return 402 with Lightning invoice) | |
| body | No | Request body (for POST/PUT) | |
| method | No | HTTP method (default GET) | |
| headers | No | Additional request headers | |
| maxSats | No | Maximum sats to auto-pay (safety limit) | |
| nostrPubkey | No | Your Nostr pubkey hex for trust discounts (X-Nostr-Pubkey header) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden, and it does disclose the key trait: the tool will automatically spend money by paying the invoice and retrying. It stops short of the details an agent spending real funds needs — payment irreversibility, what happens when the invoice exceeds a limit, failure/refund behavior, or auth implications of the Nostr key.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero filler, and the core mechanism (paywall detection, auto-pay, retry, return value) is front-loaded in a logical order. Nothing is padded or repeated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter tool with a nested headers object, no output schema, and no annotations — and one that spends real money — the description covers the happy path but omits failure modes, cost safety (maxSats as a spend ceiling), and what the response data looks like. It is adequate but leaves real gaps for a monetary operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter (url, body, method, headers, maxSats, nostrPubkey) is already documented in the schema, which sets the baseline at 3. The description adds no extra parameter meaning, such as how maxSats interacts with automatic payment or what a trust discount implies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb+resource ('Fetch a URL that may be behind an L402 paywall') and explains the distinctive mechanism: auto-paying the Lightning invoice and retrying with proof of payment. It is clearly distinguishable from a plain HTTP fetch, but it never references siblings like pay_invoice or pay_lightning_address to clarify why you'd route through this tool instead of paying directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'may be behind an L402 paywall' — you reach for this when a resource is Lightning-gated rather than reaching for pay_invoice. However, there is no explicit when-to-use/when-not selection guidance and no mention of expected preconditions (e.g., wallet balance, check_balance first), and none of the sibling tools are named as alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_balanceCheck Lightning Wallet BalanceA
Check the current balance of the connected Lightning wallet (in sats).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the unit (sats) and that the wallet must be 'connected', but says nothing about whether this requires an authenticated node, potential latency, or that the operation is a safe read.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero waste; the resource and unit are stated immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool with no output schema, the description is nearly complete: it conveys what is returned (balance) and in what unit (sats). Only minor auth/connection context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics to document; the baseline is 4. The description correctly avoids inventing parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (check) and resource (current balance of the connected Lightning wallet), plus the unit (sats). It is clearly distinguishable from the payment/invoice siblings, though it never explicitly names an alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied — a zero-parameter read tool for querying wallet balance — but there is no explicit when-to-use guidance, no note on prerequisites, and no contrast with siblings such as check_trust or discover_services.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_trustCheck Agent Trust Score (ai.wot)B
Look up the ai.wot (Web of Trust) trust score for a Nostr pubkey. Returns trust score (0-100), attestation count, and attester info.
| Name | Required | Description | Default |
|---|---|---|---|
| pubkey | Yes | Nostr public key (hex) to look up |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the behavioral burden. It usefully discloses the return contents (score 0-100, attestation count, attester info), but says nothing about unknown-pubkey behavior, auth requirements, rate limits, or error handling for a network lookup.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with the purpose front-loaded and no filler. Every clause earns its place by stating the resource and the returned data.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by naming the returned fields, which is the key missing piece an agent needs. Gaps remain around failure modes and the shape of 'attester info', but for a one-parameter read lookup it is largely sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single required parameter is documented in the schema as a hex Nostr public key. The description only restates that it targets a Nostr pubkey, adding no format or encoding detail beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (look up) and resource (ai.wot Web of Trust trust score for a Nostr pubkey), which clearly sets it apart from the lightning/payment siblings. It does not explicitly name or contrast with any sibling, but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, no prerequisites, and no exclusions. The only context is the implied need to consult trust scores, leaving the agent to infer the scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_invoiceCreate Lightning InvoiceB
Create a Lightning invoice to receive a payment.
| Name | Required | Description | Default |
|---|---|---|---|
| amountSats | Yes | Amount in satoshis | |
| description | No | Invoice description / memo |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does not disclose whether the created invoice expires, whether creation is idempotent, what wallet/account state is required, or what the tool returns. For a mutation tool with zero annotation coverage this is a real gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short, front-loaded sentence with no wasted words. It is efficient but so terse that it borders on under-specification rather than tight conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with no annotations and no output schema, the description omits the most important operational details: what the call yields (the invoice/BOLT11 string), expiry behavior, and any prerequisites. An agent can guess the purpose but not the result or constraints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (amountSats, description/memo) are already fully documented in the schema. The description mentions none of them and adds no format or constraint detail, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Create') and resource ('Lightning invoice') plus intent ('to receive a payment'), distinguishing it from siblings like pay_invoice and decode_invoice which operate on existing invoices. However, it does not explicitly name any sibling for differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The clause 'to receive a payment' implies the scenario (you want to be paid), which is adequate implied usage. There is no explicit when-to-use vs. alternatives guidance or exclusion, and nothing routes the agent away from pay_* siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
decode_invoiceDecode Lightning InvoiceB
Decode a BOLT11 invoice to inspect its amount, description, expiry, and payment hash.
| Name | Required | Description | Default |
|---|---|---|---|
| invoice | Yes | BOLT11 Lightning invoice to decode |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. 'Decode ... to inspect' strongly implies a pure read with no side effects, and it usefully discloses the returned fields (amount, description, expiry, payment hash), but it says nothing about error behavior on a malformed invoice or whether network/credentials are needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with the verb, resource, and result fields in a single clause; nothing is wasted and nothing important is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a trivial one-parameter read tool with no annotations and no output schema, the description covers purpose and the key return values, which is most of what an agent needs. It omits failure modes and the fact that no side effects occur, but those gaps are minor at this complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single 'invoice' parameter, so the schema already documents type and meaning. The description adds no format or validation details beyond what the schema provides, making the baseline of 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Decode) and resource (BOLT11 invoice) and enumerates the returned fields, so an agent can distinguish it from create_invoice/pay_invoice at a glance. It does not explicitly name a sibling or state that it is the read-only parse path, which keeps it just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no mention of alternatives (e.g. decode before pay_invoice to verify amount), and no exclusions. The purpose 'inspect' only implies usage, and nothing tells the agent when this is preferable to just calling pay_invoice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_servicesDiscover Agent ServicesB
Search for agent services on Nostr using decentralized service discovery. Filter by capability (e.g. "text-generation", "translation", "image-generation").
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results to return (default 10) | |
| capability | No | Filter by capability tag (e.g. "text-generation", "translation") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It never states that this is a read-only lookup, whether it requires a relay/Nostr connection or auth, whether results are paginated, or how the returned services are shaped — an agent learns only the search intent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the core purpose front-loaded. Slight redundancy in restating 'filter by capability' after the example tags, but nothing wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-param search with full schema coverage, the description covers the input side, but with no output schema it should say what a result looks like (list of services, fields, ordering). That omission leaves a real gap for a discovery tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (limit, capability) are already documented in the schema, and the description's capability examples duplicate the schema's own example. Baseline 3 is correct when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Search) and resource (agent services) and names the mechanism (decentralized service discovery on Nostr). No sibling tool overlaps this purpose, so an agent can pick it without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies how to use the tool by naming the capability filter and giving example tags, but offers no explicit when-to-use/when-not guidance or alternatives. Adequate but thin on routing context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pay_addressesPay Multiple Lightning AddressesC
Pay multiple Lightning addresses in parallel. Each payment specifies address and amount.
| Name | Required | Description | Default |
|---|---|---|---|
| payments | Yes | Array of payments (max 10) | |
| concurrency | No | Max parallel payments (default: 2) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it only discloses that payments run 'in parallel'. For a money-moving tool it says nothing about partial-failure behavior, whether one bad address aborts the batch, auth/spending requirements, reversibility, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action and mode, with no filler. Slightly under-specified rather than verbose, but efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A batched payment operation with no annotations and no output schema needs the description to explain failure semantics, return shape, and constraints; the description supplies none of that and even leaves the max-10/concurrency limits to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (payments array, concurrency) are documented in the schema. The description's 'each payment specifies address and amount' merely restates the schema and omits the optional comment field, so it adds no meaning beyond structured data.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Pay') and resource ('multiple Lightning addresses') plus the parallel execution mode, which is more than a restatement of the title. It implicitly distinguishes itself from the singular sibling pay_lightning_address, but never names pay_lightning_address or pay_batch to make the boundary explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of the closely related siblings pay_lightning_address (single) and pay_batch. The agent must infer from the plural name alone that this is the multi-address variant.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pay_batchPay Multiple InvoicesB
Pay multiple Lightning invoices in parallel. Useful for distributing payments to multiple recipients.
| Name | Required | Description | Default |
|---|---|---|---|
| invoices | Yes | Array of BOLT11 invoice strings (max 20) | |
| concurrency | No | Max parallel payments (default: 3) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It mentions parallel execution, but for a payment tool it omits critical behavior: whether payments are atomic or partially succeed on failure, whether Lightning payments are irreversible, authorization requirements, and any retry semantics. This leaves the agent guessing about the highest-risk aspects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the core action front-loaded; the second sentence earns its place by hinting at the use case, though it is somewhat generic.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a batch payment tool with no annotations and no output schema, the description should cover partial-failure handling, irreversibility, and what the result reports. None of these are addressed, so an agent cannot reason about how to handle failures across the batch.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both 'invoices' and 'concurrency' (with max/min and default) are already documented in the schema. The description adds no format, ordering, or constraint detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (pay Lightning invoices) with the scoping qualifier 'multiple...in parallel', which naturally distinguishes it from the single-invoice sibling pay_invoice. It does not explicitly name an alternative, but the plural scope is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Useful for distributing payments to multiple recipients' implies a usage context but stops short of telling the agent when to prefer this over repeated pay_invoice calls or when not to use it. No explicit alternative or exclusion is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pay_invoicePay Lightning InvoiceC
Pay a BOLT11 Lightning invoice. Returns the payment preimage on success.
| Name | Required | Description | Default |
|---|---|---|---|
| invoice | Yes | BOLT11 Lightning invoice string (starts with lnbc…) | |
| maxSats | No | Maximum sats to pay (safety limit). Defaults to LIGHTNING_MAX_SATS env or 1000. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It mentions the success return value (payment preimage), which is useful since there is no output schema, but omits critical traits for a payment tool: irreversibility, failure behavior, and how maxSats acts as a safety limit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste, front-loading the core action and following with the key return value. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a financial transaction tool with no annotations and no output schema, the description is incomplete. It should disclose irreversibility, failure modes, or prerequisites, but instead provides only a minimal success case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters thoroughly. The description adds no additional parameter semantics beyond what is in the schema, making the baseline score of 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Pay) and resource type (BOLT11 Lightning invoice), clearly distinguishing it from invoice creation or address resolution. However, it does not explicitly differentiate from its closest sibling pay_lightning_address, which handles a different input format.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives like pay_lightning_address or pay_batch. It only restates the operation, leaving the agent to infer that BOLT11 invoices require this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pay_lightning_addressPay Lightning AddressB
Pay a Lightning address (user@domain.com format). Resolves the address, creates an invoice, and pays it.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | Lightning address (e.g. user@getalby.com) | |
| maxSats | No | Maximum sats safety limit | |
| amountSats | Yes | Amount in satoshis to send |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses the three-step internal flow (resolve, create invoice, pay), but this is a financial mutation tool and it says nothing about irreversibility, whether maxSats is enforced before signing, or what happens on failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action; every clause adds information about the mechanics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description is only marginally sufficient for a payment tool: it explains the flow but omits failure behavior, safety-limit enforcement, and result expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description restates the address format already documented in the schema and adds no detail on how maxSats interacts with amountSats.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Pay a Lightning address') and even outlines the mechanism (resolves, creates invoice, pays). However, it does not differentiate itself from the closely related sibling pay_addresses, so an agent cannot tell the two apart from the text alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No indication of when to use this versus pay_invoice, pay_addresses, or resolve_lightning_address. With several payment-adjacent siblings, the absence of routing guidance is a real gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_lightning_addressResolve Lightning AddressA
Resolve a Lightning address (user@domain.com) to get LNURL metadata, min/max sendable amounts, and callback URL.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | Lightning address (e.g. user@getalby.com) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses what data is retrieved, which signals a read-only operation, but says nothing about errors for unresolvable addresses, network/auth requirements, or idempotency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, zero waste, front-loaded with the verb and resource, and the outcome payload is tacked on efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with no output schema and no annotations, the description covers purpose and expected return fields well. Minor gaps remain around failure modes and timing, but nothing essential to invoking it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single 'address' parameter, so the baseline is 3. The description restates the user@domain.com format but adds no syntax or validation detail beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Resolve) and resource (Lightning address), and even names the concrete return payload (LNURL metadata, min/max sendable amounts, callback URL). It implicitly separates itself from pay_lightning_address by being a lookup rather than a payment, but never explicitly references the sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The verb 'Resolve ... to get metadata' implies this is a read/pre-flight lookup, which an agent can infer is appropriate before paying. However there is no explicit when-to-use, when-not-to-use, or routing to pay_lightning_address.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
11 tool updates
v0.2.0- First observed
access_l402 - First observed
check_balance - First observed
check_trust - First observed
create_invoice - First observed
decode_invoice - First observed
discover_services - First observed
pay_addresses - First observed
pay_batch - First observed
pay_invoice - First observed
pay_lightning_address - First observed
resolve_lightning_address
TDQS
Scored across 11 tools
Each tool has a clearly distinct purpose: single vs batch payments, invoice vs address handling, and resolution vs payment are all separated by explicit resource and action. No two tools can be easily confused for the same task.
All tool names use snake_case and follow a verb_noun pattern (e.g., resolve_lightning_address, pay_invoice, create_invoice, check_balance). Compound nouns like lightning_address and l402 are handled consistently.
11 tools is well-scoped for a Lightning wallet plus Nostr discovery/trust consumer agent. Every tool covers a distinct operation without redundancy or trivial filler.
Core consumer workflows are covered: balance, invoice creation/decoding/payment, address resolution/payment, batch payments, L402 access, and Nostr trust/service discovery. Minor gaps exist, such as invoice status queries, transaction history, and write operations for trust attestations or service publication.
Maintenance
Related MCP Connectors
Hosted MCP server for AI agent identity, permissions, verification, and reusable proof.
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Hosted AgentLux MCP server for marketplace, identity, creator, services, and social flows.
Related MCP Servers
- AlicenseBqualityDmaintenanceAn MCP server to provide AI agents money functionalities via Nostr and Cashu.651 npm17MIT
- AlicenseAqualityBmaintenanceMCP server that enables AI agents to make autonomous Bitcoin Lightning Network payments using the L402 protocol. Agents can pay for API access, purchase resources, and complete transactions without human intervention — invoice comes in, sats go out, done.179MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server that enables AI agents to send and receive Bitcoin over the Lightning Network using NWC or LND backends.MIT
- AlicenseNot gradedqualityDmaintenanceMCP server giving AI agents Bitcoin and Lightning superpowers for price checks, mempool inspection, Lightning payments, and more.MIT