Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Sats4AI - Bitcoin-Powered AI Tools

REMOTE · SATS4AI.COM · 2 COMPONENTS · SCANNED SEP 20

40+ Lightning-paid AI tools for agents: calls, SMS, fax, voice, translation. No signup, no keys.

−1 this week 79 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security63
Transport & Reachability100
Schema Quality & AI Usability75
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 20562 tokens (~342/item across 60 items; 57 tools + 3 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management98
  • Stability check failed: schema churn in the 30 days we've observed: 0 tool removals, 2 breaking changes, 0 auth/transport breaks, 3 additions. See how to fix → Fail
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
Tool Safety84
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 3 of 8 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "merge_pdfs" implies "merge" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Partial
  • An AI judge read all 59 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
Install

How do I install the Sats4AI - Bitcoin-Powered AI Tools MCP server?

Sats4AI - Bitcoin-Powered AI Tools is a hosted endpoint at https://sats4ai.com/api/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · sats4ai.com

# add to Claude Code
claude mcp add --transport http cnghockey-sats4ai 'https://sats4ai.com/api/mcp'
// .cursor/mcp.json
{
  "mcpServers": {
    "cnghockey-sats4ai": {
      "url": "https://sats4ai.com/api/mcp"
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "cnghockey-sats4ai": {
      "type": "http",
      "url": "https://sats4ai.com/api/mcp"
    }
  }
}
# ~/.codex/config.toml
[mcp_servers.cnghockey-sats4ai]
url = "https://sats4ai.com/api/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "cnghockey-sats4ai": {
      "type": "remote",
      "url": "https://sats4ai.com/api/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add cnghockey-sats4ai --url 'https://sats4ai.com/api/mcp' --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  cnghockey-sats4ai:
    url: "https://sats4ai.com/api/mcp"
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "cnghockey-sats4ai": {
      "Transport": "http",
      "Url": "https://sats4ai.com/api/mcp"
    }
  }
}
# add to Vellum
assistant mcp add cnghockey-sats4ai -t streamable-http -u 'https://sats4ai.com/api/mcp'
// mcp.json
{
  "mcpServers": {
    "cnghockey-sats4ai": {
      "type": "http",
      "url": "https://sats4ai.com/api/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 17 Sept 26 0
    • Tool “send_sms” rewrote its description, which is the text the model reads security
    • Tool “place_call” rewrote its description, which is the text the model reads security
    • Tool “ai_call” rewrote its description, which is the text the model reads security
    • “send_email” reworded the description of “paymentId” cosmetic
  • 15 Sept 26 −1
    • A breaking change shipped without a version bump: still 1.0.0 security
    • Tool “clone_voice” rewrote its description, which is the text the model reads security
    • “clone_voice” added a required parameter “consent”, so existing callers break functional
  • 14 Sept 26 0
    • Stability: pass → fail security
    • A breaking change shipped without a version bump: still 1.0.0 security
    • Tool “generate_text” rewrote its description, which is the text the model reads security
    • “get_model_pricing” changed the type of “modelId”: number → number|string functional
    • “get_model_pricing” reworded the description of “modelId” cosmetic
  • 13 Sept 26 0
    • Tool “clone_voice” rewrote its description, which is the text the model reads security
    • “clone_voice” reworded the description of “voiceFileUrl” cosmetic
  • 11 Sept 26 0
    • Tool “text_to_speech” rewrote its description, which is the text the model reads security
    • Tool “epub_to_audiobook” rewrote its description, which is the text the model reads security
    • “text_to_speech” reworded the description of “modelId” cosmetic
  • 10 Sept 26 0
    • Tool “epub_to_audiobook” rewrote its description, which is the text the model reads security
    • Tool “generate_music” rewrote its description, which is the text the model reads security
    • Tool “text_to_speech” rewrote its description, which is the text the model reads security
    • “generate_music” added an optional parameter “duration” cosmetic
    • “generate_music” added an optional parameter “lyricsAbout” cosmetic
    • “generate_music” added an optional parameter “lyricsAddon” cosmetic
    • “generate_music” reworded the description of “lyrics” cosmetic
    • “text_to_speech” reworded the description of “modelId” cosmetic
    • “text_to_speech” reworded the description of “voice” cosmetic
    • “generate_music” dropped the optional parameter “audio_format” cosmetic
    • “generate_music” dropped the optional parameter “bitrate” cosmetic
    • “generate_music” dropped the optional parameter “is_instrumental” cosmetic
    • “generate_music” dropped the optional parameter “lyrics_optimizer” cosmetic
    • “generate_music” dropped the optional parameter “sample_rate” cosmetic
  • 9 Sept 26 0
    • Tool “ai_call” rewrote its description, which is the text the model reads security
    • Tool “place_call” rewrote its description, which is the text the model reads security
    • Tool “send_sms” rewrote its description, which is the text the model reads security
    • “send_email” reworded the description of “paymentId” cosmetic
    • “place_call” reworded the description of “message” cosmetic
    • “send_sms” reworded the description of “message” cosmetic
  • 5 Sept 26 0
    • Tool “epub_to_audiobook” rewrote its description, which is the text the model reads security
    • Tool “convert_file” rewrote its description, which is the text the model reads security
    • Tool “generate_music” rewrote its description, which is the text the model reads security
    • Tool “text_to_speech” rewrote its description, which is the text the model reads security
    • The server now declares the “prompts” capability functional
    • New prompt “make_narrated_video” functional
    • New resource “Recipe: a narrated video from nothing” functional
    • New tool “render_card” functional
    • “transcribe_audio” added an optional parameter “callback_id” cosmetic
    • “transcribe_audio” added an optional parameter “callback_url” cosmetic
    • “transcribe_audio” added an optional parameter “diarize” cosmetic
    • “transcribe_audio” added an optional parameter “timestamps” cosmetic
    • “text_to_speech” reworded the description of “modelId” cosmetic
    • “text_to_speech” reworded the description of “voice” cosmetic
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Probed https://sats4ai.com/api/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_256_GCM_SHA384 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=sats4ai.com CN=YE2,O=Let's Encrypt,C=US 9 Sept 2026 8 Dec 2026 ECDSA 256 ECDSA-SHA384 53923e08a91237e89a241aa8ba7b19836b2
SANs: sats4ai.com, www.sats4ai.com
CN=YE2,O=Let's Encrypt,C=US (CA) CN=Root YE,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 ECDSA 384 ECDSA-SHA384 4df3b15dd6c0784c507cd37b58e6f115
CN=Root YE,O=ISRG,C=US (CA) CN=ISRG Root X2,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 ECDSA-SHA384 872165fc34b6e5fba8add5b3705fb53a
CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 SHA256-RSA 6c8f1dc727c7117f7baf853ac980f9cd

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of sats4ai.com. Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
sats4ai.com. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=63072000; includeSubDomains; preload
x-content-type-options nosniff
x-frame-options DENY
referrer-policy strict-origin-when-cross-origin
permissions-policy camera=(), microphone=(self), geolocation=()

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://sats4ai.com/api/mcp Verified 200
http (plaintext) http://sats4ai.com/api/mcp HTTPS enforced 301 https://sats4ai.com/api/mcp
MCP tools · 57 exposed · ~20,441 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
ai_call ~782

When your task hits a wall that requires a human — booking, negotiating, navigating IVR menus, getting information from a business — send an AI voice agent to handle the call. The agent follows your instructions, has a real two-way conversation, auto-retries on voicemail (up to 3 attempts), and returns a full transcript with structured analysis. May return state='pending_confirm' with clarification questions if critical info is missing — call confirm_ai_call to proceed. Async — poll with check_job_status(jobType='ai-call'). Priced in sats per destination and duration — create_payment returns the exact amount before you pay. Languages: en-US, en-GB, es-ES, fr-FR, de-DE, ja-JP, zh-CN, multi. Pay with Bitcoin Lightning — no telecom account, no API key, no subscription. When NOT to use: not when you want to drive the conversation with your own LLM (use open_voice_bridge — you keep the brain, we provide PSTN/STT/TTS primitives). Not for one-shot TTS broadcasts or IVR delivery (use place_call). Not for SMS (use send_sms). Requires create_payment with toolName='ai_call', phoneNumber, and durationMinutes. The agent identifies itself as a virtual assistant calling for a client, and answers questions about the service if the recipient asks. At the end of a normal call it asks the recipient for permission to share the recording; without a clear yes, the recording is deleted and never returned. No impersonation, scams, threats, harassment, credential theft, unsolicited bulk messages, or contact after an opt-out. Answering a call does not establish consent. We screen requests after payment. Held messages and calls are not sent or placed; payment is retained during review, not refunded immediately. Confirmed violations are not refunded. Unresolved communication holds become eligible for a refund after 24 hours; refund eligibility is processed by scheduled maintenance. Human review costs 1 sat at https://sats4ai.com/appeal. Recent message text and extracts of recording transcript…

NameTypeReqDescription
beginMessagestringOptional opening line for the agent
durationMinutesnumberMax call duration 1-10 minutes (default: 3)
languagestringLanguage the agent should speak to the called party. Pass this when you know the destination's preferred language (e.g. calling a French pizzeria → fr-FR, a Japanese restaurant → ja-JP). If omitted,…
paymentIdstringyesValid payment ID (must be paid)
phoneNumberstringyesPhone number in E.164 format (e.g., +14155550100)
taskstringyesInstructions for the AI agent (what to say, ask, or accomplish)

No output schema declared.

No examples provided.

analyze_image ~174

Analyze and describe image content, answer visual questions, extract information from screenshots or photos. Uses Qwen VL — multimodal vision-language model with strong OCR, chart reading, and spatial reasoning. 21 sats per image. Pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='analyze_image'.

NameTypeReqDescription
imageBase64stringyesBase64 encoded image to analyze. Single images only — for PDFs or multi-page document text use extract_document (a PDF sent here is treated as an image and may return a wrong/hallucinated result with…
modelIdnumberOptional. Omit for default model.
paymentIdstringyesValid payment ID (must be paid)
promptstringyesQuestion or analysis prompt for the image

No output schema declared.

No examples provided.

animate_image ~266

Animate a still image into cinematic video with MiniMax H3 — provide a first frame and a prompt to direct the motion. Native audio. Async — returns requestId, poll with check_job_status. 768p or 2K (2K is upscaled from a 768p render), duration 5-15 seconds, priced per second by resolution. Pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='animate_image'.

NameTypeReqDescription
durationnumberyesDuration in seconds (5-15)
imageBase64stringyesBase64 encoded image to animate
modelIdnumberOptional. Omit for default model.
paymentIdstringyesValid payment ID (must be paid)
promptstringyesText prompt describing the animation
resolutionstringOutput resolution: 768p or 2K (2K is upscaled from a 768p render). Omitting it yields 768p — if you quoted 2K at create_payment, send it here too or you will be billed 2K and rendered 768p. Retired r…

No output schema declared.

No examples provided.

await_result ~204

Wait for an async job to finish and return its result in ONE call — no manual polling loop. Pass the requestId + jobType from an async tool (generate_video, animate_image, generate_3d_model, transcribe_audio, epub_to_audiobook, ai_call). If your MCP client opened the request with 'Accept: text/event-stream', this streams live progress (notifications/progress) while it waits, then returns the final result; otherwise it does a single status check and returns immediately (call again until status='COMPLETED'). For long jobs it waits up to ~4 minutes per call, then returns status='IN_PROGRESS' with timed_out=true — call again with the same requestId to keep waiting. Equivalent to check_job_status + get_job_result combined. Free; no payment.

NameTypeReqDescription
jobTypestringyesMust match the async tool that returned requestId.
requestIdstringyesThe requestId returned by the async tool.

No output schema declared.

No examples provided.

boardingpass_wallet ~279

Turn airline boarding passes (PDF or screenshot) into Google Wallet passes with the fields a plain scan drops — boarding zone, gate, boarding time — for a whole family in one go. Returns one save link per passenger plus a single 'add all' link. The original barcode is preserved byte-for-byte so it scans at the gate. Priced 100 sats PER PASS: create_payment with toolName='boardingpass_wallet' and quantity=<number of passes> (if you under-count, the call returns the exact price to re-pay). Image/screenshot files that turn out to carry no extra fields are refunded. Privacy: files are processed in memory and never stored; the save link expires in 30 minutes, so nothing is retained. Pay with Bitcoin Lightning — no account, no card.

NameTypeReqDescription
documentBase64stringBase64 boarding pass PDF or screenshot (max 8MB). Single-file convenience form. Must contain a readable BCBP barcode — a blurry photo or non-boarding-pass is refunded, not converted.
documentsarrayBase64 boarding passes, one per file (up to 8), for a family/booking. Provide this OR documentBase64 (at least one required).
paymentIdstringyesValid payment ID (must be paid). Price = 100 × number of passes.

No output schema declared.

No examples provided.

check_job_status ~304

Poll the status of an async job. Use this after calling any async tool (generate_video, animate_image, generate_3d_model, transcribe_audio, epub_to_audiobook, ai_call) that returns a requestId. Returns JSON: { status: 'IN_PROGRESS' | 'COMPLETED' | 'FAILED', requestId, jobType }. For epub-audiobook, also includes progress (0-100) and chapterProgress array. Poll every 5-10 seconds. When status is 'COMPLETED', call get_job_result to retrieve the output. When status is 'FAILED', the response includes an error message — do not retry automatically. This tool is free and does not require payment. Do NOT use for synchronous tools (generate_image, generate_text, etc.) — those return results immediately.

NameTypeReqDescription
jobTypestringyesMust match the async tool: video=generate_video, video-image=animate_image, image-3d=generate_3d_model, transcription=transcribe_audio, epub-audiobook=epub_to_audiobook, ai-call=ai_call. video-fal-st…
requestIdstringyesThe requestId returned by the async tool (e.g., from generate_video, animate_image, generate_3d_model, transcribe_audio, epub_to_audiobook, ai_call)

No output schema declared.

No examples provided.

check_payment_status ~134

Check whether a Lightning invoice has been paid. Returns JSON: { paid, serviceUsed, refundAllowed, readyToUse, next } — readyToUse=true means paid, not yet consumed, and no refund queued; next says what to do. Call after create_payment to verify the user has paid before calling the target tool. Invoices expire after 10 minutes — if expired, create a new payment. Most MCP clients with a connected wallet pay instantly, so a single check is usually sufficient. This tool is free and does not require payment.

NameTypeReqDescription
paymentIdstringyesThe paymentId returned by create_payment

No output schema declared.

No examples provided.

clone_voice ~302

Clone a voice you own or have permission to use, from a single audio sample. Returns a reusable voice_id for text_to_speech. Requires consent=true; cloning a voice to impersonate someone is prohibited. High-fidelity reproduction capturing tone, cadence, and accent. SAMPLE REQUIREMENTS: MP3, M4A or WAV, 10 seconds to 5 minutes, 20 MB max, one speaker, no background music — a sample outside these limits is rejected upstream and the clone fails. Turbo (faster) or HD (higher quality) modes. 7,500 sats per clone. Pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='clone_voice'.

NameTypeReqDescription
accuracynumberText validation accuracy 0-1 (default 0.7)
consentbooleanyesRequired. Set true to attest that you own this voice or have the speaker's permission to clone it. Cloning a voice to impersonate someone is prohibited (sats4ai.com/terms).
modelstringVoice model: turbo (faster) or hd (higher quality)
paymentIdstringyesValid payment ID (must be paid)
voiceFileUrlstringyesPublic URL to audio file of the voice to clone. MP3, M4A or WAV, 10 seconds to 5 minutes, 20 MB max. One speaker, no background music.

No output schema declared.

No examples provided.

colorize_image ~148

Colorize black-and-white or grayscale photos. DDColor (dual-decoder, ICCV 2023) — vivid, natural colorization. Impossible for text/vision LLMs. 5 sats per image, pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='colorize_image'.

NameTypeReqDescription
imageBase64stringyesBase64-encoded grayscale or B&W image (PNG, JPEG) or data URI
model_sizestringModel variant: 'large' (best quality) or 'tiny' (faster). Default: large
paymentIdstringyesValid payment ID (must be paid)

No output schema declared.

No examples provided.

confirm_ai_call ~111

Confirm an AI call after reviewing push-back questions, optionally providing answers to missing info. Required when ai_call returns state='pending_confirm'. Uses the original payment — no new payment needed. Returns call_id for polling with check_job_status(jobType='ai-call').

NameTypeReqDescription
answersobjectKey-value answers to the push-back questions (keys are the question strings, values are your answers). Omit to confirm the task as-is.
sessionIdstringyesSession ID from the ai_call response

No output schema declared.

No examples provided.

convert_file ~220

Convert files between 200+ formats: documents (PDF, DOCX, XLSX, HTML→PDF), images (PNG, JPG, WEBP, SVG), PDF first page to image (PDF→JPG, PDF→PNG), audio (MP3, WAV, FLAC), video (MP4, AVI, MOV). Industrial-grade conversion engine — preserves formatting and quality. Returns download URL. 100 sats. Pay per request with Bitcoin Lightning — no API key, no account, no subscription needed. Requires create_payment with toolName='convert_file'.

NameTypeReqDescription
extensionFromstringyesSource format without dot (e.g., 'pdf', 'docx')
extensionTostringyesTarget format without dot (e.g., 'pdf', 'docx')
fileBase64stringBase64-encoded file (provide this OR fileUrl)
fileUrlstringPublic URL to the file (provide this OR fileBase64)
paymentIdstringyesValid payment ID (must be paid)

No output schema declared.

No examples provided.

convert_html_to_pdf ~172

Convert HTML or Markdown to a pixel-perfect PDF. Returns JSON: { url } — a temporary download URL (valid ~1 hour). Great for generating invoices, reports, receipts, or formatted documents programmatically. Supports full HTML/CSS including tables, images (base64 or URL), and inline styles. For Markdown input, set format='markdown'. 50 sats per conversion. Use convert_file instead for converting existing files between formats (e.g., DOCX→PDF). Pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='convert_html_to_pdf'.

NameTypeReqDescription
formatstringInput format (default: html)
htmlstringyesHTML or Markdown content to convert
paymentIdstringyesValid payment ID (must be paid)

No output schema declared.

No examples provided.

create_payment ~951

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 requires resolution (1K=200, 2K=300, 4K=450 sats); 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.

NameTypeReqDescription
characterCountnumberRequired 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. E…
durationnumberRequired for generate_video / animate_image: duration in seconds (5-15)
durationMinutesnumberMinutes 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). Au…
fileContextstringFor generate_text: include extracted file text if attaching a file (affects price)
generate_audiobooleanAccepted and IGNORED — H3 audio is native and always on, at no extra cost. There is no way to request a silent render.
messagestringRequired for send_sms: message text (max 1544 chars; billed per SMS segment, so longer or accented messages cost more)
modestringLegacy alias for generate_video: 'standard'→768p, 'pro'→2K. Prefer 'resolution'.
modelIdnumberOptional. AI model ID from list_models. Omit for default (best) model.
ocrbooleanFor 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.
phoneNumberstringRequired for send_sms and place_call: phone in E.164 format (e.g., +14155550100)
promptstringRequired for generate_text: the exact prompt (price calculated from char count, locked to payment)
quantitynumberUnits 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 pri…
resolutionstring768p (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 acce…
systemPromptstringFor generate_text: include if using a custom system prompt (affects price)
textstringRequired for text_to_speech: the exact text to synthesize (price is per-character by tier, locked to payment)
toolNamestringyesTool name to pay for (e.g., 'generate_text', 'generate_image', 'generate_video', 'send_sms', 'place_call')

No output schema declared.

No examples provided.

deblur_image ~209

Recover detail from camera-shake and accidental motion blur. NAFNet (ECCV 2022, SOTA on GoPro/SIDD benchmarks). Best for: handheld shake, bumped camera, whole-frame uniform blur. NOT effective for: intentional panning blur, bokeh/depth-of-field, or artistic motion effects. Also supports denoising (grainy/noisy photos). 110 sats per image (~2 min processing), pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='deblur_image'.

NameTypeReqDescription
imageBase64stringyesBase64-encoded blurry image (PNG, JPEG, WEBP) or data URI
paymentIdstringyesValid payment ID (must be paid)
task_typestring'Image Debluring (GoPro)' for camera shake (default), 'Image Debluring (REDS)' for video frame blur, 'Image Denoising' for grain/noise

No output schema declared.

No examples provided.

detect_nsfw ~129

Classify image safety (normal / suggestive / explicit). Falcons.ai NSFW detection — 100x cheaper and faster than asking an LLM. Returns classification label and boolean is_nsfw flag. Essential for content moderation pipelines. 2 sats per image, pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='detect_nsfw'.

NameTypeReqDescription
imageBase64stringyesBase64-encoded image (PNG, JPEG, WEBP) or data URI
paymentIdstringyesValid payment ID (must be paid)

No output schema declared.

No examples provided.

detect_objects ~202

Detect and locate objects in an image by name. Grounding DINO (open-set detector, ECCV 2024) — describe what to find in natural language, get bounding box coordinates and confidence scores. Structured pixel data agents can't get from vision LLMs. 5 sats per image, pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='detect_objects'.

NameTypeReqDescription
box_thresholdnumberConfidence threshold for detection boxes (0-1, default 0.25)
imageBase64stringyesBase64-encoded image (PNG, JPEG, WEBP) or data URI
paymentIdstringyesValid payment ID (must be paid)
querystringyesComma-separated object names to detect (e.g. 'cat, dog, person')
text_thresholdnumberConfidence threshold for text matching (0-1, default 0.25)

No output schema declared.

No examples provided.

e_signature ~249

Send a document out for legally binding e-signature and have the signed copy emailed back. Upload the PDF, name up to 3 signers, and give the email where the signed copy should land. Flat 1000 sats per document. The request is fulfilled through an established e-sign provider. The signed copy arrives once every signer has signed, so expect their turnaround — hours to days — not seconds. The API reply acknowledges the request; there is nothing to poll. Privacy: the PDF is processed in memory and never stored. Pay with Bitcoin Lightning — no account, no card. Requires create_payment with toolName='e_signature'.

NameTypeReqDescription
customerEmailstringyesYour email — the signed copy is sent here once everyone has signed.
documentBase64stringyesBase64-encoded PDF to be signed (a data: URI is accepted). Max 8MB. Must be a PDF.
notestringOptional note shown to the signers.
paymentIdstringyesValid payment ID (must be paid). Price = 1000 sats flat.
signersarrayyes1-3 signers, each with a name and email.

No output schema declared.

No examples provided.

edit_image ~198

Edit an image with natural language instructions. Uses Nano Banana 2 — understands context, handles object addition/removal, style transfer, and inpainting. Returns JSON with image URL. Resolution-tiered pricing: 1K=200 sats, 2K=300 sats, 4K=450 sats. Pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='edit_image' and resolution param.

NameTypeReqDescription
aspectRatiostringOutput aspect ratio (default: match_input_image)
imageBase64stringyesBase64 encoded image to edit
outputFormatstringOutput format
paymentIdstringyesValid payment ID (must be paid)
promptstringyesEditing instructions describing what to change
resolutionstringOutput resolution. 1K=200 sats, 2K=300 sats, 4K=450 sats

No output schema declared.

No examples provided.

end_voice_bridge ~55

Hang up a Voice Bridge call, finalize billing, and return a LNURL-withdraw refund link for unused deposit time. Also returns the final transcript for convenience.

NameTypeReqDescription
sessionIdstringyesSession ID from open_voice_bridge

No output schema declared.

No examples provided.

epub_to_audiobook ~583

Convert books (EPUB/PDF/TXT) to full audiobooks with automatic chapter detection, multi-voice narration, and optional translation to any language before narration. 3 voice tiers: OmniVoice Global (602+ langs, ~106 chars/sat), Inworld Premium (#1 ranked TTS ELO 1217, ~16 chars/sat), Minimax Studio (voice cloning from reference clip, ~5 chars/sat). Min 500 sats. Async — returns jobId, poll until completed (5-60+ min). Single payment, full outcome — no multi-step orchestration required. Pay with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='epub_to_audiobook'.

NameTypeReqDescription
epubBase64stringyesBase64-encoded book file (EPUB, PDF, or TXT)
fileNamestringyesOriginal filename with extension (e.g., 'mybook.epub', 'document.pdf', 'story.txt'). Required to detect format.
languagestringNarration language (e.g., English, Spanish, French). NOTE: on the default tier this only affects chapter titles / number expansion — the spoken language comes from the chosen voice. For non-English n…
modelIdnumberOptional. 3 voice tiers: OmniVoice Global (602+ langs), Inworld Premium (#1 ranked), Minimax Studio (voice clone). Omit for default.
paymentIdstringyesValid payment ID (must be paid)
selectedChapterIndicesarrayChapter indices to include (0-based). Omit to auto-select content chapters. NOTE: auto-select drops front/back matter heuristically and can silently exclude a short (<200 char) wanted chapter near th…
speednumberSpeech speed 0.5-2.0
translateToLanguagestringTranslate book to this language before narration. Accepts English names ('Spanish', 'Chinese (Simplified)') or ISO-639 codes / locale tags ('es', 'en-US', 'pt-BR'). Cost added to price.
voicestringVoice ID. Must belong to the resolved tier's own voice set — Minimax: English_expressive_narrator, Wise_Woman, Deep_Voice_Man; Inworld: Ashley, Abby. OMIT to get a valid default for whichever tier is…

No output schema declared.

No examples provided.

estimate_depth ~171

Estimate per-pixel depth from a single photo. Depth Anything V2 (NeurIPS 2024, 3.8M+ runs) returns BOTH the raw greyscale depth map — what a ControlNet, AR or 3D reconstruction pipeline consumes — and a colour visualization for humans. Structured geometry a vision LLM cannot produce. 5 sats per image, pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='estimate_depth'.

NameTypeReqDescription
imageBase64stringyesBase64-encoded image (PNG, JPEG, WEBP) or data URI
model_sizestringModel size — larger is more accurate, price is the same (default Large)
paymentIdstringyesValid payment ID (must be paid)

No output schema declared.

No examples provided.

extract_document ~132

Extract text from PDFs and images as clean Markdown. Uses Mistral OCR — handles complex layouts, tables, handwriting, multi-column documents, and mathematical notation. Preserves document hierarchy in structured Markdown. 10 sats/page. Pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='extract_document' and quantity=pageCount for multi-page PDFs.

NameTypeReqDescription
documentBase64stringyesBase64 encoded PDF or image
modelIdnumberOptional. Omit for default model.
paymentIdstringyesValid payment ID (must be paid)

No output schema declared.

No examples provided.

extract_receipt ~185

Extract structured data from receipts, invoices, and financial documents. Uses a dual-model pipeline (Mistral OCR + Kimi K3) for high-accuracy extraction. Returns JSON with merchant, date, line items, totals, tax, currency, and expense category. Handles crumpled receipts, faded text, and multi-page invoices. 25 sats/page. Pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='extract_receipt'.

NameTypeReqDescription
documentBase64stringyesBase64 encoded receipt/invoice image or PDF. NOTE: any text-bearing document is accepted — a non-receipt returns best-guess (possibly fabricated) merchant/total/line-item JSON with no error. Confirm…
paymentIdstringyesValid payment ID (must be paid)

No output schema declared.

No examples provided.

generate_3d_model ~201

Generate a textured 3D GLB model from EITHER a photo OR a text prompt (provide exactly one, not both). Uses Tencent Hunyuan3D — high-fidelity geometry and PBR materials. Async — returns requestId, poll with check_job_status. 1600 sats per model. Pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='generate_3d_model'.

NameTypeReqDescription
imageBase64stringBase64 encoded image (PNG, JPEG, or WEBP) for image-to-3D. Provide EITHER this OR prompt, not both.
modelIdnumberOptional. Omit for default model.
paymentIdstringyesValid payment ID (must be paid)
promptstringText description for text-to-3D (max 1024 chars). Provide EITHER this OR imageBase64, not both.

No output schema declared.

No examples provided.

generate_image ~218

Generate an image from a text prompt. Returns JSON with image URL. Models: Grok Imagine (fast creative generation, 100 sats), Seedream 4 (photorealistic detail, 150 sats), Nano Banana 2 (premium quality, 200 sats, default). Supports img2img with optional base64 input. Optional aspectRatio (default 1:1) works on every model tier and does not change the price. Stable endpoints — models upgrade automatically as SOTA evolves. Pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='generate_image'.

NameTypeReqDescription
aspectRatiostringOptional output shape, default 1:1. Same price for every shape.
imageBase64stringOptional base64 image for img2img generation
modelIdnumberOptional. Omit for default (best) model.
paymentIdstringyesValid payment ID (must be paid)
promptstringyesText prompt describing the image

No output schema declared.

No examples provided.

generate_music ~466

Generate a full song with AI vocals from a style prompt plus lyrics — or an INSTRUMENTAL bed / underscore (background music under video narration, intros, outros) by sending ONLY structure tags and no words. You choose the length: 15-300 seconds at 5 sats/second (75-1500 sats). Specify BPM, key, genre, mood in prompt. Returns a 44.1 kHz 16-bit stereo WAV URL. Structure tags must each be on their OWN line — words on a tag line are DROPPED by the model, which silently shortens the song. Don't want to write lyrics? Set lyricsAddon:true (+25 sats) and optionally lyricsAbout to say what they should be about. Pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='generate_music' AND the same duration (the price is bound to it).

NameTypeReqDescription
durationintegerSong length in seconds, 15-300. THE PRICE (5 sats/second) — must match the duration sent to create_payment. Default: 15
lyricsstringSong lyrics with section tags (up to 3,500 chars). Each tag on its OWN line, words on the lines after it — words sharing a line with a tag are dropped. Tags: [intro], [verse], [pre-chorus], [chorus],…
lyricsAboutstringOptional, with lyricsAddon: what the lyrics should be about. Omit and the subject is inferred from your music prompt.
lyricsAddonbooleanSet true to have the lyrics written for you (+25 sats, billed on the song's own invoice). Must also be sent to create_payment.
modelIdnumberOptional. Omit for default model.
paymentIdstringyesValid payment ID (must be paid)
promptstringyesMusic style with BPM, key, genre, mood, instruments (up to 2,000 chars). Example: 'E minor, 90 BPM, acoustic guitar ballad, male vocal'

No output schema declared.

No examples provided.

generate_text ~264

Generate text using frontier AI language models. Pure per-character pricing (no minimum): Kimi K3 (best, ~10 chars/sat, 1M context, default), GPT-OSS-120B (standard, ~1000 chars/sat, 119 languages, best value). Rates are BTC-pegged and re-quoted hourly, so treat them as approximate — the 402 challenge is the authoritative price. Supports document Q&A via fileContext. For images, use the analyze_image tool. Stable endpoints — models upgrade automatically. Pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='generate_text' and the exact prompt.

NameTypeReqDescription
fileContextstringExtracted file text to include as context
fileNamestringName of the attached file
imageBase64stringBase64 data URI for vision analysis (best model only)
maxTokensnumberMax tokens in response
modelIdnumberOptional. Omit for default (best) model.
paymentIdstringyesValid payment ID (must be paid)
promptstringyesThe text prompt or question
systemPromptstringOptional system prompt

No output schema declared.

No examples provided.

generate_video ~431

Generate cinematic video from a text prompt. Uses MiniMax H3 — top 2 on the Artificial Analysis text-to-video leaderboard — with native audio. Async — returns requestId, poll with check_job_status. 768p or 2K (2K is upscaled from a 768p render), 5-15 seconds, priced per second by resolution (native audio free). Pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='generate_video' and duration, resolution params.

NameTypeReqDescription
durationnumberyesDuration in seconds (5-15)
generate_audiobooleanAccepted and IGNORED — H3 audio is native and always on, at no extra cost. There is no way to request a silent render.
modelIdnumberOptional. Omit for default model.
paymentIdstringyesValid payment ID (must be paid)
promptstringyesText prompt describing the video
reference_audiostringOptional https URL(s) of reference audio CLIPS, 2-15 seconds each (max 3, combined <=15s). Cite them in your prompt as "Audio 1", "Audio 2" or the model has no instruction to use them. ⚠ Audio cannot…
reference_imagestringOptional https URL of a reference still for character/style consistency across shots (accepts an array, max 3). Pass the URL from generate_image. Free: does not change the price.
resolutionstringOutput resolution: 768p or 2K (2K is upscaled from a 768p render). Omitting it yields 768p — ask for 2K explicitly, and quote it at create_payment too. Retired rungs still accepted: 480p/720p→768p, 1…

No output schema declared.

No examples provided.

get_cost_estimate ~221

Get an exact sat cost quote for a service BEFORE creating a payment. Useful for budget-aware agents to price-check before committing. No payment required, no side effects. Pass service=text-to-speech&chars=1500, service=translate&chars=800, service=transcribe-audio&minutes=5, etc. Returns { amount_sats, breakdown, currency }. Omit params to see the full catalog of supported services.

NameTypeReqDescription
charsnumberCharacter count — required for TTS and translate
minutesnumberAudio length — required for transcribe-audio
modelstringOptional model id for services with multiple tiers
pagesnumberPage count — for OCR (default 1)
secondsnumberVideo duration — required for video / video-from-image
servicestringService id (e.g. 'text-to-speech', 'translate', 'image', 'video', 'transcribe-audio', 'ocr'). Omit to list all services.

No output schema declared.

No examples provided.

get_error_codes ~69

Get the machine-readable catalog of all error codes this API can return (e.g. TIMEOUT, CONTENT_FILTERED, RATE_LIMITED, L402_REFUND_ISSUED, L402_AUTO_ROUTED). Agents should branch on error_code rather than parsing free-text messages. No payment required.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_job_result ~295

Retrieve the final output of a completed async job. Call ONLY after check_job_status returns status='COMPLETED' — calling on a job that has not completed returns an error. Returns JSON whose shape depends on jobType: video/video-image → { videoUrl, duration }; image-3d → { modelUrl } (GLB format); transcription → { text, language, segments }; epub-audiobook → { url, annexeUrl, totalChapters, completedChapters } (annexeUrl is a companion PDF of equations, tables, addresses, keys and hashes the narration replaces with a spoken marker; null when the book had none); ai-call → { transcript, duration, summary }. All URLs are temporary (valid ~1 hour) — download immediately. This tool is free and does not require payment. Do NOT use for synchronous tools — those return results directly.

NameTypeReqDescription
jobTypestringyesMust match the async tool: video=generate_video, video-image=animate_image, image-3d=generate_3d_model, transcription=transcribe_audio, epub-audiobook=epub_to_audiobook, ai-call=ai_call. video-fal-st…
requestIdstringyesThe requestId returned by the original async tool — same ID used with check_job_status

No output schema declared.

No examples provided.

get_model_pricing ~52

Get pricing for a specific model by ID. No payment required.

NameTypeReqDescription
modelIdnumber|stringyesThe AI model database ID from list_models. A numeric string ("16") is accepted and coerced.

No output schema declared.

No examples provided.

list_models ~126

Discover available AI models with numeric IDs, tier labels, capabilities, and per-call pricing in sats. Call this before create_payment to find the right modelId for your task. Returns JSON array: [{ id, name, tier, description, price, isDefault, category }]. Models marked isDefault=true are used when you omit modelId from create_payment. Filter by category to narrow results to a specific tool. This tool is free, requires no payment, and is idempotent — safe to call repeatedly.

NameTypeReqDescription
categorystringFilter by service category (matches tool names)

No output schema declared.

No examples provided.

list_planned_services ~73

List all planned services with current vote counts. Returns JSON array: [{ slug, name, description, votes }], sorted by votes descending. No payment required — this is a free discovery tool. Use the slug values with vote_on_service to cast votes. This tool is idempotent and safe to call repeatedly.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

merge_pdfs ~148

Merge multiple PDF files into a single document. Preserves bookmarks, links, and formatting. Returns JSON: { url } — a temporary download URL (valid ~1 hour). Minimum 2 files, no maximum. Files are concatenated in array order. 100 sats per merge regardless of file count. Use convert_file instead if you need format conversion (e.g., DOCX→PDF). Pay per request with Bitcoin Lightning — no API key, no account needed. Requires create_payment with toolName='merge_pdfs'.

NameTypeReqDescription
filesarrayyesArray of base64-encoded PDF files (minimum 2)
paymentIdstringyesValid payment ID (must be paid)

No output schema declared.

No examples provided.

multilingual_ask ~329

Ask a frontier AI a question in your OWN language and get the answer back in that same language, in ONE payment. We translate the question to English, answer it with a frontier model, then translate the answer back. Two engines behind one endpoint: 119 mainstream languages use the LLM translate tier; anything those models do not serve falls through to MADLAD-400 on our own GPU (452 languages, 251 of which ChatGPT, Claude and Gemini do not support at all). So a Wolaytta, Tiv or Q'eqchi' speaker gets frontier reasoning in their own language, which no other API offers. Rare-language quality is uneven and published per language - GET https://sats4ai.com/api/languages. Priced from question length plus a fixed 2000-character answer allowance at the chosen tier's rate; the rare-language path costs more (GPU both ways). Requires create_payment with toolName='multilingual_ask' AND the `language` you intend to use - the quote depends on it.

NameTypeReqDescription
languagestringyesLanguage to answer in. English name ('Igbo'), ISO-639 code ('ig'), or a rare-language code ('wal'). Rejected before payment if unsupported.
modelstringStandard | Better | Best. Best is Kimi K3 and costs materially more. Must match the create_payment quote.
paymentIdstringyesValid payment ID (must be paid), quoted for THIS language and tier.
questionstringyesYour question, in your own language. Max 4000 characters.

No output schema declared.

No examples provided.

open_voice_bridge ~522

TEMPORARILY UNAVAILABLE OVER MCP — create_payment refuses this tool, so you will not be charged. Use the L402 HTTP endpoint instead: POST https://sats4ai.com/api/l402/voice-bridge/open (same service and pricing, pay the 402 challenge), or use ai_call for a fully-managed agent call over MCP. Open a Voice Bridge session: a live phone call where YOUR LLM is the brain. Sats4AI provides PSTN + streaming STT + TTS as composable primitives. You decide when to speak (call voice_bridge_say), you read transcripts as they arrive (call poll_voice_bridge), you close the call when done (call end_voice_bridge). Unused deposit time is refunded via LNURL-withdraw. Use this when you want to keep your conversation context private and drive each turn yourself. When NOT to use: not for fully-managed agent-style calls where we handle the brain (use ai_call). Not for one-shot TTS broadcasts or IVR playback (use place_call). Not when live transcript polling adds no value — the per-turn overhead isn't worth it. Privacy: transcripts held in memory only, garbage-collected 30 minutes after the call ends; call audio is never persisted. Pay with Bitcoin Lightning — no telecom account, no signup. Requires create_payment with toolName='voice_bridge_open', phoneNumber, durationMinutes. Deposit is priced per destination off the carrier rate sheet and is BTC-pegged, so call create_payment for the exact figure; premium-rate and satellite ranges are refused.

NameTypeReqDescription
codecstringPCMU 8kHz (default, universal) or L16_16000 for HD voice when both endpoints support it
durationMinutesnumberDeposit for N minutes, 2-30 (default 3). Unused time refunded.
languagestringBCP-47 language tag (default en-US). See /api/l402/voice-bridge/coverage for the matrix.
paymentIdstringyesValid payment ID from create_payment (toolName=voice_bridge_open)
phoneNumberstringyesDestination phone number in E.164 format (e.g., +14155550100)
refundAddressstringLightning address for automatic refund of unused time
sttEnabledbooleanDefault true. Set false for TTS-only broadcast calls.
ttsEnabledbooleanDefault true. Set false to bring-your-own-audio via voice_bridge_say.

No output schema declared.

No examples provided.

place_call ~459

Bridge the digital-physical gap — place an automated phone call to deliver a spoken message or play audio to any number. Useful when your task requires notifying a human, delivering alerts, or reaching someone who isn't online. Pay with Bitcoin Lightning — no telecom account, no KYC, no subscription. Requires create_payment with toolName='place_call' and phoneNumber. Calls start with an unverified-sender notice; the opening and closing safety notices fit the prepaid minutes. No impersonation, scams, threats, harassment, credential theft, unsolicited bulk messages, or contact after an opt-out. Answering a call does not establish consent. We screen requests after payment. Held messages and calls are not sent or placed; payment is retained during review, not refunded immediately. Confirmed violations are not refunded. Unresolved communication holds become eligible for a refund after 24 hours; refund eligibility is processed by scheduled maintenance. Human review costs 1 sat at https://sats4ai.com/appeal. Recent message text and extracts of recording transcripts support recipient-scoped abuse checks for 24 hours. These context records are deleted hourly, so storage can last up to 25 hours. Original uploaded-call transcripts and raw held-request or appeal evidence enter cleanup after 30 days. We also keep a de-identified record of screened communications to measure and improve fraud detection. Identifiers in it — contact addresses, numbers and names that follow a greeting — are replaced with one-way tokens, and it holds no destination number and no account, because the service has none. De-identification is not anonymization: text a sender wrote can still identify someone. Do not submit personal information the service does not need. Providers keep records under their own policies.

NameTypeReqDescription
audioUrlstringPublic URL to audio file. Provide this OR message.
durationMinutesnumberDuration in minutes (1-30). Required for audioUrl.
messagestringText to speak via TTS; must fit prepaid minutes including safety notices. Provide this OR audioUrl.
paymentIdstringyesValid payment ID (must be paid)
phoneNumberstringyesPhone number in E.164 format (e.g., +14155550100)

No output schema declared.

No examples provided.

poll_voice_bridge ~83

Fetch new transcript events from an open Voice Bridge call since the last cursor. Returns partial + final transcripts + system events. Agent should poll in a loop (~500ms-1s). No additional payment.

NameTypeReqDescription
cursornumberLast seq number seen (default 0 = start from beginning)
sessionIdstringyesSession ID from open_voice_bridge

No output schema declared.

No examples provided.

receive_fax ~314

When you're expecting a fax back — bank confirmation, court filing, signed document — open a 24h receive window at our shared number +1 320 299 1523. Matched by caller ID (last 10 digits of the sender), delivered to your email as soon as it arrives. Optional OCR add-on (+200 sats) returns a searchable text file alongside the PDF — useful for feeding the content to an agent or archiving. Optional callback_url POSTs an HMAC-signed webhook on delivery so your agent doesn't have to poll. No refund if no fax arrives within the window (prevents subscription squatting). If OCR fails, an LNURL-withdraw for 200 sats is included in the delivery email for partial refund. Pay with Bitcoin Lightning — no dedicated fax number rental, no monthly subscription, no account.

NameTypeReqDescription
callback_idstringOptional opaque correlation string (max 128 chars). Echoed in the webhook body.
callback_urlstringOptional HTTPS webhook URL. POSTed (HMAC-signed) when fax is delivered. Public HTTPS only — no loopback/RFC1918.
emailstringyesEmail address to deliver the fax PDF to
fromNumberstringyesExpected sender fax number in E.164 format (matched by last 10 digits of caller ID)
ocrbooleanAdd OCR text extraction (+200 sats). Default: false.
paymentIdstringyesValid payment ID (must be paid)

No output schema declared.

No examples provided.

remove_background ~136

Remove background from any image, returning transparent PNG. Uses BiRefNet (state-of-the-art, Papers with Code — Sm 0.901 on DIS5K). Handles hair, fur, glass, transparency, and complex edges. Stable endpoint — model upgrades automatically as SOTA evolves. 44 sats per image, pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='remove_background'.

NameTypeReqDescription
imageBase64stringyesBase64-encoded image (PNG, JPEG, WEBP) or data URI
paymentIdstringyesValid payment ID (must be paid)

No output schema declared.

No examples provided.

remove_object ~206

Remove unwanted objects from images by describing what to remove — no mask needed. Combines Grounding DINO detection (ECCV 2024) with Bria Eraser inpainting. Just say 'person', 'car', or 'watermark' and the object is erased and filled convincingly. 130 sats per image, pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='remove_object'.

NameTypeReqDescription
box_thresholdnumberDetection confidence threshold (0-1, default 0.25)
imageBase64stringyesBase64-encoded image (PNG, JPEG, WEBP) or data URI
paymentIdstringyesValid payment ID (must be paid)
querystringyesWhat to remove (e.g. 'person', 'car', 'watermark', 'text')
text_thresholdnumberText matching threshold (0-1, default 0.25)

No output schema declared.

No examples provided.

render_card ~679

Render a typographic card — headline, versus (two columns), list, stat (one big number) or quote — as a PNG or JPEG at 1920x1080 or 2560x1440. Deterministic layout, no AI model: the text you send is exactly what appears, which no image generator can promise. Built for video title cards and slides, thumbnails, quote cards and social posts. Lists and comparisons REVEAL one beat at a time (revealed:N / show_right:false) — render N states and cut between them, and the text never shifts. Optional theme (hex colours). Text coverage: Latin, Greek and Cyrillic (DejaVu Sans) with Noto Sans fallback for Arabic, Indic, Thai, Chinese, Japanese and Korean; emoji render as single-colour silhouettes in the text colour, not in full colour. Returns { url, width, height, format, mime, expires_in_seconds } — the url is a signed download valid 2 h; fetch it, the image is not inlined. Hard caps: 3 lines x 40 chars, 6 items x 40 chars — a spec over a cap is refused BEFORE payment. 5 sats per card. Pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='render_card'.

NameTypeReqDescription
accent_lineintegerheadline: index of the line drawn in the accent colour
formatstringOutput format (default png)
itemsarraylist: 1-6 items, each up to 40 chars; the last revealed item is drawn in the accent colour
labelstringstat: caption under the number (up to 60 chars)
leftstringversus: left value (up to 22 chars)
left_labelstringversus: small label over the left value (up to 28 chars)
linesarrayheadline: 1-3 lines, each up to 40 characters
paymentIdstringyesValid payment ID (must be paid)
revealedintegerlist: how many items are shown (default all) — render 1..N for a beat-by-beat reveal
rightstringversus: right value, drawn in the accent colour
right_labelstringversus: small label over the right value
show_rightbooleanversus: false renders the left column only (first beat of a two-state reveal)
sizestringOutput size (default 1920x1080)
sourcestringquote: attribution line (up to 60 chars)
substringstat: small line above the number, e.g. a year
textstringquote: the quoted words (up to 30 chars)
themeobjectOptional hex colours: background, foreground, accent, muted (default: near-black ground, Bitcoin-orange accent)
titlestringlist: small caps title (up to 40 chars)
valuestringstat: the big number (up to 12 chars), e.g. '34 Md $'
variantstringyesCard layout

No output schema declared.

No examples provided.

request_refund ~233

Open a MANUAL 48-hour refund review ticket for a service that FAILED (error, timeout, wrong output). Sends an email to the operator. DO NOT call this for unused-minute refunds on metered services (ai_call, voice_bridge) — those are returned automatically as an LNURL-withdraw link in the service's own response under `refund.lnurl_withdraw`, no manual ticket needed. If you call this on a metered payment that already has a pending LNURL refund, this tool will detect it and return the existing LNURL instead of creating a duplicate ticket. CLAIM WINDOW: refunds must be claimed within 30 days — after that the LNURL link stops working and the refund expires, so do not bank a link for later.

NameTypeReqDescription
emailstringOptional email address for follow-up
feedbackstringOptional description of what went wrong (max 2000 chars)
invoicestringyesLightning address (e.g., user@wallet.com) or bolt11 invoice for the refund
paymentIdstringyesThe payment ID from a failed service call

No output schema declared.

No examples provided.

restore_face ~237

Restore blurry, damaged, or AI-generated faces to sharp, natural quality. Uses CodeFormer (NeurIPS 2022, state-of-the-art FID 32.65 on CelebA-Test). Adjustable fidelity — balance between quality enhancement and identity preservation. Also enhances background and upsamples. Stable endpoint — model upgrades automatically as SOTA evolves. 25 sats per image, pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='restore_face'.

NameTypeReqDescription
background_enhancebooleanAlso enhance the background (default true)
face_upsamplebooleanUpsample restored faces (default true)
fidelitynumberFidelity to input: 0.0 = max quality enhancement, 1.0 = max identity preservation (default 0.5)
imageBase64stringyesBase64-encoded image containing faces (PNG, JPEG, WEBP) or data URI
paymentIdstringyesValid payment ID (must be paid)
upscalenumberOutput upscale factor 1-4 (default 2)

No output schema declared.

No examples provided.

send_email ~408

Reach anyone with an email address — useful when your task requires formal communication, sending reports, or contacting someone outside chat. No SMTP server, no domain verification needed. Plain text, max 10,000 chars body, 200 chars subject. 200 sats. Pay with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='send_email'.

NameTypeReqDescription
bodystringyesEmail body text (plain text, max 10,000 characters)
paymentIdstringyesValid payment ID (must be paid) No impersonation, scams, threats, harassment, credential theft, unsolicited bulk messages, or contact after an opt-out. Answering a call does not establish consent. We…
replyTostringOptional reply-to email address
subjectstringyesEmail subject (max 200 characters)
tostringyesRecipient email address

No output schema declared.

No examples provided.

send_fax ~356

When your task requires a paper-trail on the other end — loan paperwork to a bank, signed contract to a notary, booking confirmation to a hotel in Japan — send a fax to any number worldwide. Two modes: 'pdf' (fetch from public URL) or 'text' (we format typed text into a PDF locally). Text/cover support Latin (incl. Central European, Vietnamese), Greek, Cyrillic, Japanese, Korean, Chinese (Simplified + Traditional), Thai, Hindi, Georgian, Armenian, Amharic; RTL scripts (Arabic/Hebrew) and emoji are rejected BEFORE your payment is consumed. Optional cover page. Pricing: 500 sats for up to 10 pages, +50 sats per additional page. Max 350 pages / 50 MB. Pass 'pages' to create_payment as 'quantity' to get the right invoice. Pay with Bitcoin Lightning — no fax machine, no phone line, no telecom account.

NameTypeReqDescription
coverTextstringOptional cover page text (mode=pdf only, adds 1 page)
modestringyes'pdf' = send PDF from pdfUrl. 'text' = generate PDF from typed text.
pagesnumberExpected page count (1-350). Used for pricing. Pass same value to create_payment as 'quantity'.
paymentIdstringyesValid payment ID (must be paid)
pdfUrlstringRequired for mode=pdf: public HTTPS URL returning application/pdf
phoneNumberstringyesDestination fax number in E.164 format (e.g. +14155550100)
textstringRequired for mode=text: message text to format as PDF

No output schema declared.

No examples provided.

send_sms ~494

Reach a human via SMS when your task requires real-world coordination. Send to any phone number worldwide — delivery timing varies by destination. No phone plan, no SIM card, no telecom account needed. Pay with Bitcoin Lightning — no API key, no KYC, no subscription. Requires create_payment with toolName='send_sms' and phoneNumber+message at payment time. The phoneNumber and message must match those used in create_payment. Each SMS ends with a short signature line naming the service and a safety/stop link, within the paid segment count. No impersonation, scams, threats, harassment, credential theft, unsolicited bulk messages, or contact after an opt-out. Answering a call does not establish consent. We screen requests after payment. Held messages and calls are not sent or placed; payment is retained during review, not refunded immediately. Confirmed violations are not refunded. Unresolved communication holds become eligible for a refund after 24 hours; refund eligibility is processed by scheduled maintenance. Human review costs 1 sat at https://sats4ai.com/appeal. Recent message text and extracts of recording transcripts support recipient-scoped abuse checks for 24 hours. These context records are deleted hourly, so storage can last up to 25 hours. Original uploaded-call transcripts and raw held-request or appeal evidence enter cleanup after 30 days. We also keep a de-identified record of screened communications to measure and improve fraud detection. Identifiers in it — contact addresses, numbers and names that follow a greeting — are replaced with one-way tokens, and it holds no destination number and no account, because the service has none. De-identification is not anonymization: text a sender wrote can still identify someone. Do not submit personal information the service does not need. Providers keep records under their own policies.

NameTypeReqDescription
messagestringyesMessage text (max 1544 chars — unverified-sender notice prepended; billed per SMS segment)
paymentIdstringyesValid payment ID (must be paid)
phoneNumberstringyesPhone number in E.164 format (e.g., +14155550100). NOTE: non-+1 (international) numbers are delivered from an alphanumeric sender ID, so the recipient CANNOT reply — one-way only; for some countries…

No output schema declared.

No examples provided.

text_to_speech ~4,696

Text-to-speech with 3 tiers: OmniVoice Global (602+ languages including Yoruba, Bengali, Cebuano, Twi, zero-shot voice cloning, ~106 chars/sat — use 'language' parameter with ISO code), Inworld Premium (#1 ranked TTS ELO 1217, emotion control, 40+ languages, ~16 chars/sat), Minimax Studio (voice cloning from reference clip, 40+ languages, ~5 chars/sat). Adjustable speed (0.5-2.0x). Returns audio URL. Pay with Bitcoin Lightning — no API key or signup needed. When NOT to use: not for phone calls (use place_call for one-shot broadcasts, ai_call for AI voice agents, or open_voice_bridge to drive the call with your own LLM). For rare/underserved languages (Yoruba, Twi, Marathi, Cebuano, etc.), pick OmniVoice Global via language= — Inworld/Minimax don't cover these. Requires create_payment with toolName='text_to_speech'.

NameTypeReqDescription
languagestringOmniVoice tier ONLY: ISO 639 language code (646 supported). Default: 'en'. NOTE: on the Inworld/Minimax tiers this field is silently ignored — you get the chosen voice's own language (usually English…
modelIdnumberOptional. 3 tiers: OmniVoice Global (602+ langs, ~106 chars/sat), Inworld Premium (#1 ranked, ~16 chars/sat), Minimax Studio (voice cloning, ~5 chars/sat). Omit for default.
paymentIdstringyesValid payment ID (must be paid)
speednumberSpeech speed multiplier (0.5-2.0)
textstringyesText to convert to speech
voicestringVoice ID. 467 total voices. Use list_models to see available TTS models. Or paste a custom cloned voice ID. ## Minimax Studio — voice cloning from reference clip, ~5 chars/sat (332 voices) ### Arabi…
voice_descriptionstringOmniVoice only: describe desired voice (e.g., 'female, young adult, high pitch')

No output schema declared.

No examples provided.

transcribe_audio ~336

Transcribe audio to text with WORD-LEVEL timestamps (timestamps:'word' returns per-word start/end times — subtitle alignment, karaoke captions, cutting video to speech) or segment timestamps. Uses Mistral Transcription — high-accuracy speech recognition that handles accents, background noise, and overlapping speakers. 13 languages: en, zh, hi, es, ar, fr, pt, ru, de, ja, ko, it, nl. Up to 500 MB / 60 minutes per file. Async — returns requestId, poll with check_job_status(jobType='transcription'), then get_job_result. 10 sats/min. Privacy: audio and transcripts are ephemeral — processed, returned, and discarded. Never persisted. Pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='transcribe_audio'.

NameTypeReqDescription
audioBase64stringyesBase64 encoded audio file
callback_idstringOptional correlation string echoed back in the webhook body. Max 128 chars.
callback_urlstringOptional HTTPS webhook we POST when the job finishes (HMAC-signed). Polling still works.
diarizebooleanIdentify different speakers (default false). Forces segment granularity upstream.
languagestringLanguage code (e.g., 'en', 'es')
paymentIdstringyesValid payment ID (must be paid)
timestampsstringTimestamp granularity in result.segments. 'word' returns per-word start/end times (subtitle alignment, karaoke captions, cutting video to speech). Default 'segment'.

No output schema declared.

No examples provided.

Common questions

What is the Sats4AI - Bitcoin-Powered AI Tools MCP server?

Sats4AI - Bitcoin-Powered AI Tools is an MCP server listed in the public MCP registry as io.github.cnghockey/sats4ai. 40+ Lightning-paid AI tools for agents: calls, SMS, fax, voice, translation. No signup, no keys. This page covers its hosted endpoint (https://sats4ai.com/api/mcp).

Is the Sats4AI - Bitcoin-Powered AI Tools MCP server safe to use?

Sats4AI - Bitcoin-Powered AI Tools scores 79 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Sats4AI - Bitcoin-Powered AI Tools MCP server expose?

Sats4AI - Bitcoin-Powered AI Tools exposes 57 tools: create_payment, check_payment_status, generate_image, generate_video, animate_image, and 52 more. Their descriptions and schemas cost roughly 20,441 tokens of context every time the server is loaded.

Does the Sats4AI - Bitcoin-Powered AI Tools MCP server require authentication?

No. We connected to Sats4AI - Bitcoin-Powered AI Tools without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the Sats4AI - Bitcoin-Powered AI Tools MCP server still maintained?

Sats4AI - Bitcoin-Powered AI Tools is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.