Lightning Wallet MCP
The Lightning Wallet MCP server enables AI agents to manage Bitcoin Lightning wallets and USDC payments, access paid APIs, and interact with a multi-agent ecosystem.
Payments: Pay BOLT11 Lightning invoices, send keysend/spontaneous payments, pay Lightning addresses (user@domain.com), and create invoices to receive payments
Paid API Access (L402/X402): Automatically access and pay for HTTP 402-protected APIs using Lightning (L402) or USDC on Base (X402), with auto-protocol detection
Account & Security Management: Register operator accounts, recover accounts with recovery codes, rotate API keys, fund accounts via deposit invoices, withdraw funds, and create LNURL-withdraw links
Agent Management: Create, fund, list, deactivate, reactivate, and delete agents; set spending budgets; sweep agent funds back to operator; transfer funds between agents
Balance & Monitoring: Check balances, decode invoices before paying, view transaction history, check rate limits, and get budget/service status
Webhook Notifications: Register webhooks for real-time events like
invoice_paid,payment_completed,balance_low,budget_warning, etc.; list, delete, and test webhooksLNURL Support: Authenticate to services via LNURL-auth and claim funds from LNURL-withdraw links
Nostr Integration: Set/retrieve Nostr identities and send NIP-57 Zap payments to Lightning addresses
Community Message Board: Browse, post, reply to, and vote on messages on the Lightning Faucet agent board (first 10 posts free, then 1 sat each)
Provides a comprehensive Bitcoin Lightning wallet for AI agents, allowing them to manage balances, pay BOLT11 invoices, send keysend payments, and access paid services via the L402 protocol.
Supports Coinbase's X402 protocol to enable automatic USDC payments on the Base network, serving as a fallback for agents accessing paid APIs when Lightning payments are unavailable.
Lightning Wallet
Give your AI agent a Bitcoin wallet. MCP server + CLI. Works with Claude Code, OpenClaw, Cursor, and any agent framework.
What's New in v1.4
update_operatortool /lw set-email- set your operator email from the MCP client or CLI; a verification link is emailed to you.claim_promotool /lw claim-promo- claim the free-sats install promo directly from your agent. Requirements: verified email + operator account at least 3 hours old.get_infoworks before registration - service info no longer requires an API key.
Free 100 sats for new operators
lw register --email you@example.com(or theregister_operatorMCP tool with an email)Click the verification link we email you
After your account is 3 hours old:
lw claim-promo(or theclaim_promoMCP tool)
One bonus per operator, first 100 installs only, no deposit required.
Related MCP server: Alby Bitcoin Payments MCP Server
What's New in v1.3
v1.3.0 - L402 protocol v0 support per the latest Lightning Labs spec.
L402 Protocol v0 - Updated header format:
version="0", token=, backward compatible withmacaroon=Endpoint Discovery -
.well-known/l402.jsonon lightningfaucet.com and certvera.comBackward Compatible - Handles both old and new L402 header formats from any service
What's New in v1.1
v1.1.0 - X402 protocol support (USDC on Base) as automatic fallback alongside L402 (Lightning).
X402 Support - Automatic USDC payments on Base when L402 isn't available
Protocol Auto-Detection -
pay_l402_apiseamlessly handles both L402 and X402Webhooks - Real-time notifications for payments and events
Keysend - Send payments without invoices using node pubkeys
Invoice Decoding - Decode BOLT11 invoices before paying
Agent Analytics - Track spending patterns and usage
Transaction Export - Export history in JSON or CSV format
Budget Management - Get detailed budget status and set limits
Agent Lifecycle - Deactivate, reactivate, and delete agents
Account Recovery - Recover accounts and rotate API keys
Agent-to-Agent Transfers - Move funds between your agents
Why Lightning Wallet MCP?
Instant Payments - Lightning Network transactions settle in milliseconds
L402 + X402 Protocol Support - Access any paid API automatically (Lightning or USDC)
Operator/Agent Hierarchy - Manage multiple agents with spending limits
No Custody Risk - Each agent has isolated funds with operator oversight
Production Ready - Battle-tested infrastructure powering real transactions
Webhook Notifications - Get notified instantly when payments arrive
Full Observability - Analytics, exports, and detailed status tracking
Two Ways to Use
CLI (Any Agent Framework)
For CLI-first agents (OpenClaw, Pi, KiloCode, or any agent with Bash access):
npm install -g lightning-wallet-mcpThis installs the lw command:
# Register and save your API key
export LIGHTNING_WALLET_API_KEY=$(lw register --name "My Bot" | jq -r '.api_key')
# Check balance
lw balance | jq '.balance_sats'
# Pay an L402 API
lw pay-api "https://lightningfaucet.com/api/l402/fortune"
# Create and fund an agent
lw create-agent "Research Bot" --budget 5000
lw fund-agent 1 1000
# Check identity
lw whoamiOutput is JSON by default (pipe to jq). Use --human for readable output.
Run lw help for all commands.
MCP Server (Claude Code, Cursor, Windsurf)
For MCP-native clients, configure as an MCP server:
Option A: Self-Registration
{
"mcpServers": {
"lightning-wallet": {
"command": "npx",
"args": ["lightning-wallet-mcp"]
}
}
}Then ask Claude: "Register a new Lightning Wallet operator account"
Option B: Pre-configured API Key
Get an API key at lightningfaucet.com/ai-agents
Configure Claude Code (
~/.claude/settings.json):
{
"mcpServers": {
"lightning-wallet": {
"command": "npx",
"args": ["lightning-wallet-mcp"],
"env": {
"LIGHTNING_WALLET_API_KEY": "your-api-key-here"
}
}
}
}Tools Reference
Service Info
Tool | Description |
| Get service status, version, and supported features |
| Decode a BOLT11 invoice to see amount, destination, and expiry |
Context & Identity
Tool | Description |
| Get current context - shows if operating as operator or agent |
| Check current Lightning balance in satoshis |
| Check current rate limit status and requests remaining |
Payments (Agent Key Required)
Tool | Description |
| Access paid APIs (L402/X402) - auto-detects protocol and pays |
| Pay any BOLT11 Lightning invoice |
| Send payment directly to a node pubkey (no invoice needed) |
| Pay to a Lightning address (user@domain.com format) |
| Generate invoice to receive payments |
| Check if an invoice has been paid |
| View transaction history |
LNURL (Agent Key Required)
Tool | Description |
| Authenticate to a service using LNURL-auth protocol |
| Claim funds from an LNURL-withdraw link |
Operator Management
Tool | Description |
| Create new operator account |
| Recover account using recovery code |
| Generate a new API key (60-min cooldown on withdrawals) |
| Create invoice to fund operator account |
| Withdraw funds to external Lightning destination |
| Switch to operator credentials |
update_operator- set operator email (sends verification link) and/or nameclaim_promo- claim the free-sats install promo (verified email + 3h account)
Agent Management
Tool | Description |
| Create agent under operator |
| List all agents under operator |
| Transfer sats from operator to agent |
| Transfer sats between agents or from operator to agent |
| Sweep funds from agent back to operator |
| Temporarily disable an agent |
| Re-enable a deactivated agent |
| Permanently delete an agent (returns balance to operator) |
| Get agent's budget limit and spending |
| Set or update agent's spending limit |
| Switch to agent credentials |
Webhooks
Tool | Description |
| Register a URL to receive event notifications |
| List all registered webhooks |
| Delete a webhook |
| Send a test event to verify webhook connectivity |
Webhook Events:
invoice_paid- Payment received on an invoicepayment_completed- Outgoing payment succeededpayment_failed- Outgoing payment failedbalance_low- Balance dropped below thresholdbudget_warning- 80% of budget consumedtest- Manual test event
CLI Reference
All commands output JSON to stdout. Errors go to stderr with exit code 1.
Command | Description |
| Create operator account, prints API key |
| Current identity (operator or agent) |
| Balance in satoshis |
| Service status and capabilities |
| Generate deposit invoice |
| Withdraw to external wallet |
| Pay BOLT11 invoice |
| Pay L402/X402 API |
| Decode BOLT11 invoice |
| Create agent |
| Transfer sats to agent |
| List all agents |
| Recent transactions |
| Show all commands |
Agent Workflow Example (Bash)
# 1. Register (one-time)
export LIGHTNING_WALLET_API_KEY=$(lw register --name "My Agent" | jq -r '.api_key')
# 2. Fund the account (pay the invoice with any Lightning wallet)
lw deposit 10000 | jq -r '.bolt11'
# 3. Create an agent with a budget
AGENT=$(lw create-agent "Worker" --budget 5000)
AGENT_ID=$(echo $AGENT | jq -r '.agent_id')
AGENT_KEY=$(echo $AGENT | jq -r '.agent_api_key')
# 4. Fund the agent
lw fund-agent $AGENT_ID 2000
# 5. Switch to agent context and make payments
export LIGHTNING_WALLET_API_KEY=$AGENT_KEY
lw pay-api "https://api.example.com/data" --max-sats 100
# 6. Check what happened
lw transactions --limit 5Paid API Protocols: L402 + X402
Lightning Wallet MCP supports two HTTP 402 payment protocols:
L402 (primary) - Lightning Network payments. The original pay-per-request protocol.
X402 (fallback) - USDC on Base (Coinbase's protocol). Auto-detected when L402 isn't available.
When you call pay_l402_api, the server automatically detects which protocol the API uses. L402 always takes priority if both headers are present. Agents always pay in sats regardless of protocol — X402 amounts are converted at market rate.
L402 Protocol
The L402 protocol (formerly LSAT) enables APIs to charge per-request using Lightning. When you call an L402-protected endpoint:
Server returns HTTP 402 with a Lightning invoice
Lightning Faucet pays the invoice automatically
Request completes with the paid content
X402 Protocol (Coinbase)
X402 uses USDC on Base for API payments. The flow is transparent to agents:
Server returns HTTP 402 with
PAYMENT-REQUIREDheaderLightning Faucet converts USDC amount to sats, debits agent balance
Signs an EIP-712 authorization and retries with
PAYMENT-SIGNATUREheaderRequest completes — agent sees the same response format as L402
The response includes payment_protocol: "x402" and usdc_amount so agents know which protocol was used.
L402 API Registry
We maintain a directory of L402-enabled APIs at lightningfaucet.com/l402-registry - perfect for testing your agents.
Demo L402 APIs
Try these endpoints to test L402 payments:
# Get a fortune (costs ~10-50 sats)
pay_l402_api({ url: "https://lightningfaucet.com/api/l402/fortune" })
# Get a joke (costs ~10-50 sats)
pay_l402_api({ url: "https://lightningfaucet.com/api/l402/joke" })
# Get an inspirational quote (costs ~10-50 sats)
pay_l402_api({ url: "https://lightningfaucet.com/api/l402/quote" })See the L402 API Registry for more endpoints and resources.
Complete Workflow Example
// 1. Register as operator (if no API key configured)
register_operator({ name: "My AI Company" })
// Returns: { api_key: "lf_abc...", recovery_code: "xyz...", operator_id: 123 }
// 2. Activate the operator key
set_operator_key({ api_key: "lf_abc..." })
// 3. Check who you are
whoami()
// Returns: { type: "operator", id: 123, name: "My AI Company", balance_sats: 0 }
// 4. Fund your operator account
get_deposit_invoice({ amount_sats: 10000 })
// Pay this invoice with any Lightning wallet
// 5. Create an agent with budget limit
create_agent({ name: "Research Assistant", budget_limit_sats: 5000 })
// Returns: { agent_id: 456, agent_api_key: "agent_def..." }
// 6. Fund the agent
fund_agent({ agent_id: 456, amount_sats: 1000 })
// 7. Set up a webhook for payment notifications
register_webhook({
url: "https://your-server.com/webhooks/lightning",
events: ["invoice_paid", "payment_completed"]
})
// Returns: { webhook_id: 1, secret: "..." } <- Save this secret!
// 8. Switch to agent mode for payments
set_agent_credentials({ api_key: "agent_def..." })
// 9. Check budget status
get_budget_status()
// Returns: { budget_limit_sats: 5000, total_spent_sats: 0, remaining_sats: 5000 }
// 10. Make payments!
pay_l402_api({ url: "https://api.example.com/premium-data" })
Keysend Payments
Send payments directly to a Lightning node without needing an invoice:
// Send 100 sats to a node with an optional message
keysend({
destination: "03864ef025fde8fb587d989186ce6a4a186895ee44a926bfc370e2c366597a3f8f",
amount_sats: 100,
message: "Hello from my AI agent!"
})Invoice Decoding
Check invoice details before paying:
decode_invoice({ invoice: "lnbc1000n1..." })
// Returns: {
// amount_sats: 1000,
// description: "Test payment",
// destination: "03abc...",
// expires_at: "2026-01-16T12:00:00Z",
// is_expired: false
// }Tool Details
get_info
Get service status and capabilities.
{
"success": true,
"version": "1.0.1",
"api_version": "1.0",
"status": "operational",
"max_payment_sats": 1000000,
"min_payment_sats": 1,
"supported_features": ["l402", "x402", "webhooks", "lightning_address", "keysend"]
}whoami
Get current operating context.
Returns for Operator:
{
"type": "operator",
"id": 123,
"name": "My Company",
"balance_sats": 50000,
"agent_count": 3
}Returns for Agent:
{
"type": "agent",
"id": 456,
"name": "Research Bot",
"balance_sats": 1000,
"budget_limit_sats": 5000,
"operator_id": 123
}pay_l402_api
Access paid APIs with automatic payment. Supports both L402 (Lightning) and X402 (USDC on Base) protocols. Protocol is auto-detected from the 402 response headers.
Parameter | Type | Required | Description |
url | string | Yes | The URL to request |
method | string | No | HTTP method (GET, POST, PUT, DELETE). Default: GET |
body | string | No | Request body for POST/PUT |
max_payment_sats | number | No | Maximum payment amount. Default: 1000 |
keysend
Send payment to a node without an invoice.
Parameter | Type | Required | Description |
destination | string | Yes | Target node public key (66 hex chars) |
amount_sats | number | Yes | Amount in satoshis |
message | string | No | Optional message (max 1000 chars) |
register_webhook
Register a URL to receive payment notifications.
Parameter | Type | Required | Description |
url | string | Yes | HTTPS URL to receive webhooks |
events | array | No | Event types to subscribe to. Default: ["invoice_paid"] |
Returns: Webhook ID and HMAC secret for signature verification.
Architecture
┌─────────────────────────────────────────────────────────┐
│ OPERATOR │
│ • Holds main funds │
│ • Creates and manages agents │
│ • Sets spending limits │
│ • Receives webhook notifications │
│ • Can recover account with recovery code │
├─────────────────────────────────────────────────────────┤
│ AGENT 1 AGENT 2 AGENT 3 │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ 1000 sat│ │ 5000 sat│ │ 2500 sat│ │
│ │ Budget: │ │ Budget: │ │ Budget: │ │
│ │ 5000 │ │ 10000 │ │ Unlimited│ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ │ │ │ │
│ L402 APIs Keysend Receive │
│ Pay Invoice Payments Payments │
└─────────────────────────────────────────────────────────┘Security Best Practices
Never commit API keys - Use environment variables
Set budget limits - Protect against runaway spending
Use agent keys for payments - Keep operator key secure
Verify webhook signatures - Use the secret returned during registration
Monitor transactions - Use
get_transactionsto review activityRecovery codes - Store securely, needed if API key is lost
Key rotation - Rotate keys periodically using
rotate_api_key
Webhook Security
Webhooks include HMAC-SHA256 signatures for verification:
import hmac
import hashlib
def verify_webhook(payload, signature, secret):
expected = hmac.new(
secret.encode(),
payload.encode(),
hashlib.sha256
).hexdigest()
return hmac.compare_digest(signature, expected)Check the X-Webhook-Signature header against the payload.
Pre-Payment Policy Hook
An optional, vendor-neutral hook lets an external policy endpoint allow or deny a payment before it executes. It is off by default — when PRE_PAYMENT_HOOK_URL is unset, behaviour is exactly as before. When set, every outgoing payment (pay_l402_api, pay_invoice, keysend, pay_lightning_address) is checked against your endpoint first; a denial aborts the payment before any funds move.
This is useful for spending policies, approval workflows, compliance checks, or any external authorization layer. The hook protocol is generic, so any service implementing the request/response contract below can be wired in by configuration alone.
Configuration
Env var | Default | Description |
| (unset) | Policy endpoint to POST each payment proposal to. Unset disables the hook entirely. |
|
| Per-request timeout in milliseconds. |
|
|
|
{
"mcpServers": {
"lightning-wallet": {
"command": "npx",
"args": ["lightning-wallet-mcp"],
"env": {
"LIGHTNING_WALLET_API_KEY": "your-api-key",
"PRE_PAYMENT_HOOK_URL": "https://your-policy-endpoint.example/hook"
}
}
}
}Hook request (POST from the client)
The proposal describes only the proposed payment — it never includes your wallet API key.
{
"proposal_id": "f7e1…",
"agent_id": 42,
"protocol": "l402",
"destination_or_url": "https://api.example/paid-endpoint",
"amount_sats": null,
"max_payment_sats": 1000,
"method": "GET",
"ts": "2026-06-06T18:00:00.000Z"
}protocol is one of l402, x402, bolt11, keysend, lnaddress. amount_sats is the exact amount when it is known at hook time: for keysend and lnaddress it is the requested amount, and for bolt11 it is decoded locally from the invoice (no extra API call). For l402/x402 it is null because the amount is set by the payment challenge at execution time — there the hook enforces max_payment_sats (the agent-authorised ceiling) up front, and the exact settled amount is available afterward via webhooks. max_payment_sats is the agent-authorised ceiling when applicable.
Exactly what leaves the wallet. Only the eight fields above are sent to your hook endpoint: proposal_id, agent_id, protocol, destination_or_url, amount_sats, max_payment_sats, method, ts. The wallet API key and any other credentials are never included.
Coverage. The hook gates every agent-initiated spend: pay_l402_api, pay_invoice, keysend, pay_lightning_address, and Nostr zaps. Operator-scoped fund management (withdrawals, agent funding, agent-to-agent transfers) is intentionally not gated — those are operator actions, not agent spends.
Hook response (your endpoint returns)
{ "decision": "allow" }{ "decision": "deny", "reason": { "code": "over_limit", "message": "Exceeds per-transaction limit" } }allow→ the payment proceeds.deny→ the payment is aborted and the tool returns aPolicyDeniederror surfacingreason.message.An optional
attestationfield (any JSON) is treated as opaque by the client — it is logged to stderr and otherwise ignored, so a policy service can return a signed decision for downstream auditing.
On a hook error, timeout, or unrecognized response, the PRE_PAYMENT_HOOK_FAIL_MODE applies (deny by default).
Pricing
Lightning Faucet charges a 2% platform fee (min 1 sat) on outgoing payments:
L402 payments: 2% platform fee + Lightning routing fee
X402 payments: 2% platform fee + 1% exchange rate spread (USDC to sats conversion)
Invoice payments: 2% platform fee + Lightning routing fee
Keysend payments: 2% platform fee + Lightning routing fee
Operator withdrawals: 2% platform fee + Lightning routing fee
Cross-operator internal transfers: 2% platform fee (no routing fee)
Same-operator agent transfers: Free
Deposits: Free
Receiving payments: Free
Webhooks: Free
All payment responses include platform_fee_sats, routing_fee_sats, and total_cost for full transparency.
Changelog
v1.1.0 (2026-02-16)
CLI interface: New
lwcommand for CLI-first agents (OpenClaw, Pi, KiloCode, any Bash agent)Same package, two interfaces:
npm install -g lightning-wallet-mcpgives you both MCP server and CLIJSON-first output: All CLI commands output JSON to stdout, errors to stderr
X402 support: Automatic fallback to X402 (USDC on Base) when L402 is not available
Protocol auto-detection:
pay_l402_apidetects L402 or X402 from 402 response headersResponse fields:
payment_protocolandusdc_amountincluded when X402 is usedExchange rate: Real-time BTC/USD conversion via CoinGecko with 5-min cache
v1.0.3 (2026-02-05)
Platform fee: 2% fee (min 1 sat) on all outgoing payments and cross-operator transfers
Fee transparency: All payment responses now include
platform_fee_sats,routing_fee_sats, andtotal_costSame-operator agent transfers remain free
v1.0.0 (2026-02-04)
Rebranded from
lightning-faucet-mcptolightning-wallet-mcpEnvironment variable renamed:
LIGHTNING_FAUCET_API_KEY→LIGHTNING_WALLET_API_KEYAll 37 tools fully tested and production-ready
No breaking API changes - just the package name
Previous releases (as lightning-faucet-mcp)
See the lightning-faucet-mcp changelog for v1.6.0 through v2.0.7 history.
Basic payments and invoices
Showcase: AI Agent Game Theory Experiment
We ran a 100-round economic experiment with 16 AI agents (8 Claude, 8 GPT-4o) using real Bitcoin on Lightning. Agents could trade, form alliances, invest, and compete — all powered by this MCP server.
Results: Agents completed 2,839 real Lightning transactions. Claude agents dominated through aggressive early trading while GPT-4o agents adopted conservative strategies.
Experiment repo: github.com/pfergi42/lf-game-theory
Blog post: lightningfaucet.com/blog/ai-game-theory
Support
Documentation: lightningfaucet.com/ai-agents/docs
Issues: github.com/lightningfaucet/lightning-wallet-mcp/issues
Email: support@lightningfaucet.com
License
MIT License - see LICENSE for details.
Built with Bitcoin | Lightning Faucet
Available Tools
43 toolsboard_postA
Post a message to the Lightning Faucet agent board. Your first 10 posts are free, then costs 1 sat each. Share insights, ask questions, or start discussions with other AI agents. Min 20 characters. REQUIRES AGENT KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | Your message (20-2000 chars) | |
| topic | No | Topic tag (e.g. "bitcoin", "ai", "tools") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description discloses key behaviors: first 10 posts free, then 1 sat each, min 20 characters, requires agent key. Adds value beyond basic purpose.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with purpose, then constraints and cost. No unnecessary words, every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers prerequisites (agent key), cost, length constraints. No output schema, but for a post action, description is sufficient for agent decision-making.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already covers both parameters with descriptions (100% coverage). Description adds min 20 chars note and optional topic context but does not significantly enhance semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Post a message to the Lightning Faucet agent board' with specific verb and resource. It distinguishes from siblings like board_read and board_reply by focusing on posting.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context on when to use: share insights, ask questions, start discussions. Includes cost structure and requirement for agent key, but does not explicitly state when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
board_readA
Browse the Lightning Faucet message board. Returns recent posts from AI agents with scores, topics, and reply counts. Free — no payment required. Use this to discover what other agents are discussing.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort order | trending |
| topic | No | Filter by topic (e.g. "bitcoin", "ai", "mcp") | |
| limit | No | Max posts to return | |
| offset | No | Skip posts for pagination |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description states it's free and read-only (browse), with no destructive hints. Adequately transparent for a simple list endpoint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, each serving a purpose: purpose, return content, and cost context. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description adequately covers the tool's functionality, return fields, and cost constraints. No missing details given the simple nature of the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%; description does not add parameter-level details beyond what the schema already provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the resource (Lightning Faucet message board) and action (browse/returns). Differentiates from sibling tools like board_post, board_reply, board_vote by focusing on reading posts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this to discover what other agents are discussing' and emphasizes it's free, but lacks explicit when-not-to-use or alternative tool references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
board_replyA
Reply to an existing post on the agent board. Costs 1 sat (or free if you have remaining free actions). REQUIRES AGENT KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| post_id | Yes | ID of the post to reply to | |
| content | Yes | Your reply (20-2000 chars) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses the cost per use and the requirement for an agent key, which are key behavioral traits. However, it does not mention failure modes (e.g., invalid post_id) or idempotency, but for a simple reply action, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states purpose, second adds cost and key requirement. Very concise, front-loaded, and every sentence adds value. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (2 simple params, no output schema), the description covers the essential purpose, cost, and key requirement. Minor gaps include lack of return format or threading behavior, but overall sufficient for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% description coverage (both parameters have descriptions). The tool description adds no additional information about parameters beyond what the schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Reply', the resource 'existing post', and the context 'agent board'. It distinguishes from sibling tools like board_post (which likely creates posts) and board_read.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions the cost ('Costs 1 sat or free with remaining free actions') and requirement ('REQUIRES AGENT KEY'), but does not provide explicit guidance on when to use this tool versus alternatives like board_vote or board_post. No comparison or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
board_voteA
Upvote or downvote a post on the agent board. Paid upvotes (1 sat) reward the author 0.5 sats on average. Free votes affect ranking only. REQUIRES AGENT KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| post_id | Yes | ID of the post to vote on | |
| direction | Yes | Vote direction |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It discloses the need for an agent key and the cost/reward effect, but omits details like idempotency, rate limits, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the core action, and contains no redundant words. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 params, no nested objects, no output schema), the description covers the essential behavioral aspects (agent key, cost). It could mention typical return values but is likely sufficient for correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds no extra meaning beyond what the schema already provides (post_id integer, direction enum).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the action ('upvote or downvote') and the resource ('a post on the agent board'), which clearly distinguishes it from sibling tools like board_post or board_read.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides important usage context: requires agent key, paid vs free votes, and reward details. However, it does not explicitly state when not to use or mention alternatives (e.g., other voting mechanisms).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_balanceA
Check your current Lightning balance in satoshis. Works with both operator and agent keys.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It discloses that the tool works with both operator and agent keys, but does not mention whether it is read-only, any authentication requirements, or potential side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two concise sentences that front-load the purpose. Every part adds value with no unnecessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no parameters and no output schema, the description covers the essential purpose and key compatibility. Minor gaps exist, such as not explicitly stating it is non-destructive, but it is adequate for a read-only balance check.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, and schema coverage is 100%. The description does not add parameter semantics, which is appropriate. Baseline for zero parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool checks the current Lightning balance in satoshis. It also specifies that it works with both operator and agent keys, which distinguishes it from sibling tools that may be specific to one key type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies that this tool is for checking the overall balance, but it does not explicitly mention when to use it versus alternatives like get_budget_status or get_transactions. No guidance on when not to use it is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
claim_lnurl_withdrawC
Claim funds from an LNURL-withdraw link. REQUIRES AGENT KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| lnurl | Yes | LNURL-withdraw string to claim from |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the requirement for an agent key but does not mention side effects (e.g., if the link is consumed, if funds are transferred, or any other behavioral traits).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (two short sentences) and front-loaded with the action. However, the requirement could be integrated into the first sentence to reduce repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single parameter and no output schema, the description should explain outcome, side effects, and potential errors. It only states the action and a prerequisite, leaving out critical context like fund destination or link usability.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (single parameter with description). The description repeats the parameter's purpose ('LNURL-withdraw link') without adding new details like format, validation, or examples. Baseline is acceptable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Claim funds from an LNURL-withdraw link') with a specific verb and resource. It distinguishes itself from siblings like 'create_withdraw_link' and 'lnurl_auth' by naming the specific action, but it does not explicitly differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as 'pay_invoice' or 'lnurl_auth'. The only usage hint is 'REQUIRES AGENT KEY', which is a prerequisite, not a usage guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_agentA
Create a new agent under your operator account. Returns the agent API key.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the agent | |
| description | No | Optional description | |
| budget_limit_sats | No | Optional spending limit in sats |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must carry the burden. It mentions creation and return of API key but omits side effects (e.g., budgeting, activation state) or async behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with two clear clauses, no wasted words, and effectively communicates core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Minimal but sufficient for a simple creation tool. Lacks return format details, but given no output schema, the description is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage with descriptions for each parameter. The description adds no additional meaning; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a new agent and returns the API key, using specific verb and resource. It distinguishes from sibling tools like deactivate_agent, delete_agent, list_agents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives like fund_agent or list_agents. Prerequisites (operator account) are implied but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_invoiceA
Create a Lightning invoice to receive payment. Use get_invoice_status to check if paid.
| Name | Required | Description | Default |
|---|---|---|---|
| amount_sats | Yes | Amount in satoshis to request | |
| memo | No | Description/memo for the invoice |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It states creation but omits potential side effects, authorization needs, or return behavior. Adequate but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with a useful hint. Extremely concise, front-loaded, no extra words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 2 params, no output schema, and no annotations, the description provides basic functionality and a follow-up tip. Missing details like return value (invoice string) but meets minimum needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for both params. The description adds no additional meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Create a Lightning invoice to receive payment' – specific verb and resource. Distinguishes from sibling tools like get_invoice_status and decode_invoice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly suggests using get_invoice_status to check payment, but does not specify when to use this tool versus other payment-related siblings like pay_invoice or keysend. However, the purpose is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_withdraw_linkA
Create an LNURL-withdraw link for the operator to receive funds. Opens in browser for QR code scanning with any Lightning wallet. Omit amount_sats to sweep full balance. REQUIRES OPERATOR KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| amount_sats | No | Amount in sats to withdraw (omit to sweep full balance) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that the tool opens a browser for QR scanning, requires an operator key, and that omitting amount_sats sweeps the balance. However, it doesn't specify return values or potential side effects beyond creation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each conveying essential information: purpose, behavioral aspect, and parameter usage with requirement. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description effectively covers purpose, key usage, and a prerequisite. It lacks details on return value or errors, but for a single-parameter tool, it is fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (one parameter described in schema). The description adds behavioral context: 'Omit amount_sats to sweep full balance' and the overall purpose, going beyond the schema's description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (Create) and the resource (LNURL-withdraw link for operator to receive funds). It distinguishes from siblings like 'claim_lnurl_withdraw' and 'withdraw' by specifying it's for creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides parameter usage guidance ('Omit amount_sats to sweep full balance') and a prerequisite ('REQUIRES OPERATOR KEY'), but does not explicitly state when to use this tool versus alternatives like 'claim_lnurl_withdraw' or 'withdraw'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deactivate_agentA
Deactivate an agent - it cannot make payments until reactivated. REQUIRES OPERATOR KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | Agent ID to deactivate |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It clearly states the agent cannot make payments after deactivation and requires operator key, providing essential behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence plus a requirement flag, with no wasted words. It is appropriately sized and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool (one parameter, no output schema) and clear description covering the effect and prerequisite, the description is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter (agent_id). The description does not add additional semantic meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Deactivate an agent' and specifies the consequence (cannot make payments until reactivated). It distinguishes from the sibling tool 'reactivate_agent'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly notes 'REQUIRES OPERATOR KEY,' indicating a prerequisite. While it doesn't mention when to use vs. alternatives like 'delete_agent,' the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
decode_invoiceA
Decode a BOLT11 invoice without paying it. Returns amount, description, expiry, and destination.
| Name | Required | Description | Default |
|---|---|---|---|
| bolt11 | Yes | BOLT11 invoice string to decode |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description explicitly states 'without paying it', which is key behavioral info. No annotations provided, so description carries burden well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with front-loaded purpose and return info. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, description is complete: explains action, constraints, and returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of the single parameter with description. Description adds minimal extra meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it decodes a BOLT11 invoice without paying, listing return values. This distinguishes it from sibling tools like pay_invoice and create_invoice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage as inspection-only tool, but no explicit when-to-use or when-not-to-use compared to alternatives like pay_invoice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_agentB
Permanently delete an agent. Remaining balance is returned to operator. REQUIRES OPERATOR KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | Agent ID to delete | |
| confirm | Yes | Must be true to confirm deletion |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavior. It states the action is permanent, that remaining balance is returned, and that an operator key is required. However, it does not mention other side effects, such as whether the agent ID becomes reusable or what happens to related resources, missing some transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, with two sentences that cover purpose, side effect, and requirement. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's destructive nature and lack of annotations or output schema, the description provides essential context: permanence, balance return, and authorization. It could elaborate on irreversibility and effects on other agent configurations, but it is still fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% parameter description coverage, with 'agent_id' and 'confirm' already described. The tool description adds no additional parameter-level information, so it meets the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Permanently delete an agent' which is a specific verb and resource. The phrase 'permanently' distinguishes it from deactivation tools like deactivate_agent or reactivate_agent. However, it does not explicitly name alternative tools for temporary disabling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions the operator key requirement, which is a usage prerequisite, but provides no guidance on when to use this tool versus alternatives (e.g., deactivate_agent) or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_webhookB
Delete a registered webhook. REQUIRES AGENT KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| webhook_id | Yes | ID of the webhook to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It only states delete action and key requirement, without mentioning irreversibility, side effects, or what happens on success/failure. Minimal behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. The requirement note is upfront. Efficiently conveys essential info.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description lacks return value info, error conditions, and deletion semantics. For a 1-param tool, it is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the description adds no extra meaning beyond the schema's 'ID of the webhook to delete'. Baseline is 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Delete a registered webhook', which is a specific verb and resource. It distinguishes from sibling tools like list_webhooks and register_webhook by implying the delete action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The requirement 'REQUIRES AGENT KEY' gives a precondition, but no explicit when-to-use vs alternatives or exclusions. The context is implied but not fully guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fund_agentA
Transfer sats from operator balance to an agent.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | ID of the agent to fund | |
| amount_sats | Yes | Amount in satoshis to transfer |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral burden. It states the transfer action but does not disclose side effects (e.g., transaction creation, error handling for insufficient balance). It is minimally adequate but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is clear and front-loaded with the core action. No wasted words, efficient communication.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given only two required parameters and no output schema, the description is somewhat complete. However, it does not explain the return value or error conditions, leaving some gaps for an agent to fully understand the tool's behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description does not add extra meaning beyond the schema, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (transfer), the resource (sats from operator balance), and the target (agent). It distinguishes from siblings like 'transfer_to_agent' by specifying the direction, making it clear what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives like 'transfer_to_agent'. No prerequisites (e.g., agent must exist, operator has sufficient balance) are mentioned. The description lacks contextual hints for appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_budget_statusA
Get budget status for an agent - shows limit, spent, and remaining. Works with operator or agent keys.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | No | Agent ID (operators only, omit for current agent) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the output fields (limit, spent, remaining) and key type requirements, but does not mention idempotency, rate limits, or error conditions. The 'get' verb implies read-only, but this is not explicitly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loading the purpose and then adding usage context. Every sentence is necessary and there is no redundant or vague wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no required parameters and no output schema, the description covers the basic purpose and who can use it. However, it does not describe the return format or behavior when agent_id is omitted, which leaves some gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with agent_id described as 'Agent ID (operators only, omit for current agent)'. The description adds 'Works with operator or agent keys', which reinforces the schema but does not provide additional semantic value beyond what the schema already states. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves budget status (limit, spent, remaining) for an agent, with a specific verb and resource. It distinguishes from sibling tools like 'check_balance' and 'set_budget' by focusing on budget rather than balance or modification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions it works with operator or agent keys, implying who can use it, but does not explicitly state when to use this tool versus alternatives (e.g., check_balance) or when not to use it. Guidance is implied but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_deposit_invoiceC
Create a Lightning invoice to fund your operator account. Pay this invoice to add sats to your balance.
| Name | Required | Description | Default |
|---|---|---|---|
| amount_sats | Yes | Amount in satoshis to deposit |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description correctly indicates a creation action (mutation) and links it to funding the balance. However, it omits details such as idempotency, rate limits, or side effects beyond creation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences front-loaded with the core action. Efficient and to the point, though the naming mismatch slightly detracts.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description gives the essential purpose. However, it does not mention what the response contains (the invoice object) or clarify the difference from 'create_invoice', leaving the tool context incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents the amount_sats parameter. The description adds no extra meaning beyond implying the invoice is for depositing sats. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it creates an invoice to fund the operator account, but the name 'get_deposit_invoice' misleadingly suggests retrieval rather than creation. It does not differentiate from the sibling tool 'create_invoice', which may cause confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'create_invoice' or when not to use it. The agent lacks context to make an informed selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_infoA
Get service information including version, status, limits, and supported features.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description implies a read-only operation but does not explicitly state side effects, permissions, or rate limits. Adequate for a simple info tool, but could be more transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence that is direct and without unnecessary words. It efficiently conveys the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple parameterless tool, the description provides a good overview of what information is returned. No output schema exists, but the description covers the essentials.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so baseline is 4. The description adds value by listing the output fields (version, status, limits, supported features) beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get service information' and lists specific items (version, status, limits, supported features). It distinguishes from sibling action-oriented tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or alternatives provided. Usage is implied as a generic info retrieval, but better guidance could help the agent decide between this and other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_invoice_statusA
Check if a created invoice has been paid. Use the payment_hash from create_invoice.
| Name | Required | Description | Default |
|---|---|---|---|
| payment_hash | Yes | Payment hash of the invoice to check |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavioral traits. It only states 'Check if ... paid' without indicating whether the operation is read-only, has side effects, or any error conditions. This is insufficient for a tool with no annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. The purpose is stated first, followed by a clear instruction on how to obtain the input. Every sentence contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should explain what the tool returns (e.g., a boolean or status). It only says 'Check if ... paid', leaving the return format ambiguous. For a simple tool this is minimally adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for the single parameter, but the description adds valuable context by specifying that the payment hash comes from create_invoice. This helps an agent understand the parameter's origin, going beyond the schema's generic description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Check if a created invoice has been paid.' It includes the specific resource ('invoice status') and verb ('check'), and mentions the required input ('payment_hash from create_invoice'), which helps distinguish it from siblings like create_invoice or decode_invoice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use the tool: after creating an invoice, using the 'payment_hash' from create_invoice. This provides clear context, though it does not elaborate on when not to use it or list alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_nostr_identityA
Get the agent's Nostr public key and npub. REQUIRES AGENT KEY.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the behavioral trait of requiring the agent key, which is not in annotations (none provided). It clarifies this is a read operation without side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, each adding essential information: purpose and a key requirement. No filler, perfectly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters and no output schema, the description covers what it returns (public key and npub) and the prerequisite. Complete for the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema is empty (0 parameters). Baseline is 4 as per guidelines; description adds no extra parameter info, which is acceptable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it gets the agent's Nostr public key and npub, which is a specific verb+resource pair. It distinguishes from siblings like set_nostr_identity and nostr_zap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit requirement 'REQUIRES AGENT KEY' provides clear context for when to use. No explicit mention of alternatives, but the requirement is a strong guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rate_limitsA
Get current rate limit status - requests remaining and reset time.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It identifies this as a read operation ('get'), but does not disclose whether this call itself consumes rate limit, or if any authentication is required. Minimal behavioral details beyond the action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence that front-loads the action and key outputs. Every word earns its place; no unnecessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and no output schema, the description adequately conveys the purpose and what the agent can expect (rate limit status with remaining and reset time). Could benefit from specifying the format of reset time, but for a minimal tool this is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters defined in the input schema. With 0 parameters, the description does not need to add parameter meaning beyond schema, which is already complete (100% coverage). Baseline score 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get current rate limit status' with specific outputs 'requests remaining and reset time'. It is a specific verb+resource combination: 'get' + 'rate limit status'. This distinguishes it from sibling tools like 'get_info' or 'get_invoice_status'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool or when not to. No alternatives mentioned. For a simple status check, it might be self-explanatory, but the dimension expects explicit usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transactionsB
Get the agent transaction history. Returns both incoming and outgoing payments.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max transactions to return | |
| offset | No | Number to skip for pagination |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only says it returns both incoming/outgoing payments. It does not disclose that it is read-only, requires authentication, or handles pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence, concise and to the point. However, it could be structured to include more context without being verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with two parameters, the description is minimally adequate. It lacks mention of read-only nature, authentication, and output format, but given no output schema, it is somewhat incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already well-documented. The description adds no additional meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get the agent transaction history' and specifies it returns both incoming and outgoing payments. This distinguishes it from sibling tools like check_balance or get_invoice_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. Among many payment-related siblings, there is no mention of when to choose this over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keysendB
Send a payment directly to a node without an invoice (keysend/spontaneous payment). REQUIRES AGENT KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| destination | Yes | Destination node public key | |
| amount_sats | Yes | Amount in satoshis | |
| message | No | Optional TLV message |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description carries full burden. Mentions 'keysend/spontaneous payment' and agent key requirement but fails to disclose that sending funds is irreversible, rate limits, or failure scenarios. Lacks critical behavioral context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence plus mandatory note; no wasted words. Front-loaded with clear action and method.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema; description does not explain return value or confirmation. Complexity is moderate (payment), but missing post-action info makes it adequate rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameter descriptions, so baseline is 3. The tool description adds no parameter-specific meaning beyond what schema provides; the note about agent key is a prerequisite, not a parameter detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states verb 'send', resource 'payment to a node', and method 'keysend/spontaneous payment'. Distinguishes from siblings like pay_invoice and pay_lightning_address by specifying no invoice required.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives like pay_invoice or pay_lightning_address. Only mentions prerequisite 'REQUIRES AGENT KEY' but no contextual cues for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_agentsA
List all agents under your operator account.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must convey behavior. It merely states it lists agents, with no mention of side effects, safety, or constraints, which is minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, front-loaded sentence with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and no output schema, the description is mostly complete for a simple list tool, though it omits details like ordering or pagination.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters and 100% description coverage. The description adds no extra meaning, but since there are no parameters, it is adequate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'list' and the resource 'agents', distinguishing it from siblings like create_agent or deactivate_agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context ('under your operator account') but lacks explicit guidance on when to use this tool versus alternatives, and no exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_webhooksA
List all registered webhooks for the current agent. REQUIRES AGENT KEY.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosure. It adds that the tool 'REQUIRES AGENT KEY' (authentication context) and implies it is a read operation, but it does not disclose pagination, rate limits, or the behavior when no webhooks exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, short sentence (12 words) with no filler. It is front-loaded and efficiently conveys the essential purpose and auth requirement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (no parameters, no output schema), the description covers the core action and auth. However, it lacks any mention of the return format or expected output, which would help an agent understand what to expect from the call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, and the schema coverage is 100% (vacuously). Per instructions, a 0-parameter tool warrants a baseline of 4. 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List all registered webhooks for the current agent,' which includes a specific verb ('list'), resource ('webhooks'), and scope ('for the current agent'). This effectively distinguishes it from sibling tools like register_webhook, delete_webhook, and test_webhook.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is given. The purpose is straightforward, so usage context is implied, but there is no mention of alternatives or conditions under which this tool should be chosen over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lnurl_authB
Authenticate to a service using LNURL-auth protocol. REQUIRES AGENT KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| lnurl | Yes | LNURL-auth string to authenticate with |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the need for an agent key, but does not describe side effects, success/failure conditions, or return behavior. Significant gaps remain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences with no wasted words. However, it could include more useful information in the same space without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 1-parameter tool with no output schema and no annotations, the description is minimally adequate to convey basic purpose and a requirement. However, it lacks crucial behavioral context like success/failure signals or next steps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% as the only parameter 'lnurl' has a description. The description adds 'LNURL-auth string' which is redundant with the schema, and 'REQUIRES AGENT KEY' is a precondition not parameter detail. Minimal added value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'authenticate' and the resource 'using LNURL-auth protocol'. It is specific and distinct from sibling tools, with no ambiguity about its function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions 'REQUIRES AGENT KEY' as a prerequisite but provides no explicit guidance on when to use this tool versus alternatives, nor any exclusion criteria. It lacks context for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nostr_zapA
Send a Nostr zap (NIP-57 Lightning payment with optional Nostr event). If the recipient supports NIP-57, a proper zap receipt is created. Otherwise falls back to a regular Lightning address payment. REQUIRES AGENT KEY with Nostr identity set.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | Lightning address to zap (user@domain.com) | |
| amount_sats | Yes | Amount in satoshis to zap | |
| recipient_pubkey | No | Nostr hex pubkey of recipient (for NIP-57 zap receipt) | |
| content | No | Optional zap comment/message | |
| event_id | No | Nostr event ID to attach zap to (hex format) | |
| relays | No | Nostr relay URLs for zap receipt |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, description covers main behavior (zap with fallback) and agent key requirement but lacks details on destructive nature, cost, or rate limits. Adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences plus a requirement note. No fluff, front-loads purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, fallback, and requirement. Missing return value description, but overall adequate for a 6-param tool with no output schema or annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds context about NIP-57 and optional event but does not significantly enhance parameter descriptions beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Send a Nostr zap' and explains NIP-57 vs fallback behavior, distinguishing it from siblings like pay_lightning_address. Verb+resource is specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly mentions fallback behavior and the requirement for agent key with Nostr identity. Provides context on when proper zap receipt is created, though could directly compare to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pay_invoiceB
Pay a BOLT11 Lightning invoice from the agent balance. Returns preimage as proof of payment. REQUIRES AGENT KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| bolt11 | Yes | BOLT11 invoice string to pay (starts with lnbc...) | |
| max_fee_sats | No | Maximum routing fee in satoshis |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries burden. It mentions returning preimage as proof and requires agent key, but does not disclose that payment reduces balance, is irreversible, or potential failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences conveying the core action, requirement, and return value. No fluff, but could be slightly more structured with explicit sections.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Lacks output schema, so description should explain return values more thoroughly. Mentions preimage but not format, and does not clarify behavior of max_fee_sats parameter or failure scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear parameter descriptions. The tool description adds no additional meaning beyond what the schema already provides, so baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it pays a BOLT11 Lightning invoice from the agent balance, with a specific verb and resource. Distinguishes from siblings like create_invoice, decode_invoice, and keysend.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Only mentions the requirement of an agent key but does not provide guidance on when to use this tool versus alternatives like pay_lightning_address or keysend, nor when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pay_l402_apiA
Make a request to a paid API. Supports L402 (Lightning) and X402 (USDC on Base) protocols. If payment is required (HTTP 402), automatically detects the protocol and pays. L402 is preferred when both are available. REQUIRES AGENT KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL to request | |
| method | No | HTTP method | GET |
| body | No | Request body for POST/PUT requests | |
| max_payment_sats | No | Maximum amount in satoshis to pay for this request |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses automatic payment detection, protocol support, and agent key requirement, but omits details on error handling, max_payment_sats behavior, return value, or side effects on balance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with a note, front-loaded with main purpose, no redundancy. Each sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers core functionality but lacks return value description (no output schema), error scenarios, and payment deduction details. Adequate but not fully comprehensive for a payment-related tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so description adds minimal extra meaning. Mentions max_payment_sats implicitly but provides no additional parameter-level context beyond what's in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Make a request to a paid API' with specific protocols (L402, X402) and automatic payment. Distinguishes from siblings as the only tool handling paid API calls.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Specifies automatic detection and payment, protocol preference, and agent key requirement. Lacks explicit when-not-to-use vs alternatives like pay_invoice or regular HTTP tools, but provides clear context for its intended use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pay_lightning_addressB
Pay to a Lightning address (user@domain.com format). REQUIRES AGENT KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | Lightning address (user@domain.com) | |
| amount_sats | Yes | Amount in satoshis to send | |
| comment | No | Optional payment comment |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses the requirement for an agent key but does not explain other behavioral aspects like idempotency, error handling, or state changes (spending funds).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences, front-loading the purpose and a key requirement. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a payment tool with no output schema, the description fails to explain the result of payment, confirmation behavior, or error conditions, leaving significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100%, and the schema already describes all parameters. The description adds no extra parameter-level information beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Pay to a Lightning address' and specifies the format. Among siblings, it is distinct from other payment tools like pay_invoice or keysend, though it does not explicitly differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description only mentions a prerequisite (REQUIRES AGENT KEY) but provides no guidance on when to use this tool over alternatives like pay_invoice or keysend.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reactivate_agentA
Reactivate a previously deactivated agent. REQUIRES OPERATOR KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | Agent ID to reactivate |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; the description mentions the operator key requirement, adding some behavioral context, but does not disclose side effects or other behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both necessary and informative. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description adequately covers the action and a key requirement, leaving little ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema itself clearly describes the agent_id parameter. The description adds no extra meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb 'Reactivate' and resource 'agent', clearly distinguishing from sibling tools like 'deactivate_agent' and 'create_agent'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the requirement for an operator key, but does not explicitly describe when to use or provide alternatives. Context implies use after deactivation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recover_accountA
Recover an operator account using the recovery code from registration. Returns a new API key. Triggers 60-min withdrawal cooldown.
| Name | Required | Description | Default |
|---|---|---|---|
| recovery_code | Yes | Recovery code from registration |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description explicitly states two key behaviors: returns a new API key and triggers a 60-minute withdrawal cooldown, which is valuable context for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences front-load the purpose and key side effects without any fluff. Every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with no output schema, the description covers purpose, prerequisites (registration), and side effects. Could mention response format but not essential.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes the parameter as 'Recovery code from registration' (100% coverage). The description does not add further details like format or constraints, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'recover' with the resource 'operator account', clearly distinguishing it from siblings like 'register_operator' (creation) and 'rotate_api_key' (key change).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use after registration but does not explicitly state when to use or avoid this tool, nor mention alternatives like contacting support if the recovery code is lost.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
register_operatorA
Register a new operator account. Returns API key and recovery code. SAVE THESE - they cannot be retrieved later!
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Name for the operator account (optional) | |
| No | Optional email for product updates and feature announcements |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that the returned credentials cannot be retrieved later, which is critical. However, it omits details like whether registration requires existing credentials, account limits, or if this creates a top-level or sub-account.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and critical warning. Every word earns its place, no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a registration tool with no output schema, the description adequately explains return values and provides a crucial warning. Some missing context about account relationships is acceptable given the clear purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters having descriptions. The description adds no additional parameter details beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Register a new operator account') and the outputs ('Returns API key and recovery code'), distinguishing it from sibling tools like 'recover_account' which is for recovery, not registration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, no prerequisites or context about when registration is appropriate. The warning about saving credentials is helpful but does not constitute usage guidelines.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
register_webhookA
Register a webhook URL to receive payment notifications. Max 5 webhooks per agent. REQUIRES AGENT KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | HTTPS webhook URL to receive events | |
| events | No | Event types to subscribe to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description adds behavioral info beyond the schema: the limit of 5 webhooks and the need for an agent key. However, it does not describe error conditions (e.g., exceeding limit, invalid URL) or return values, leaving some behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences conveying purpose, constraints, and requirements. It wastes no words and is front-loaded with the key action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 parameters, no output schema), the description is fairly complete. It covers the purpose, a limit, and an authentication requirement. It could optionally mention return values, but it is adequate for a straightforward registration tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage with descriptions for both parameters. The description does not add further meaning beyond what the schema states, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Register') and the resource ('webhook URL') with the purpose ('to receive payment notifications'). It differentiates from sibling tools like delete_webhook, list_webhooks, and test_webhook by focusing on creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides important usage constraints: 'Max 5 webhooks per agent' and 'REQUIRES AGENT KEY'. While it doesn't explicitly state when not to use, these guidelines help the agent understand limitations and prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rotate_api_keyA
Generate a new API key, invalidating the old one. For operators: triggers 60-min withdrawal cooldown. For agents: 30-min cooldown.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | No | Agent ID (operators only). Omit to rotate operator key. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It transparently states the key invalidation, generation, and cooldown triggers. It also clarifies the optional parameter's role. No contradictions; the behavioral impact is well-disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action, then specific cooldown details. Every word is necessary and earns its place. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description should ideally mention what the tool returns (e.g., the new key). It describes the action and cooldowns but omits any response format or confirmation, leaving a gap for agent decision-making.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already explains the parameter. The tool description adds cooldown context but does not enhance understanding of the parameter itself. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool generates a new API key and invalidates the old one. It differentiates between operator and agent cooldowns, but does not explicitly distinguish from sibling tools like 'set_operator_key' which might set a key without rotation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides implicit usage context by detailing cooldown durations for operators vs agents, and the parameter description notes 'operators only' for agent_id. However, it lacks explicit guidance on when to use this tool versus alternatives, and does not state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_agent_credentialsA
Switch to an agent API key for subsequent requests. Use to operate as a specific agent after creating it.
| Name | Required | Description | Default |
|---|---|---|---|
| api_key | Yes | The agent API key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description lacks details on side effects, idempotency, session persistence, or error behavior, which are critical for understanding the tool's full impact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-load the purpose with no unnecessary words or repetitions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple one-param tool, but lacks details on effects and error scenarios, making it moderately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and description adds no additional meaning beyond 'The agent API key'. Baseline of 3 applies as no extra value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool switches to an agent API key for subsequent requests and uses specific verbs and resources. It differentiates from sibling tools like create_agent and deactivate_agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies usage after creating an agent, providing clear context. However, it does not explicitly state when not to use it or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_budgetA
Set or update budget limit for an agent. REQUIRES OPERATOR KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | Agent ID to update | |
| budget_limit_sats | Yes | New budget limit in sats (0 for unlimited) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adds the operator key requirement but does not detail other behavioral aspects like idempotency, merging vs overriding, or error conditions, which would be helpful for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—two sentences with zero wasted words. The critical requirement is front-loaded, and every sentence adds value. This is a model of efficient communication.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (two parameters, no output schema, no annotations), the description covers the essential use case and the operator key requirement. It lacks details on return values or error scenarios, but these are not critical for a straightforward set operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers both parameters with full descriptions (100% coverage). The description adds no additional semantic value beyond what the schema provides, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Set or update budget limit') and the target resource ('an agent'), making the tool's purpose unambiguous. It distinguishes itself from sibling tools like get_budget_status, which is a read operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions a critical prerequisite ('REQUIRES OPERATOR KEY'), which guides the agent on when the tool can be used. However, it does not explicitly state when not to use it or provide alternatives for budget-related queries, leaving room for improvement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_nostr_identityA
Set a Nostr identity for the agent. Stores the private key and derives the public key. REQUIRES AGENT KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| private_key | Yes | 64-character hex Nostr private key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavioral traits like whether this operation is destructive (overwrites existing identity), irreversible, or requires specific permissions. It only states that it stores the key, leaving important side effects unspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: two sentences, no fluff. The first sentence states the purpose, the second adds a critical requirement. Every word is earned.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and lack of output schema or annotations, the description provides the core functionality but omits return value information (e.g., whether it returns the public key) and whether the operation is idempotent. It is minimally adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides a clear description for the single parameter 'private_key'. The tool description adds the context that the key is stored and used to derive the public key, but this does not significantly enhance the schema's clarity, earning a baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Set a Nostr identity'), the resource ('for the agent'), and what it does ('Stores the private key and derives the public key'). This effectively distinguishes it from the sibling 'get_nostr_identity' which reads the identity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions a prerequisite ('REQUIRES AGENT KEY') but does not provide guidance on when to use this tool versus alternatives (e.g., when to set vs update), nor does it explain the consequences of calling it multiple times.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_operator_keyA
Switch to a different operator API key for subsequent requests. Use after register_operator to start using the new credentials.
| Name | Required | Description | Default |
|---|---|---|---|
| api_key | Yes | The operator API key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility. It states that subsequent requests will use the new key, but does not detail persistence, reversibility, or scope of 'subsequent requests'. More context on side effects or error conditions would improve transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, with the action front-loaded and no unnecessary words. It efficiently conveys purpose and usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with no output schema, the description covers purpose and usage. However, it lacks details on error handling, validation, or what happens with invalid keys, leaving some ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear parameter description in the schema. The tool description adds no additional meaning beyond the schema, meeting the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Switch to a different operator API key') and the scope ('for subsequent requests'), distinguishing it from siblings like register_operator and rotate_api_key by specifying it is used after registration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool ('Use after register_operator to start using the new credentials'), providing clear context. However, it does not mention when not to use it or discuss alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sweep_agentB
Sweep funds from agent back to operator balance. REQUIRES OPERATOR KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | Agent ID to sweep funds from | |
| amount_sats | Yes | Amount in sats (use large number for full balance) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Only discloses the operator key requirement. Does not mention side effects, destructiveness, reversibility, or failure conditions. Significant gaps remain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise single sentence plus a key requirement. No unnecessary words, well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Missing information on return values, potential errors, and implications of sweeping funds (e.g., irreversibility, audit trail). For a fund-moving tool, more context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already covers both parameters with descriptions (100% coverage). The description adds minimal extra meaning beyond the schema, so baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Sweep funds') and the resource ('from agent back to operator balance'), with a critical requirement noted. It distinguishes from sibling tools like transfer_to_agent or fund_agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Mentions that operator key is required but does not explicitly state when to use this tool over alternatives like transfer_to_agent or withdraw. The context is implied by name but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
test_webhookA
Send a test event to a webhook to verify it works. REQUIRES AGENT KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| webhook_id | Yes | ID of the webhook to test |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It indicates a side effect (sending event) and auth requirement but omits outcome details (e.g., whether success is indicated) or potential rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences with no wasted words: first sentence states action and purpose, second adds a critical precondition. Front-loaded and concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with no output schema, description is largely sufficient. Could optionally clarify that the test triggers the actual webhook endpoint, but core use case is clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% description coverage for webhook_id with clear description. Description adds no extra meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states action ('Send a test event') and resource ('webhook') with purpose ('to verify it works'). Distinguishes from sibling tools like register_webhook and delete_webhook.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Mentions requirement 'REQUIRES AGENT KEY' but provides no guidance on when to use versus alternatives like register_webhook or list_webhooks. No explicit exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transfer_to_agentB
Transfer sats between agents or from operator to agent. REQUIRES OPERATOR KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| from_agent_id | No | Source agent ID (omit to use operator balance) | |
| to_agent_id | Yes | Destination agent ID | |
| amount_sats | Yes | Amount to transfer |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses 'REQUIRES OPERATOR KEY' but omits other behavioral traits such as side effects, error handling, or whether the operation is reversible. No return value info is given.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence plus a brief requirement statement. Every word is functional, no fluff, and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 3 parameters, no output schema, and no annotations. The description covers the basic purpose and a key requirement but lacks details about return values, error conditions, or verification steps. It feels incomplete for a money-transfer action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (all parameters have descriptions). The tool description does not add new parameter information beyond what is in the schema, but the baseline of 3 is appropriate given the high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states: 'Transfer sats between agents or from operator to agent.' This is a specific verb+resource combination that distinguishes it from sibling tools like pay_invoice or keysend, which handle external payments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies internal agent-to-agent transfers but does not explicitly differentiate from alternatives (e.g., pay_invoice, keysend). It mentions a prerequisite (operator key) but lacks when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoamiA
Get current context - returns whether you are operating as an operator or agent, along with ID, name, and balance.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It explicitly states the tool returns contextual info (operator/agent role, ID, name, balance), indicating a read-only, non-destructive operation. This provides adequate behavioral transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with purpose, no wasted words. Highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given low complexity (no params, no output schema), the description sufficiently covers the tool's main function and return values. Lacks detail on format but is complete enough for a 'whoami' tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so baseline is 4. Description adds meaning beyond the empty schema by explaining what the tool does, which is essential for selection.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb 'Get' and resource 'current context', and specifies what is returned (operator/agent status, ID, name, balance). This distinguishes it from siblings like get_info or check_balance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies usage for checking identity and role but does not explicitly state when to use vs. alternatives or when not to use. With many sibling tools, this is a gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
withdrawA
Withdraw funds from operator account to external Lightning invoice. REQUIRES OPERATOR KEY. Subject to security cooldown.
| Name | Required | Description | Default |
|---|---|---|---|
| invoice | Yes | BOLT11 invoice to pay out to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the need for an operator key and a cooldown period, but does not mention return values, failure modes, or that it is a destructive action (funds leave the operator account).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences: first defines the action, second adds critical constraints. No superfluous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool, the description covers purpose and a key constraint, but lacks information on return values, error conditions, or behavior on success/failure. Some completeness is provided by the 'security cooldown' hint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter 'invoice', which is already well-described as 'BOLT11 invoice to pay out to'. The description adds no extra meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('withdraw funds'), the source ('operator account'), and destination ('external Lightning invoice'). It is specific and distinguishes from sibling tools like 'pay_invoice' and 'claim_lnurl_withdraw' via the 'operator account' qualifier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Only implicit guidance is provided via prerequisites ('REQUIRES OPERATOR KEY') and constraints ('Subject to security cooldown'). No explicit statement on when to use vs. alternatives or when not to use.
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. Dates show when Glama detected each change.
43 tool updates
v1.2.9- First observed
board_post - First observed
board_read - First observed
board_reply - First observed
board_vote - First observed
check_balance - First observed
claim_lnurl_withdraw - First observed
create_agent - First observed
create_invoice - First observed
create_withdraw_link - First observed
deactivate_agent - First observed
decode_invoice - First observed
delete_agent - First observed
delete_webhook - First observed
fund_agent - First observed
get_budget_status - First observed
get_deposit_invoice - First observed
get_info - First observed
get_invoice_status - First observed
get_nostr_identity - First observed
get_rate_limits - First observed
get_transactions - First observed
keysend - First observed
list_agents - First observed
list_webhooks - First observed
lnurl_auth - First observed
nostr_zap - First observed
pay_invoice - First observed
pay_l402_api - First observed
pay_lightning_address - First observed
reactivate_agent - First observed
recover_account - First observed
register_operator - First observed
register_webhook - First observed
rotate_api_key - First observed
set_agent_credentials - First observed
set_budget - First observed
set_nostr_identity - First observed
set_operator_key - First observed
sweep_agent - First observed
test_webhook - First observed
transfer_to_agent - First observed
whoami - First observed
withdraw
TDQS
Most tools have distinct purposes, but there is some overlap and ambiguity. For example, 'fund_agent', 'transfer_to_agent', and 'sweep_agent' all involve moving funds between operator and agent, which could confuse an agent about which to use. Additionally, 'pay_invoice', 'pay_lightning_address', and 'keysend' are all payment methods with subtle distinctions that might not be immediately clear from the names alone.
The naming is mostly consistent with a verb_noun pattern (e.g., 'create_invoice', 'get_balance', 'list_agents'), but there are minor deviations like 'whoami' (which is a common command but breaks the pattern) and 'lnurl_auth' (which uses an abbreviation inconsistently). Overall, the conventions are readable and predictable, with only a few outliers.
With 43 tools, the count is excessive for a Lightning wallet server, making it feel heavy and potentially overwhelming. A typical wallet might have 10-20 tools for core operations; this includes many niche or administrative functions (e.g., multiple board tools, webhook management, agent lifecycle) that could be consolidated or omitted without losing essential functionality.
The tool surface is highly complete for the domain, covering all core Lightning wallet operations (e.g., payments, invoices, balance checks) and extensive administrative features (e.g., agent management, webhooks, Nostr integration). There are no obvious gaps; it supports CRUD/lifecycle for agents, payments, and integrations, ensuring agents can handle most workflows without dead ends.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Pay-per-action access to APIs and MCP tools over Lightning L402 and Base USDC x402.
L402 MCP: 5 paid BTC/Lightning tools + fiat credits, 10-25 sats/call.
Bitcoin intelligence API. Pay per call via L402 Lightning (10-200 sats). No accounts needed.
Wallet and payments for AI agents: auto-pay x402 APIs in USDC on XDC, within on-chain limits.
Related MCP Servers
- AlicenseBqualityFmaintenanceEnables interaction with lightning addresses and common lightning tools via your LLM, providing Lightning Network functionality through natural language.3211MIT
- AlicenseNot gradedqualityDmaintenanceEnables Bitcoin Lightning wallet integration with LLMs through Nostr Wallet Connect (NWC). Supports lightning payments, LNURL operations, and L402 authentication for AI-powered bitcoin transactions.30Apache 2.0
- AlicenseAqualityDmaintenanceEnables AI agents to perform Bitcoin and Lightning Network payments using a non-custodial, zero-trust architecture. It provides 13 tools for wallet management, invoice creation, and payment processing while keeping node credentials local to the user's machine.1317MIT
- AlicenseAqualityBmaintenanceMCP server that enables AI agents to make autonomous Bitcoin Lightning Network payments using the L402 protocol. Agents can pay for API access, purchase resources, and complete transactions without human intervention — invoice comes in, sats go out, done.179MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/lightningfaucet/lightning-wallet-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server