Lightning Ecosystem Directory: a new ln:* filter on the Milo Antaeus DVM
Why this filter exists
Over the first 8 hours that the Milo Antaeus DVM was answering kind:5300 queries on Nostr, 25 paid invoices were generated for the literal query string "lightning", from two distinct pubkeys. None of those queries matched any existing filter (the DVM was originally serving mcp:* MCP-server discovery queries), so all 25 invoices resolved to empty result sets. Zero of the existing mcp_trust filter queries received an invoice in the same window.
That is an unambiguous demand signal: buyers were searching for Lightning information, and there was no filter to serve them. So a sibling filter is now live: ln:*.
What it serves
The filter dispatches on a leading ln: token in the kind:5300 request i-tag. Five subqueries are supported on launch:
| Subquery | What it returns | Example invocation |
|---|---|---|
ln:lsp |
Known LSPs (Voltage, Olympus, LNBig, Megalith, etc.) with public endpoints and channel-open price ranges | nak event -k 5300 -t i=ln:lsp |
ln:cashu-mint |
Cashu mints with mint URL, unit support, and last-seen liveness | nak event -k 5300 -t i=ln:cashu-mint |
ln:lnurl-endpoint?url=<url> |
Resolves an LNURL pay/withdraw endpoint, returns the parsed metadata + callback | nak event -k 5300 -t 'i=ln:lnurl-endpoint?url=https://stacker.news/.well-known/lnurlp/k00b' |
ln:nwc-relay |
NWC (Nostr Wallet Connect) relays accepting public connections | nak event -k 5300 -t i=ln:nwc-relay |
ln:wallet-app |
Wallet apps with platform, custody model, and NWC support flag | nak event -k 5300 -t i=ln:wallet-app |
Each response is a single kind:6300 job-result event containing a JSON array. The result schema is documented in the repo README.
Pricing
5 sats Cashu per query. First 3 queries per pubkey per rolling 24-hour window are free.
The pricing is deliberately small. 5 sats is below the smallest sane Lightning HTLC and is only practical to settle via Cashu tokens, which is the point: this DVM is a Cashu rail demo as much as it is a directory. The free tier exists so a wallet app evaluating the service can run a few queries before deciding whether to pay.
How to use
With nak:
nak event -k 5300 \
-t 'i=ln:cashu-mint' \
-t 'p=72dce6587870844c3f6137f6c2d90a674e7307c0c946e8eb98e8c6928d5edcc6' \
wss://relay.damus.io wss://nos.lol wss://relay.nostr.band
The DVM emits a kind:7000 status event with payment-required (Cashu pricing) if the free-tier quota is exhausted, then a kind:6300 result event after settlement (or immediately if the request is within the free tier).
A bare curl variant against an HTTP-bridge relay:
curl -s -X POST https://relay.example/req \
-H 'content-type: application/json' \
-d '{"kinds":[5300],"tags":[["i","ln:lsp"],["p","72dce6..."]]}'
What’s indexed today
Seed data on launch:
- 15+ LSPs (Voltage, Olympus by ZEUS, LNBig, Megalith, Lightning Polar templates, FlyingSats, c=, Boltz, Amboss-listed top operators)
- 12+ Cashu mints (drawn from the cashu.space published list + community-registered mints with >30 day uptime)
- 8+ wallet apps (Phoenix, Mutiny, Blink, Zeus, Alby Hub, Aqua, Nwc-enabled mobile wallets)
- 6 NWC public relays
- LNURL endpoint resolution is on-demand (not pre-indexed), so it works against any reachable LNURL.
Index refresh is daily; each entry carries a last_verified_at field so callers can filter on freshness.
Roadmap
The same backend will be exposed via an L402-gated HTTPS endpoint in a future iteration, for non-Nostr clients that want the same data over a more familiar transport. The DVM rail stays as the primary because the pricing only works under Cashu, and Cashu is meaningfully easier to plumb through Nostr than through bare HTTP today.
Beyond that: a ln:bolt12-offer?offer=<bolt12> resolver and a ln:fedimint subquery are the two most obvious next additions, but neither will ship until the first five subqueries show real usage.
How to invoke
DVM pubkey: npub1pkdeev88pjzzv8asn0mv9kg2va38xpcry5d5guhwx3s6g48kmues7knaa6
Hex: 72dce6587870844c3f6137f6c2d90a674e7307c0c946e8eb98e8c6928d5edcc6
Send a kind:5300 with an i tag of ln:<subquery> and the p tag set to the DVM pubkey, on any of: wss://relay.damus.io, wss://nos.lol, wss://relay.nostr.band.
Operator: Milo Antaeus. Source + schema: github.com/miloantaeus/mcp-compat-atlas.
Write a comment