Skip to main content
Glama

Sats4AI - Bitcoin-Powered AI Tools

create_payment

Create a Lightning invoice to pay for one AI service call. Returns JSON: { paymentId, invoice (BOLT11), amount (sats), expiresAt }. Each payment covers exactly one tool call — call this once per operation. Typical flow: list_models → create_payment → check_payment_status → call tool. The invoice expires in 10 minutes. Call list_models first to discover modelId values. modelId is optional — omit it to use the default (best) model. Some tools require extra params at payment time because pricing depends on them: generate_text requires prompt (price = f(char count)); text_to_speech requires text (price = f(char count) by tier); transcribe_audio / transcribe_translate take durationMinutes (10 sats/min — declare your audio length, default 1); send_sms, place_call, ai_call require phoneNumber; generate_video and animate_image require duration, and take an optional resolution (250-400 sats/sec by resolution — quote with the SAME duration and resolution you will execute with); edit_image is a flat 200 sats per edit (resolution is optional and does not change the price); epub_to_audiobook requires characterCount (total text characters in the book — price is per-character by voice tier, minimum 500 sats). If required params are missing, the response includes an error with the missing field names.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
ocrNoFor receive_fax: include the OCR text-extraction add-on (+200 sats). Must be set HERE at payment time — receive_fax refuses ocr=true at execution unless the charge covered it.
modeNoLegacy alias for generate_video: 'standard'→768p, 'pro'→2K. Prefer 'resolution'.
textNoRequired for text_to_speech: the exact text to synthesize (price is per-character by tier, locked to payment)
promptNoRequired for generate_text: the exact prompt (price calculated from char count, locked to payment)
messageNoRequired for send_sms: message text (max 1544 chars; billed per SMS segment, so longer or accented messages cost more)
modelIdNoOptional. AI model ID from list_models. Omit for default (best) model.
durationNoRequired for generate_video / animate_image: duration in seconds (5-15)
quantityNoUnits to pay for when the price scales: passes for boardingpass_wallet, pages for extract_document / extract_receipt / send_fax. Default 1 — under-counting is rejected at execution with the exact price to re-pay.
toolNameYesTool name to pay for (e.g., 'generate_text', 'generate_image', 'generate_video', 'send_sms', 'place_call')
resolutionNo768p (default) or 2K for generate_video / animate_image — priced by resolution × duration, native audio free; 2K is upscaled from a 768p render. 480p/720p/1080p are retired Seedance rungs, still accepted (480p/720p→768p, 1080p→2K). For edit_image: a flat 200 sats per edit, so resolution does not change the price.
fileContextNoFor generate_text: include extracted file text if attaching a file (affects price)
phoneNumberNoRequired for send_sms and place_call: phone in E.164 format (e.g., +14155550100)
systemPromptNoFor generate_text: include if using a custom system prompt (affects price)
characterCountNoRequired for epub_to_audiobook: total text characters in the book (price is per-character by voice tier, minimum 500 sats). Send the count, not the book — the file goes to epub_to_audiobook itself. Execution re-derives the price from the real file and rejects a short-pay with the exact amount to re-pay.
generate_audioNoAccepted and IGNORED — H3 audio is native and always on, at no extra cost. There is no way to request a silent render.
durationMinutesNoMinutes of audio/call. Required for place_call with audioUrl (1-30); for transcribe_audio / transcribe_translate it sets the per-minute price (10 sats/min) — declare your audio length (default 1). Audio longer than paid is rejected + refunded at execution.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / resolution / description
      Previous value: -"768p (default) or 2K for generate_video / animate_image — priced by resolution × duration, native audio free; 2K is upscaled from a 768p render. 480p/720p/1080p are retired Seedance rungs, still accepted (480p/720p→768p, 1080p→2K). For edit_image: flat 200 sats at any size, so resolution does not change the price."New value: +"768p (default) or 2K for generate_video / animate_image — priced by resolution × duration, native audio free; 2K is upscaled from a 768p render. 480p/720p/1080p are retired Seedance rungs, still accepted (480p/720p→768p, 1080p→2K). For edit_image: a flat 200 sats per edit, so resolution does not change the price."
  2. Changed1 schema field changed
    • changedInput schema / properties / resolution / description
      Previous value: -"768p (default) or 2K for generate_video / animate_image — priced by resolution × duration, native audio free; 2K is upscaled from a 768p render. 480p/720p/1080p are retired Seedance rungs, still accepted (480p/720p→768p, 1080p→2K). For edit_image: 1K=200, 2K=300, 4K=450 sats."New value: +"768p (default) or 2K for generate_video / animate_image — priced by resolution × duration, native audio free; 2K is upscaled from a 768p render. 480p/720p/1080p are retired Seedance rungs, still accepted (480p/720p→768p, 1080p→2K). For edit_image: flat 200 sats at any size, so resolution does not change the price."
  3. Changed1 schema field changed
    • changedInput schema / properties / generate_audio / description
      Previous value: -"For generate_video / animate_image: include native audio (default: false). Free — no surcharge."New value: +"Accepted and IGNORED — H3 audio is native and always on, at no extra cost. There is no way to request a silent render."
  4. Changed1 schema field changed
    • removedInput schema / properties / styleModel
      Removed value: -{
      -  "description": "style_transfer ONLY — quality tier, and it SETS THE PRICE (fast 15, realistic 20, cinematic 35, high-quality 35, animated 45 sats). Omit for fast. Quote the same tier you intend to run or execution will refuse the short-pay.",
      -  "enum": [
      -    "fast",
      -    "realistic",
      -    "cinematic",
      -    "high-quality",
      -    "animated"
      -  ],
      -  "type": "string"
      -}
  5. Changed1 schema field changed
    • addedInput schema / properties / styleModel
      Added value: +{
      +  "description": "style_transfer ONLY — quality tier, and it SETS THE PRICE (fast 15, realistic 20, cinematic 35, high-quality 35, animated 45 sats). Omit for fast. Quote the same tier you intend to run or execution will refuse the short-pay.",
      +  "enum": [
      +    "fast",
      +    "realistic",
      +    "cinematic",
      +    "high-quality",
      +    "animated"
      +  ],
      +  "type": "string"
      +}
  6. Changed4 schema fields changed
    • changedInput schema / properties / duration / description
      Previous value: -"Required for generate_video / animate_image: duration in seconds (4-15)"New value: +"Required for generate_video / animate_image: duration in seconds (5-15)"
    • changedInput schema / properties / mode / description
      Previous value: -"Legacy alias for generate_video: 'standard'→720p, 'pro'→1080p. Prefer 'resolution'."New value: +"Legacy alias for generate_video: 'standard'→768p, 'pro'→2K. Prefer 'resolution'."
    • changedInput schema / properties / resolution / description
      Previous value: -"480p / 720p / 1080p for generate_video (default 1080p) and animate_image (default 720p) — priced by resolution × duration, native audio free. For edit_image: 1K=200, 2K=300, 4K=450 sats."New value: +"768p (default) or 2K for generate_video / animate_image — priced by resolution × duration, native audio free; 2K is upscaled from a 768p render. 480p/720p/1080p are retired Seedance rungs, still accepted (480p/720p→768p, 1080p→2K). For edit_image: 1K=200, 2K=300, 4K=450 sats."
    • changedInput schema / properties / resolution / enum
      Previous value: -[
      -  "480p",
      -  "720p",
      -  "1080p",
      -  "1K",
      -  "2K",
      -  "4K"
      -]New value: +[
      +  "768p",
      +  "2K",
      +  "480p",
      +  "720p",
      +  "1080p",
      +  "1K",
      +  "4K"
      +]
  7. Changed1 schema field changed
    • changedInput schema / properties / message / description
      Previous value: -"Required for send_sms: message text (max 126 chars)"New value: +"Required for send_sms: message text (max 1544 chars; billed per SMS segment, so longer or accented messages cost more)"
  8. Changed2 schema fields changed
    • addedInput schema / properties / characterCount
      Added value: +{
      +  "description": "Required for epub_to_audiobook: total text characters in the book (price is per-character by voice tier, minimum 500 sats). Send the count, not the book — the file goes to epub_to_audiobook itself. Execution re-derives the price from the real file and rejects a short-pay with the exact amount to re-pay.",
      +  "type": "number"
      +}
    • addedInput schema / properties / ocr
      Added value: +{
      +  "description": "For receive_fax: include the OCR text-extraction add-on (+200 sats). Must be set HERE at payment time — receive_fax refuses ocr=true at execution unless the charge covered it.",
      +  "type": "boolean"
      +}
  9. Changed1 schema field changed
    • addedInput schema / properties / quantity
      Added value: +{
      +  "description": "Units to pay for when the price scales: passes for boardingpass_wallet, pages for extract_document / extract_receipt / send_fax. Default 1 — under-counting is rejected at execution with the exact price to re-pay.",
      +  "type": "number"
      +}
  10. Changed1 schema field changed
    • changedInput schema / properties / resolution / description
      Previous value: -"For generate_video / animate_image: 480p / 720p (default) / 1080p — priced by resolution × duration, native audio free. For edit_image: 1K=200, 2K=300, 4K=450 sats."New value: +"480p / 720p / 1080p for generate_video (default 1080p) and animate_image (default 720p) — priced by resolution × duration, native audio free. For edit_image: 1K=200, 2K=300, 4K=450 sats."
  11. First observed

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description carries the full behavioral burden and does so: 10-minute invoice expiry, one-payment-per-call semantics, price locking at payment time, and the enforcement rule that under-payment is rejected at execution (sometimes with refund). These are exactly the traits an agent cannot infer from the schema alone.

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

Conciseness4/5

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

Front-loaded with purpose, return shape, and flow before descending into the per-tool pricing table. It is long, and the pricing details partially duplicate the 100%-covered schema descriptions, but nearly every sentence conveys a constraint the agent must respect.

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

Completeness5/5

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

For a 16-parameter payment tool with no output schema, the description supplies the return shape ({ paymentId, invoice, amount, expiresAt }), the lifecycle sequencing, and the pricing/enforcement model. An agent has enough to call it correctly without further exploration.

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

Parameters4/5

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

Schema coverage is already 100%, so the baseline is 3, but the description adds genuine semantic value: modelId is optional with a default, quantity defaults to 1 and under-counting is rejected, and per-tool required params (prompt, text, phoneNumber, characterCount, durationMinutes) are tied to pricing formulas. It stops short of explaining every one of the 16 params (e.g. fileContext, generate_audio behavior is left to the schema).

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

Purpose5/5

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

The first sentence names a specific verb and resource ('Create a Lightning invoice') and states its exact scope: paying for one AI service call. That scope cleanly separates it from sibling cost/estimate tools (get_cost_estimate, get_model_pricing) and from the actual work tools it fronts.

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

Usage Guidelines5/5

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

Gives an explicit ordering ('list_models → create_payment → check_payment_status → call tool'), the cardinality rule ('call this once per operation'), and a per-tool map of which extra params must be supplied at payment time. It also names the failure mode when required params are missing.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.