Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Changed the definition of "poll_voice_bridge"
⟨14 unchanged words⟩ Returns partial + final transcripts + system events.AgentPassshouldwaitMs (e.g. 20000) to hold the call until the callee has FINISHED TALKING (a final transcript, then 0.7 s of silence) or the call changes state, then get everything at once: no polling timer, and you do not answer in the middle of their sentence. Without waitMs, poll in a loop (~500ms-1s).and decide yourself when they are done. No additional payment.
⟨11 unchanged words⟩ from beginning)","type":"number"},"quietMs":{"description":"Optional, used with waitMs. How many milliseconds of silence after a final transcript count as 'finished talking' (0-5000, default 700). 0 = return at the first final transcript, even mid-sentence.","type":"number"},"sessionId":{"description":"Session ID from open_voice_bridge","type":"string"},"waitMs":{"description":"Optional. Hold the call up to this many milliseconds (max 25000) until the callee has finished talking: a FINAL transcript has arrived and nothing new for quietMs, or a system event arrives. Then everything since the cursor is returned at once. Partial transcripts alone do not end the wait. Default 0 = return immediately.","type":"number"}},"required":["sessionId"],"type":"object"}
Added "create_cart" (57 tools before, 58 now)
Pay for 2 to 10 calls with ONE Lightning invoice, up to 2,000 sats in all. Each item is { toolName, ...the same inputs create_payment takes for that tool }. The server checks and prices EVERY item first: one bad item refuses the whole cart, with no invoice, and the error names the item by its index. Returns JSON: { cartId, lightningInvoice, totalSats, expiresAt, items: [{ index, toolName, paymentId, amountSats }] }. Pay the ONE invoice. Then call each item's tool with that item's own paymentId, exactly as you would after create_payment. KEEP the paymentIds from this reply: each is the only wa…
Changed the definition of "text_to_speech"
⟨5227 unchanged words⟩ Changed the definition of "get_job_result"
⟨109 unchanged words⟩ gets the pending refund (error_code L402_REFUND_ISSUED). An audiobook whose payment was refunded also returns RESULT_NOT_AVAILABLE, with no link: claim the refund at /recover with the payment ID. A web 3D purchase not yet collected on ⟨36 unchanged words⟩
Changed the definition of "check_payment_status" and "send_sms"
⟨10 unchanged words⟩ { paid, serviceUsed, refundAllowed, readyToUse, next, state } — readyToUse=true means paid, not yet consumed, and no refund queued; next says what to do. state is unpaid, paid, delivered, held, refund-open, claimed or expired. held (with its appeal_url) is present while the payment is held for review. deliveryStatus and deliveryDetail are present for SMS and fax: a send that succeeded means accepted, not delivered, so poll for the carrier outcome. Call after create_payment to verify the user has ⟨43 unchanged words⟩
⟨48 unchanged words⟩ toolName='send_sms' and phoneNumber+message at payment time. The phoneNumber
Changed the definition of "await_result" and "get_job_result"
⟨21 unchanged words⟩ ,"ai-call"],"type":"string"},"paymentId":{"description":"Optional: the paymentId that bought this job. If its payment was refunded, the claim link comes back only when this matches — or call check_payment_status(paymentId).","type":"string"},"requestId":{"description":"The requestId returned by ⟨10 unchanged words⟩
⟨84 unchanged words⟩ → { transcript, duration, summary }. A video or 3D job whose payment was refunded returns error_code RESULT_NOT_AVAILABLE, unless you pass its paymentId: the payer then gets the pending refund (error_code L402_REFUND_ISSUED). A web 3D purchase not yet collected on its own page also returns RESULT_NOT_AVAILABLE. All URLs are temporary (valid ~1 hour)
Changed the definition of "check_job_status" and "get_job_result"
⟨11 unchanged words⟩ , transcription=transcribe_audio, epub-audiobook=epub_to_audiobook, ai-call=ai_call. video-fal-standard/video-fal-pro = theFALfallback jobType generate_video returns whenReplicatethe primary video model is at capacity.","enum":["video" ⟨35 unchanged words⟩
⟨11 unchanged words⟩ , transcription=transcribe_audio, epub-audiobook=epub_to_audiobook, ai-call=ai_call. video-fal-standard/video-fal-pro = theFALfallback jobType generate_video returns whenReplicate
Changed the definition of "transcribe_audio"
⟨70 unchanged words⟩ :"boolean"},"language":{"description":"LanguageOptional.codeOne of: detect (e.g.the default),'en'en,'es'zh, hi, es, ar, fr, pt, ru, de, ja, ko, it, nl. A locale tag (en-US) or the English name (French) also works; \"auto\" means detect.","type":"string"},"names":{ ⟨156 unchanged words⟩
Changed the definition of "transcribe_audio" and "transcribe_translate"
⟨50 unchanged words⟩ , de, ja, ko, it, nl. Pass names (the people and places spoken in the audio) to help the speech model spell them right — free, same price. Up to 500 MB / 60 minutes per ⟨43 unchanged words⟩
⟨77 unchanged words⟩ , 'es')","type":"string"},"names":{"description":"Optional: the names and places spoken in the audio (characters, people, towns), e.g. [\"Siobhan\", \"Tadhg\", \"Chicoutimi\"]. It helps the speech model spell them right. Free: the price does not change. We send up to 100At most 4000 characters of names. List names only: a name that sounds like an ordinary word can replace that word in the transcript (\"Noone\" for \"noon\"). If the model refuses the list, you still get the transcript, without it, and result.degraded includes \"names\".","items":{"type":"string"},"type":"array"},"paymentId":{"description":"Valid payment ID ( ⟨58 unchanged words⟩
Changed the definition of "ai_call"
⟨34 unchanged words⟩ your instructions, has a real two-way conversation,auto-retriesandonreturns a full transcript with structured analysis. One redial, 2 minutes later, if nobody answers, a voicemail(answers, the line is busy or the call drops within 30 seconds. No redial after the person speaks and hangs up, asks to3stopattemptsor opts out, or after the agent leaves a voicemail message. A person who asks not to be called again is added to our do-not-contact list. The redial runs on the deposit's unused minutes (none left: no redial), andreturnsafull
Changed the definition of "place_call"
⟨47 unchanged words⟩ no subscription. Requires create_payment with toolName='place_call' and phoneNumber.CallsThestartmessagewithplaysanfirst.unverified-senderThennotice;a short spoken notice names theopeningservice andclosinghowsafety
Changed the definition of "create_payment" and "edit_image"
⟨146 unchanged words⟩ with); edit_image is a flat 200 satsat any outputpersizeedit (resolution is optional and does not change ⟨38 unchanged words⟩
⟨341 unchanged words⟩ accepted (480p/720p→768p, 1080p→2K). For edit_image: a flat 200 satsat anypersizeedit, so resolution does not change the price." ⟨64 unchanged words⟩
Changed the definition of "epub_to_audiobook", "text_to_speech", "transcribe_audio" and 1 more
⟨269 unchanged words⟩ Inworld-ONLY and is rejected on the Minimax tier. On the OmniVoice tier, voice is a voice design instead: words, one per group, separated by commas: male|female; child|teenager|young adult|middle-aged|elderly; very low|low|moderate|high|very high pitch; whisper; american|british|australian|canadian|indian|chinese|korean|japanese|portuguese|russian accent. Omit it for OmniVoice's default voice. Any other word is refused, and the payment stays unused.","type":"string"}},"required": ⟨5 unchanged words⟩
⟨7 unchanged words⟩ languages including Yoruba, Bengali, Cebuano, Twi,zero-shotvoicecloning
Changed the definition of "create_payment", "edit_image" and "generate_image"
⟨141 unchanged words⟩ and resolution you will execute with); edit_imagerequiresisresolutiona flat 200 sats at any output size (1K=200,resolution2K=300,is4K=450optionalsatsand does not change the price); epub_to_audiobook requires characterCount (total text characters ⟨29 unchanged words⟩
Changed the definition of "open_voice_bridge"
Open aVoicephoneBridgecallsession:you drive one turn at alivetime:phonewe dial, transcribe what the other side says, and speak whatever text you send. You callwherevoice_bridge_sayYOURtoLLMtalk,is
Changed the definition of "open_voice_bridge"
⟨47 unchanged words⟩ call end_voice_bridge). Unused deposit time is refundedviaautomaticallyLNURL-withdraw.when the call ends — including when the callee hangs up. Pass refundAddress (a Lightning address) and the remainder is SENT there with no further action; without it the refund is held as a claimable LNURL-withdraw link returned by end_voice_bridge. Use this when you want to keep your ⟨111 unchanged words⟩
⟨33 unchanged words⟩ time refunded.","type":"number"},"greeting":{"description":"Spoken the instant the callee answers (max 500 chars). Synthesized while the phone rings, so there is no pause before the first word — without it the callee hears silence until your first voice_bridge_say lands. Strongly recommended for any call a human answers.","type":"string"},"language":{"description":"BCP-47 language tag (
Changed the definition of "open_voice_bridge" and "send_sms"
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 ⟨168 unchanged words⟩
⟨3 unchanged words⟩ ":"Message text (max 1544 chars —unverified-senderanoticeshortprepended;
Changed the definition of "edit_image" and "get_job_result"
⟨67 unchanged words⟩ 2K","4K"],"type":"string"},"returnBase64":{"default":false,"description":"Also return the edited image as a base64 data URL (base64Image). Default false: imageUrl is the deliverable and the base64 copy is megabytes of context.","type":"boolean"}},"required":["paymentId","prompt"," ⟨3 unchanged words⟩
⟨37 unchanged words⟩ ,"ai-call"],"type":"string"},"paymentId":{"description":"The paymentId that bought this job. On a failed job the refund is opened either way; the claim link (lnurl_withdraw / refund_secret) is returned only when this matches — or call check_payment_status(paymentId).","type":"string"},"requestId":{"description":"The requestId returned by ⟨17 unchanged words⟩
Changed the definition of "send_sms"
⟨58 unchanged words⟩ must match those used in create_payment. Each SMSstartsends withanaunverified-sendershortnoticesignature line naming the service and a safety/stop link, within the paid segment count. No impersonation, ⟨193 unchanged words⟩
Changed the definition of "ai_call", "place_call", "send_email" and 1 more
⟨164 unchanged words⟩ with toolName='ai_call', phoneNumber, and durationMinutes. The agentopensidentifiesbyitselfdisclosingasitaisvirtualautomatedassistant calling for a client, andactsanswers 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
Changed the definition of "clone_voice"
Cloneanya voice you own or have permission to use, from a single audio sample. Returns a reusable voice_id fortext_to_speech —text_to_speech.speakRequiresinconsent=true;thecloningcloneda voiceindefinitely.to impersonate someone is prohibited. High-fidelity reproduction capturing tone, cadence, and accent. ⟨61 unchanged words⟩
Changed the definition of "get_model_pricing"
⟨2 unchanged words⟩ :{"description":"The AI model database ID from list_models. A numeric string (\"16\") is accepted and coerced.","type":["number","string"]}},"required":["modelId"],"type":"object"}
Changed the definition of "generate_text"
⟨13 unchanged words⟩ K3 (best, ~10 chars/sat, 1M context,vision support,default), GPT-OSS-120B (standard, ~1000 chars/sat, 119 ⟨19 unchanged words⟩ is the authoritative price. Supports document Q&A viafileContext andfileContext.visionForanalysisimages,viauseimageBase64the(bestanalyze_imagemodel).tool. Stable endpoints — models upgrade automatically. Pay per ⟨19 unchanged words⟩
Certificate recorded, valid to 2026-12-08
Authorization not required
Changed the definition of "clone_voice"
⟨21 unchanged words⟩ 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) ⟨23 unchanged words⟩
⟨43 unchanged words⟩ URL to audio file of the voice tocloneclone. MP3, M4A or WAV, 10 seconds to 5 minutes, 20 MB max. One speaker, no background music.","type":"string"}},"required": ⟨4 unchanged words⟩
First tool surface recorded: 57 tools (server version 1.0.0)
Showing the latest 27 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
⟨45 unchanged words⟩ paymentId that bought this job. On a failed or refunded job the refund is opened either way; the ⟨42 unchanged words⟩
⟨48 unchanged words⟩ reading it in yours. Auto-detects source if omitted. Pass names (the people and places spoken in the audio) to help the speech model spell them right — free, same price. Async — returns requestId, poll with check_job_status(jobType='transcribe-translate' ⟨33 unchanged words⟩
⟨4 unchanged words⟩ audio file","type":"string"},"names":{"description":"Optional: the names and places spoken in the audio (characters, people, towns), e.g. [\"Siobhan\", \"Tadhg\", \"Chicoutimi\"]. It helps the speech model spell them right. Free: the price does not change. We send up to 100At most 4000 characters of names. List names only: a name that sounds like an ordinary word can replace that word in the transcript (\"Noone\" for \"noon\"). If the model refuses the list, you still get the transcript, without it, and result.degraded includes \"names\".","items":{"type":"string"},"type":"array"},"paymentId":{"description":"Valid payment ID ( ⟨98 unchanged words⟩
⟨30 unchanged words⟩ speak via TTS; must fit prepaid minutes includingsafetythenotices.closing spoken notice (about 12 s). Provide this OR audioUrl.","type":"string ⟨26 unchanged words⟩
⟨32 unchanged words⟩ JSON with image URL. 200 sats per editat,anyoneoutputflatsize.price. Pay per request with Bitcoin Lightning — no ⟨9 unchanged words⟩
⟨4 unchanged words⟩ "description":"Output aspect ratio (default: match_input_image, which keeps the input's shape)","enum":["match_input_image","auto","1:1","4:3","3:4","16:9","9:16","3:2","2:3"],"type":"string"},"imageBase64":{"description" ⟨40 unchanged words⟩ ":{"default":"1K","description":"Output resolution. AcceptedIgnored:forMAI-Image-2.6compatibilityhasandnodoesresolutionnotsetting.changeAcceptedtheforprice:compatibility; every edit is 200 sats.","enum": ⟨43 unchanged words⟩
⟨5227 unchanged words⟩ ⟨47 unchanged words⟩ speakers (default false). Forces segment granularity upstream. If the speaker-label request fails, you still get the text, and result.degraded includes 'diarization'.","type":"boolean"},"language":{ ⟨32 unchanged words⟩ captions, cutting video to speech). Default 'segment'. If the timestamp request fails, you still get the text, and result.degraded includes 'timestamps' (no segments, srt or vtt).","enum":["none","segment"," ⟨8 unchanged words⟩
⟨66 unchanged words⟩ :"string"},"voiceDescription":{"description":"Free-formOmniVoice voice-design words, one per group, separated by commas: male|female; child|teenager|young adult|middle-aged|elderly; very low|low|moderate|high|very high pitch; whisper; american|british|australian|canadian|indian|chinese|korean|japanese|portuguese|russian accent. When OmniVoice speaks the line, any other word is dropped: it speaks in its default voicedescriptionandfortheTTSreply(e.g.carries a warning. When OmniVoice was not ready at open_voice_bridge,'calmafemalefallbackvoice')voice speaks and ignores this field.","type":"string"}},"required": ⟨3 unchanged words⟩
⟨341 unchanged words⟩ accepted (480p/720p→768p, 1080p→2K). For edit_image:1K=200,flat2K=300200 sats at any size,4K=450sosats.resolution does not change the price.","enum":["768p","2K"," ⟨61 unchanged words⟩
Edit an image with natural language instructions. UsesNanoMAI-Image-2.6,Bananaranked2#3 on the Artificial Analysis image-editing leaderboard as of September 2026 — understands context, handles object addition/removal, style transfer, and inpainting. Returns JSON with image URL.Resolution-tiered200pricing:sats1K=200persats,edit2K=300atsats,any4K=450outputsats.size. Pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment withtoolName='edit_image' and resolution param.toolName='edit_image'.
⟨54 unchanged words⟩ default":"1K","description":"Output resolution.1K=200Acceptedsats,for2K=300compatibilitysats,and4K=450doessatsnot change the price: every edit is 200 sats.","enum":["1K","2K"," ⟨41 unchanged words⟩
⟨8 unchanged words⟩ JSON with image URL. Models: Grok Imagine 2 (fast creative generation, 100 sats), Seedream45 Pro (photorealisticmostdetailpermissive content policy, 150 sats at 1K / 300 at 2K),NanoGPTBananaImage22.5 (premiumrankedquality#1 on the Artificial Analysis text-to-image leaderboard as of September 2026,2001200 sats, default). Supports img2img with optional ⟨44 unchanged words⟩
⟨181 unchanged words⟩ 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.
⟨132 unchanged words⟩ 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."," ⟨33 unchanged words⟩
⟨190 unchanged words⟩ 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.
⟨9 unchanged words⟩ default 0.7)","type":"number"},"consent":{"description":"Required. 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).","type":"boolean"},"model":{"default":"speech-02-turbo","description": ⟨53 unchanged words⟩ string"}},"required":["paymentId","voiceFileUrl","consent"],"type":"object"}