Skip to main content
Glama
getAlby

Alby Bitcoin Payments MCP Server

Official
by getAlby

Alby Bitcoin Payments MCP Server

NEW: also checkout Alby CLI for agents that don't support MCP.

Connect a bitcoin lightning wallet to your LLM using Nostr Wallet Connect (NWC).

This MCP server uses the official MCP TypeScript SDK

This MCP server has knowledge of NWC, LNURL and L402 using Alby SDK and Alby Lightning Tools.

Take a look at Awesome AI Bitcoin for places where you can use the Alby MCP.

Quick Start

In case you get stuck, see troubleshooting section below.

Use the Alby-Hosted MCP Server

If your agent supports remote MCP servers - SSE (e.g. N8N) or HTTP Streamable transports, you can connect to Alby's MCP server.

  • SSE: https://mcp.getalby.com/sse

  • HTTP Streamable: https://mcp.getalby.com/mcp

Authentication

Both require providing an NWC connection secret as authentication, either as Bearer authentication (preferred) or via the nwc query parameter.

Bearer Auth

Example: Authorization: Bearer nostr+walletconnect://...

If your agent UI supports bearer auth, just paste the connection secret into the bearer auth field.

Query Parameter

If your agent doesn't support bearer auth, you can pass the NWC connection secret as a query parameter.

Example: https://mcp.getalby.com/sse?nwc=ENCODED_CONNECTION_SECRET or https://mcp.getalby.com/mcp?nwc=ENCODED_CONNECTION_SECRET

To get ENCODED_CONNECTION_SECRET, open browser devtools (right click -> inspect) and enter this in the console, with your own NWC connection secret set:

encodeURIComponent("nostr+walletconnect://...");

In case there is a message asking for confirmation for pasting, follow the instructions, and then enter the above command again.

Once the command has run, copy the output and replace ENCODED_CONNECTION_SECRET. It will look like this: nostr%2Bwalletconnect%3A%2F%2F...

Add to Claude Web or Claude Desktop

Use the remote Alby MCP server

Currently, at least a Claude Pro subscription is required to be able to connect to remote MCP servers.

  1. Go to Settings -> Connectors

  2. Click on "Add custom connector"

  3. Call it alby

  4. What is the endpoint URI: https://mcp.getalby.com/mcp?nwc=ENCODED_NWC_URL (see above for instructions)

Client-side

Add this to your claude_desktop_config.json:

{
  "mcpServers": {
    "nwc": {
      "command": "npx",
      "args": ["-y", "@getalby/mcp"],
      "env": {
        "NWC_CONNECTION_STRING": "YOUR NWC CONNECTION STRING HERE"
      }
    }
  }
}

Add to Goose Desktop

  1. Open Goose Desktop

  2. Go To Settings -> Advanced Settings

  3. Click on "Add custom Extension"

  4. Call it alby, and change the type to HTTP Streamable

  5. What is the SSE endpoint URI: https://mcp.getalby.com/mcp

  6. Timeout: 30

  7. Description: no

  8. environment variables: no

Add to Goose CLI

Use the Alby MCP server

  1. Type goose configure

  2. Add extension -> Remote Extension (HTTP Streamable)

  3. Call it alby

  4. What is the HTTP Streamable endpoint URI: https://mcp.getalby.com/mcp

  5. Timeout: 30

  6. Description: no

  7. environment variables: no

  8. add custom headers: yes

  9. header name: Authorization

  10. header value: Bearer nostr+walletconnect://... (replace with your connection secret)

Client-side

  1. Type goose configure

  2. Add extension -> Command Line Extension

  3. Call it alby

  4. What command should be run: npx -y @getalby/mcp

  5. Timeout: 30

  6. Description: no

  7. environment variables: yes

  8. environment variable name: NWC_CONNECTION_STRING

  9. environment variable value: nostr+walletconnect://... (your NWC connection secret here)

Add to Cline

Copy the below and paste it into a cline prompt. It should prompt you to update the connection string.

Add the following to my MCP servers list:

"nwc": {
  "command": "npx",
  "args": ["-y", "@getalby/mcp"],
  "env": {
    "NWC_CONNECTION_STRING": "nostr+walletconnect://..."
  },
  "disabled": false,
  "autoApprove": []
}

Add to Claude Code

Use the Alby MCP server

claude mcp add --transport http alby https://mcp.getalby.com/mcp --header "Authorization: Bearer nostr+walletconnect://..."

Add to N8N via SSE

You can use the native N8N MCP Client tool connected to an AI agent. Enter your SSE endpoint, set authentication to "Bearer" and paste your NWC connection secret.

Tested with OpenRouter + anthropic/claude-3.7-sonnet

See the N8N workflow for a simple example

Add to N8N via STDIO (Community Node)

Currently this MCP server only works via command line (STDIO).

You can install the n8n-nodes-mcp community node and run n8n with tools enabled e.g.

N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true npx n8n

Create a blank workflow and add an AI agent node. Configure your LLM model and add a new tool "MCP Client" (which will have a cube next to it showing it's a community node).

Configure the MCP Client by adding a credential with Command Line (STDIO) selected.

command: npx arguments: -y @getalby/mcp environments NWC_CONNECTION_STRING=nostr+walletconnect://your_key_here (create the whole line in a text editor and paste it in, since the password field cannot be switched to plaintext)

See the N8N paid chat workflow for a full example

Add to Windsurf

Use the remote Alby MCP server

  1. Download and open your Windsurf Editor

  2. Click on "Windsurf - Settings" in the toolbar at the bottom -> "Advanced Settings" -> "Cascade" -> Plugins (MCP Servers): Click on "Manage plugins" -> "View raw config" -> you'll see your "mcp_config.json"

  3. Paste this to your mcp_config.json:

{
  "mcpServers": {
    "alby": {
      "serverUrl": "https://mcp.getalby.com/sse?nwc=ENCODED_NWC_URL"
    }
  }
}
  1. Replace "ENCODED_NWC_URL" as descripted above. Click "Save" and restart the Windsurf editor.

Related MCP server: Alby Bitcoin Payments MCP Server

Modes

STDIO

By default NWC MCP Server runs locally in STDIO mode.

HTTP

You can set the following environment variable: MODE=HTTP which will enable Streamable HTTP (http://localhost:3000/mcp) and SSE (http://localhost:3000/sse Note: SSE is deprecated).

HTTP requires bearer authorization, where the token is a wallet's NWC connection secret. See the authentication section further above in the README.

Request validation

The HTTP endpoints only accept requests whose Host header is allowlisted. Requests from browsers (carrying an Origin header) are refused; MCP clients that aren't browsers don't send one. fetch_l402 only fetches http(s) URLs whose hostname resolves to globally-routable addresses — loopback, link-local and private ranges are refused. This is a best-effort check: the hostname is resolved again when fetching, so a DNS server that changes its answer between the two lookups can bypass it. Configure via environment variables:

Variable

Default

Purpose

ALLOWED_HOSTS

localhost, 127.0.0.1, [::1]

Host header values to accept (comma-separated). When set, it replaces the defaults, so include localhost if you still want it. Set this to your public hostname when deploying (e.g. mcp.getalby.com).

BIND_HOST

127.0.0.1

Address the HTTP listener binds to. The default keeps it off the network; set :: (or 0.0.0.0) when deploying, or when running in Docker and connecting from the host.

fetch_l402 does not follow redirects; a URL that redirects returns an error.

From Source

Prerequisites

  • Node.js 20+

  • Yarn

  • A connection string from a lightning wallet that supports NWC

Installation

yarn install

Building

yarn build

Add your NWC connection

Copy .env.example to .env and update your connection string

Inspect the tools (use/test without an LLM)

yarn inspect

Supported Tools

See the tools directory

Troubleshooting

Model Usage

Make sure you use a decent model (e.g. Claude Sonnet 3.7) otherwise the MCP server will not work.

Failure to connect to wallet, secret missing

Make sure you copied the entire NWC connection secret, without spaces

Contact Alby Support

Visit support.getalby.com and we're happy to help you get the MCP server working.

Available Tools

11 tools
fetch_l402Fetch L402C

Fetch a paid resource protected by L402

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesthe URL to fetch
bodyNoHTTP request body as a string (either plaintext or stringified JSON)
methodNoHTTP request method. Default GET

Output Schema

ParametersJSON Schema
NameRequiredDescription
contentYesResponse content

TDQS

C2.9/5.0
Behavior2/5

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, and it falls short: 'paid resource' implies spending sats but the description never states that the call may automatically pay an invoice, what the cost or limits are, whether credentials/macaroons are needed, or how failures surface. For a tool with monetary side effects this is a serious omission.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero waste and the key noun (L402, paid) up front. It is efficient, though arguably terse to the point of under-specification for a payment-bearing operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be explained, but the description omits the crucial context for a payment-capable fetch: automatic payment behavior, cost exposure, and failure modes. Given no annotations and a money-spending operation, the definition is incomplete for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (url, body, method are each documented, including the GET default), so the baseline is 3. The description adds no syntax, format, or auth-header meaning beyond what the schema already supplies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Fetch a paid resource protected by L402'), which is clearly distinct from invoice/transaction siblings like make_invoice or pay_invoice. However, it assumes the reader knows what L402 is and never explains the payment-auth flow it implies, leaving the mechanism opaque.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisite conditions, and no mention of alternatives such as pay_invoice or a plain HTTP fetch. The agent cannot tell from the text whether this tool auto-negotiates and settles the L402 invoice or simply fails on a 402 response.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fiat_to_satsFiat To SatsB

Convert fiat amounts to sats

ParametersJSON Schema
NameRequiredDescriptionDefault
fiat_amountYesfiat amount to convert
fiat_currencyYesthe fiat currency (e.g., USD, EUR)

Output Schema

ParametersJSON Schema
NameRequiredDescription
amount_in_satsYesAmount in sats

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It does not mention whether conversion uses real-time rates, incurs network calls, or has side effects. This omission could lead to misuse.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that gets straight to the point. It is front-loaded with the verb and resource, but could include more contextual structure while remaining concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema, the description fails to mention any conversion semantics (e.g., exchange rate source, real-time vs fixed). For a simple tool, this lack of context reduces completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters have clear descriptions (currency with example, amount as number). The description adds no additional meaning, so baseline score applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Convert') and the resource ('fiat amounts to sats'), making the purpose unambiguous. It differentiates from siblings like pay_invoice or get_balance, as none perform conversion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, nor any prerequisites or common scenarios. Without context, an agent cannot decide if this is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_balanceGet BalanceB

Get the balance of the connected lightning wallet

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
amount_in_satsYesCurrent wallet balance in sats

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. The description only states the action without disclosing behavioral traits like read-only nature, latency, or required authentication. With no annotations, the description carries the full burden and fails to add any transparency beyond the obvious.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence with no extraneous text. It is appropriately sized for a simple tool, though it could be slightly more informative without being verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with an output schema, the description is minimal but may be sufficient if the output schema details the return format. However, it lacks context about wallet connection state, units, or error scenarios, leaving room for improvement.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters, input schema has 100% coverage. Baseline of 4 is appropriate as the description adds no parameter information, but none is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states verb 'Get' and resource 'balance of the connected lightning wallet'. Distinguishes from sibling tools which focus on other wallet operations like transactions or invoice management.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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. For a simple zero-parameter tool this is somewhat acceptable, but the description provides no context about prerequisites (e.g., wallet must be connected) or scenarios where it is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_infoGet InfoB

Get NWC capabilities of the connected lightning wallet, and general information about the wallet and underlying lightning node

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
aliasNoNode alias
colorNoNode color
lud16NoLightning address of the wallet
pubkeyNoNode public key
methodsYesNWC methods supported by this connection
networkNoBitcoin Network (mainnet/testnet)
metadataNoAdditional metadata about this connection
block_hashNoCurrent block hash
block_heightNoCurrent block height
notificationsNoNWC notification types supported by this connection

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It discloses the scope of data returned (wallet capabilities, wallet info, node info), which is useful, but it does not state permissions, side effects, or that it is a safe read operation beyond the implicit 'get'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single efficient sentence with no filler, front-loading the primary subject (NWC capabilities) before the broader general information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the description need not enumerate return fields, and there are no parameters to document. The definition is sufficient for a simple, no-argument discovery call, though a note on when to use it would round it out.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate. Baseline 4 applies for a parameterless call.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (get) and a concrete resource: NWC capabilities plus general wallet/node information. It is more specific than the generic name 'get_info' implies, but it does not explicitly contrast itself with close siblings like get_balance or get_wallet_service_info.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to call this versus alternatives. An agent is left to infer that this is the entry-point/discovery call, and nothing tells it whether it should be invoked before or after tools like get_balance or make_invoice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_wallet_service_infoGet Wallet Service InfoA

Get NWC capabilities, supported encryption and notification types of the connected lightning wallet

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
encryptionsNoNWC encryption types supported by this connection
capabilitiesYesCapabilities supported by this wallet - for example, NWC methods like 'pay_invoice', and 'notifications' if any notification types are supported.
notificationsNoNWC notification types supported by this connection

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden for behavioral disclosure. It does not indicate whether the tool is read-only, idempotent, or has any side effects, nor does it mention potential network calls or authentication requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-front-loaded sentence with no unnecessary words. Every word adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no parameters and a known output schema, the description is sufficient. It identifies the output categories (capabilities, encryption, notification types) and implies the context (connected lightning wallet). Could be enhanced with a note on typical use, but it is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters, so schema coverage is trivially 100%. According to the baseline rule, this warrants a score of 4. The description does not need to add parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool retrieves NWC capabilities, supported encryption, and notification types of the connected lightning wallet. It specifies a distinct resource (wallet service info) and uses a specific verb ('Get'), differentiating it from siblings like get_balance or get_info.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when or when not to use this tool, nor does it mention alternatives. It simply states what the tool does without context for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_transactionsList TransactionsC

List all transactions from the connected wallet with optional filtering by time, type, and limit

ParametersJSON Schema
NameRequiredDescriptionDefault
fromNo
typeNo
limitNo
untilNo
offsetNo
unpaidNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
total_countNoTotal number of transactions
transactionsYesList of transactions

TDQS

C2.9/5.0
Behavior2/5

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, and it discloses almost nothing: no default limit/offset, no sort order, no pagination behavior, and no indication of what 'connected wallet' implies for auth or scope. It only asserts that listing and filtering are possible, which the schema largely already implies.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler, stating the resource and the filtering capabilities up front. It is efficiently sized for a simple list operation, though it is thin rather than optimally informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the schema documents the parameters. However, with no annotations and a 6-parameter paginated list tool, the description omits default limit/offset behavior and result ordering, leaving gaps an agent would have to guess at.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The reported schema description coverage is 0%, but the schema itself does carry per-property descriptions for all six parameters, so the structured fields do the heavy lifting. The description only loosely maps to three of them ('time, type, and limit') and says nothing about offset or the unpaid flag, adding little beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('List all transactions from the connected wallet'), making the tool's function immediately clear against invoice-oriented siblings like make_invoice and pay_invoice. It does not explicitly name a sibling it competes with, so it stops 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.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites, and no alternative tool named. The phrase 'with optional filtering' hints at how to narrow results but gives no conditions for choosing this tool over siblings such as get_balance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lookup_invoiceLookup InvoiceB

Look up lightning invoice details from a BOLT-11 invoice or payment hash

ParametersJSON Schema
NameRequiredDescriptionDefault
invoiceNo
payment_hashNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
typeYesTransaction type
stateNoTransaction state
invoiceYesBOLT-11 invoice
metadataNoAdditional metadata about the transaction
preimageNoPreimage of settled payment
created_atYesCreation unix timestamp
expires_atNoExpiry unix timestamp
settled_atNoTimestamp, of settled payment
descriptionNoInvoice description
payment_hashYesPayment hash
amount_in_satsYesAmount in sats
settle_deadlineNoHOLD invoice settle deadline
description_hashNoDescription hash
fees_paid_in_satsNoFees paid in sats

TDQS

B3.1/5.0
Behavior2/5

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. 'Look up' weakly implies a read-only operation, but the description never states that it is non-mutating, whether it requires wallet/auth context, whether it hits a remote node, or what happens when the invoice does not exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the resource and the two lookup keys are given in the first few words. Nothing needs trimming.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the input surface is small. The gap is that for a lookup keyed by two optional fields, the description never resolves the both-provided / neither-provided cases, which is the main decision an agent must make here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is reported at 0%, but the description does name both accepted arguments ('a BOLT-11 invoice or payment hash'), mapping 2 of 2 parameters and implying they are alternative ways to identify the same invoice. It does not say which takes precedence if both are supplied, nor that at least one is required despite required_parameters being empty.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('Look up lightning invoice details'), so the operation itself is unambiguous, and it identifies the accepted inputs. However, it does nothing to separate itself from the sibling parse_invoice, which an agent could reasonably reach for on the same BOLT-11 string.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies usage by naming the two accepted input modes, but there is no statement of when to prefer this over parse_invoice, pay_invoice, or request_invoice, and no prerequisite or exclusion is given. The agent must infer the routing decision from names alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

make_invoiceMake InvoiceC

Create a lightning invoice

ParametersJSON Schema
NameRequiredDescriptionDefault
expiryNo
metadataNo
descriptionNo
amount_in_satsYesamount in sats
description_hashNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
typeYesTransaction type
stateNoTransaction state
invoiceYesBOLT-11 invoice
metadataNoAdditional metadata about the transaction
preimageNoPreimage of settled payment
created_atYesCreation unix timestamp
expires_atNoExpiry unix timestamp
settled_atNoTimestamp, of settled payment
descriptionNoInvoice description
payment_hashYesPayment hash
amount_in_satsYesAmount in sats
settle_deadlineNoHOLD invoice settle deadline
description_hashNoDescription hash
fees_paid_in_satsNoFees paid in sats

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and delivers almost nothing: it does not say whether the invoice is returned immediately, whether it requires inbound liquidity, how expiry defaults behave, or what the resulting invoice lifecycle is. Only the bare mutation intent ('create') is conveyed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single front-loaded phrase with zero padding, which is structurally clean, but it is sized far below what a creation tool with five parameters needs. Brevity here reads as under-specification rather than discipline.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, but the description still omits usage routing, invoice-lifecycle context, and any parameter hints for a low-coverage schema. For a creation tool in a wallet with several overlapping invoice siblings, this is inadequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is reported at 20%, so the description should compensate but does not mention any of the five parameters. In particular the distinction between 'description' and 'description_hash' and the units/behavior of 'expiry' are left entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Create a lightning invoice'), which is better than a tautology. However, it fails to differentiate from the sibling request_invoice, which plausibly also produces an invoice, leaving the agent unable to choose between them 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.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no indication of when to use this tool versus request_invoice or pay_invoice, no prerequisites (e.g. wallet balance, node connectivity), and no context about the intended flow. The text gives no usage guidance at all.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

parse_invoiceParse InvoiceC

Parse a BOLT-11 lightning invoice

ParametersJSON Schema
NameRequiredDescriptionDefault
invoiceYesthe bolt11 invoice

Output Schema

ParametersJSON Schema
NameRequiredDescription
expiryNoExpiry time in seconds
verifyYesURL to verify if the email was paid (LNURL-verify)
preimageYesPayment preimage if available
timestampYesCreation unix timestamp
expiryDateNoExpiry date string
createdDateYesCreation date string
descriptionYesInvoice description
paymentHashYesPayment hash
successActionYesSuccess action to initiate after the invoice has been paid
amount_in_satsYesAmount in sats
paymentRequestYesThe BOLT-11 payment request

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, and it discloses almost nothing: no statement of whether parsing is offline-only, whether it validates signature/expiry, what errors occur on malformed input, or whether it touches the network. 'Parse' implies a read, but that is inference, not disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler and no redundancy. It is efficient, though arguably under-specified rather than maximally earning its brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values needn't be described, and this is a low-complexity single-param tool. Still, for a decode tool the description omits any validation/error behavior, leaving a gap given the absence of annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter with 100% schema description coverage ('the bolt11 invoice'), so the schema already defines the input. The description adds no format details (prefix, encoding, expected length) beyond the schema, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (parse) and resource (BOLT-11 lightning invoice), so the agent knows this decodes an invoice rather than creating or paying one. It doesn't explicitly contrast with the similarly-invoice-oriented siblings (make_invoice, pay_invoice, lookup_invoice, request_invoice), but the verb choice is distinct enough to infer separation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus the other invoice tools (make_invoice, lookup_invoice, pay_invoice) or any prerequisite such as the invoice being signed/valid. The agent must infer usage from the verb alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pay_invoicePay InvoiceC

Pay a lightning invoice

ParametersJSON Schema
NameRequiredDescriptionDefault
invoiceYesThe lightning invoice to pay
metadataNo
amount_in_satsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
preimageYesPayment preimage
fees_paid_in_satsNoFees paid in sats

TDQS

C2.6/5.0
Behavior2/5

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. 'Pay a lightning invoice' implies an irreversible financial mutation but says nothing about balance requirements, fee handling, routing, or whether the operation can be undone; this is a major omission for a payment tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single front-loaded sentence with zero wasted words. The sentence is structurally clean, though its brevity contributes to the under-specification penalized in other dimensions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a payment mutation with no annotations and only 33% schema description coverage, the description omits essential context: prerequisites, amount semantics, and safety behavior. The output schema covers return values, but the description is not complete enough for an agent to invoke this tool safely and correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema supplies some parameter documentation, especially for 'amount_in_sats' and its zero-amount caveat, but the description adds no parameter meaning at all. With schema description coverage at only 33%, the description fails to compensate for the undocumented or underspecified parameters such as metadata.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description pairs a specific verb ('Pay') with a specific resource ('lightning invoice'), so the action is immediately clear. It does not differentiate this tool from sibling invoice tools such as make_invoice, lookup_invoice, parse_invoice, or request_invoice, so it falls 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.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use, prerequisites, or alternatives are stated. It does not explain when an agent should pay an invoice versus create, look up, or parse one, leaving selection entirely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

request_invoiceRequest InvoiceC

Request an invoice from a lightning address

ParametersJSON Schema
NameRequiredDescriptionDefault
payer_dataNo
descriptionNo
amount_in_satsYesamount in sats
lightning_addressYesthe recipient's lightning address

Output Schema

ParametersJSON Schema
NameRequiredDescription
expiryNoExpiry time in seconds
verifyYesURL to verify if the email was paid (LNURL-verify)
preimageYesPayment preimage if available
timestampYesCreation unix timestamp
expiryDateNoExpiry date string
createdDateYesCreation date string
descriptionYesInvoice description
paymentHashYesPayment hash
successActionYesSuccess action to initiate after the invoice has been paid
amount_in_satsYesAmount in sats
paymentRequestYesThe BOLT-11 payment request

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description carries full burden. It does not disclose whether this is a read/write operation, whether the invoice expires, what authentication or wallet connection is required, or any rate limits. For a financial request operation this is a notable gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single short sentence, front-loaded and free of waste. Concise, though perhaps too sparse given the operation's financial nature.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be explained. However for a financial mutation with no annotations and minimal description, the definition lacks behavioral context (expiry, auth, consequences) that an agent needs to invoke safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%; the description adds nothing beyond the required params beyond what the schema already states. Descriptions on amount_in_sats and lightning_address exist in the schema, but payer_data and the top-level description parameter are less clearly useful beyond schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (Request) and resource (invoice) with the source mechanism (lightning address). Distinguishable from sibling make_invoice, though the description does not explicitly contrast the two, leaving some ambiguity about which to choose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus the closely related make_invoice or pay_invoice siblings. No prerequisites, no wallet-type conditions stated. Agent must infer usage context.

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.

  1. 8 tool updatesv1.1.2
    • Changedfetch_l4024 fields changed
      • removedInput schema / properties / body / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / body / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedInput schema / properties / method / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / method / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedget_info14 fields changed
      • removedOutput schema / properties / alias / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / alias / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / block_hash / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / block_hash / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / block_height / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / block_height / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / color / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / color / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / lud16 / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / lud16 / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / network / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / network / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / pubkey / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / pubkey / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedlist_transactions16 fields changed
      • removedOutput schema / properties / total_count / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / total_count / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / transactions / items / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / transactions / items / properties / description / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / transactions / items / properties / description_hash / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / transactions / items / properties / description_hash / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / transactions / items / properties / expires_at / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / transactions / items / properties / expires_at / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / transactions / items / properties / fees_paid_in_sats / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / transactions / items / properties / fees_paid_in_sats / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / transactions / items / properties / preimage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / transactions / items / properties / preimage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / transactions / items / properties / settle_deadline / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / transactions / items / properties / settle_deadline / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / transactions / items / properties / settled_at / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / transactions / items / properties / settled_at / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Changedlookup_invoice14 fields changed
      • removedOutput schema / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / description / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / description_hash / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / description_hash / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / expires_at / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / expires_at / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / fees_paid_in_sats / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / fees_paid_in_sats / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / preimage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / preimage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / settle_deadline / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / settle_deadline / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / settled_at / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / settled_at / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Changedmake_invoice14 fields changed
      • removedOutput schema / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / description / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / description_hash / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / description_hash / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / expires_at / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / expires_at / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / fees_paid_in_sats / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / fees_paid_in_sats / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / preimage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / preimage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / settle_deadline / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / settle_deadline / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / settled_at / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / settled_at / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Changedparse_invoice10 fields changed
      • removedOutput schema / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / description / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / expiry / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / expiry / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / expiryDate / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / expiryDate / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / preimage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / preimage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / verify / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / verify / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedpay_invoice2 fields changed
      • removedOutput schema / properties / fees_paid_in_sats / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / fees_paid_in_sats / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Changedrequest_invoice10 fields changed
      • removedOutput schema / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / description / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / expiry / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / expiry / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / expiryDate / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / expiryDate / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / preimage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / preimage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / verify / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / verify / type
        Added value: +[
        +  "string",
        +  "null"
        +]
  2. 9 tool updatesv1.0.0
    • Changedfetch_l4025 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / body / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / body / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedInput schema / properties / method / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / method / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
    • Changedfiat_to_sats1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_info14 fields changed
      • addedOutput schema / properties / alias / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / alias / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / block_hash / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / block_hash / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / block_height / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / block_height / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / color / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / color / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / lud16 / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / lud16 / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / network / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / network / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / pubkey / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / pubkey / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
    • Changedlist_transactions33 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / from / anyOf
        Added value: +[
        +  {
        +    "description": "Start unix timestamp for filtering transactions (inclusive)",
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / from / description
        Removed value: -"Start unix timestamp for filtering transactions (inclusive)"
      • removedInput schema / properties / from / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedInput schema / properties / limit / anyOf
        Added value: +[
        +  {
        +    "description": "Maximum number of transactions to return",
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / limit / description
        Removed value: -"Maximum number of transactions to return"
      • removedInput schema / properties / limit / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedInput schema / properties / offset / anyOf
        Added value: +[
        +  {
        +    "description": "Offset of the first transaction to return",
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / offset / description
        Removed value: -"Offset of the first transaction to return"
      • removedInput schema / properties / offset / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • removedInput schema / properties / type / description
        Removed value: -"Filter transactions by type"
      • addedInput schema / properties / unpaid / anyOf
        Added value: +[
        +  {
        +    "description": "Filter for unpaid transactions only",
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / unpaid / description
        Removed value: -"Filter for unpaid transactions only"
      • removedInput schema / properties / unpaid / type
        Removed value: -[
        -  "boolean",
        -  "null"
        -]
      • addedInput schema / properties / until / anyOf
        Added value: +[
        +  {
        +    "description": "End unix timestamp for filtering transactions (inclusive)",
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / until / description
        Removed value: -"End unix timestamp for filtering transactions (inclusive)"
      • removedInput schema / properties / until / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / total_count / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / total_count / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / transactions / items / properties / description / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / transactions / items / properties / description / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / transactions / items / properties / description_hash / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / transactions / items / properties / description_hash / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / transactions / items / properties / expires_at / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / transactions / items / properties / expires_at / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / transactions / items / properties / fees_paid_in_sats / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / transactions / items / properties / fees_paid_in_sats / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / transactions / items / properties / preimage / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / transactions / items / properties / preimage / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / transactions / items / properties / settle_deadline / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / transactions / items / properties / settle_deadline / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / transactions / items / properties / settled_at / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / transactions / items / properties / settled_at / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
    • Changedlookup_invoice21 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / invoice / anyOf
        Added value: +[
        +  {
        +    "description": "The BOLT 11 invoice to look up",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / invoice / description
        Removed value: -"The BOLT 11 invoice to look up"
      • removedInput schema / properties / invoice / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedInput schema / properties / payment_hash / anyOf
        Added value: +[
        +  {
        +    "description": "The payment hash of the invoice to look up",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / payment_hash / description
        Removed value: -"The payment hash of the invoice to look up"
      • removedInput schema / properties / payment_hash / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / description / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / description / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / description_hash / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / description_hash / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / expires_at / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / expires_at / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / fees_paid_in_sats / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / fees_paid_in_sats / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / preimage / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / preimage / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / settle_deadline / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / settle_deadline / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / settled_at / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / settled_at / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
    • Changedmake_invoice26 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / description / anyOf
        Added value: +[
        +  {
        +    "description": "note, memo or description describing the invoice",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / description / description
        Removed value: -"note, memo or description describing the invoice"
      • removedInput schema / properties / description / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedInput schema / properties / description_hash / anyOf
        Added value: +[
        +  {
        +    "description": "hash of a note, memo or description that is too long to fit within the invoice",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / description_hash / description
        Removed value: -"hash of a note, memo or description that is too long to fit within the invoice"
      • removedInput schema / properties / description_hash / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedInput schema / properties / expiry / anyOf
        Added value: +[
        +  {
        +    "description": "expiry in seconds",
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / expiry / description
        Removed value: -"expiry in seconds"
      • removedInput schema / properties / expiry / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • changedInput schema / properties / metadata / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "description": "Optional metadata to include with the payment",
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "description": "Optional metadata to include with the payment",
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / metadata / description
        Removed value: -"Optional metadata to include with the payment"
      • addedOutput schema / properties / description / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / description / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / description_hash / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / description_hash / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / expires_at / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / expires_at / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / fees_paid_in_sats / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / fees_paid_in_sats / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / preimage / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / preimage / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / settle_deadline / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / settle_deadline / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / settled_at / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / settled_at / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
    • Changedparse_invoice12 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / description / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / description / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / expiry / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / expiry / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / expiryDate / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / expiryDate / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / preimage / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / preimage / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / verify / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / verify / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • changedOutput schema / required
        Previous value: -[
        -  "paymentRequest",
        -  "paymentHash",
        -  "preimage",
        -  "verify",
        -  "amount_in_sats",
        -  "timestamp",
        -  "createdDate",
        -  "description"
        -]New value: +[
        +  "paymentRequest",
        +  "paymentHash",
        +  "preimage",
        +  "verify",
        +  "amount_in_sats",
        +  "timestamp",
        +  "createdDate",
        +  "description",
        +  "successAction"
        +]
    • Changedpay_invoice8 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / amount_in_sats / anyOf
        Added value: +[
        +  {
        +    "description": "Optional amount in sats, only provide if paying a zero-amount invoice",
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / amount_in_sats / description
        Removed value: -"Optional amount in sats, only provide if paying a zero-amount invoice"
      • removedInput schema / properties / amount_in_sats / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • changedInput schema / properties / metadata / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "description": "Optional metadata to include with the payment",
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "description": "Optional metadata to include with the payment",
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / metadata / description
        Removed value: -"Optional metadata to include with the payment"
      • addedOutput schema / properties / fees_paid_in_sats / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / fees_paid_in_sats / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
    • Changedrequest_invoice17 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / description / anyOf
        Added value: +[
        +  {
        +    "description": "note, memo or description describing the invoice",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / description / description
        Removed value: -"note, memo or description describing the invoice"
      • removedInput schema / properties / description / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • changedInput schema / properties / payer_data / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "description": "metadata to include with the payment such as the payer's name",
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "description": "metadata to include with the payment such as the payer's name",
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / payer_data / description
        Removed value: -"metadata to include with the payment such as the payer's name"
      • addedOutput schema / properties / description / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / description / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / expiry / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / expiry / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / expiryDate / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / expiryDate / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / preimage / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / preimage / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / verify / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / verify / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • changedOutput schema / required
        Previous value: -[
        -  "paymentRequest",
        -  "paymentHash",
        -  "preimage",
        -  "verify",
        -  "amount_in_sats",
        -  "timestamp",
        -  "createdDate",
        -  "description"
        -]New value: +[
        +  "paymentRequest",
        +  "paymentHash",
        +  "preimage",
        +  "verify",
        +  "amount_in_sats",
        +  "timestamp",
        +  "createdDate",
        +  "description",
        +  "successAction"
        +]
  3. 11 tool updates
    • First observedfetch_l402
    • First observedfiat_to_sats
    • First observedget_balance
    • First observedget_info
    • First observedget_wallet_service_info
    • First observedlist_transactions
    • First observedlookup_invoice
    • First observedmake_invoice
    • First observedparse_invoice
    • First observedpay_invoice
    • First observedrequest_invoice

TDQS

B3.1/5.0

Scored across 11 tools

Disambiguation3/5

Most tools target distinct actions (make/pay/request/parse invoices, balance, transactions), but get_info and get_wallet_service_info both return NWC capabilities of the same wallet and are nearly indistinguishable, and parse_invoice vs lookup_invoice have subtle boundaries (local parse vs lookup by hash) that could cause misselection.

Naming Consistency4/5

Almost all tools follow a clean verb_noun snake_case pattern (fetch_l402, get_info, make_invoice, pay_invoice, lookup_invoice, list_transactions, parse_invoice, request_invoice, get_balance), with only fiat_to_sats deviating as a noun_to_noun converter.

Tool Count4/5

11 tools is a well-scoped size for a Lightning/NWC payments server, covering the core payment lifecycle without excessive bloat; the only redundancy is the pair of capability-introspection tools.

Completeness4/5

The surface covers invoice creation, payment, lookup, parsing, transaction listing, balance, fiat conversion, and L402 fetching, giving good lifecycle coverage; minor gaps like fee estimation or direct keysend/pay-to-address are workarounds, not dead ends.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers