Sats4AI - Bitcoin-Powered AI Tools
Server Details
40+ Lightning-paid AI tools for agents: calls, SMS, fax, voice, translation. No signup, no keys.
- Status
- Healthy
- Uptime
- 100.0% over the last 24 hours
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- cnghockey/sats4ai-mcp-server
- GitHub Stars
- 2
- Server Listing
- Sats4AI
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 58 tools
Most tools map to a single distinct paid service, and the descriptions proactively disambiguate the risky clusters (ai_call vs open_voice_bridge vs place_call vs text_to_speech; convert_file vs convert_html_to_pdf; analyze_image vs extract_document vs extract_receipt). The remaining overlaps are documented rather than confusing: await_result is explicitly a wrapper over check_job_status + get_job_result, and the four translation endpoints (translate_text, translate_rare_language, translate_epub, multilingual_ask) require reading the fine print to pick correctly.
There is a dominant verb_noun pattern (generate_image, remove_background, detect_objects, send_fax, check_payment_status), but it is broken by noun-style entries (ai_call, boardingpass_wallet, e_signature, text_to_speech, epub_to_audiobook) and by a differently shaped voice_bridge_* family (open_/poll_/voice_bridge_say/end_). The conventions are mixed but each name is still readable and mostly self-describing.
58 tools is far beyond the comfortable range for reliable agent selection, even though the server is explicitly a catalog of many paid AI services so breadth is partly inherent. Free discovery helpers (list_models, get_cost_estimate, list_planned_services) mitigate the sprawl, but the surface still forces an agent to scan a very large menu before acting.
The lifecycle around the core value (pay-per-call AI services) is unusually thorough: payment creation, cart batching, status polling, async result retrieval, cost quoting, error-code catalog, refund appeals, and job waiting are all present alongside a wide modality spread (text, image, video, 3D, audio, voice calls, SMS, fax, email, documents, translation). Minor gaps like cancelling an in-flight job do not create dead ends.
Available Tools
58 toolsai_callADestructiveInspect
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, and returns 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 to stop or 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), and a connected redial bills at least 1 minute. 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 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.
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | Instructions for the AI agent (what to say, ask, or accomplish) | |
| language | No | Language 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, we guess from the destination country: +33 → fr-FR, +49 → de-DE, +34 → es-ES, etc. Bilingual regions (Canada, Belgium, Switzerland, Singapore) and unknown countries default to en-US — override explicitly when you need a non-English language in those regions. Voice is auto-selected per language. | |
| paymentId | Yes | Valid payment ID (must be paid) | |
| phoneNumber | Yes | Phone number in E.164 format (e.g., +14155550100) | |
| beginMessage | No | Optional opening line for the agent | |
| refundAddress | No | Lightning address of YOUR user (for example name@wallet.com), only if the user gave you one. Never invent or guess an address: the refund is paid out at once and cannot be called back. The unused deposit is sent here when the call ends. With no address, or if that payment fails, the refund waits as an LNURL-withdraw link. | |
| durationMinutes | No | Max call duration 1-10 minutes (default: 3) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare openWorldHint and destructiveHint, and the description goes well beyond them: exactly what is destroyed or retained (recording deleted without consent, payment retained during review, 24-hour refund eligibility, retention windows), the redial rules and billing behavior, do-not-contact consequences, and abuse screening. It does not contradict the destructive hint. A small amount of operational detail (return shape beyond 'transcript with structured analysis') is left implicit, keeping it just short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose, redial policy, and 'When NOT to use' are front-loaded and well structured, but the back half is very long, stacking retention, de-identification, screening, and appeal details that are largely boilerplate for call selection. Much of it is compliance-relevant yet disproportionate to the invocation decision, diluting scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, multi-step, async, paid tool with no output schema, the description is complete: it covers the payment prerequisite, pending_confirm/confirm_ai_call path, polling via check_job_status, language handling, redial outcomes, and refund behavior. An agent has everything needed to invoke and follow up correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the enum, defaults, and formats are already documented. The description adds some workflow meaning — that paymentId must come from create_payment with toolName='ai_call', and that phoneNumber/durationMinutes are required — but does not add semantics beyond the schema for task, language, beginMessage, or refundAddress. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource — send an AI voice agent to handle a phone call — and enumerates exactly the situations it covers (booking, negotiating, IVR navigation, business info). It explicitly differentiates itself from open_voice_bridge, place_call, and send_sms, so an agent can route correctly without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use framing, a dedicated 'When NOT to use' list naming three alternatives and the condition selecting each, and states the required prerequisite flow (create_payment with toolName='ai_call'). Exclusions and alternatives are fully enumerated rather than inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_imageAInspect
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | Question or analysis prompt for the image | |
| modelId | No | Optional. Omit for default model. | |
| paymentId | Yes | Valid payment ID (must be paid) | |
| imageBase64 | Yes | Base64 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 no error). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses model (Qwen VL), capabilities (OCR, chart reading, spatial reasoning), pricing, and a critical behavior warning about PDFs causing hallucinations. Missing info on async vs sync and error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise with only necessary sentences. Front-loads the core purpose. Minor redundancy: payment info could be separate but not detrimental.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, usage, behavioral traits, and payment. Missing clarity on return format (presumably text) and whether results are synchronous. With 4 params and no output schema, some gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all 4 parameters with detailed descriptions, so baseline is 3. Description reinforces the PDF warning for imageBase64 parameter but adds no new semantic value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool analyzes images, answers visual questions, and extracts information. It distinguishes from sibling extract_document by explicitly noting single images only.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (visual analysis) and when not (PDFs/multi-page documents, recommending extract_document). Also mentions payment requirement and cost (21 sats per image).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
animate_imageAInspect
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | Text prompt describing the animation | |
| modelId | No | Optional. Omit for default model. | |
| duration | Yes | Duration in seconds (5-15) | |
| paymentId | Yes | Valid payment ID (must be paid) | |
| resolution | No | Output 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 rungs still accepted: 480p/720p→768p, 1080p→2K. | 768p |
| imageBase64 | Yes | Base64 encoded image to animate |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and delivers: async semantics (returns requestId, poll with check_job_status), output trait (Native audio), quality behavior (2K is upscaled from 768p), cost model (priced per second by resolution), auth model (Bitcoin Lightning, no API key/signup), and a hard prerequisite (create_payment). This is unusually thorough behavioral disclosure for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with zero filler. The order is ideal: core purpose first, then async/audio behavior, then resolution/duration/pricing, then payment/auth and prerequisite. Every sentence earns its place and no information is repeated from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description explains the return contract (requestId) and how to retrieve results (check_job_status), covering the async gap. It also addresses the payment dependency, the resolution billing quirk, and constraints that an agent must know to call this tool correctly. Nothing an agent needs to execute the full create_payment → animate_image → check_job_status flow is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds genuine value beyond the schema: naming 'MiniMax H3' clarifies what modelId's 'default model' actually is, and it reinforces the resolution and duration semantics (5-15 seconds, 768p/2K with upscaling note). The schema's resolution parameter is already extremely detailed, so the marginal gain is modest but real.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource+outcome: 'Animate a still image into cinematic video with MiniMax H3.' It clearly distinguishes this image-to-video tool from siblings like generate_video (no first frame needed), check_job_status (polling), and create_payment (payment) by framing the exact input ('first frame and a prompt') and the pipeline position. Nothing is left ambiguous about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit workflow guidance: 'Requires create_payment with toolName="animate_image"' establishes the prerequisite, and 'Async — returns requestId, poll with check_job_status' tells the agent exactly how to use it after invocation. It does not explicitly state when-not-to-use or name an alternative (e.g., 'for text-only video use generate_video'), but the clear context makes the appropriate use evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
await_resultARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| jobType | Yes | Must match the async tool that returned requestId. | |
| paymentId | No | 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). | |
| requestId | Yes | The requestId returned by the async tool. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint and idempotentHint, but the description adds substantial behavioral context beyond them: conditional streaming vs single-check behavior based on the Accept header, a ~4 minute per-call wait ceiling, the timed_out=true/status='IN_PROGRESS' retry contract, and that it is free with no payment. This is rich operational disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then layered conditions (streaming vs single-check, timeout, retry) in a single dense paragraph where every sentence carries actionable information. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description steps in to describe return behavior (final result, status='COMPLETED', status='IN_PROGRESS' with timed_out=true), and covers prerequisites, timeout, and retry. An agent has everything needed to call and re-call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by tying jobType to the async tools that emit requestId and by clarifying the paymentId refund-claim interaction, going beyond the schema's terse per-field text. It stops short of restating full enum semantics, so not a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('wait for an async job to finish and return its result in ONE call') and explicitly positions itself against siblings by noting it is 'equivalent to check_job_status + get_job_result combined.' An agent can distinguish it from the polling/status siblings without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the async tools that produce the required requestId (generate_video, animate_image, generate_3d_model, transcribe_audio, epub_to_audiobook, ai_call), and gives the exact fallback protocol: call again until status='COMPLETED' or timed_out=true. No inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
boardingpass_walletAInspect
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= (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.
| Name | Required | Description | Default |
|---|---|---|---|
| documents | No | Base64 boarding passes, one per file (up to 8), for a family/booking. Provide this OR documentBase64 (at least one required). | |
| paymentId | Yes | Valid payment ID (must be paid). Price = 100 × number of passes. | |
| documentBase64 | No | Base64 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so thoroughly. It discloses barcode byte-for-byte preservation, per-pass pricing, under-count re-pay behavior, refunds for images with no extra fields, in-memory processing with no storage, 30-minute link expiry, and Bitcoin Lightning payment. This is far beyond what structured fields would show.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but not bloated; every sentence adds a distinct piece of information (purpose, output, payment, refund, privacy, payment method). It is effectively front-loaded with the main purpose, though the phrase 'with the fields a plain scan drops' is slightly rhetorical and could be trimmed without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description fully covers what the tool returns (save links, add-all link), the input formats, payment mechanics, refund policy, and privacy guarantees. It even addresses edge cases like under-count payments and non-boarding-pass refunds. This is complete for a complex tool with payment and file handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description repeats the payment-related parameter semantics but adds little beyond the schema's own parameter descriptions. It does clarify the output shape (one save link per passenger plus add-all), but that is return-value information, not parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Turn airline boarding passes (PDF or screenshot) into Google Wallet passes' and further specifies the distinguishing value ('fields a plain scan drops', 'whole family in one go'). It clearly differentiates from generic siblings like convert_file or extract_document by targeting boarding passes specifically.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage context: when to use (boarding passes), how to pay (create_payment with toolName='boardingpass_wallet' and quantity), and what happens on underpayment. It does not explicitly name alternative tools to avoid, but the specialized use case makes the appropriate scenario clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_job_statusAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| jobType | Yes | Must 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-standard/video-fal-pro = the fallback jobType generate_video returns when the primary video model is at capacity. | |
| requestId | Yes | The requestId returned by the async tool (e.g., from generate_video, animate_image, generate_3d_model, transcribe_audio, epub_to_audiobook, ai_call) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only idempotentHint=true in annotations, the description carries the full behavioral burden and does so thoroughly: it discloses the return shape and status values, extra progress fields for epub-audiobook, polling interval, failure behavior (error message, no automatic retry), and cost ('free, no payment'). Nothing here contradicts the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and usage, then adds return format, polling guidance, and exclusions. It is highly informative but somewhat long, with several sentences that could be combined without losing meaning, so it is structured well but not maximally tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and minimal annotations, the description is complete enough for correct invocation: it explains the return values, status transitions, progress field for one job type, polling cadence, failure handling, and the follow-up tool to call. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented in the input schema, including the enum mappings and fallback jobTypes. The description reinforces that requestId comes from async tools but does not add syntax, format, or constraints beyond what the schema provides, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Poll the status of an async job.' It explicitly names the sibling tools it follows (generate_video, animate_image, etc.) and distinguishes itself from get_job_result and synchronous tools, so an agent can tell what it does and where it fits without opening another schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use rules ('after calling any async tool that returns a requestId'), polling cadence ('every 5-10 seconds'), next-step routing ('call get_job_result' on COMPLETED, do not retry on FAILED), and a clear when-not-to-use warning ('Do NOT use for synchronous tools'). The alternatives and conditions are fully spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_payment_statusARead-onlyIdempotentInspect
Check whether a Lightning invoice has been paid. Returns JSON: { 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 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.
| Name | Required | Description | Default |
|---|---|---|---|
| paymentId | Yes | The paymentId returned by create_payment |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint/idempotentHint; the description goes far beyond them by decoding the response contract (readyToUse meaning, 'next' guidance), enumerating the state machine (unpaid, paid, delivered, held, refund-open, claimed, expired), flagging the held/appeal_url condition, and warning that a successful SMS/fax send means 'accepted, not delivered' so the carrier outcome must be polled. It also states the cost profile (free, no payment required).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then structured as return-value decoding, then usage guidance. Dense but nearly every clause carries operational meaning; the JSON field enumeration runs a little long as a single run-on sentence, which keeps it short of perfect.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and this tool's return values are complex and stateful, so the description must explain them — and it does, covering paid/readyToUse semantics, the full state enum, held-review behavior, and SMS/fax delivery caveats, plus expiry handling. Nothing needed to call or interpret it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter with 100% schema description coverage ('The paymentId returned by create_payment'), so the schema already carries the load; the description adds no format, length, or syntax detail beyond it. Baseline 3 is appropriate when the schema fully documents the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Check whether a Lightning invoice has been paid.' It is immediately distinguishable from siblings like create_payment (initiates payment), await_result/check_job_status (polls non-payment work), and request_refund.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit sequencing ('Call after create_payment to verify the user has paid before calling the target tool') and names the recovery path when the tool cannot help ('Invoices expire after 10 minutes — if expired, create a new payment'). It also pre-empts over-polling: 'Most MCP clients with a connected wallet pay instantly, so a single check is usually sufficient.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clone_voiceAInspect
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Voice model: turbo (faster) or hd (higher quality) | speech-02-turbo |
| consent | Yes | 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). | |
| accuracy | No | Text validation accuracy 0-1 (default 0.7) | |
| paymentId | Yes | Valid payment ID (must be paid) | |
| voiceFileUrl | Yes | Public 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the paid nature (7,500 sats), the prohibition of impersonation, the sample rejection upstream, and the return of a voice_id. It lacks details about asynchronous behavior or failure modes beyond sample rejection, but the key operational traits are covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat long but each sentence adds essential information: core function, consent, sample requirements, modes, cost, and payment flow. It front-loads the main purpose and then provides necessary conditions. No fluff; structure is logical.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there's no output schema, the description explains the return value (voice_id). It covers payment prerequisites, sample constraints, and consent. It doesn't mention whether the operation is synchronous or where to fetch results if asynchronous, but the overall usage context is well covered for a paid cloning tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides descriptions for all parameters (100% coverage), so a baseline of 3 applies. The description adds value by clarifying the payment flow (create_payment prerequisite) and the meaning of consent (ownership/permission attestation), which are not fully captured in the schema. It also reinforces sample requirements.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Clone') and resource ('a voice you own'), and clearly distinguishes from siblings like text_to_speech by noting it returns a reusable voice_id for TTS. It also differentiates from transcribe_audio and other voice tools by focusing on voice cloning.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit conditions: requires consent=true, sample requirements (format, duration, size, one speaker, no music), and payment via create_payment with toolName='clone_voice'. It implies when to use (when you need a reusable voice_id) but doesn't explicitly contrast with alternatives like text_to_speech or existing voice IDs. The preconditions are still clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
colorize_imageAInspect
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| paymentId | Yes | Valid payment ID (must be paid) | |
| resultKey | No | Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout. | |
| model_size | No | Model variant: 'large' (best quality) or 'tiny' (faster). Default: large | |
| imageBase64 | Yes | Base64-encoded grayscale or B&W image (PNG, JPEG) or data URI |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses cost (5 sats per image), the Bitcoin Lightning pay-per-request model with no API key/signup, and the retry path via resultKey on timeout. It does not describe the response shape (returned image data/URL) or any rate/time limits beyond the 5s claim, leaving a residual gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and prerequisite are front-loaded and each sentence carries actionable content. The marketing aside ('Impossible for text/vision LLMs', 'vivid, natural colorization') is filler that slightly dilutes an otherwise tight paragraph.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a payment-gated tool with no annotations and no output schema, the description covers the payment and retry mechanics well but never says what the call returns (image payload vs. URL vs. job handle). That return-value ambiguity is a meaningful gap given the absence of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents paymentId, resultKey, model_size, and imageBase64. The description adds the payment-creation prerequisite and ties cost to the call, but adds nothing on model_size tradeoffs or image format beyond what the schema states, so it sits at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description leads with a specific verb+resource ('Colorize black-and-white or grayscale photos') and names the underlying model (DDColor, ICCV 2023), making the task distinct from siblings like edit_image or upscale_image. It stops short of explicitly contrasting with those siblings, so it's clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states a clear prerequisite flow: 'Requires create_payment with toolName="colorize_image"', which tells the agent exactly what must happen before invocation. It gives no explicit when-not or alternative tool guidance (e.g. vs upscale_image or edit_image), so the routing side is weaker than the prerequisite side.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
confirm_ai_callAInspect
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').
| Name | Required | Description | Default |
|---|---|---|---|
| answers | No | Key-value answers to the push-back questions (keys are the question strings, values are your answers). Omit to confirm the task as-is. | |
| sessionId | Yes | Session ID from the ai_call response |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that no new payment is needed and that it returns a call_id for polling. Annotations only provide openWorldHint, so description adds behavioral context. Could be improved by mentioning that answers are optional and the tool will proceed as-is if omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three well-structured sentences, each conveying essential information: action and context, prerequisite, financial implication, and return value. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, description specifies the return value (call_id for polling). It covers prerequisite, usage, financial impact, and next steps. Additional context like error handling would elevate but is not necessary for typical usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover both parameters. Description adds value by explaining that 'answers' keys are question strings and values are answers, and that omitting them confirms as-is. This clarifies usage beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action ('Confirm an AI call') and the context ('after reviewing push-back questions, optionally providing answers to missing info'). Distinguishes from sibling tool ai_call by specifying the prerequisite state 'pending_confirm'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use: 'Required when ai_call returns state="pending_confirm"'. Also notes financial aspect ('Uses the original payment — no new payment needed') and subsequent polling step ('Returns call_id for polling with check_job_status(jobType="ai-call")').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_fileAInspect
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| fileUrl | No | Public URL to the file (provide this OR fileBase64) | |
| paymentId | Yes | Valid payment ID (must be paid) | |
| resultKey | No | Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout. | |
| fileBase64 | No | Base64-encoded file (provide this OR fileUrl) | |
| extensionTo | Yes | Target format without dot (e.g., 'pdf', 'docx') | |
| extensionFrom | Yes | Source format without dot (e.g., 'pdf', 'docx') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does substantial work: it discloses the return value ('Returns download URL'), the cost (100 sats), the auth model (Lightning pay-per-request, no API key/account), and the create_payment prerequisite. It omits operational traits such as file-size limits, expected duration, and whether execution is synchronous or async (the resultKey retry parameter hints at timeouts but the description never states it).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Capability and format coverage are front-loaded, followed by pricing and the payment prerequisite, which is the right order for an agent deciding whether to call. There is some promotional padding ('Industrial-grade conversion engine — preserves formatting and quality') and mild redundancy in 'no API key, no account, no subscription needed', but no sentence is truly wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter, no-output-schema, no-annotation tool, the description covers the essentials: what it converts, what it returns, what it costs, and what must happen first. The remaining gap is operational behavior around long-running conversions and failures, only faintly implied by the resultKey parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every parameter including the fileUrl/fileBase64 mutual exclusivity and the resultKey retry semantics is already documented in the schema. The description adds no format syntax guidance (e.g., accepted extension strings) beyond what the schema states, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Convert files between 200+ formats') and enumerates concrete conversion families (PDF→JPG, MP3/WAV, MP4/AVI), so the agent knows exactly what capability this covers. It does not, however, differentiate itself from siblings that overlap in scope, notably convert_html_to_pdf, which the description implicitly claims (HTML→PDF) without saying which tool should win.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear usage context and a hard prerequisite: 'Requires create_payment with toolName=\'convert_file\'', which tells the agent the ordering of calls. It stops short of explicit exclusions or naming alternatives (e.g., convert_html_to_pdf, merge_pdfs), so the boundary with siblings is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_html_to_pdfAInspect
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| html | Yes | HTML or Markdown content to convert | |
| format | No | Input format (default: html) | html |
| paymentId | Yes | Valid payment ID (must be paid) | |
| resultKey | No | Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With zero annotations the description carries the full burden and does: it discloses the return shape and its key limitation ({ url }, temporary, ~1 hour), the cost model (50 sats per conversion), the payment/auth model (Bitcoin Lightning, no API key or signup), and the required upstream create_payment call. This is unusually complete disclosure of cost, ephemerality, and auth prerequisites for a mutation-ish tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and return value, then layers use cases, limits, cost, and prerequisite in a sensible order. Dense but every sentence carries operational information; the use-case enumeration ('invoices, reports, receipts') is the only mildly expendable clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a paid, prerequisite-gated conversion tool with no annotations and no output schema, the description covers return value, URL lifetime, cost, auth/payment path, capability limits (full HTML/CSS, tables, base64 or URL images, inline styles), and the alternative tool. Nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description still adds meaning beyond the schema by tying `format='markdown'` to a concrete behavior and by establishing that paymentId originates from create_payment with a specific toolName argument. It does not elaborate on resultKey semantics, but the schema already documents that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and both resources ('Convert HTML or Markdown ... to a pixel-perfect PDF') and explicitly differentiates from the sibling convert_file, noting that one handles existing file formats like DOCX→PDF. An agent can route between the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('invoices, reports, receipts'), when-to-use-the-other-tool ('Use convert_file instead for converting existing files'), the Markdown switch ('set format=\'markdown\''), and the hard prerequisite ('Requires create_payment with toolName=\'convert_html_to_pdf\''). Nothing about invocation selection is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_cartAInspect
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 way to use that item or to be refunded for it, and nothing can show them to you again. check_payment_status(cartId) shows the state of each item (it never repeats the paymentIds). An item you do not use is refunded for its own price after about an hour. Only one-shot tools can be in a cart (text, translation, image tools, document tools, text_to_speech); for calls, SMS, fax, email, video, music and other long jobs use create_payment.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | The calls to pay for. Each item is an object with toolName and the inputs create_payment takes for that tool (for example prompt for generate_text, text and targetLanguage for translate_text). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses the atomic validate-all-first behavior (one bad item refuses the whole cart with no invoice), that the error names the failing item by index, that paymentIds are irrecoverable and unrepeatable, that unused items are refunded after about an hour, and the exact success JSON shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose, limits, item construction, failure behavior, return shape, next steps, and exclusions arrive in that order with no filler. It runs long, but each sentence carries distinct operational information; the inline JSON return description is the densest part but is justified by the absence of an output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a high-complexity, multi-item payment tool with no annotations and no output schema, and the description still covers item limits, sat cap, validation semantics, error reporting, return shape, paymentId handling, refund timing, and sibling routing. Nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds a cross-tool rule the schema only gestures at: each item is '{ toolName, ...the same inputs create_payment takes for that tool }', establishing that per-tool inputs and pricing mirror create_payment. Minor gap in that it doesn't restate per-field semantics, which the schema already covers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource with scope: 'Pay for 2 to 10 calls with ONE Lightning invoice, up to 2,000 sats.' It explicitly distinguishes itself from the create_payment sibling and names the tool categories it accepts, so an agent can identify it without reading any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is fully routed: use this for one-shot tools (text, translation, image, document, text_to_speech), use create_payment for calls/SMS/fax/email/video/music and other long jobs. The post-purchase workflow (pay the ONE invoice, then call each item's tool with that item's paymentId) is spelled out step by step.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_paymentAInspect
Create a Lightning invoice to pay for one AI service call. Returns JSON: { paymentId, lightningInvoice (BOLT11), amountSats, 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.
| Name | Required | Description | Default |
|---|---|---|---|
| ocr | No | 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. | |
| mode | No | Legacy alias for generate_video: 'standard'→768p, 'pro'→2K. Prefer 'resolution'. | |
| text | No | Required for text_to_speech: the exact text to synthesize (price is per-character by tier, locked to payment) | |
| prompt | No | Required for generate_text: the exact prompt (price calculated from char count, locked to payment) | |
| message | No | Required for send_sms: message text (max 1544 chars; billed per SMS segment, so longer or accented messages cost more) | |
| modelId | No | Optional. AI model ID from list_models. Omit for default (best) model. | |
| duration | No | Required for generate_video / animate_image: duration in seconds (5-15) | |
| quantity | No | 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. | |
| toolName | Yes | Tool name to pay for (e.g., 'generate_text', 'generate_image', 'generate_video', 'send_sms', 'place_call') | |
| resolution | No | 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. | |
| fileContext | No | For generate_text: include extracted file text if attaching a file (affects price) | |
| phoneNumber | No | Required for send_sms and place_call: phone in E.164 format (e.g., +14155550100) | |
| systemPrompt | No | For generate_text: include if using a custom system prompt (affects price) | |
| characterCount | No | 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. | |
| generate_audio | No | Accepted and IGNORED — H3 audio is native and always on, at no extra cost. There is no way to request a silent render. | |
| durationMinutes | No | Minutes 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. |
TDQS
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 well: it discloses the return JSON shape, the 10-minute invoice expiry, price locking, rejection/refund behavior for under-declared audio or character counts, and error responses for missing fields. It does not cover authentication, idempotency, or what happens if an invoice expires before payment, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but front-loaded: purpose, return value, call flow, and expiry come first, followed by parameter-specific pricing rules. Given 16 parameters and complex conditional pricing, the length is largely justified, though some schema-redundant detail could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, high-stakes payment tool with no output schema and no annotations, the description covers the essential flow, return contract, expiry, and the most failure-prone parameter rules. It is missing some operational context, such as idempotency and post-expiry behavior, so it is strong but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaningful cross-parameter guidance beyond the schema: it maps requirements to tool names, clarifies modelId optionality, warns to quote generate_video/animate_image with the same duration and resolution as execution, and explains that some params affect price. It repeats some schema details, so it falls short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Create a Lightning invoice to pay for one AI service call.' It immediately distinguishes this tool from siblings by explaining the one-payment-per-tool-call model and the list_models → create_payment → check_payment_status flow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use this tool, how often ('once per operation'), and what to do before and after ('Call list_models first'; then 'check_payment_status → call tool'). It also names alternatives and conditions, such as omitting modelId to use the default and including extra params only for tools whose pricing requires them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deblur_imageAInspect
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| paymentId | Yes | Valid payment ID (must be paid) | |
| resultKey | No | Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout. | |
| task_type | No | 'Image Debluring (GoPro)' for camera shake (default), 'Image Debluring (REDS)' for video frame blur, 'Image Denoising' for grain/noise | |
| imageBase64 | Yes | Base64-encoded blurry image (PNG, JPEG, WEBP) or data URI |
TDQS
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 well: it discloses cost (110 sats per image), latency (~2 min processing), payment mechanism (Bitcoin Lightning, no API key/signup), and the required create_payment step. It stops short of describing the return format or failure behavior, which matters for an image-processing tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The paragraph is compact and front-loaded: purpose first, then model provenance, best-for/not-for, supported modes, and finally cost/payment details. Every sentence contributes operational value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given four parameters with full schema coverage, no output schema, and no annotations, the description covers purpose, exclusions, cost, latency, and payment prerequisites thoroughly. It omits the return value shape and how results are delivered, which would complete the picture for a paid image-processing call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented in the input schema. The description adds useful context that denoising is supported, but no syntax or format detail beyond what the schema provides, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Recover detail from camera-shake and accidental motion blur') and names the underlying model (NAFNet). It clearly scopes what the tool is and is not for, though it never names a sibling tool to route against, leaving some ambiguity with upscale_image or restore_face.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'Best for' and 'NOT effective for' lists tell the agent exactly when to select and avoid this tool. It also explains the payment precondition via create_payment, leaving no inference needed for correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detect_nsfwAInspect
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| paymentId | Yes | Valid payment ID (must be paid) | |
| imageBase64 | Yes | Base64-encoded image (PNG, JPEG, WEBP) or data URI |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so description must cover behavior. It discloses cost (2 sats), payment flow, faster/cheaper than LLM, and returns label and boolean. Does not mention rate limits or destructive effects, but nothing contradictory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise paragraph front-loads core function, then adds pricing and payment details. No redundant sentences; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, description explains return values. Covers use case, pricing, payment flow, and image format. Complete for a simple two-param tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both params. Description adds context: paymentId must be valid/paid, imageBase64 can be data URI or formats. Reinforces workflow requirement, adding marginal value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool classifies image safety into normal/suggestive/explicit, returns a label and boolean flag. It distinguishes itself from siblings like detect_objects by specifying NSFW detection and unique pricing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states use for content moderation pipelines and is cheaper/faster than LLM. Mentions payment requirement via create_payment. Lacks explicit when-not-to-use or alternative tools, but context is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detect_objectsAInspect
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Comma-separated object names to detect (e.g. 'cat, dog, person') | |
| paymentId | Yes | Valid payment ID (must be paid) | |
| imageBase64 | Yes | Base64-encoded image (PNG, JPEG, WEBP) or data URI | |
| box_threshold | No | Confidence threshold for detection boxes (0-1, default 0.25) | |
| text_threshold | No | Confidence threshold for text matching (0-1, default 0.25) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It discloses the model (Grounding DINO), the payment mechanism, and the type of output (bounding boxes, scores). However, it lacks detail on error handling, image size limits, or format restrictions beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core purpose. Each sentence adds value, though the payment instruction could be slightly more integrated. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose, output type, payment model, and prerequisites. It lacks explicit error scenarios but is fairly complete given good schema coverage and no output schema. Minor gaps in behavioral details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all parameters. The description adds natural language context for the query parameter but does not elaborate on box_threshold or text_threshold beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool detects and locates objects by name, using Grounding DINO, and provides structured output (bounding boxes, confidence scores). This distinguishes it from sibling tools like 'analyze_image' or 'generate_image'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the payment flow (5 sats per image, Bitcoin Lightning, no signup) and the prerequisite 'create_payment'. It contrasts with vision LLMs but does not explicitly mention sibling tools like 'analyze_image' as alternatives or specify when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_imageAInspect
Edit an image with natural language instructions. Uses MAI-Image-2.6, ranked #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. 200 sats per edit, one flat price. Pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='edit_image'.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | Editing instructions describing what to change | |
| paymentId | Yes | Valid payment ID (must be paid) | |
| resultKey | No | Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout. | |
| resolution | No | Ignored: MAI-Image-2.6 has no resolution setting. Accepted for compatibility; every edit is 200 sats. | 1K |
| aspectRatio | No | Output aspect ratio (default: match_input_image, which keeps the input's shape) | match_input_image |
| imageBase64 | Yes | Base64 encoded image to edit | |
| outputFormat | No | Output format | jpg |
| returnBase64 | No | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does substantial work: flat 200-sat price, Lightning pay-per-request auth, no signup, and a stated return shape ('Returns JSON with image URL'). It omits sync-vs-async behavior and timeout/retry handling (only hinted at by the resultKey schema param), which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, followed by capability, return, and pricing in a logical order. The sentence about the model being 'ranked #3 on the Artificial Analysis leaderboard as of September 2026' is selection-irrelevant marketing and slightly dilutes an otherwise dense description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter, unannotated, no-output-schema tool, the description covers what an agent needs: what it does, what it returns, what it costs, and the mandatory create_payment precondition. Remaining gaps (sync/async, timeout) are partially covered by the resultKey parameter documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every one of the 8 parameters is already documented, including the unusual 'resolution is ignored for compatibility' note and the returnBase64 context-cost tradeoff. The description adds no parameter-level meaning beyond reinforcing the payment requirement, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Edit an image with natural language instructions') and enumerates capabilities (object addition/removal, style transfer, inpainting), which implicitly separates it from single-purpose siblings like colorize_image, upscale_image, or remove_background. It stops short of naming those siblings, so an agent must infer routing rather than being told.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit invocation prerequisite ('Requires create_payment with toolName=edit_image') and notes no API key/signup is needed, which is real usage context. However it never states when to prefer this over generate_image, remove_object, or restore_face, so alternative selection is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
end_voice_bridgeAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes | Session ID from open_voice_bridge |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses side effects: finalizes billing, returns refund link for unused deposit, and returns final transcript. Good disclosure beyond basic action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the main action, no unnecessary words. All information is essential.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one parameter and no output schema, the description adequately covers all needed information: what the tool does and what it returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description for sessionId. Tool description adds no further detail beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Hang up', the resource 'Voice Bridge call', and additional actions like finalizing billing and returning refund link and transcript. It effectively distinguishes from siblings like 'open_voice_bridge'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage after starting a voice bridge call, but no explicit guidance on when not to use or alternatives. Could mention that polling might be needed before ending.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
epub_to_audiobookAInspect
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| speed | No | Speech speed 0.5-2.0 | |
| voice | No | Voice 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 used. Ashley is 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. | |
| modelId | No | Optional. 3 voice tiers: OmniVoice Global (602+ langs), Inworld Premium (#1 ranked), Minimax Studio (voice clone). Omit for default. | |
| fileName | Yes | Original filename with extension (e.g., 'mybook.epub', 'document.pdf', 'story.txt'). Required to detect format. | |
| language | No | Narration 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 narration pick a voice whose language matches else it narrates in the voice's own (usually English) accent with no error. translateToLanguage is different: it is checked against the voice tier BEFORE payment, and a tier that cannot speak the target is refused with the tier that can. | English |
| paymentId | Yes | Valid payment ID (must be paid) | |
| epubBase64 | Yes | Base64-encoded book file (EPUB, PDF, or TXT) | |
| translateToLanguage | No | Translate 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. | |
| selectedChapterIndices | No | Chapter 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 the start/end — pass explicit indices if you need a specific set. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so richly: async behavior with jobId polling, expected 5-60+ min duration, minimum 500 sats cost, per-tier throughput (chars/sat), single-payment full-outcome model, and the requirement that payment must be completed first. This is exactly the operational context an agent needs before invoking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence front-loads the purpose and capabilities, followed by tier, pricing, async, and payment details in a logical order. It is dense and somewhat repetitive with the schema's own voice/tier text, but nearly every sentence carries operational value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 9-parameter, no-annotation, no-output-schema tool, the description covers the full lifecycle an agent must understand: prerequisite payment, async polling, timing bounds, cost floor, and voice-tier/translation constraints. Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema itself is extremely detailed about voice IDs, tier constraints, language vs translateToLanguage, and chapter indices. The description largely restates tier and payment facts rather than adding new parameter-level meaning, so it sits at the baseline for a fully documented schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — converting EPUB/PDF/TXT books into full audiobooks — plus the differentiators (chapter detection, multi-voice narration, optional translation). It is clearly distinguishable from siblings like translate_epub and text_to_speech without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the invocation context well: payment is required first via create_payment with toolName='epub_to_audiobook', the call is async and must be polled, and no API key/signup is needed. It does not explicitly name alternative sibling tools or state when-not-to-use this one, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
e_signatureAInspect
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Optional note shown to the signers. | |
| signers | Yes | 1-3 signers, each with a name and email. | |
| paymentId | Yes | Valid payment ID (must be paid). Price = 1000 sats flat. | |
| customerEmail | Yes | Your email — the signed copy is sent here once everyone has signed. | |
| documentBase64 | Yes | Base64-encoded PDF to be signed (a data: URI is accepted). Max 8MB. Must be a PDF. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does so excellently. It discloses the async turnaround time, that the API reply is only an acknowledgment, that polling is not needed, that the PDF is processed in memory and never stored, and that payment is via Bitcoin Lightning with no account or card.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the primary purpose, then covers pricing, async behavior, privacy, and payment prerequisites in a logical order. Every sentence adds meaningful operational detail; there is no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a paid, async, privacy-sensitive tool with no output schema, the description is remarkably complete. It covers what the tool does, the prerequisite payment step, expected delay, the acknowledgment-only reply, privacy handling, cost, and payment method. Nothing critical is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by explaining the flat 1000 sats pricing, the requirement to first create a payment with toolName='e_signature', and the expectation that the signed copy is emailed to the customer. It doesn't deeply elaborate every parameter, but the schema already does that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: send a document out for legally binding e-signature, with the signed copy emailed back. It clearly differentiates from siblings like send_email or send_fax by focusing on the signature workflow and provider-based fulfillment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context on when to use the tool: for legally binding e-signatures with multiple signers and async delivery. It also names the necessary prerequisite create_payment with toolName='e_signature' and explicitly says there is nothing to poll. It does not name alternatives or when-not-to-use cases, but the use case is sufficiently distinct.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimate_depthAInspect
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| paymentId | Yes | Valid payment ID (must be paid) | |
| resultKey | No | Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout. | |
| model_size | No | Model size — larger is more accurate, price is the same (default Large) | |
| imageBase64 | Yes | Base64-encoded image (PNG, JPEG, WEBP) or data URI |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses cost (5 sats per image), payment mechanism (Bitcoin Lightning, pay per request, no API key/signup), the required create_payment prerequisite, and that both raw greyscale and color visualization outputs are returned. It omits latency/timeout behavior and input size limits, but covers the major behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and resource, then efficient supporting details about outputs, cost, and prerequisites. Slightly dense with promotional asides ('3.8M+ runs', 'Structured geometry a vision LLM cannot produce'), but every sentence contributes relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly fills the gap by explaining both return values (raw greyscale depth map and color visualization) and the payment workflow. It is nearly complete for a paid, 4-parameter tool; only latency/timeout expectations are left implicit via the schema's resultKey hint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents paymentId, resultKey, model_size, and imageBase64. The description adds no additional parameter meaning beyond what the schema provides; baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Estimate per-pixel depth from a single photo', naming the model (Depth Anything V2) and the exact output (per-pixel depth map). This clearly distinguishes it from siblings like generate_3d_model or analyze_image, which produce different artifacts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear usage context: 'what a ControlNet, AR or 3D reconstruction pipeline consumes' and 'Structured geometry a vision LLM cannot produce' implies when this beats generic vision tools. The payment prerequisite (create_payment with toolName='estimate_depth') is explicit, but there is no explicit exclusion or named alternative sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_documentAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| modelId | No | Optional. Omit for default model. | |
| paymentId | Yes | Valid payment ID (must be paid) | |
| documentBase64 | Yes | Base64 encoded PDF or image |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description discloses cost (10 sats/page) and payment flow, but lacks details on size limits, supported languages, error handling, or whether operation is destructive. Adequate but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with purpose, then capabilities, cost, and prerequisite. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers key aspects: purpose, capabilities, cost, payment prerequisite. Lacks output format detail (though Markdown is mentioned) and error handling. No output schema to compensate, but overall sufficient for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with descriptions. Description adds value by explaining the paymentId must be obtained via create_payment and that documentBase64 is base64 encoded, beyond schema details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it extracts text from PDFs and images as clean Markdown, specifying handling of complex layouts, tables, handwriting, etc. This distinguishes it from siblings like analyze_image or convert_file.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly mentions prerequisite payment via create_payment with toolName and quantity, and that no API key is needed. Does not compare to alternatives like convert_file for document extraction, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_receiptAInspect
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| paymentId | Yes | Valid payment ID (must be paid) | |
| documentBase64 | Yes | Base64 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 the input really is a receipt before trusting the fields. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the burden. It discloses the payment flow, pricing (25 sats/page), dual-model pipeline, and robustness claims. The caveat about hallucinated JSON for non-receipts is present in the schema but not in the description, so the description alone understates that risk.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five sentences, each information-dense: purpose, method, output, robustness, and pricing/payment. No filler or redundant phrases; front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, return JSON fields, payment prerequisite, and edge-case handling. Since there is no output schema, listing the fields compensates. The hallucination warning is in the schema, so overall the description is complete for a paid extraction tool, though it could have briefly noted non-receipt handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds context for paymentId by referencing create_payment and hints at documentBase64 format via 'multi-page invoices' and 'crumpled receipts' — slightly beyond the schema's basic parameter description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Extract structured data from receipts, invoices, and financial documents' — a specific verb plus resource scope. It distinguishes itself from sibling tools like extract_document by narrowing to financial paperwork, and adds detail about the dual-model pipeline and output fields.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear usage context: requires create_payment, pay-per-request with Lightning, and no API key needed. It does not explicitly name a sibling alternative or state when not to use this tool, but the purpose and prerequisite are well explained.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_3d_modelAInspect
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | No | Text description for text-to-3D (max 1024 chars). Provide EITHER this OR imageBase64, not both. | |
| modelId | No | Optional. Omit for default model. | |
| paymentId | Yes | Valid payment ID (must be paid) | |
| imageBase64 | No | Base64 encoded image (PNG, JPEG, or WEBP) for image-to-3D. Provide EITHER this OR prompt, not both. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the burden. It transparently discloses async behavior ('Async — returns requestId, poll with check_job_status'), cost ('1600 sats per model'), and the authentication model ('no API key or signup needed'). It also names the underlying model (Tencent Hunyuan3D), adding significant behavioral context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is composed of six short, information-dense sentences: purpose, model/provider, async behavior, cost, payment method, and prerequisite. No fluff or repetition; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (async, paid, multi-input) and lack of output schema, the description covers all essential aspects: input formats, output type, provider, cost, payment flow, and follow-up polling. It is sufficiently complete for an AI agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds payment context ('Requires create_payment with toolName='generate_3d_model'') relevant to the paymentId parameter, and reinforces the exclusive-or relationship between prompt and imageBase64, though this is already in the schema. This modest addition justifies a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Generate a textured 3D GLB model from EITHER a photo OR a text prompt,' clearly stating the tool's function and output format. This distinguishes it from sibling 2D generation tools like generate_image and generate_video.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage constraints ('provide exactly one, not both') and outlines the async workflow ('poll with check_job_status') and payment prerequisite ('Requires create_payment with toolName='generate_3d_model''). While it doesn't explicitly compare to alternative 3D tools, no other 3D generation tool exists in the sibling list, so the guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_imageInspect
Generate an image from a text prompt. Returns JSON with image URL. Models: Grok Imagine 2 (fast creative generation, 100 sats), Seedream 5 Pro (most permissive content policy, 150 sats at 1K / 300 at 2K), GPT Image 2.6 (ranked #1 on the Artificial Analysis text-to-image leaderboard as of November 2026 at its maximum quality setting; this API uses the automatic setting; 1200 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'.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | Text prompt describing the image | |
| modelId | No | Optional. Omit for default (best) model. | |
| paymentId | Yes | Valid payment ID (must be paid) | |
| resultKey | No | Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout. | |
| aspectRatio | No | Optional output shape, default 1:1. Same price for every shape. | |
| imageBase64 | No | Optional base64 image for img2img generation |
generate_musicAInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| lyrics | No | Song 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], [post-chorus], [bridge], [instrumental], [solo], [outro]. Send only tags and no words for an instrumental. | |
| prompt | Yes | Music style with BPM, key, genre, mood, instruments (up to 2,000 chars). Example: 'E minor, 90 BPM, acoustic guitar ballad, male vocal' | |
| modelId | No | Optional. Omit for default model. | |
| duration | No | Song length in seconds, 15-300. THE PRICE (5 sats/second) — must match the duration sent to create_payment. Default: 15 | |
| paymentId | Yes | Valid payment ID (must be paid) | |
| resultKey | No | Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout. | |
| lyricsAbout | No | Optional, with lyricsAddon: what the lyrics should be about. Omit and the subject is inferred from your music prompt. | |
| lyricsAddon | No | Set true to have the lyrics written for you (+25 sats, billed on the song's own invoice). Must also be sent to create_payment. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses critical behavior beyond annotations: pricing at 5 sats/second, the 15-300 second duration range, the +25 sats lyrics add-on, Lightning payment without signup, and the silent shortening risk when words share a tag line. Also states the return format as a 44.1 kHz WAV URL.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Information is front-loaded and every sentence carries operational value. It is somewhat dense and long, but not padded with irrelevant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the full call flow: payment prerequisite, duration/price coupling, prompt and lyrics structure requirements, optional lyric generation, and return format. For a complex paid generation tool without an output schema, this is complete enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the schema already documents all parameters well. The description adds useful semantics beyond the schema, especially the price/duration binding and the requirement that paymentId and duration must match create_payment.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('generate_music' / full song) and clearly distinguishes vocal songs from instrumental beds. An agent can tell exactly what this tool produces from the first sentence.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains both usage modes: provide lyrics for a vocal song, or send only structure tags for an instrumental. It also names the prerequisite create_payment call and the lyricsAddon alternative when the user does not want to write lyrics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_textAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | The text prompt or question | |
| modelId | No | Optional. Omit for default (best) model. | |
| fileName | No | Name of the attached file | |
| maxTokens | No | Max tokens in response | |
| paymentId | Yes | Valid payment ID (must be paid) | |
| fileContext | No | Extracted file text to include as context | |
| imageBase64 | No | Base64 data URI for vision analysis (best model only) | |
| systemPrompt | No | Optional system prompt |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does substantial work: it discloses per-character pricing, BTC-pegged rates re-quoted hourly, the 402 challenge as authoritative price, auto-upgrading models, and a no-API-key Lightning payment flow. It omits return-shape, latency, and failure behavior, so it is rich but not complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and keeps the dense pricing/model/payment detail in a single tight paragraph. Given the tool's complexity the length is justified, though the parenthetical pricing and rate caveats add some density an agent could skim past.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter, no-annotation, no-output-schema tool, the description covers purpose, payment gating, model selection, and file context well. The notable gap is that with no output schema present, nothing describes what a successful response actually returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning to modelId by naming the models, their tradeoffs (context length, languages, best vs best value), and defaulting behavior, and it links fileContext to document Q&A. Other params are left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Generate text') and immediately narrows scope with model choices and capabilities (Q&A via fileContext). It explicitly separates itself from the image path by pointing at analyze_image, letting an agent distinguish it from siblings without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context (text completion, document Q&A), an explicit exclusion ('For images, use the analyze_image tool'), and a prerequisite workflow ('Requires create_payment with toolName="generate_text"'). It does not, however, distinguish this from other text-oriented siblings such as ai_call or multilingual_ask, which an agent must resolve on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_videoAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | Text prompt describing the video | |
| modelId | No | Optional. Omit for default model. | |
| duration | Yes | Duration in seconds (5-15) | |
| paymentId | Yes | Valid payment ID (must be paid) | |
| resolution | No | Output 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, 1080p→2K. | 768p |
| generate_audio | No | Accepted and IGNORED — H3 audio is native and always on, at no extra cost. There is no way to request a silent render. | |
| reference_audio | No | Optional 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 be sent alone — at least one reference_image must accompany it. For a music video, slice your track and pass one slice per shot. Free: does not change the price. | |
| reference_image | No | Optional 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses async behavior (returns requestId for polling), payment requirement, and that audio is always on (no silent render). Explains retired resolution rungs and the constraint on reference_audio. This goes beyond the schema, which has no annotations, so the description fully carries behavioral transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
While detailed, every sentence serves a purpose—pricing, async flow, parameter constraints, and behavioral notes. Structured logically from core purpose to specifics, with clear separate sentences per aspect. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all necessary operational details: payment prerequisite, async polling, parameter constraints (audio requires image), resolution behavior, and retrieval flow. Given the complexity and absence of an output schema, the description is complete for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds crucial semantics for each parameter: resolution explains retired rungs and default, generate_audio is ignored, reference_audio requires a reference_image, and reference_image is for character consistency. The schema only lists definitions, so the description enriches meaning significantly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Generate cinematic video from a text prompt.' Clearly distinguishes from siblings like generate_image and generate_music, and names the model (MiniMax H3) and key capabilities (native audio).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage instructions: async operation requiring create_payment, the need to pass reference_audio with at least one reference_image, and how resolution and audio options behave. Also notes that generate_audio is ignored and that 2K is upscaled from 768p, giving practical when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cost_estimateARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| chars | No | Character count — required for TTS and translate | |
| model | No | Optional model id for services with multiple tiers | |
| pages | No | Page count — for OCR (default 1) | |
| minutes | No | Audio length — required for transcribe-audio | |
| seconds | No | Video duration — required for video / video-from-image | |
| service | No | Service id (e.g. 'text-to-speech', 'translate', 'image', 'video', 'transcribe-audio', 'ocr'). Omit to list all services. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set readOnlyHint=true and idempotentHint=true. Description adds 'No payment required, no side effects' which reinforces safety. Also describes return values (amount_sats, breakdown, currency). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, no filler. Front-loaded with purpose. Every sentence adds value: purpose, usage context, examples, return format, alternative behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, usage, examples, return fields, and behavior with/without params. No output schema but description mentions return structure. Could clarify that service must be a valid identifier from catalog, but that's minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for each param. Description adds real usage examples (service=text-to-speech&chars=1500) and explains that omitting params lists all services. This goes beyond schema details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it provides an exact sat cost quote for a service before payment. Verb 'Get' and resource 'cost estimate' are specific. Distinguishes from sibling tools like create_payment, check_payment_status by focusing on pre-payment price checking.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Useful for budget-aware agents to price-check before committing' which sets context. Provides example usage patterns (service=...). Does not explicitly state when not to use or alternatives, but context from sibling tools implies this is the estimation step.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_error_codesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly and idempotent hints; the description adds 'No payment required' as extra behavioral insight, without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: the first states the purpose with concrete examples, the second gives actionable usage guidance. No wasted words, front-loaded with key info.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides purpose and usage guidance for a simple no-parameter tool; while it could detail the output format, the examples suffice for an agent to understand the expected result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is complete; the description naturally has no need to explain parameters, meeting the baseline for 0-param tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool retrieves a machine-readable catalog of error codes, with specific examples, clearly distinguishing it from sibling tools by focusing on error code retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It advises branching on error_code over parsing text and notes no payment required, providing clear context for when to use this tool, though it does not explicitly exclude alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_job_resultARead-onlyIdempotentInspect
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, srt, vtt } (a result too large for one reply comes back without segments, srt and vtt, with resultTruncated, omitted and fullResultUrl: a free link to the whole result); 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 }. 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). 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 its own page also returns RESULT_NOT_AVAILABLE. 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.
| Name | Required | Description | Default |
|---|---|---|---|
| jobType | Yes | Must 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-standard/video-fal-pro = the fallback jobType generate_video returns when the primary video model is at capacity. | |
| paymentId | No | The paymentId that bought this job. On a failed or refunded 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). | |
| requestId | Yes | The requestId returned by the original async tool — same ID used with check_job_status |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite readOnly/idempotent annotations already covering safety, the description adds substantial behavioral context: per-jobType result shapes, truncation fallback with fullResultUrl, temporary ~1h URL validity, refund error codes (RESULT_NOT_AVAILABLE, L402_REFUND_ISSUED), and refund-claim flow via /recover. This goes well beyond what the annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core rule and prerequisite, then organized by jobType. It is dense and long, with some redundancy in refund scenarios, but nearly every sentence carries actionable information for correct invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden of explaining return values, and it enumerates the shape per jobType, truncation handling, and refund cases. For a 3-param idempotent read tool, nothing an agent needs is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline would be 3, but the description adds real meaning: it maps jobType values to the output shapes they produce and explains the paymentId refund-claim behavior. It does not restate the enum-to-tool mapping already in the schema, but contributes useful conditional logic around paymentId.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource: retrieve the final output of a completed async job, and scopes it by naming the prerequisite sibling check_job_status and excluding synchronous tools. An agent can distinguish it from check_job_status and await_result without inspecting any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('Call ONLY after check_job_status returns status=COMPLETED'), what happens when misused (error), and an exclusion ('Do NOT use for synchronous tools'). This is a complete routing rule with no inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_model_pricingARead-onlyIdempotentInspect
Get pricing for a specific model by ID. No payment required.
| Name | Required | Description | Default |
|---|---|---|---|
| modelId | Yes | The AI model database ID from list_models. A numeric string ("16") is accepted and coerced. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, and the description adds a valuable behavioral note: 'No payment required.' This goes beyond the safety profile, clarifying the endpoint will not incur a charge. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, both purposeful: the first states the core operation, the second provides a useful billing caveat. No filler words or redundancy. Front-loaded with the verb and object.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only, idempotent lookup with one fully documented parameter, the description notably covers the operation and an important behavioral caveat. The lack of return-format information is acceptable given the tool's simple nature and absence of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the description does not add material meaning beyond 'by ID.' The schema already explains the modelId comes from list_models and that numeric strings are accepted. The description adds no new semantic detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action ('Get pricing') and resource ('for a specific model by ID'). It is distinct from sibling tools like get_cost_estimate, though it does not explicitly name alternatives to aid disambiguation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as list_models or get_cost_estimate. It implies usage through 'by ID' but provides no prerequisites, exclusions, or alternative routing. 'No payment required' does not explain when to choose this.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_modelsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Filter by service category (matches tool names) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with readOnlyHint and idempotentHint annotations already present, the description adds meaningful behavioral facts: it is free and requires no payment, it returns a JSON array with a specific shape, and models with isDefault=true affect create_payment when modelId is omitted. It also reassures that repeated calls are safe, extending the idempotent hint with practical guidance. No annotation is contradicted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is densely informative with a clear front-loaded purpose and a logical flow: what it returns, when to call it, how the default flag behaves, how to filter, and cost/safety notes. Each sentence contributes value, though 'free' and 'requires no payment' are mildly redundant and the default-model detail could be considered extra context for create_payment rather than list_models itself.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one optional parameter and no output schema, the description covers everything an agent needs: return format, exact fields, meaning of isDefault, category filtering, and cost/ree behavior. It fully prepares the agent to call correctly and interpret results, making further documentation unnecessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single optional category parameter is already described as a filter matching tool names. The description adds only a slight clarification that filtering narrows results to a specific tool, which is a near paraphrase rather than substantive new semantics. The schema carries the parameter heavy lifting, so a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Discover') with a clear resource ('available AI models') and enumerates the exact attributes returned: numeric IDs, tier labels, capabilities, and per-call pricing. It distinguishes itself from siblings like get_model_pricing by framing the tool as the discovery/preparation step for create_payment. An agent can confidently understand what this tool does without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to call this before create_payment to find the right modelId, and explains filtering by category to narrow results to a specific tool. It provides clear usage context but does not explicitly contrast with overlapping siblings such as get_model_pricing, so it stops short of a full when/when-not alternatives statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_planned_servicesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and idempotentHint. Description adds that it returns a sorted JSON array with specific fields, and that it's safe to call repeatedly, providing useful behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: three sentences that front-load the purpose, then detail output and usage guidance. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and no output schema, the description fully specifies the return format and behavior. No gaps remain for an agent to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so baseline is 4. Description adds value by explaining the output format and sorting, which helps an agent understand what the tool returns without needing parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb 'List' and resource 'planned services' with current vote counts. It distinguishes from sibling tools like vote_on_service by clarifying this is for viewing, not voting.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states no payment required, it's a free discovery tool, and directs to use the slug values with vote_on_service for casting votes. This clearly explains when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
merge_pdfsAInspect
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | Array of base64-encoded PDF files (minimum 2) | |
| paymentId | Yes | Valid payment ID (must be paid) | |
| resultKey | No | Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does so well: it discloses the temporary return URL, roughly one-hour validity, minimum and maximum file counts, array-order concatenation, pricing, and Lightning payment requirements. It stops short of failure modes, file-size limits, or retry behavior for resultKey, so it is strong but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core operation and then efficiently layers in return behavior, limits, pricing, alternatives, and payment prerequisites. There is no wasted text, and each sentence contributes operational context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of annotations and an output schema, the description supplies the missing return-value, payment, cost, and file-ordering context that an agent needs. It is complete enough for correct selection and invocation, with only minor optional details like error formats omitted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds useful semantics beyond the schema by explaining that files are concatenated in array order and by tying paymentId to the create_payment flow, though it does not elaborate on resultKey behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: merging multiple PDF files into one document. It also explicitly distinguishes the tool from convert_file, so an agent can identify its exact purpose without inspecting the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the relevant alternative, convert_file, and the condition that selects it: format conversion such as DOCX to PDF. It also states the create_payment prerequisite with toolName='merge_pdfs', giving clear contextual guidance for invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
multilingual_askAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Standard | Better | Best. Best is Kimi K3 and costs materially more. Must match the create_payment quote. | |
| language | Yes | Language to answer in. English name ('Igbo'), ISO-639 code ('ig'), or a rare-language code ('wal'). Rejected before payment if unsupported. | |
| question | Yes | Your question, in your own language. Max 4000 characters. | |
| paymentId | Yes | Valid payment ID (must be paid), quoted for THIS language and tier. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it delivers: payment requirement, one-payment model, translation pipeline, LLM vs MADLAD-400 fallback tiers, uneven rare-language quality, published per-language quality, and pricing structure. It does not specify whether the answer returns synchronously or via a job/result mechanism, which is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but information-dense and front-loaded with the core action, followed by important operational and pricing details. Every sentence contributes substantive context, though the structure is a bit sprawling with several clauses in quick succession.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a paid endpoint with no output schema and meaningful dependencies, the description is quite complete: it covers the payment prerequisite, language coverage, fallback behavior, quality variability, and cost model. It could additionally explain the answer return format or whether the call is asynchronous, but the core information needed to invoke it correctly is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaningful cross-parameter semantics: the create_payment quote must match the chosen language and tier, the model choice must match that quote, and the rare-language path costs more. It also highlights that unsupported languages are rejected before payment, reinforcing the language parameter's validation behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('ask'), a specific resource (frontier AI), and the distinctive same-language behavior in the first sentence. It clearly differentiates itself from translation-only siblings like translate_text and translate_rare_language by framing the tool as question-answering, not translation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly establishes when to use the tool (ask a question in your own language and get a frontier-model answer back in that language) and gives a strong prerequisite: create_payment must be called with toolName='multilingual_ask' and the intended language. It does not explicitly name sibling alternatives to exclude, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_voice_bridgeAInspect
Open a phone call you drive one turn at a time: we dial, transcribe what the other side says, and speak whatever text you send. You call voice_bridge_say to talk, poll_voice_bridge to read transcripts, end_voice_bridge to hang up. ⚠ Turn-based, NOT full-duplex conversation. After the callee stops talking, about 2 seconds of ours pass before your reply starts to play (we recognise the end of their turn, then speech starts under a second after you send the text), on top of your own model's thinking time: slower than the ~0.8s a natural back-and-forth needs. The callee cannot interrupt you while you speak. Pass filler (a short phrase such as 'One moment, please.') to cover a slow reply: we say it once if you have not started answering about 3.5 seconds after they stop. The loop: poll_voice_bridge with waitMs (e.g. 20000) returns when the callee has finished talking; answer with a short voice_bridge_say (one or two sentences); repeat. Good for: leaving a spoken message, navigating a voice-driven IVR (keypad tones are not supported yet), reading something out, a slow exchange where a pause is fine. For a real conversation with a human, use ai_call — we run the agent at conversational speed and return the transcript. Unused deposit time is refunded automatically when the call ends — including when the callee hangs up. Pass refundAddress (a Lightning address your user gave you; never invent one) 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 the content of the call must never leave your side, and the pace can tolerate a pause between turns. 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.
| Name | Required | Description | Default |
|---|---|---|---|
| codec | No | PCMU 8kHz (default, universal) or L16_16000 for HD voice when both endpoints support it | |
| filler | No | Optional. A short phrase (at most 60 characters) we say ONCE when you are slow: if about 3.5 seconds pass after the callee stops talking and your voice_bridge_say has not started, the callee hears it, so they know you are still there. Example: "One moment, please." Write it in the callee's language. It is made while the phone rings and spoken in our default voice. It plays at most once until you speak again, the callee is not heard while it plays, and poll_voice_bridge then shows a filler_played event (do not say "one moment" yourself). Leave it out for a voicemail or a phone menu, where it is noise, and when you wait for long pauses (quietMs of several seconds): it would fire inside the pause and cut into their next words. | |
| greeting | No | 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. | |
| language | No | BCP-47 language tag (default en-US). See /api/l402/voice-bridge/coverage for the matrix. | |
| paymentId | Yes | Valid payment ID from create_payment (toolName=voice_bridge_open) | |
| sttEnabled | No | Default true. Set false for TTS-only broadcast calls. | |
| ttsEnabled | No | Default true. Set false to bring-your-own-audio via voice_bridge_say. | |
| phoneNumber | Yes | Destination phone number in E.164 format (e.g., +14155550100) | |
| refundAddress | No | Lightning address of YOUR user (for example name@wallet.com), only if the user gave you one. Never invent or guess an address: the refund is paid out at once and cannot be called back. The unused deposit is sent here when the call ends. With no address, or if that payment fails, the refund waits as an LNURL-withdraw link. | |
| durationMinutes | No | Deposit for N minutes, 2-30 (default 3). Unused time refunded. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations carry only openWorldHint, so the description bears the load and delivers: turn-based not full-duplex, ~2s turn latency with the ~0.8s natural target as a comparison, callee cannot interrupt, filler fires at ~3.5s and only once, unused deposit refunded automatically on hangup including callee-initiated, refund paid out irreversibly vs. held as an LNURL-withdraw claim, transcripts GC'd after 30 minutes, audio never persisted, and premium-rate/satellite ranges refused. This is exactly the behavioral context annotations don't provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core concept and the poll/say loop, and every paragraph is information-dense rather than filler. It is long, and the filler behavior plus refund mechanics are restated across the description and schema, which is some avoidable duplication for a definition this size.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter, annotation-thin, no-output-schema tool, the description covers payment setup, call loop, timing budget, refund path, privacy, and failure modes. An agent has everything needed to open the call, drive it, and close it out correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds real meaning beyond the schema: it tells the agent to call create_payment for the exact BTC-pegged figure rather than guessing a deposit, and it stresses 'never invent' a refundAddress and why (immediate, non-reversible payout). The filler and greeting semantics are mostly duplicated in the schema, so it earns one step above baseline rather than more.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening states a specific verb and resource ('Open a phone call you drive one turn at a time') and immediately explains the mechanism: we dial, transcribe, and speak your text. It names the three loop partners (voice_bridge_say, poll_voice_bridge, end_voice_bridge) and contrasts itself with ai_call and place_call, so an agent can place it among siblings without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('leaving a spoken message, navigating a voice-driven IVR, reading something out, a slow exchange') and an explicit 'When NOT to use' block naming ai_call for managed conversational calls and place_call for one-shot TTS/broadcast, plus the exclusion for cases where live polling adds no value. Prerequisites (create_payment with toolName='voice_bridge_open') are stated up front.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
place_callADestructiveInspect
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. The message plays first. Then a short spoken notice names the service and how to stop these calls: call the number back, or go to sats4ai.com/c. The notice fits 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.
| Name | Required | Description | Default |
|---|---|---|---|
| message | No | Text to speak via TTS; must fit prepaid minutes including the closing spoken notice (about 12 s). Provide this OR audioUrl. | |
| audioUrl | No | Public URL to audio file. Provide this OR message. | |
| paymentId | Yes | Valid payment ID (must be paid) | |
| phoneNumber | Yes | Phone number in E.164 format (e.g., +14155550100) | |
| durationMinutes | No | Duration in minutes (1-30). Required for audioUrl. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only flag openWorldHint and destructiveHint; the description goes far beyond by disclosing the payment/screening pipeline, that the message plays before the spoken notice, opt-out mechanics, that payment is retained during review and not refunded for confirmed violations, and the retention windows for transcripts and context records. This is exactly the kind of behavioral detail an agent cannot get from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded, but the body is a long wall of compliance and retention legalese (hourly cleanup, 30-day cleanup, token replacement, appeal pricing, de-identification caveats) that is disproportionate for tool selection and invocation. Much of this text does not earn its place in a tool description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, open-world, payment-gated tool with no output schema, the description covers prerequisites, screening behavior, and policy constraints thoroughly. The main omission is any indication of what the tool returns (job id, call status) or how to track the placed call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so message/audioUrl/paymentId/phoneNumber/durationMinutes are already documented. The description still adds value by exposing the cross-tool dependency (create_payment with toolName='place_call' and phoneNumber) and the constraint that the closing notice consumes part of the prepaid minutes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'place an automated phone call to deliver a spoken message or play audio' — which is concrete and actionable. However, it never distinguishes itself from the sibling `ai_call`, `confirm_ai_call`, or `open_voice_bridge`, leaving ambiguity about which call-related tool to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear use case ('notifying a human, delivering alerts, or reaching someone who isn't online') and an explicit prerequisite (create_payment with toolName='place_call' and phoneNumber). It lacks any when-not guidance or named alternative, so the agent must infer the boundary with ai_call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
poll_voice_bridgeAInspect
Fetch new transcript events from an open Voice Bridge call since the last cursor. Returns partial + final transcripts + system events. Pass waitMs (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.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Last seq number seen (default 0 = start from beginning) | |
| waitMs | No | 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. | |
| quietMs | No | 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. | |
| sessionId | Yes | Session ID from open_voice_bridge |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does substantial work: it discloses the returned event types, the long-poll ceiling (max 25000), the definition of 'finished talking' (final transcript + quiet period or state change), that partials alone do not end the wait, and that there is no additional charge. It stops short of covering session-end behavior or error conditions, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and return payload, then moves to the waitMs decision. It is slightly dense and repeats the wait/poll tradeoff that the schema also encodes, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter, no-annotation, no-output-schema tool this covers the essentials: what comes back, how to paginate with cursor, and how to block versus poll. Only edge cases (session termination, error surfaces) are left unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description goes beyond by explaining the practical intent of waitMs (e.g. 20000) and the polling cadence to use when it is omitted. It reinforces cursor semantics as 'since the last cursor' in context of a polling loop rather than merely restating field types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetch new transcript events from an open Voice Bridge call since the last cursor') and immediately enumerates what is returned (partial transcripts, final transcripts, system events). This clearly separates it from siblings like open_voice_bridge, voice_bridge_say and end_voice_bridge, which are named or implied elsewhere in the definition.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit either/or: use waitMs to long-poll until the callee finishes speaking, or poll in a loop at ~500ms-1s and decide completion yourself. It even explains the motivation ('you do not answer in the middle of their sentence') and notes no extra payment, so the agent can choose a strategy without inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
receive_faxAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| ocr | No | Add OCR text extraction (+200 sats). Default: false. | |
| Yes | Email address to deliver the fax PDF to | ||
| paymentId | Yes | Valid payment ID (must be paid) | |
| fromNumber | Yes | Expected sender fax number in E.164 format (matched by last 10 digits of caller ID) | |
| callback_id | No | Optional opaque correlation string (max 128 chars). Echoed in the webhook body. | |
| callback_url | No | Optional HTTPS webhook URL. POSTed (HMAC-signed) when fax is delivered. Public HTTPS only — no loopback/RFC1918. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite only the 'openWorldHint' annotation indicating external interaction, the description richly discloses behavioral traits: 24-hour receive window, caller ID matching (last 10 digits), email delivery, optional OCR (+200 sats) with partial refund on failure, optional HMAC-signed webhook callback, and the no-refund policy to prevent squatting. Payment via Lightning is also noted. These details go well beyond the annotation's minimal information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph of ~120 words, efficiently covering the main purpose, constraints, optional features, and policies. It is front-loaded with the primary use case. While dense, every sentence adds necessary information, making it concise for the tool's complexity. Minor improvement could be bullet-style structure, but current form is clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description effectively explains the delivery process (email, OCR, webhook) and constraints. It covers the immediate action (opening a window) and post-delivery behavior. However, it does not describe the immediate tool response (e.g., a confirmation or window ID), which may be needed for subsequent steps. Still, the description is fairly complete for a tool with offline delivery.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter having a description. The description adds value by explaining the OCR add-on cost, the HMAC-signed webhook behavior, and the caller ID matching for fromNumber. It contextualizes the parameters within the use case. However, it does not add significant detail beyond the schema for email, paymentId, and callback_id, keeping the score just above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'receive a fax' at a shared number, with delivery to email. It specifies the use case ('when expecting a fax back') and distinguishes from sending (sibling 'send_fax' exists). The verb 'receive' and resource 'fax' are specific, and the description contrasts with dedicated number rental, making purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit context for when to use the tool ('When you're expecting a fax back') and mentions the 24-hour window and no-refund policy. It does not directly state when not to use it, but the context is clear. Alternative tools (like send_fax) exist among siblings, but no explicit exclusion is given. The guidance is helpful but lacks explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_backgroundAInspect
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| paymentId | Yes | Valid payment ID (must be paid) | |
| resultKey | No | Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout. | |
| imageBase64 | Yes | Base64-encoded image (PNG, JPEG, WEBP) or data URI |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the burden and does well: discloses cost (44 sats/image), auth model (Lightning payment, no API key/signup), output format (transparent PNG), and that the endpoint auto-upgrades models — a real behavioral-drift disclosure. Gaps: no latency/timeout expectations, failure handling, or image size limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and return value are front-loaded, followed by capability and payment constraints — a sensible order. Some benchmark marketing ('Sm 0.901 on DIS5K', 'state-of-the-art') is borderline filler but arguably supports model-choice trust.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations, yet the description covers the return artifact (transparent PNG) and the payment prerequisite. It omits how the result is delivered (inline base64 vs URL) and what happens on timeout, leaving a small gap for an agent handling the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description adds genuine value by explaining where paymentId comes from (create_payment with toolName='remove_background'), which the schema only calls 'Valid payment ID'. It says nothing about resultKey or accepted input formats beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (remove background) and a concrete output (transparent PNG), plus the underlying model (BiRefNet). It is clearly distinct from remove_object/edit_image by name and scope, though it never explicitly contrasts with those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the concrete prerequisite: 'Requires create_payment with toolName="remove_background"' before invocation, plus payment method detail. It does not explicitly say when to prefer this over remove_object or upscale_image, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_objectAInspect
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | What to remove (e.g. 'person', 'car', 'watermark', 'text') | |
| paymentId | Yes | Valid payment ID (must be paid) | |
| resultKey | No | Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout. | |
| imageBase64 | Yes | Base64-encoded image (PNG, JPEG, WEBP) or data URI | |
| box_threshold | No | Detection confidence threshold (0-1, default 0.25) | |
| text_threshold | No | Text matching threshold (0-1, default 0.25) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden well: it discloses the pricing model (130 sats per image, Lightning, no API key/signup), the payment prerequisite, and the underlying pipeline. Gaps remain on failure/refund behavior and what happens to the payment if detection finds nothing, which matters for a paid mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and the no-mask differentiator, followed by the cost and payment prerequisite — good ordering. The 'Grounding DINO (ECCV 2024) with Bria Eraser inpainting' clause is closer to marketing than operational guidance, costing a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description never says what is returned (an erased image, presumably base64) or how resultKey replays a result after a timeout — that only lives in the schema. For a 6-parameter paid tool with no annotations and no output schema, this leaves a real gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters including box_threshold and text_threshold are already documented in the schema. The description only reinforces the 'query' semantics with examples; it adds no syntax, format, or tuning guidance beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('remove unwanted objects from images') plus the key differentiator 'by describing what to remove — no mask needed', which separates it from remove_background, edit_image, and detect_objects in the sibling list. Concrete examples ('person', 'car', 'watermark') make the intent unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear prerequisite chain: 'Requires create_payment with toolName="remove_object"', plus the free-text instruction ('just say ...'). It does not explicitly say when to prefer this over remove_background or edit_image, so it stops short of full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_cardAInspect
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| sub | No | stat: small line above the number, e.g. a year | |
| left | No | versus: left value (up to 22 chars) | |
| size | No | Output size (default 1920x1080) | 1920x1080 |
| text | No | quote: the quoted words (up to 30 chars) | |
| items | No | list: 1-6 items, each up to 40 chars; the last revealed item is drawn in the accent colour | |
| label | No | stat: caption under the number (up to 60 chars) | |
| lines | No | headline: 1-3 lines, each up to 40 characters | |
| right | No | versus: right value, drawn in the accent colour | |
| theme | No | Optional hex colours: background, foreground, accent, muted (default: near-black ground, Bitcoin-orange accent) | |
| title | No | list: small caps title (up to 40 chars) | |
| value | No | stat: the big number (up to 12 chars), e.g. '34 Md $' | |
| format | No | Output format (default png) | png |
| source | No | quote: attribution line (up to 60 chars) | |
| variant | Yes | Card layout | |
| revealed | No | list: how many items are shown (default all) — render 1..N for a beat-by-beat reveal | |
| paymentId | Yes | Valid payment ID (must be paid) | |
| left_label | No | versus: small label over the left value (up to 28 chars) | |
| show_right | No | versus: false renders the left column only (first beat of a two-state reveal) | |
| accent_line | No | headline: index of the line drawn in the accent colour | |
| right_label | No | versus: small label over the right value |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and delivers an exceptionally detailed disclosure: deterministic layout with exact text fidelity, beat-by-beat reveal semantics ('text never shifts'), script/emoji rendering limits, signed-URL expiry (2 h, 'image is not inlined'), cap enforcement 'refused BEFORE payment', and Lightning pricing. This is a model disclosure profile for a paid render tool; there is no contradiction with any structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every clause earns its place: core capability first, then determinism, use cases, reveal behavior, font coverage, return shape, caps, and pricing — in that order. For a tool with 20 parameters, five variants, no annotations, and no output schema, the length is warranted density, not bloat. There is no filler or boilerplate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema and no annotations, the description covers the return shape ({ url, width, height, format, mime, expires_in_seconds }), the fetch-the-URL behavior, the payment prerequisite and price, validation caps, and font limits. An agent could invoke this tool correctly with only the description plus the already-descriptive schema; the only minor ellision is error-handling for invalid/expired payments.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and the description genuinely adds beyond the schema by composing parameters into patterns ('Lists and comparisons REVEAL one beat at a time (revealed:N / show_right:false)') and by tying paymentId to the create_payment prerequisite. The count/length caps are already encoded in the schema (1-6 items, 1-3 lines), making the description's cap mention partly redundant, so it stops short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Render'), a specific resource (a typographic card with five named variants: headline, versus, list, stat, quote), and concrete output constraints (PNG/JPEG at 1920x1080 or 2560x1440). The 'no AI model... which no image generator can promise' line explicitly distinguishes it from sibling image-generation tools, so an agent can select it correctly without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names concrete use cases ('video title cards and slides, thumbnails, quote cards and social posts') and the required companion flow ('Requires create_payment with toolName='render_card''). The determinism contrast with image generators gives implicit when-to-use guidance, though no sibling tool is explicitly named as the alternative and there is no explicit when-not-to-use statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_refundAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| No | Optional email address for follow-up | ||
| invoice | Yes | Lightning address (e.g., user@wallet.com) or bolt11 invoice for the refund | |
| feedback | No | Optional description of what went wrong (max 2000 chars) | |
| paymentId | Yes | The payment ID from a failed service call |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and succeeds. It discloses a side effect (sends email to operator), duplicate-detection behavior (returns existing LNURL instead of creating a duplicate), and the 30-day expiration of refund links. This goes well beyond basic expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence adds value. It front-loads the core purpose, then provides critical exceptions and warnings without redundancy. The structure is logical and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 4 parameters, no output schema, and no annotations, the description covers the use case, exclusions, side effects, and expiry thoroughly. However, it doesn't specify what the agent should expect in the successful response for the normal manual ticket creation (e.g., a ticket ID), which is a minor gap given the absence of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are already fully documented. The description does not add additional parameter-specific meaning; it focuses on behavioral context. Baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Open a MANUAL 48-hour refund review ticket for a service that FAILED (error, timeout, wrong output).' It also distinguishes itself from automatic refunds by explicitly naming the sibling services (ai_call, voice_bridge) and instructing not to use this tool for those cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use ('for a service that FAILED') and when-not-to-use guidance ('DO NOT call this for unused-minute refunds on metered services'). It also explains the fallback behavior for metered payments with pending LNURL refunds and includes the 30-day claim window, which is critical for agent decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_faceAInspect
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| upscale | No | Output upscale factor 1-4 (default 2) | |
| fidelity | No | Fidelity to input: 0.0 = max quality enhancement, 1.0 = max identity preservation (default 0.5) | |
| paymentId | Yes | Valid payment ID (must be paid) | |
| resultKey | No | Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout. | |
| imageBase64 | Yes | Base64-encoded image containing faces (PNG, JPEG, WEBP) or data URI | |
| face_upsample | No | Upsample restored faces (default true) | |
| background_enhance | No | Also enhance the background (default true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full load and mostly succeeds: it discloses cost (25 sats/image), the payment model (Lightning, no signup/API key), that background enhancement and face upsampling happen by default, and that the model is upgraded server-side under a stable endpoint. It omits what is returned on success and what happens on failure or timeout, which is a notable gap for a paid, non-deterministic-generative call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is correctly front-loaded in sentence one, but several later sentences are marketing rather than decision-relevant ('NeurIPS 2022, state-of-the-art FID 32.65 on CelebA-Test', 'Stable endpoint — model upgrades automatically as SOTA evolves'). The benchmark score and venue do not help an agent decide or invoke.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Seven parameters, two required, no output schema and no annotations means the description must be thorough. Payment prerequisites and cost are well covered, but the return value is never described and the resultKey idempotent-retry mechanism appears only in the schema, leaving the agent unprepared for async behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description's fidelity sentence and 'also enhances background and upsamples' largely restate what the schema already documents for fidelity, background_enhance, and face_upsample, and it adds no practical guidance on choosing a fidelity value or a re-call strategy with resultKey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Restore ... faces') plus the exact failure modes it targets (blurry, damaged, AI-generated), so the agent immediately knows what capability this is. It never mentions the near-duplicate siblings deblur_image or upscale_image, so the agent must infer the boundary itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a genuinely useful prerequisite: 'Requires create_payment with toolName="restore_face"', which tells the agent this cannot be called cold. But there is no when-to-use-vs-alternative guidance against deblur_image (non-face blur) or upscale_image (resolution only), which are the most confusable siblings in a 50+ tool catalog.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_emailADestructiveInspect
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Recipient email address | |
| body | Yes | Email body text (plain text, max 10,000 characters) | |
| replyTo | No | Optional reply-to email address | |
| subject | Yes | Email subject (max 200 characters) | |
| paymentId | Yes | Valid 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 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful operational behavior beyond annotations: no SMTP server, no domain verification, no API key/signup, plain-text-only content, character limits, 200 sats cost, and Lightning payment. Annotations already signal destructive/open-world behavior, and the description enriches that context without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence carries operational or usage information: use case, setup requirements, content constraints, cost, payment method, and prerequisite call. The description is dense but not bloated, with no filler or redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a paid external-communication tool, the definition covers recipient, subject, body, payment flow, cost, and setup requirements. The lengthy paymentId schema description supplies the review/hold/refund behavior, so together the tool definition gives an agent everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by stating the cost (200 sats) and the required create_payment workflow with the exact toolName parameter. It also reinforces subject/body limits, though those are already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as email ('Reach anyone with an email address') and gives concrete use cases: formal communication, reports, and contacting people outside chat. It doesn't explicitly distinguish from send_sms/send_fax siblings, but the email focus is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context for when to use the tool: formal communication, reports, or external contact. It also explains the prerequisite payment flow via create_payment with toolName='send_email'. It doesn't state exclusions or compare directly with SMS/fax alternatives, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_faxADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | 'pdf' = send PDF from pdfUrl. 'text' = generate PDF from typed text. | |
| text | No | Required for mode=text: message text to format as PDF | |
| pages | No | Expected page count (1-350). Used for pricing. Pass same value to create_payment as 'quantity'. | |
| pdfUrl | No | Required for mode=pdf: public HTTPS URL returning application/pdf | |
| coverText | No | Optional cover page text (mode=pdf only, adds 1 page) | |
| paymentId | Yes | Valid payment ID (must be paid) | |
| phoneNumber | Yes | Destination fax number in E.164 format (e.g. +14155550100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses modes, language support, rejection behavior, pricing, max pages/size, and payment necessity. Annotations already indicate destructiveHint=true (consumes credit), and description adds context about what gets rejected pre-payment. Could mention retry or status behavior but overall transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is substantial but front-loaded with use cases. Every sentence adds value (pricing, limitations, mode details). Could be slightly more structured (e.g., bullet points) but is not verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters, complex dual-mode behavior, language support, and pricing details, the description covers all necessary aspects. No output schema exists, but behavior and constraints are fully explained, enabling correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all parameters with descriptions. Description adds value by specifying phone number format (E.164), explaining pages as quantity for create_payment, and clarifying mode differences (pdfUrl vs text). Provides more context than schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb 'send' and resource 'fax', lists use cases (loan paperwork, signed contract, booking confirmation), and distinguishes two modes (pdf/text). Clearly differentiates from sibling receive_fax.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (need paper trail, worldwide), provides mode selection criteria, lists rejected content (RTL, emoji) before payment, details pricing and prerequisite paymentId, and directs to create_payment for proper invoicing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_smsADestructiveInspect
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 must match the one used in create_payment. The message must not need more SMS segments than were paid for. Free rules, refused before payment, with no invoice: no links in the text, a send limit per destination number, and no number on our do-not-contact list. A paid send checks the limit and the list again; a refusal then refunds in full. A link added after payment is held, not refunded: a link is never sent. A US number: Queued. A text to a US number can take a few hours to arrive. 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.
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | Message text (max 1544 chars — a short signature line is appended; billed per SMS segment) | |
| paymentId | Yes | Valid payment ID (must be paid) | |
| phoneNumber | Yes | Phone 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 (e.g. FR/CZ/CN) it is the only delivery path. No error is returned. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes far beyond the openWorldHint/destructiveHint annotations: free pre-payment refusals vs. paid sends that re-check limits and refund in full, links added after payment being held and never sent, 24-hour refund eligibility handled by scheduled maintenance, signature line appended, and explicit retention windows (24h context records, 30-day transcripts, 25h max storage). This is exactly the operational detail an agent cannot derive from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and payment prerequisite are front-loaded, but the remainder is an unstructured wall of legal, retention, and abuse-policy boilerplate (appeal pricing, de-identification methodology, provider record-keeping) that buries the operational rules an agent actually needs before invoking.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex pay-per-use communications tool with no output schema, it covers prerequisites, refusal/refund outcomes, delivery timing ('a text to a US number can take a few hours'), and the appended signature. It is thin on how the send result is retrieved (async/queued status polling), which is a modest remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and the description earns above that by adding cross-parameter constraints the schema does not state: the phoneNumber must match the one used in create_payment, and the message must not require more SMS segments than were paid for.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the verb+resource ('Reach a human via SMS') and the triggering context ('when your task requires real-world coordination'), and the tool name confirms sending. It never names a sibling (send_email, send_fax, place_call, ai_call) to differentiate, so the agent must infer channel choice from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a strong hard prerequisite chain: 'Requires create_payment with toolName=send_sms and phoneNumber+message at payment time,' plus the rule that the phoneNumber must match the paid one. It also lists refusal conditions (no links, per-destination send limits, do-not-contact list), but offers no explicit comparison against alternative contact tools like send_email or place_call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_to_speechAInspect
Text-to-speech with 3 tiers: OmniVoice Global (602+ languages including Yoruba, Bengali, Cebuano, Twi, voice design, ~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'.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to convert to speech | |
| speed | No | Speech speed multiplier (0.5-2.0) | |
| voice | No | Voice 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) ### Arabic (2) Arabic_CalmWoman (Female, Middle Aged, Serene, calm female); Arabic_FriendlyGuy (Male, Middle Aged, Warm, friendly male) ### Cantonese (6) Cantonese_ProfessionalHost (F) (Female, Middle Aged, Polished, professional female host); Cantonese_GentleLady (Female, Middle Aged, Gentle, refined female); Cantonese_ProfessionalHost (M) (Male, Middle Aged, Polished, professional male host); Cantonese_PlayfulMan (Male, Middle Aged, Fun, playful male); Cantonese_CuteGirl (Female, Young, Cute, endearing young female); Cantonese_KindWoman (Female, Middle Aged, Kind, warm female) ### Chinese (34) Chinese (Mandarin)_Reliable_Executive (Male, Middle Aged, Professional, dependable male); Chinese (Mandarin)_News_Anchor (Male, Middle Aged, Clear, authoritative news voice); Chinese (Mandarin)_Unrestrained_Young_Man (Male, Young, Free-spirited young male); Chinese (Mandarin)_Mature_Woman (Female, Middle Aged, Poised, mature female); Arrogant_Miss (Female, Young, Haughty, proud young female); Robot_Armor (Male, Middle Aged, Robotic, mechanical voice); Chinese (Mandarin)_Kind-hearted_Antie (Female, Old, Warm, caring older female); Chinese (Mandarin)_HK_Flight_Attendant (Female, Young, Professional, polished female); Chinese (Mandarin)_Humorous_Elder (Male, Old, Witty, humorous older male); Chinese (Mandarin)_Gentleman (Male, Middle Aged, Refined, courteous male); Chinese (Mandarin)_Warm_Bestie (Female, Young, Friendly, warm young female); Chinese (Mandarin)_Stubborn_Friend (Male, Young, Persistent, headstrong male); Chinese (Mandarin)_Sweet_Lady (Female, Middle Aged, Gentle, sweet female); Chinese (Mandarin)_Southern_Young_Man (Male, Young, Southern-accented young male); Chinese (Mandarin)_Wise_Women (Female, Middle Aged, Thoughtful, wise female); Chinese (Mandarin)_Gentle_Youth (Male, Young, Soft, gentle young male); Chinese (Mandarin)_Warm_Girl (Female, Young, Warm, inviting young female); Chinese (Mandarin)_Male_Announcer (Male, Middle Aged, Clear, authoritative announcer); Chinese (Mandarin)_Kind-hearted_Elder (Male, Old, Gentle, wise older male); Chinese (Mandarin)_Cute_Spirit (Female, Young, Cute, spirited young female); Chinese (Mandarin)_Radio_Host (Male, Middle Aged, Smooth, professional radio voice); Chinese (Mandarin)_Lyrical_Voice (Female, Middle Aged, Melodic, lyrical female); Chinese (Mandarin)_Straightforward_Boy (Male, Young, Direct, honest young male); Chinese (Mandarin)_Sincere_Adult (Male, Middle Aged, Genuine, sincere male); Chinese (Mandarin)_Gentle_Senior (Male, Old, Gentle, patient older male); Chinese (Mandarin)_Crisp_Girl (Female, Young, Clear, crisp young female); Chinese (Mandarin)_Pure-hearted_Boy (Male, Young, Innocent, pure-hearted young male); Chinese (Mandarin)_Soft_Girl (Female, Young, Soft, delicate young female); Chinese (Mandarin)_IntellectualGirl (Female, Young, Smart, intellectual young female); Chinese (Mandarin)_Warm_HeartedGirl (Female, Young, Warm, caring young female); Chinese (Mandarin)_Laid_BackGirl (Female, Young, Relaxed, laid-back young female); Chinese (Mandarin)_ExplorativeGirl (Female, Young, Curious, adventurous young female); Chinese (Mandarin)_Warm-HeartedAunt (Female, Middle Aged, Caring, nurturing aunt figure); Chinese (Mandarin)_BashfulGirl (Female, Young, Shy, bashful young female) ### Czech (3) czech_male_1_v1 (Male, Middle Aged, Confident, assured presenter); czech_female_5_v7 (Female, Middle Aged, Steady, reliable narrator); czech_female_2_v2 (Female, Middle Aged, Refined, elegant female) ### Dutch (2) Dutch_kindhearted_girl (Female, Young, Compassionate, kind young female); Dutch_bossy_leader (Male, Middle Aged, Commanding, bossy male) ### English (45) English_expressive_narrator (Male, Middle Aged, Expressive, dynamic narrator); English_radiant_girl (Female, Young, Bright, cheerful young female); English_magnetic_voiced_man (Male, Middle Aged, Rich, magnetic male voice); English_compelling_lady1 (Female, Middle Aged, Persuasive, engaging female); English_Aussie_Bloke (Male, Middle Aged, Casual Australian male); English_captivating_female1 (Female, Middle Aged, Alluring, captivating female); English_Upbeat_Woman (Female, Middle Aged, Upbeat, energetic female); English_Trustworth_Man (Male, Middle Aged, Reliable, trustworthy male); English_CalmWoman (Female, Middle Aged, Serene, relaxing female); English_UpsetGirl (Female, Young, Emotional, distressed young female); English_Gentle-voiced_man (Male, Middle Aged, Soft, gentle male voice); English_Whispering_girl (Female, Young, Soft, whispery young female); English_Diligent_Man (Male, Middle Aged, Focused, hardworking male); English_Graceful_Lady (Female, Middle Aged, Elegant, poised female); English_ReservedYoungMan (Male, Young, Quiet, reserved young male); English_PlayfulGirl (Female, Young, Fun, playful young female); English_ManWithDeepVoice (Male, Middle Aged, Deep, resonant male bass); English_MaturePartner (Male, Middle Aged, Mature, dependable male); English_FriendlyPerson (Male, Middle Aged, Warm, approachable male); English_MatureBoss (Female, Middle Aged, Commanding, authoritative female); English_Debator (Male, Middle Aged, Articulate, persuasive male); English_LovelyGirl (Female, Young, Sweet, charming young female); English_Steadymentor (Male, Middle Aged, Steady, mentoring male); English_Deep-VoicedGentleman (Male, Middle Aged, Distinguished, deep-voiced male); English_Wiselady (Female, Middle Aged, Thoughtful, wise female); English_CaptivatingStoryteller (Male, Middle Aged, Engaging, narrative male voice); English_DecentYoungMan (Male, Young, Polite, well-spoken young male); English_SentimentalLady (Female, Middle Aged, Emotional, heartfelt female); English_ImposingManner (Female, Middle Aged, Commanding, regal female); English_SadTeen (Male, Young, Youthful, melancholic teen male); English_PassionateWarrior (Male, Middle Aged, Fierce, passionate male); English_WiseScholar (Male, Old, Learned, scholarly male); English_Soft-spokenGirl (Female, Young, Quiet, gentle young female); English_SereneWoman (Female, Middle Aged, Peaceful, calm female); English_ConfidentWoman (Female, Middle Aged, Self-assured, bold female); English_PatientMan (Male, Middle Aged, Steady, reassuring male); English_Comedian (Male, Middle Aged, Humorous, comedic male); English_BossyLeader (Male, Middle Aged, Commanding, bossy male); English_Strong-WilledBoy (Male, Young, Determined, strong-willed young male); English_StressedLady (Female, Middle Aged, Tense, stressed female); English_AssertiveQueen (Female, Middle Aged, Bold, assertive female); English_AnimeCharacter (Female, Young, Animated, expressive narrator); English_Jovialman (Male, Middle Aged, Cheerful, jolly male); English_WhimsicalGirl (Female, Young, Dreamy, whimsical young female); English_Kind-heartedGirl (Female, Young, Compassionate, kind young female) ### Finnish (3) finnish_male_3_v1 (Male, Middle Aged, Cheerful, upbeat male); finnish_male_1_v2 (Male, Young, Friendly, approachable young male); finnish_female_4_v1 (Female, Middle Aged, Bold, assertive female) ### French (6) French_Male_Speech_New (Male, Middle Aged, Composed, level-headed male); French_Female_News Anchor (Female, Middle Aged, Patient, professional presenter); French_CasualMan (Male, Middle Aged, Laid-back, casual male); French_MovieLeadFemale (Female, Middle Aged, Dramatic, cinematic female); French_FemaleAnchor (Female, Middle Aged, Professional, clear anchor); French_MaleNarrator (Male, Middle Aged, Clear, engaging narrator) ### German (3) German_FriendlyMan (Male, Middle Aged, Warm, friendly male); German_SweetLady (Female, Middle Aged, Sweet, gentle female); German_PlayfulMan (Male, Middle Aged, Fun, playful male) ### Greek (3) greek_male_1a_v1 (Male, Middle Aged, Reflective, mentoring male); Greek_female_1_sample1 (Female, Middle Aged, Soft, gentle female); Greek_female_2_sample3 (Female, Young, Friendly, relatable female) ### Hindi (3) hindi_male_1_v2 (Male, Middle Aged, Reliable, trustworthy male); hindi_female_2_v1 (Female, Middle Aged, Peaceful, tranquil female); hindi_female_1_v2 (Female, Middle Aged, Clear, authoritative anchor) ### Indonesian (9) Indonesian_SweetGirl (Female, Young, Sweet, gentle young female); Indonesian_ReservedYoungMan (Male, Young, Quiet, reserved young male); Indonesian_CharmingGirl (Female, Young, Charming, attractive female); Indonesian_CalmWoman (Female, Middle Aged, Serene, calm female); Indonesian_ConfidentWoman (Female, Middle Aged, Self-assured female); Indonesian_CaringMan (Male, Middle Aged, Nurturing, caring male); Indonesian_BossyLeader (Male, Middle Aged, Commanding, bossy male); Indonesian_DeterminedBoy (Male, Young, Focused, determined young male); Indonesian_GentleGirl (Female, Young, Soft, gentle young female) ### Italian (4) Italian_BraveHeroine (Female, Middle Aged, Courageous, brave female); Italian_Narrator (Male, Middle Aged, Clear, professional narrator); Italian_WanderingSorcerer (Male, Old, Mystical, wandering character); Italian_DiligentLeader (Male, Middle Aged, Focused, diligent male) ### Japanese (15) Japanese_IntellectualSenior (Male, Old, Learned, intellectual senior); Japanese_DecisivePrincess (Female, Young, Bold, decisive young female); Japanese_LoyalKnight (Male, Middle Aged, Loyal, noble male); Japanese_DominantMan (Male, Middle Aged, Strong, commanding male); Japanese_SeriousCommander (Male, Middle Aged, Stern, authoritative commander); Japanese_ColdQueen (Female, Middle Aged, Icy, regal female); Japanese_DependableWoman (Female, Middle Aged, Reliable, steady female); Japanese_GentleButler (Male, Middle Aged, Polite, refined butler voice); Japanese_KindLady (Female, Middle Aged, Kind, warm female); Japanese_CalmLady (Female, Middle Aged, Serene, calm female); Japanese_OptimisticYouth (Male, Young, Cheerful, optimistic young male); Japanese_GenerousIzakayaOwner (Male, Middle Aged, Warm, generous male); Japanese_SportyStudent (Male, Young, Energetic, athletic young male); Japanese_InnocentBoy (Male, Young, Innocent, naive young male); Japanese_GracefulMaiden (Female, Young, Elegant, graceful young female) ### Korean (49) Korean_AirheadedGirl (Female, Young, Carefree, bubbly young female); Korean_AthleticGirl (Female, Young, Energetic, sporty young female); Korean_AthleticStudent (Male, Young, Active, sporty young male); Korean_BraveAdventurer (Male, Middle Aged, Bold, adventurous male); Korean_BraveFemaleWarrior (Female, Middle Aged, Fierce, brave female); Korean_BraveYouth (Male, Young, Courageous young male); Korean_CalmGentleman (Male, Middle Aged, Composed, calm male); Korean_CalmLady (Female, Middle Aged, Serene, calm female); Korean_CaringWoman (Female, Middle Aged, Nurturing, caring female); Korean_CharmingElderSister (Female, Middle Aged, Charming, elegant sister); Korean_CharmingSister (Female, Young, Attractive, charming female); Korean_CheerfulBoyfriend (Male, Young, Upbeat, cheerful young male); Korean_CheerfulCoolJunior (Male, Young, Cool, laid-back junior); Korean_CheerfulLittleSister (Female, Young, Happy, energetic young female); Korean_ChildhoodFriendGirl (Female, Young, Familiar, friendly female); Korean_CockyGuy (Male, Young, Confident, cocky young male); Korean_ColdGirl (Female, Young, Aloof, cool young female); Korean_ColdYoungMan (Male, Young, Reserved, cold young male); Korean_ConfidentBoss (Male, Middle Aged, Self-assured, commanding boss); Korean_ConsiderateSenior (Male, Middle Aged, Thoughtful, considerate male); Korean_DecisiveQueen (Female, Middle Aged, Bold, decisive female); Korean_DominantMan (Male, Middle Aged, Powerful, dominant male); Korean_ElegantPrincess (Female, Young, Refined, elegant young female); Korean_EnchantingSister (Female, Young, Enchanting, captivating female); Korean_EnthusiasticTeen (Male, Young, Eager, enthusiastic teen); Korean_FriendlyBigSister (Female, Middle Aged, Friendly, supportive sister); Korean_GentleBoss (Male, Middle Aged, Gentle, kind boss); Korean_GentleWoman (Female, Middle Aged, Soft, gentle female); Korean_HaughtyLady (Female, Middle Aged, Proud, haughty female); Korean_InnocentBoy (Male, Young, Innocent, naive young male); Korean_IntellectualMan (Male, Middle Aged, Smart, intellectual male); Korean_IntellectualSenior (Male, Old, Wise, intellectual senior); Korean_LonelyWarrior (Male, Middle Aged, Solitary, stoic male); Korean_MatureLady (Female, Middle Aged, Poised, mature female); Korean_MysteriousGirl (Female, Young, Enigmatic, mysterious young female); Korean_OptimisticYouth (Male, Young, Cheerful, optimistic young male); Korean_PlayboyCharmer (Male, Young, Suave, charming young male); Korean_PossessiveMan (Male, Middle Aged, Intense, possessive male); Korean_QuirkyGirl (Female, Young, Quirky, unique young female); Korean_ReliableSister (Female, Middle Aged, Dependable, reliable female); Korean_ReliableYouth (Male, Young, Dependable young male); Korean_SassyGirl (Female, Young, Bold, sassy young female); Korean_ShyGirl (Female, Young, Shy, reserved young female); Korean_SoothingLady (Female, Middle Aged, Calming, soothing female); Korean_StrictBoss (Male, Middle Aged, Stern, strict male boss); Korean_SweetGirl (Female, Young, Sweet, gentle young female); Korean_ThoughtfulWoman (Female, Middle Aged, Thoughtful, reflective female); Korean_WiseElf (Female, Young, Whimsical, wise character); Korean_WiseTeacher (Male, Old, Patient, wise teacher) ### Polish (4) Polish_male_1_sample4 (Male, Middle Aged, Clear, professional narrator); Polish_male_2_sample3 (Male, Middle Aged, Authoritative news anchor); Polish_female_1_sample1 (Female, Middle Aged, Serene, calm female); Polish_female_2_sample3 (Female, Middle Aged, Relaxed, casual female) ### Portuguese (73) Portuguese_SentimentalLady (Female, Middle Aged, Emotional, sentimental female); Portuguese_BossyLeader (Male, Middle Aged, Commanding, bossy male); Portuguese_Wiselady (Female, Middle Aged, Wise, thoughtful female); Portuguese_Strong-WilledBoy (Male, Young, Determined young male); Portuguese_Deep-VoicedGentleman (Male, Middle Aged, Distinguished, deep male); Portuguese_UpsetGirl (Female, Young, Emotional, distressed female); Portuguese_PassionateWarrior (Male, Middle Aged, Fierce, passionate male); Portuguese_AnimeCharacter (Female, Young, Animated, expressive character); Portuguese_ConfidentWoman (Female, Middle Aged, Self-assured female); Portuguese_AngryMan (Male, Middle Aged, Intense, angry male); Portuguese_CaptivatingStoryteller (Male, Middle Aged, Engaging narrator); Portuguese_Godfather (Male, Old, Gravelly, authoritative male); Portuguese_ReservedYoungMan (Male, Young, Quiet, reserved young male); Portuguese_SmartYoungGirl (Female, Young, Intelligent, bright young female); Portuguese_Kind-heartedGirl (Female, Young, Compassionate young female); Portuguese_Pompouslady (Female, Middle Aged, Grand, pompous female); Portuguese_Grinch (Male, Middle Aged, Grumpy, grouchy character); Portuguese_Debator (Male, Middle Aged, Articulate, persuasive male); Portuguese_SweetGirl (Female, Young, Sweet, gentle young female); Portuguese_AttractiveGirl (Female, Young, Attractive, alluring female); Portuguese_ThoughtfulMan (Male, Middle Aged, Reflective, thoughtful male); Portuguese_PlayfulGirl (Female, Young, Fun, playful young female); Portuguese_GorgeousLady (Female, Middle Aged, Beautiful, elegant female); Portuguese_LovelyLady (Female, Middle Aged, Lovely, charming female); Portuguese_SereneWoman (Female, Middle Aged, Peaceful, calm female); Portuguese_SadTeen (Male, Young, Melancholic, sad teen); Portuguese_MaturePartner (Male, Middle Aged, Mature, dependable male); Portuguese_Comedian (Male, Middle Aged, Humorous, comedic male); Portuguese_NaughtySchoolgirl (Female, Young, Mischievous young female); Portuguese_Narrator (Male, Middle Aged, Clear, professional narrator); Portuguese_ToughBoss (Male, Middle Aged, Hard-nosed, tough male); Portuguese_Fussyhostess (Female, Middle Aged, Particular, meticulous female); Portuguese_Dramatist (Male, Middle Aged, Dramatic, theatrical male); Portuguese_Steadymentor (Male, Middle Aged, Reliable, mentoring male); Portuguese_Jovialman (Male, Middle Aged, Cheerful, jovial male); Portuguese_CharmingQueen (Female, Middle Aged, Charming, regal female); Portuguese_SantaClaus (Male, Old, Jolly, festive character); Portuguese_Rudolph (Male, Young, Playful, festive character); Portuguese_Arnold (Male, Middle Aged, Strong, tough male character); Portuguese_CharmingSanta (Male, Old, Charming, festive character); Portuguese_CharmingLady (Female, Middle Aged, Charming, elegant female); Portuguese_Ghost (Male, Middle Aged, Eerie, spectral character); Portuguese_HumorousElder (Male, Old, Witty, humorous older male); Portuguese_CalmLeader (Male, Middle Aged, Composed, calm leader); Portuguese_GentleTeacher (Female, Middle Aged, Patient, gentle teacher); Portuguese_EnergeticBoy (Male, Young, Lively, energetic young male); Portuguese_ReliableMan (Male, Middle Aged, Dependable, reliable male); Portuguese_SereneElder (Male, Old, Peaceful, wise elder); Portuguese_GrimReaper (Male, Middle Aged, Dark, ominous character); Portuguese_AssertiveQueen (Female, Middle Aged, Bold, assertive female); Portuguese_WhimsicalGirl (Female, Young, Dreamy, whimsical female); Portuguese_StressedLady (Female, Middle Aged, Tense, stressed female); Portuguese_FriendlyNeighbor (Male, Middle Aged, Friendly, neighborly male); Portuguese_CaringGirlfriend (Female, Young, Loving, caring young female); Portuguese_PowerfulSoldier (Male, Middle Aged, Strong, powerful male); Portuguese_FascinatingBoy (Male, Young, Charming, fascinating young male); Portuguese_RomanticHusband (Male, Middle Aged, Romantic, loving male); Portuguese_StrictBoss (Male, Middle Aged, Stern, strict boss); Portuguese_InspiringLady (Female, Middle Aged, Motivating, inspiring female); Portuguese_PlayfulSpirit (Female, Young, Fun, playful young female); Portuguese_ElegantGirl (Female, Young, Refined, elegant young female); Portuguese_CompellingGirl (Female, Young, Engaging, compelling female); Portuguese_PowerfulVeteran (Male, Old, Experienced, powerful veteran); Portuguese_SensibleManager (Male, Middle Aged, Practical, sensible male); Portuguese_ThoughtfulLady (Female, Middle Aged, Reflective, thoughtful female); Portuguese_TheatricalActor (Male, Middle Aged, Dramatic, theatrical male); Portuguese_FragileBoy (Male, Young, Delicate, fragile young male); Portuguese_ChattyGirl (Female, Young, Talkative, bubbly female); Portuguese_Conscientiousinstructor (Male, Middle Aged, Careful, thorough instructor); Portuguese_RationalMan (Male, Middle Aged, Logical, rational male); Portuguese_WiseScholar (Male, Old, Learned, scholarly male); Portuguese_FrankLady (Female, Middle Aged, Direct, frank female); Portuguese_DeterminedManager (Male, Middle Aged, Focused, decisive manager) ### Romanian (4) Romanian_male_1_sample2 (Male, Middle Aged, Dependable, reliable male); Romanian_male_2_sample1 (Male, Young, Lively, energetic young male); Romanian_female_1_sample4 (Female, Young, Cheerful, optimistic female); Romanian_female_2_sample1 (Female, Middle Aged, Soft, gentle female) ### Russian (8) Russian_HandsomeChildhoodFriend (Male, Young, Charming, familiar young male); Russian_BrightHeroine (Female, Middle Aged, Bright, regal female); Russian_AmbitiousWoman (Female, Middle Aged, Driven, ambitious female); Russian_ReliableMan (Male, Middle Aged, Dependable, reliable male); Russian_CrazyQueen (Female, Young, Wild, unpredictable female); Russian_PessimisticGirl (Female, Young, Gloomy, pessimistic female); Russian_AttractiveGuy (Male, Young, Charming, attractive young male); Russian_Bad-temperedBoy (Male, Young, Irritable, short-tempered male) ### Spanish (47) Spanish_SereneWoman (Female, Middle Aged, Peaceful, calm female); Spanish_MaturePartner (Male, Middle Aged, Mature, dependable male); Spanish_CaptivatingStoryteller (Male, Middle Aged, Engaging narrator); Spanish_Narrator (Male, Middle Aged, Clear, professional narrator); Spanish_WiseScholar (Male, Old, Learned, scholarly male); Spanish_Kind-heartedGirl (Female, Young, Compassionate young female); Spanish_DeterminedManager (Male, Middle Aged, Focused, decisive manager); Spanish_BossyLeader (Male, Middle Aged, Commanding, bossy male); Spanish_ReservedYoungMan (Male, Young, Quiet, reserved young male); Spanish_ConfidentWoman (Female, Middle Aged, Self-assured female); Spanish_ThoughtfulMan (Male, Middle Aged, Reflective, thoughtful male); Spanish_Strong-WilledBoy (Male, Young, Determined young male); Spanish_SophisticatedLady (Female, Middle Aged, Elegant, sophisticated female); Spanish_RationalMan (Male, Middle Aged, Logical, rational male); Spanish_AnimeCharacter (Female, Young, Animated, expressive character); Spanish_Deep-tonedMan (Male, Middle Aged, Deep, resonant male); Spanish_Fussyhostess (Female, Middle Aged, Particular, meticulous female); Spanish_SincereTeen (Male, Young, Honest, sincere teen); Spanish_FrankLady (Female, Middle Aged, Direct, frank female); Spanish_Comedian (Male, Middle Aged, Humorous, comedic male); Spanish_Debator (Male, Middle Aged, Articulate, persuasive male); Spanish_ToughBoss (Male, Middle Aged, Hard-nosed, tough male); Spanish_Wiselady (Female, Middle Aged, Wise, thoughtful female); Spanish_Steadymentor (Male, Middle Aged, Reliable, mentoring male); Spanish_Jovialman (Male, Middle Aged, Cheerful, jovial male); Spanish_SantaClaus (Male, Old, Jolly, festive character); Spanish_Rudolph (Male, Young, Playful, festive character); Spanish_Intonategirl (Female, Young, Expressive, melodic young female); Spanish_Arnold (Male, Middle Aged, Strong, tough male character); Spanish_Ghost (Male, Middle Aged, Eerie, spectral character); Spanish_HumorousElder (Male, Old, Witty, humorous older male); Spanish_EnergeticBoy (Male, Young, Lively, energetic young male); Spanish_WhimsicalGirl (Female, Young, Dreamy, whimsical female); Spanish_StrictBoss (Male, Middle Aged, Stern, strict boss); Spanish_ReliableMan (Male, Middle Aged, Dependable, reliable male); Spanish_SereneElder (Male, Old, Peaceful, wise elder); Spanish_AngryMan (Male, Middle Aged, Intense, angry male); Spanish_AssertiveQueen (Female, Middle Aged, Bold, assertive female); Spanish_CaringGirlfriend (Female, Young, Loving, caring young female); Spanish_PowerfulSoldier (Male, Middle Aged, Strong, powerful male); Spanish_PassionateWarrior (Male, Middle Aged, Fierce, passionate male); Spanish_ChattyGirl (Female, Young, Talkative, bubbly young female); Spanish_RomanticHusband (Male, Middle Aged, Romantic, loving male); Spanish_CompellingGirl (Female, Young, Engaging, compelling female); Spanish_PowerfulVeteran (Male, Old, Experienced, powerful veteran); Spanish_SensibleManager (Male, Middle Aged, Practical, sensible male); Spanish_ThoughtfulLady (Female, Middle Aged, Reflective, thoughtful female) ### Thai (4) Thai_male_1_sample8 (Male, Middle Aged, Peaceful, calm male); Thai_male_2_sample2 (Male, Middle Aged, Warm, friendly male); Thai_female_1_sample1 (Female, Middle Aged, Self-assured female); Thai_female_2_sample2 (Female, Young, Lively, energetic female) ### Turkish (2) Turkish_CalmWoman (Female, Middle Aged, Serene, calm female); Turkish_Trustworthyman (Male, Middle Aged, Reliable, trustworthy male) ### Ukrainian (2) Ukrainian_CalmWoman (Female, Middle Aged, Serene, calm female); Ukrainian_WiseScholar (Male, Old, Learned, scholarly male) ### Vietnamese (1) Vietnamese_kindhearted_girl (Female, Young, Compassionate, kind young female) ## Inworld Max Premium — #1 ranked TTS, ~16 chars/sat (135 voices) ### Arabic (2) Nour (Female, Middle Aged, Polished female Arabic voice with a friendly tone, great for voiceover or support); Omar (Male, Middle Aged, Bright, confident Arabic male voice, great for announcements and broadcasts) ### Chinese (4) Jing (Female, Young, An energetic, fast-paced young Chinese female); Xiaoyin (Female, Young, A youthful Chinese female voice with a gentle, sweet quality); Xinyi (Female, Young, A Chinese woman with a neutral tone, perfect for narrations); Yichen (Male, Middle Aged, A calm, flat young adult male Chinese voice) ### Dutch (4) Erik (Male, Middle Aged, Older Dutch male voice with a weathered edge); Katrien (Female, Middle Aged, Dutch woman with an expressive voice); Lennart (Male, Middle Aged, A confident Dutch male voice. Calm and relaxed); Lore (Female, Middle Aged, Clear, calm Dutch female voice, great for narrations and professional use) ### English (95) Abby (Female, Young, Bright, eager American female child voice, ideal for animated characters and educational content); Alex (Male, Middle Aged, Energetic and expressive mid-range male voice, with a mildly nasal quality); Amina (Female, Middle Aged, Warm, inviting West African female voice, ideal for community outreach and storytelling); Anjali (Female, Middle Aged, Confident, articulate Indian female voice, ideal for professional training materials); Arjun (Male, Middle Aged, Clear, composed Indian male voice, well-suited for instructional webinars); Ashley (Female, Middle Aged, A warm, natural female voice); Avery (Male, Young, Youthful, performative male voice, suited for gameshow-style hosting); Bianca (Female, Middle Aged, Deep, controlled female voice, ideal for serious corporate reads); Blake (Male, Middle Aged, Rich, intimate male voice, perfect for audiobooks and romantic content); Brandon (Male, Middle Aged, Bold, strident male voice, ideal for structured announcements and news-style reads); Brian (Male, Middle Aged, Friendly, encouraging American male voice, ideal for educational tutorials); Callum (Male, Middle Aged, Casual and friendly Australian male voice, ideal for informal instructional content); Carter (Male, Middle Aged, Energetic, mature radio announcer-style male voice, great for storytelling); Cedric (Male, Middle Aged, Crisp, measured male voice, ideal for formal announcements and premium narration); Celeste (Female, Middle Aged, Soft, whispery female voice, ideal for ASMR and gentle mindfulness sessions); Chloe (Female, Young, Thoughtful, introspective youthful female voice, perfect for coming-of-age narratives); Claire (Female, Middle Aged, Warm, gentle Eastern European female voice, ideal for bedtime stories); Clive (Male, Middle Aged, British-accented English male with a calm, cordial quality); Conrad (Male, Middle Aged, Gruff, weathered male voice, perfect for detective archetypes and audiobook roles); Craig (Male, Old, Older British male with a refined and articulate voice); Damon (Male, Middle Aged, Calm, raspy male voice, suited for moody narration and atmospheric roleplay); Darlene (Female, Middle Aged, Soothing, comforting Southern female voice, ideal for bedtime stories); Deborah (Female, Young, Warm, peaceful female voice with a calm tone); Dennis (Male, Middle Aged, Middle-aged man with a smooth, calm and friendly voice); Derek (Male, Middle Aged, Steady, professional, composed American male voice, ideal for banking support); Dominus (Male, Middle Aged, Robotic, deep male voice with a menacing quality. Perfect for villains); Duncan (Male, Middle Aged, Warm, articulate British male voice for customer support and education); Edward (Male, Middle Aged, American male with an emphatic, confident and streetwise tone); Eleanor (Female, Middle Aged, Polished, approachable British female voice for support and learning); Elizabeth (Female, Middle Aged, Professional middle-aged woman, perfect for narrations and voiceovers); Elliot (Male, Middle Aged, Calm, steady male voice, suitable for nature documentaries and informational content); Ethan (Male, Young, Assured, precise male voice, perfect for tech tutorials and gadget overviews); Evan (Male, Middle Aged, Friendly, approachable, easygoing male voice, ideal for onboarding and retail assistance); Evelyn (Female, Middle Aged, Gentle, intimate female voice, ideal for ASMR and calming conversations); Felix (Male, Middle Aged, Calm, friendly British male voice, ideal for help and tutorials); Gareth (Male, Middle Aged, Soothing, gentle male voice, ideal for guided meditations and relaxation); Graham (Male, Middle Aged, Profound, authoritative British male voice, perfect for historical documentaries); Grant (Male, Middle Aged, Calm, attentive, helpful male voice, ideal for troubleshooting and support); Hades (Male, Middle Aged, Commanding and gruff male voice, think an omniscient narrator or castle guard); Hamish (Male, Middle Aged, Friendly and casual Australian male voice, ideal for character-driven roles); Hana (Female, Young, Bright, expressive young female voice, perfect for storytelling and gaming); Hank (Male, Middle Aged, Warm, laid-back Southern male voice, ideal for travel documentaries); Jake (Male, Young, Amiable, introspective male voice, ideal for motivational talks); James (Male, Middle Aged, Vibrant, expressive male voice, perfect for animated video content and event hosting); Jason (Male, Middle Aged, Lucid, engrossing male voice, ideal for tech tips and creative content); Jessica (Female, Middle Aged, Encouraging, articulate American female voice, perfect for self-help audiobooks); Jonah (Male, Middle Aged, Soothing, calm male voice, great for tutorial guidance and gentle instructions); Julia (Female, Middle Aged, Quirky, high-pitched female voice that delivers lines with playful energy); Kayla (Female, Young, Enthusiastic, youthful female voice, ideal for reaction videos and product reviews); Kelsey (Female, Middle Aged, Warm, empathetic, reassuring female voice, ideal for phone support); Lauren (Female, Middle Aged, Confident, friendly American female voice, ideal for corporate presentations); Levi (Male, Middle Aged, Measured, ominous male voice, ideal for suspense narration and dark fantasy); Liam (Male, Middle Aged, Upbeat, motivating Australian male voice, perfect for energizing workout sessions); Loretta (Female, Middle Aged, Inviting, folksy Southern female voice, perfect for cooking shows and family tales); Lucian (Male, Middle Aged, Brooding, foreboding male voice, suited for villainous character arcs); Luna (Female, Middle Aged, Calm, relaxing female voice, perfect for meditations, sleep stories, and mindfulness); Malcolm (Male, Middle Aged, Authoritative, manipulative male voice, perfect for cunning leaders); Marcus (Male, Middle Aged, Authoritative, empathetic male voice, great for civic campaigns and outreach); Mark (Male, Middle Aged, Energetic, expressive man with a rapid-fire delivery); Marlene (Female, Middle Aged, Friendly, relaxed Southern female voice, ideal for cooking tutorials); Mia (Female, Young, Youthful, expressive female voice, ideal for adolescent characters); Miranda (Female, Middle Aged, Menacing, cold-hearted female voice, perfect for strategic villains); Mortimer (Male, Middle Aged, Gravelly, aggressive male character voice, ideal for fantasy villains); Nadia (Female, Middle Aged, Personable, lively female voice, perfect for tutorial walkthroughs); Naomi (Female, Middle Aged, Warm, grounded female voice, perfect for narrative podcasting); Nate (Male, Young, Conversational, sociable male voice, great for customer support); Oliver (Male, Middle Aged, Neutral and clear male voice, ideal for public announcements and education); Olivia (Female, Middle Aged, Young, British female with a friendly and helpful tone); Pippa (Female, Middle Aged, Friendly and casual Australian female voice, ideal for relaxed instructional content); Pixie (Female, Middle Aged, High-pitched, childlike female voice with a squeaky quality — great for cartoons); Priya (Female, Young, Even-toned female voice with an Indian accent); Reed (Male, Middle Aged, Clear, professional American male voice, well-suited for support and training); Riley (Female, Young, Playful, youthful female voice, perfect for animated storytelling); Ronald (Male, Old, Confident, British man with a deep, gravelly voice); Rupert (Male, Middle Aged, Resonant, commanding British male voice, ideal for motivational speeches); Saanvi (Female, Middle Aged, Crisp, articulate Indian female voice, ideal for e-learning modules); Sarah (Female, Middle Aged, Fast-talking young adult woman, with a questioning and curious tone); Sebastian (Male, Middle Aged, Intimidating, steely male voice, perfect for ruthless antagonists); Selene (Female, Young, Soft, flirtatious female voice, ideal for companion-style interactions); Serena (Female, Middle Aged, Soft, nurturing female voice, perfect for mindfulness sessions); Shaun (Male, Middle Aged, Friendly, dynamic male voice great for conversations); Simon (Male, Middle Aged, Articulate, insightful male voice, perfect for corporate presentations); Snik (Male, Middle Aged, Hoarse, cunning male voice, perfect for devious goblin roles and tricksters); Sophie (Female, Middle Aged, Friendly British female voice, great for assistance and knowledge sharing); Tessa (Female, Middle Aged, Upbeat, conversational Australian female voice, perfect for lifestyle vlogs); Theodore (Male, Old, Gravelly male voice, with a time-worn quality); Timothy (Male, Young, Lively, upbeat American male voice); Trevor (Male, Middle Aged, Punchy, expressive male voice, perfect for energetic promos); Tristan (Male, Middle Aged, Deliberate, controlled male voice, ideal for documentary narration); Tyler (Male, Middle Aged, Authoritative, insightful male voice, ideal for tech explainer videos); Veronica (Female, Middle Aged, Intimidating, commanding female voice, perfect for ruthless antagonists); Victor (Male, Middle Aged, Ominous, sinister male voice, ideal for dark conspiracies and suspense); Victoria (Female, Middle Aged, Silky, cunning British female voice, ideal for narrating intricate plots); Vinny (Male, Middle Aged, Gritty, assertive New York male voice, perfect for crime dramas); Wendy (Female, Old, Posh, middle-aged British female voice) ### French (4) Alain (Male, Middle Aged, Deep, smooth middle-aged male French voice. Composed and calm); Étienne (Male, Middle Aged, Calm young adult French male); Hélène (Female, Middle Aged, Middle-aged French woman, with a smooth, musical, and graceful voice); Mathieu (Male, Middle Aged, A French male voice carrying a nasal quality) ### German (2) Johanna (Female, Middle Aged, A calm older German female with a low, smoky voice); Josef (Male, Middle Aged, An articulate German male voice with an announcer-like quality) ### Hebrew (2) Oren (Male, Middle Aged, Steady male Hebrew voice, great for podcasts and voiceovers); Yael (Female, Middle Aged, Mid-range female Hebrew voice, suitable for narrations and storytelling) ### Hindi (2) Manoj (Male, Middle Aged, Clear, professional Hindi male voice. Great for narrations and customer service); Riya (Female, Middle Aged, Professional, clear female voice with an articulate and polished delivery) ### Italian (2) Gianni (Male, Middle Aged, Deep, smooth Italian male voice that speaks rapidly); Orietta (Female, Middle Aged, Calm adult female Italian voice, with a soothing cadence) ### Japanese (2) Asuka (Female, Middle Aged, Friendly, young adult Japanese female voice); Satoshi (Male, Middle Aged, Dramatic, expressive male Japanese voice filled with energy) ### Korean (4) Hyunwoo (Male, Middle Aged, Young adult Korean male voice); Minji (Male, Young, Energetic, friendly young Korean female voice); Seojun (Male, Young, Clear, deep mature Korean male voice); Yoona (Female, Middle Aged, Korean woman with a gentle, soothing voice) ### Polish (2) Szymon (Male, Middle Aged, Polish adult male voice with a warm, friendly quality); Wojciech (Male, Middle Aged, A middle-aged Polish male voice) ### Portuguese (2) Heitor (Male, Middle Aged, Composed Portuguese-speaking male voice with a neutral tone); Maitê (Female, Middle Aged, Middle-aged Portuguese-speaking female voice) ### Russian (4) Dmitry (Male, Middle Aged, Deep, gravelly male voice with a commanding and narrative tone); Elena (Female, Middle Aged, Clear, mid-range female voice with a smooth texture and neutral tone); Nikolai (Male, Middle Aged, Deep, resonant male voice with a clear, theatrical, and narrative quality); Svetlana (Female, Middle Aged, Soft, high-pitched female voice with a moderate pace and breathy quality) ### Spanish (4) Diego (Male, Young, Spanish-speaking male voice with a soothing, gentle quality); Lupita (Female, Young, Vibrant, energetic young Spanish-speaking female voice); Miguel (Male, Middle Aged, A calm adult Spanish-speaking male voice, perfect for storytelling); Rafael (Male, Middle Aged, Middle-aged Spanish-speaking male with a deep, composed voice. Great for narrations) | |
| modelId | No | Optional. 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. | |
| language | No | OmniVoice 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) with no error. For a non-English language, either select the OmniVoice tier (modelId) or pick a voice whose language matches. Full language list at the GET /api/l402/text-to-speech endpoint. | |
| paymentId | Yes | Valid payment ID (must be paid) | |
| resultKey | No | Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout. | |
| voice_description | No | OmniVoice only: 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. Example: 'female, young adult, high pitch'. Any other word is refused before payment. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden, and it does substantial work: discloses the Lightning payment model with no API key, states the return value (audio URL), the create_payment prerequisite, and a non-obvious failure mode (language is silently ignored on Inworld/Minimax rather than erroring). It does not state whether the call is synchronous or requires polling via check_job_status/await_result, which is a meaningful gap for a paid media-generation call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the tier comparison, then the exclusion list, then the prerequisite, so an agent can stop reading early if it only needs the routing decision. Dense but every clause carries information; the tier parentheticals are the only mildly noisy part given the modelId schema already repeats them.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter, fully-documented schema with no output schema, the description supplies the payment flow, return value, tier tradeoffs, and language caveat — nearly everything an agent needs. The main omission is execution mode (sync vs. must-poll), which matters given siblings like check_job_status and await_result and a paid call that can time out.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds cross-parameter decision logic the schema cannot express: it maps tiers to modelId and ties language/voice selection together ('pick OmniVoice Global via language=', 'Minimax... voice cloning from reference clip'). That routing guidance is genuinely additive rather than restating field docs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (text-to-speech) and immediately breaks it into three named tiers with differentiated quality/latency/cost (OmniVoice ~106 chars/sat, Inworld ~16, Minimax ~5) plus cloning capability. This is concrete enough that an agent can tell exactly what the tool does and which tier fits, distinct from siblings like generate_music or transcribe_audio.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'When NOT to use' section naming the three alternatives (place_call, ai_call, open_voice_bridge) and the condition that selects them. Adds rare-language routing ('pick OmniVoice Global via language=') and the hard prerequisite ('Requires create_payment with toolName=text_to_speech'). Nothing about when to use or avoid is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transcribe_audioAInspect
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. Pass names (the people and places spoken in the audio) to help the speech model spell them right — free, same price. Priced per minute of audio; a 66-minute file works in one call. A result too large for one reply (word timestamps pass it after a few minutes of audio) comes back without segments, srt and vtt, with fullResultUrl: a free link to the whole result. 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'.
| Name | Required | Description | Default |
|---|---|---|---|
| names | No | 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". | |
| diarize | No | Identify different speakers (default false). Forces segment granularity upstream. If the speaker-label request fails, you still get the text, and result.degraded includes 'diarization'. | |
| language | No | Optional. One of: detect (the default), en, 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. | |
| paymentId | Yes | Valid payment ID (must be paid) | |
| timestamps | No | Timestamp granularity in result.segments. 'word' returns per-word start/end times (subtitle alignment, karaoke 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). | |
| audioBase64 | Yes | Base64 encoded audio file | |
| callback_id | No | Optional correlation string echoed back in the webhook body. Max 128 chars. | |
| callback_url | No | Optional HTTPS webhook we POST when the job finishes (HMAC-signed). Polling still works. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description bears the full load and does so richly: pricing (10 sats/min, per-minute), ephemeral privacy guarantees, async requestId/polling flow, large-result truncation behavior with fullResultUrl, and degraded-result fallbacks. An agent knows cost, safety, and lifecycle before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and the high-value timestamp distinction, then pricing, size limits, async flow, privacy, and payment. Dense but every sentence carries actionable information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Async tool with no output schema, yet the description explains the return path (requestId, polling, get_job_result), truncation handling, and degraded outputs. Nothing an agent needs to call and consume results correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description adds value beyond the schema by noting 'names' is free and that word timestamps can trigger result truncation. Most parameter detail still lives in the schema, keeping it from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Transcribe audio to text') and immediately differentiates its output modes (word-level vs segment timestamps). The sibling transcribe_translate is implicitly distinguished by the pure transcription framing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use for the 'word' timestamp mode (subtitle alignment, karaoke captions, cutting video) and describes the prerequisite workflow (requires create_payment, poll with check_job_status, then get_job_result). It does not directly contrast with the transcribe_translate sibling, so not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transcribe_translateAInspect
Compound endpoint — one payment turns audio in any of 13 source languages into both a transcript AND a translation in any of 119 target languages. Perfect for WhatsApp voice messages in a language you don't speak (Yoruba → English), or recording a meeting in another language and 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'). Flat price covers STT + translation. Cheaper than calling transcribe_audio + translate_text separately for typical voice messages. Pay with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='transcribe_translate'.
| Name | Required | Description | Default |
|---|---|---|---|
| names | No | 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". | |
| paymentId | Yes | Valid payment ID (must be paid) | |
| audioBase64 | Yes | Base64-encoded audio file | |
| sourceLanguage | No | Optional — auto-detected if omitted. Accepts ISO-639 codes for the 13 STT languages: en, zh, hi, es, ar, fr, pt, ru, de, ja, ko, it, nl. NOTE: only these 13 are transcribable — a wrong hint (or audio in another language) yields a garbled transcript that is still billed as success. Omit to auto-detect and verify the transcript before trusting the translation. | |
| targetLanguage | Yes | Target language — English name (e.g. 'Spanish') or ISO-639 code (e.g. 'es', 'en-US'). 119 languages supported. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses async behavior (returns requestId, poll with check_job_status), payment prerequisite (create_payment with toolName), flat pricing, and a critical billing caveat: a wrong sourceLanguage hint yields a garbled transcript still billed as success. It also notes names are free and may degrade if refused.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the compound purpose, then covers examples, async, pricing, and payment. Slightly repetitive on pricing ('flat price covers STT + translation' and 'cheaper than...'), but every sentence carries useful context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description covers the critical workflow, language limits, async polling, and billing caveats. It does not specify the final result shape or field names, leaving some retrieval ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already well documented. The description repeats key constraints (auto-detect source, 119 target languages, names free) but adds no parameter syntax or semantics beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific compound operation: converts audio into both a transcript and a translation across 13 source and 119 target languages. Distinguishes from siblings by naming transcribe_audio + translate_text alternatives and the check_job_status/create_payment workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear use cases (WhatsApp voice messages, meeting recordings) and a comparative alternative (cheaper than separate calls for typical voice messages). Lacks explicit when-not-to-use exclusions, so not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
translate_epubAInspect
Translate a whole EPUB into another language and get an EPUB back. Every chapter is translated with its markup intact — headings, emphasis, footnote links, images and code stay where they were — the package language is retargeted and the table of contents is translated. 119 target languages; the target language picks the engine and the engine's row carries the price (same per-character rate as translate_text for that language, min 50 sats). Async — returns requestId, poll with check_job_status(jobType='translate-epub'), then get_job_result for the download url (temporary, 6h). Pay with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='translate_epub', characterCount (visible characters of the book) and targetLanguage; the real file is re-priced at execution and a short-pay is refunded with the exact amount to re-pay.
| Name | Required | Description | Default |
|---|---|---|---|
| fileName | No | Optional original filename, used to name the download. | |
| paymentId | Yes | Valid payment ID (must be paid) | |
| epubBase64 | Yes | Base64-encoded EPUB (max 50 MB) | |
| sourceLanguage | No | Optional source-language hint. Omit to let the model read it from the text. | |
| targetLanguage | Yes | Target language — English name (e.g. 'Spanish') or ISO-639 code (e.g. 'es'). Must equal the targetLanguage the payment was quoted with. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does so thoroughly. It discloses the async requestId flow, polling via check_job_status with jobType='translate-epub', temporary 6-hour download URLs, engine selection by language, per-character pricing, the create_payment prerequisite, re-pricing at execution, and short-pay refunds. This goes well beyond a basic summary.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: purpose, fidelity guarantees, language/price model, async flow, payment requirements, and edge-case refunds are all covered. The main action is front-loaded, and the rest follows a logical order from call to polling to payment details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description covers everything an agent needs to invoke the tool correctly: required inputs, async behavior, how to poll, where to fetch the result, how to pay, and what to do about re-pricing. The only minor omission is guidance on error handling, but the description is unusually complete for a complex paid async tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaningful semantics beyond the schema by stating that paymentId must be a valid paid payment ID and that targetLanguage must equal the language used when creating the payment. It also ties the characterCount used in create_payment to the tool's pricing model, which helps the agent plan the payment step.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence, 'Translate a whole EPUB into another language and get an EPUB back,' states a specific verb, resource, and output, clearly distinguishing this tool from siblings like translate_text and epub_to_audiobook. The added detail about preserving markup, translating the TOC, and retargeting package language further pins down the exact scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the usage context clear: whole-book EPUB translation with markup preservation, async polling, and Lightning payment. It references translate_text only for rate comparison rather than explicitly saying 'use this instead of translate_text for EPUBs,' so it stops short of explicit when-not guidance, but the context is strong enough for an agent to select it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
translate_rare_languageAInspect
Translate into 452 languages, 251 of them NOT supported by ChatGPT, Claude or Gemini (29 of those 251 measured at fair quality or better against human references) — including Bhojpuri (~50M speakers), Maithili (~34M), Egyptian Arabic (~100M), Moroccan Arabic (~30M), Chhattisgarhi, Magahi, Manipuri, Kashmiri, Shan, Kachin, Awadhi, Tamazight, Crimean Tatar, Quechua, Nuer, Sango, plus indigenous and minority languages with no callable API anywhere. Runs MADLAD-400 (Apache-2.0). QUALITY VARIES AND IS PUBLISHED PER LANGUAGE: every language carries a measured tier — good (chrF++ >= 45 vs human reference translations), fair (32-45), unverified (no benchmark exists, untested, may be poor), experimental (known weak). The response repeats the tier so you can judge how much to trust it. GET https://sats4ai.com/api/l402/translate-rare-language for the full language list with tiers, or GET /api/languages. Unsupported languages are rejected BEFORE payment. For mainstream languages use translate_text instead — it is cheaper and more fluent. Priced 50 sats base + 0.002 sats/char (GPU). Pay with Bitcoin Lightning — no API key or signup. Requires create_payment with toolName='translate_rare_language'.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to translate. Max 6000 characters. | |
| paymentId | Yes | Valid payment ID (must be paid). Price = 50 sats + 0.002/char. | |
| targetLanguage | Yes | MADLAD language code ('mag', 'arz', 'bho', 'hne') or English name ('Magahi', 'Egyptian Arabic'). Rejected before payment if unsupported. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses quality tiers (good/fair/unverified/experimental), model used (MADLAD-400), and that response includes the tier. No hidden behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is thorough and well-organized, with key information front-loaded. A few minor redundancies (e.g., listing many languages) but generally every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 3 required parameters and no output schema, the description covers all essential aspects: quality, payment, prerequisites, and fallback tool. No gaps identified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters have descriptions in the schema (100% coverage). The description adds value by clarifying text length limit, pricing formula per character, and acceptable language identifiers (codes or English names).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it translates into rare languages, specifying 452 languages, many not supported by other chatbots. It explicitly distinguishes from mainstream translation tools and provides concrete language examples.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly recommends using 'translate_text' for mainstream languages (cheaper, more fluent). Describes payment flow via Bitcoin Lightning. States unsupported languages are rejected before payment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
translate_textAInspect
Translate text across 119 languages with high accuracy. The target language picks the engine: GPT-OSS 120B by default, or a higher-scoring model (Gemini) where one measurably beats it. Auto-detects source language. Privacy-preserving: no data stored. Pricing: 1 sat per 1,000 characters on the standard engine, minimum 1 sat per request; a routed language costs more. GET /api/languages returns the exact price, engine and measured chrF for every language, and the 402 always quotes the real amount before you pay. Language parameters accept English names ('Spanish', 'Chinese (Simplified)') or ISO-639 codes / locale tags ('es', 'en-US', 'pt-BR', 'zh-Hans'). Supported languages: Afrikaans, Albanian, Amharic, Arabic, Armenian, Assamese, Azerbaijani, Basque, Belarusian, Bengali, Bosnian, Bulgarian, Burmese, Catalan, Cebuano, Chichewa, Chinese (Simplified), Chinese (Traditional), Corsican, Croatian, Czech, Danish, Dari, Dutch, English, Esperanto, Estonian, Farsi, Fijian, Filipino, Finnish, French, Frisian, Galician, Georgian, German, Greek, Guarani, Gujarati, Haitian Creole, Hausa, Hawaiian, Hebrew, Hindi, Hmong, Hungarian, Icelandic, Igbo, Indonesian, Irish, Italian, Japanese, Javanese, Kannada, Kazakh, Khmer, Kinyarwanda, Korean, Kurdish, Kyrgyz, Lao, Latvian, Lingala, Lithuanian, Luganda, Luxembourgish, Macedonian, Malagasy, Malay, Malayalam, Maltese, Maori, Marathi, Mongolian, Nepali, Norwegian, Occitan, Odia, Pashto, Polish, Portuguese, Punjabi, Romanian, Romansh, Russian, Samoan, Scots Gaelic, Serbian, Sesotho, Setswana, Shona, Sindhi, Sinhala, Slovak, Slovenian, Somali, Spanish, Sundanese, Swahili, Swedish, Tajik, Tamil, Tatar, Telugu, Thai, Tigrinya, Tongan, Turkish, Turkmen, Ukrainian, Urdu, Uzbek, Vietnamese, Welsh, Wolof, Xhosa, Yiddish, Yoruba, Zulu. Pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='translate_text' and prompt (the text to translate).
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to translate | |
| modelId | No | Optional. Translation model is selected automatically. | |
| paymentId | Yes | Valid payment ID (must be paid) | |
| sourceLanguage | No | Source language (auto-detected if omitted). NOTE: only checked for being a known language, not against your text — a wrong but valid value (e.g. 'German' for Spanish text) is accepted and silently mistranslates with no error. Omit it to let auto-detect work. | |
| targetLanguage | Yes | Target language — English name ('Spanish', 'Chinese (Simplified)') or ISO-639 code / locale tag ('es', 'pt-BR'). 119 supported; full list at the GET /api/l402/translate-text endpoint. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and performs well: it discloses engine selection (GPT-OSS default, Gemini when better), privacy/no data storage, exact pricing per character, minimum payment, and the requirement to call create_payment. It is missing some edge-case behavior like rate limits or explicit error handling, but it reveals substantially more than 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the central purpose and key behaviors like auto-detection and privacy. However, it is not concise: the 119-language list is a large block of tokens that largely duplicates the endpoint reference and schema note, and the pricing details are more verbose than necessary for calling the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers a great deal: language coverage, engine selection, language formats, payment requirements, privacy, and pricing. But without an output schema, it never explicitly states the return value or how the translated text is delivered, and it omits guidance on choosing this tool over sibling tools. These gaps prevent it from being fully complete for a complex payment-gated tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds meaningful context: it maps targetLanguage to engine selection, explains that text drives the per-character price, and details the create_payment workflow. It also reinforces the auto-detection behavior for omitted sourceLanguage, going beyond the schema's basic parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Translate text across 119 languages' with a specific verb and resource, so the tool's core function is unmistakable. It also mentions source auto-detection, which further clarifies the behavior. However, it does not explicitly distinguish itself from sibling translation tools like translate_rare_language, so it misses the differentiation needed for a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: it translates text, auto-detects the source language, and requires a payment created via create_payment. It also gives helpful instruction about omitting sourceLanguage and using language names or ISO codes. Yet it gives no explicit guidance on when not to use it versus sibling alternatives such as translate_rare_language or multilingual_ask.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upscale_imageAInspect
Upscale images 2x or 4x with neural super-resolution. Uses Real-ESRGAN (ICCV 2021, PSNR 32.73dB on Set5 4x, 100M+ production runs). Recovers real detail from low-resolution images — not interpolation. Optional face enhancement. Stable endpoint — model upgrades automatically as SOTA evolves. 5 sats per image, pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='upscale_image'.
| Name | Required | Description | Default |
|---|---|---|---|
| scale | No | Upscale factor: 2x or 4x (default 4x) | |
| paymentId | Yes | Valid payment ID (must be paid) | |
| resultKey | No | Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout. | |
| imageBase64 | Yes | Base64-encoded image (PNG, JPEG, WEBP) or data URI | |
| face_enhance | No | Apply face enhancement during upscaling (default false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses cost (5 sats per image), the Bitcoin Lightning pay-per-request model with no API key, endpoint stability, and the quality claims behind the model. It does not cover failure/refund behavior or result-retrieval flow, leaving some behavioral gaps for a paid mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose and payment prerequisite are front-loaded, and each sentence is functional. Some benchmark/marketing claims (ICCV 2021, PSNR 32.73dB, 100M+ runs) are padding, but they serve as differentiation evidence and do not obscure the call instructions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-annotation, no-output-schema tool the description covers the main complexity — the payment prerequisite, cost, and model stability — and the resultKey schema field handles retry semantics. It does not state whether results return synchronously or require polling await_result/check_job_status, leaving one meaningful gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every parameter including the scale enum and face_enhance is already documented in the schema. The description echoes scale, face enhancement, and the paymentId prerequisite but adds no syntax or format detail beyond the structured fields, which matches the baseline 3 for fully documented schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Upscale images 2x or 4x with neural super-resolution') and immediately distinguishes the operation from mere interpolation and from sibling image tools like deblur_image or restore_face by naming the Real-ESRGAN approach. An agent can identify the correct tool without inspecting the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states the prerequisite workflow ('Requires create_payment with toolName="upscale_image"') and the payment cost, which tells the agent exactly what must precede a call. It stops short of explicitly naming alternatives (e.g., edit_image or restore_face for faces only) or when-not-to-use conditions, so it is clear on context but lacks exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
voice_bridge_sayAInspect
Inject audio into an open Voice Bridge call. Two modes: (1) text — we synthesize speech in any of 602 languages (English, Spanish and German start fastest); (2) audio_base64 + encoding — bring your own audio (mulaw_8000 or pcm_l16_16000 for MVP). Keep each reply to one or two sentences: the call is turn-based. While you speak, the callee cannot interrupt, and what they say is NOT heard (transcription is muted so you do not hear yourself, and for under a second after). One call takes at most 700 speech units of text, about 45 seconds of speech (each Chinese, Japanese, Korean or Thai character counts 3): send a longer message as several calls. The call returns when the speech has finished playing. If it fails after part of the line was spoken, the error says so: do not repeat the start. No additional payment — covered by the session deposit.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Text to speak (mode 1). One or two sentences work best; at most 700 speech units (each Chinese, Japanese, Korean or Thai character counts 3), longer is refused with a 400. | |
| encoding | No | Encoding of audioBase64. mp3/opus require ffmpeg (not yet wired in MVP). | |
| language | No | Language override for this utterance (default: session language) | |
| sessionId | Yes | Session ID from open_voice_bridge | |
| audioBase64 | No | Pre-rendered audio bytes, base64 (mode 2). Use with 'encoding'. | |
| voiceDescription | No | OmniVoice 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 voice and the reply carries a warning. When OmniVoice was not ready at open_voice_bridge, a fallback voice speaks and ignores this field. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses rich behavioral traits beyond the sparse annotation: the callee cannot interrupt while the agent speaks, their speech is not heard during speech and for under a second after, the call returns only when playback finishes, and partial-failure errors require not repeating the start. It also states the 700-unit/roughly 45-second limit and explains billing coverage. These are exactly the operational details an agent needs for safe use.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and the two modes, then layers operational constraints in a logical order. Although it is long, every sentence contributes useful behavioral or usage information, and there is no redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex real-time voice tool with no output schema and only a generic openWorldHint annotation, the description covers modes, length limits, turn-taking behavior, partial failure handling, and billing. It also states that the call returns when speech playback finishes, which substitutes for an output schema at the level needed to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters comprehensively. The description reinforces the two main modes and the text-length limit, but it does not add meaning for parameters such as language or voiceDescription. With the schema carrying the parameter burden, baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: inject audio into an open Voice Bridge call. It clearly distinguishes two operating modes (text synthesis versus base64 audio with encoding) and makes it obvious this is not a standalone TTS tool. An agent can identify the operation without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool, including that it is for an open Voice Bridge call and that replies should be one or two sentences because the call is turn-based. It also explains how to choose between the text and audio modes and how to handle longer messages. It does not explicitly name sibling alternatives such as text_to_speech for standalone synthesis, so it stops short of full when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vote_on_serviceAInspect
Vote for a planned service to be built next. Returns JSON: { success, slug, newVoteCount }. 1 sat per vote — multiple votes allowed. Call list_planned_services first to discover valid slugs and current vote counts. Highest-voted services get prioritized. Requires create_payment with toolName='vote_on_service'.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Service slug to vote for (from list_planned_services) | |
| paymentId | Yes | Valid payment ID (1 sat, must be paid) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses cost ('1 sat per vote'), behavior ('multiple votes allowed'), return format ('Returns JSON: { success, slug, newVoteCount }'), and prioritization logic ('Highest-voted services get prioritized'). Could add error handling details, but overall strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three succinct sentences. First sentence states action and return, second covers cost and allowance, third covers prerequisite and outcome. No fluff, every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given two required params, no enums, no output schema, the description covers all necessary context: payment flow, slug discovery, return structure, and voting rules. It is fully adequate for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% but description adds context beyond schema: for slug it adds 'from list_planned_services', for paymentId it adds '1 sat, must be paid'. This aids correct usage beyond the schema's basic descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Vote for a planned service to be built next' with a specific verb (vote) and resource (planned service). It distinguishes from sibling 'list_planned_services' by mentioning it as a prerequisite, and no other sibling tool duplicates this purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to 'Call list_planned_services first' for valid slugs and vote counts, and 'Requires create_payment with toolName='vote_on_service''. Provides clear when-to-use and prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
- Changed
ai_call1 field changed- added
Input schema / properties / refundAddressAdded value: +{ + "description": "Lightning address of YOUR user (for example name@wallet.com), only if the user gave you one. Never invent or guess an address: the refund is paid out at once and cannot be called back. The unused deposit is sent here when the call ends. With no address, or if that payment fails, the refund waits as an LNURL-withdraw link.", + "type": "string" +}
- Changed
open_voice_bridge1 field changed- changed
Input schema / properties / refundAddress / descriptionPrevious value: -"Lightning address (e.g. you@wallet.com). Strongly recommended: the unused deposit is sent here automatically when the call ends, so nobody has to claim anything. Without it the refund waits as an LNURL-withdraw link."New value: +"Lightning address of YOUR user (for example name@wallet.com), only if the user gave you one. Never invent or guess an address: the refund is paid out at once and cannot be called back. The unused deposit is sent here when the call ends. With no address, or if that payment fails, the refund waits as an LNURL-withdraw link."
14 tool updates
- Changed
colorize_image1 field changed- added
Input schema / properties / resultKeyAdded value: +{ + "description": "Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout.", + "type": "string" +}
- Changed
convert_file1 field changed- added
Input schema / properties / resultKeyAdded value: +{ + "description": "Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout.", + "type": "string" +}
- Changed
convert_html_to_pdf1 field changed- added
Input schema / properties / resultKeyAdded value: +{ + "description": "Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout.", + "type": "string" +}
- Changed
deblur_image1 field changed- added
Input schema / properties / resultKeyAdded value: +{ + "description": "Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout.", + "type": "string" +}
- Changed
edit_image1 field changed- added
Input schema / properties / resultKeyAdded value: +{ + "description": "Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout.", + "type": "string" +}
- Changed
estimate_depth1 field changed- added
Input schema / properties / resultKeyAdded value: +{ + "description": "Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout.", + "type": "string" +}
- Changed
generate_image1 field changed- added
Input schema / properties / resultKeyAdded value: +{ + "description": "Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout.", + "type": "string" +}
- Changed
generate_music1 field changed- added
Input schema / properties / resultKeyAdded value: +{ + "description": "Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout.", + "type": "string" +}
- Changed
merge_pdfs1 field changed- added
Input schema / properties / resultKeyAdded value: +{ + "description": "Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout.", + "type": "string" +}
- Changed
remove_background1 field changed- added
Input schema / properties / resultKeyAdded value: +{ + "description": "Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout.", + "type": "string" +}
- Changed
remove_object1 field changed- added
Input schema / properties / resultKeyAdded value: +{ + "description": "Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout.", + "type": "string" +}
- Changed
restore_face1 field changed- added
Input schema / properties / resultKeyAdded value: +{ + "description": "Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout.", + "type": "string" +}
- Changed
text_to_speech1 field changed- added
Input schema / properties / resultKeyAdded value: +{ + "description": "Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout.", + "type": "string" +}
- Changed
upscale_image1 field changed- added
Input schema / properties / resultKeyAdded value: +{ + "description": "Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout.", + "type": "string" +}
1 tool update
- Changed
open_voice_bridge1 field changed- added
Input schema / properties / fillerAdded value: +{ + "description": "Optional. A short phrase (at most 60 characters) we say ONCE when you are slow: if about 3.5 seconds pass after the callee stops talking and your voice_bridge_say has not started, the callee hears it, so they know you are still there. Example: \"One moment, please.\" Write it in the callee's language. It is made while the phone rings and spoken in our default voice. It plays at most once until you speak again, the callee is not heard while it plays, and poll_voice_bridge then shows a filler_played event (do not say \"one moment\" yourself). Leave it out for a voicemail or a phone menu, where it is noise, and when you wait for long pauses (quietMs of several seconds): it would fire inside the pause and cut into their next words.", + "maxLength": 60, + "type": "string" +}
1 tool update
- Changed
voice_bridge_say1 field changed- changed
Input schema / properties / text / descriptionPrevious value: -"Text to speak (mode 1). Uses OmniVoice TTS."New value: +"Text to speak (mode 1). One or two sentences work best; at most 700 speech units (each Chinese, Japanese, Korean or Thai character counts 3), longer is refused with a 400."
1 tool update
- Changed
poll_voice_bridge2 fields changed- added
Input schema / properties / quietMsAdded value: +{ + "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" +} - added
Input schema / properties / waitMsAdded value: +{ + "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" +}
1 tool update
- Added
create_cart
1 tool update
- Changed
text_to_speech1 field changed- removed
Input schema / properties / voice / enumRemoved value: -[ - "English_expressive_narrator", - "English_radiant_girl", - "English_magnetic_voiced_man", - "English_compelling_lady1", - "English_Aussie_Bloke", - "English_captivating_female1", - "English_Upbeat_Woman", - "English_Trustworth_Man", - "English_CalmWoman", - "English_UpsetGirl", - "English_Gentle-voiced_man", - "English_Whispering_girl", - "English_Diligent_Man", - "English_Graceful_Lady", - "English_ReservedYoungMan", - "English_PlayfulGirl", - "English_ManWithDeepVoice", - "English_MaturePartner", - "English_FriendlyPerson", - "English_MatureBoss", - "English_Debator", - "English_LovelyGirl", - "English_Steadymentor", - "English_Deep-VoicedGentleman", - "English_Wiselady", - "English_CaptivatingStoryteller", - "English_DecentYoungMan", - "English_SentimentalLady", - "English_ImposingManner", - "English_SadTeen", - "English_PassionateWarrior", - "English_WiseScholar", - "English_Soft-spokenGirl", - "English_SereneWoman", - "English_ConfidentWoman", - "English_PatientMan", - "English_Comedian", - "English_BossyLeader", - "English_Strong-WilledBoy", - "English_StressedLady", - "English_AssertiveQueen", - "English_AnimeCharacter", - "English_Jovialman", - "English_WhimsicalGirl", - "English_Kind-heartedGirl", - "Chinese (Mandarin)_Reliable_Executive", - "Chinese (Mandarin)_News_Anchor", - "Chinese (Mandarin)_Unrestrained_Young_Man", - "Chinese (Mandarin)_Mature_Woman", - "Arrogant_Miss", - "Robot_Armor", - "Chinese (Mandarin)_Kind-hearted_Antie", - "Chinese (Mandarin)_HK_Flight_Attendant", - "Chinese (Mandarin)_Humorous_Elder", - "Chinese (Mandarin)_Gentleman", - "Chinese (Mandarin)_Warm_Bestie", - "Chinese (Mandarin)_Stubborn_Friend", - "Chinese (Mandarin)_Sweet_Lady", - "Chinese (Mandarin)_Southern_Young_Man", - "Chinese (Mandarin)_Wise_Women", - "Chinese (Mandarin)_Gentle_Youth", - "Chinese (Mandarin)_Warm_Girl", - "Chinese (Mandarin)_Male_Announcer", - "Chinese (Mandarin)_Kind-hearted_Elder", - "Chinese (Mandarin)_Cute_Spirit", - "Chinese (Mandarin)_Radio_Host", - "Chinese (Mandarin)_Lyrical_Voice", - "Chinese (Mandarin)_Straightforward_Boy", - "Chinese (Mandarin)_Sincere_Adult", - "Chinese (Mandarin)_Gentle_Senior", - "Chinese (Mandarin)_Crisp_Girl", - "Chinese (Mandarin)_Pure-hearted_Boy", - "Chinese (Mandarin)_Soft_Girl", - "Chinese (Mandarin)_IntellectualGirl", - "Chinese (Mandarin)_Warm_HeartedGirl", - "Chinese (Mandarin)_Laid_BackGirl", - "Chinese (Mandarin)_ExplorativeGirl", - "Chinese (Mandarin)_Warm-HeartedAunt", - "Chinese (Mandarin)_BashfulGirl", - "Japanese_IntellectualSenior", - "Japanese_DecisivePrincess", - "Japanese_LoyalKnight", - "Japanese_DominantMan", - "Japanese_SeriousCommander", - "Japanese_ColdQueen", - "Japanese_DependableWoman", - "Japanese_GentleButler", - "Japanese_KindLady", - "Japanese_CalmLady", - "Japanese_OptimisticYouth", - "Japanese_GenerousIzakayaOwner", - "Japanese_SportyStudent", - "Japanese_InnocentBoy", - "Japanese_GracefulMaiden", - "Cantonese_ProfessionalHost (F)", - "Cantonese_GentleLady", - "Cantonese_ProfessionalHost (M)", - "Cantonese_PlayfulMan", - "Cantonese_CuteGirl", - "Cantonese_KindWoman", - "Korean_AirheadedGirl", - "Korean_AthleticGirl", - "Korean_AthleticStudent", - "Korean_BraveAdventurer", - "Korean_BraveFemaleWarrior", - "Korean_BraveYouth", - "Korean_CalmGentleman", - "Korean_CalmLady", - "Korean_CaringWoman", - "Korean_CharmingElderSister", - "Korean_CharmingSister", - "Korean_CheerfulBoyfriend", - "Korean_CheerfulCoolJunior", - "Korean_CheerfulLittleSister", - "Korean_ChildhoodFriendGirl", - "Korean_CockyGuy", - "Korean_ColdGirl", - "Korean_ColdYoungMan", - "Korean_ConfidentBoss", - "Korean_ConsiderateSenior", - "Korean_DecisiveQueen", - "Korean_DominantMan", - "Korean_ElegantPrincess", - "Korean_EnchantingSister", - "Korean_EnthusiasticTeen", - "Korean_FriendlyBigSister", - "Korean_GentleBoss", - "Korean_GentleWoman", - "Korean_HaughtyLady", - "Korean_InnocentBoy", - "Korean_IntellectualMan", - "Korean_IntellectualSenior", - "Korean_LonelyWarrior", - "Korean_MatureLady", - "Korean_MysteriousGirl", - "Korean_OptimisticYouth", - "Korean_PlayboyCharmer", - "Korean_PossessiveMan", - "Korean_QuirkyGirl", - "Korean_ReliableSister", - "Korean_ReliableYouth", - "Korean_SassyGirl", - "Korean_ShyGirl", - "Korean_SoothingLady", - "Korean_StrictBoss", - "Korean_SweetGirl", - "Korean_ThoughtfulWoman", - "Korean_WiseElf", - "Korean_WiseTeacher", - "Spanish_SereneWoman", - "Spanish_MaturePartner", - "Spanish_CaptivatingStoryteller", - "Spanish_Narrator", - "Spanish_WiseScholar", - "Spanish_Kind-heartedGirl", - "Spanish_DeterminedManager", - "Spanish_BossyLeader", - "Spanish_ReservedYoungMan", - "Spanish_ConfidentWoman", - "Spanish_ThoughtfulMan", - "Spanish_Strong-WilledBoy", - "Spanish_SophisticatedLady", - "Spanish_RationalMan", - "Spanish_AnimeCharacter", - "Spanish_Deep-tonedMan", - "Spanish_Fussyhostess", - "Spanish_SincereTeen", - "Spanish_FrankLady", - "Spanish_Comedian", - "Spanish_Debator", - "Spanish_ToughBoss", - "Spanish_Wiselady", - "Spanish_Steadymentor", - "Spanish_Jovialman", - "Spanish_SantaClaus", - "Spanish_Rudolph", - "Spanish_Intonategirl", - "Spanish_Arnold", - "Spanish_Ghost", - "Spanish_HumorousElder", - "Spanish_EnergeticBoy", - "Spanish_WhimsicalGirl", - "Spanish_StrictBoss", - "Spanish_ReliableMan", - "Spanish_SereneElder", - "Spanish_AngryMan", - "Spanish_AssertiveQueen", - "Spanish_CaringGirlfriend", - "Spanish_PowerfulSoldier", - "Spanish_PassionateWarrior", - "Spanish_ChattyGirl", - "Spanish_RomanticHusband", - "Spanish_CompellingGirl", - "Spanish_PowerfulVeteran", - "Spanish_SensibleManager", - "Spanish_ThoughtfulLady", - "Portuguese_SentimentalLady", - "Portuguese_BossyLeader", - "Portuguese_Wiselady", - "Portuguese_Strong-WilledBoy", - "Portuguese_Deep-VoicedGentleman", - "Portuguese_UpsetGirl", - "Portuguese_PassionateWarrior", - "Portuguese_AnimeCharacter", - "Portuguese_ConfidentWoman", - "Portuguese_AngryMan", - "Portuguese_CaptivatingStoryteller", - "Portuguese_Godfather", - "Portuguese_ReservedYoungMan", - "Portuguese_SmartYoungGirl", - "Portuguese_Kind-heartedGirl", - "Portuguese_Pompouslady", - "Portuguese_Grinch", - "Portuguese_Debator", - "Portuguese_SweetGirl", - "Portuguese_AttractiveGirl", - "Portuguese_ThoughtfulMan", - "Portuguese_PlayfulGirl", - "Portuguese_GorgeousLady", - "Portuguese_LovelyLady", - "Portuguese_SereneWoman", - "Portuguese_SadTeen", - "Portuguese_MaturePartner", - "Portuguese_Comedian", - "Portuguese_NaughtySchoolgirl", - "Portuguese_Narrator", - "Portuguese_ToughBoss", - "Portuguese_Fussyhostess", - "Portuguese_Dramatist", - "Portuguese_Steadymentor", - "Portuguese_Jovialman", - "Portuguese_CharmingQueen", - "Portuguese_SantaClaus", - "Portuguese_Rudolph", - "Portuguese_Arnold", - "Portuguese_CharmingSanta", - "Portuguese_CharmingLady", - "Portuguese_Ghost", - "Portuguese_HumorousElder", - "Portuguese_CalmLeader", - "Portuguese_GentleTeacher", - "Portuguese_EnergeticBoy", - "Portuguese_ReliableMan", - "Portuguese_SereneElder", - "Portuguese_GrimReaper", - "Portuguese_AssertiveQueen", - "Portuguese_WhimsicalGirl", - "Portuguese_StressedLady", - "Portuguese_FriendlyNeighbor", - "Portuguese_CaringGirlfriend", - "Portuguese_PowerfulSoldier", - "Portuguese_FascinatingBoy", - "Portuguese_RomanticHusband", - "Portuguese_StrictBoss", - "Portuguese_InspiringLady", - "Portuguese_PlayfulSpirit", - "Portuguese_ElegantGirl", - "Portuguese_CompellingGirl", - "Portuguese_PowerfulVeteran", - "Portuguese_SensibleManager", - "Portuguese_ThoughtfulLady", - "Portuguese_TheatricalActor", - "Portuguese_FragileBoy", - "Portuguese_ChattyGirl", - "Portuguese_Conscientiousinstructor", - "Portuguese_RationalMan", - "Portuguese_WiseScholar", - "Portuguese_FrankLady", - "Portuguese_DeterminedManager", - "French_Male_Speech_New", - "French_Female_News Anchor", - "French_CasualMan", - "French_MovieLeadFemale", - "French_FemaleAnchor", - "French_MaleNarrator", - "Indonesian_SweetGirl", - "Indonesian_ReservedYoungMan", - "Indonesian_CharmingGirl", - "Indonesian_CalmWoman", - "Indonesian_ConfidentWoman", - "Indonesian_CaringMan", - "Indonesian_BossyLeader", - "Indonesian_DeterminedBoy", - "Indonesian_GentleGirl", - "German_FriendlyMan", - "German_SweetLady", - "German_PlayfulMan", - "Russian_HandsomeChildhoodFriend", - "Russian_BrightHeroine", - "Russian_AmbitiousWoman", - "Russian_ReliableMan", - "Russian_CrazyQueen", - "Russian_PessimisticGirl", - "Russian_AttractiveGuy", - "Russian_Bad-temperedBoy", - "Italian_BraveHeroine", - "Italian_Narrator", - "Italian_WanderingSorcerer", - "Italian_DiligentLeader", - "Dutch_kindhearted_girl", - "Dutch_bossy_leader", - "Vietnamese_kindhearted_girl", - "Arabic_CalmWoman", - "Arabic_FriendlyGuy", - "Turkish_CalmWoman", - "Turkish_Trustworthyman", - "Ukrainian_CalmWoman", - "Ukrainian_WiseScholar", - "Thai_male_1_sample8", - "Thai_male_2_sample2", - "Thai_female_1_sample1", - "Thai_female_2_sample2", - "Polish_male_1_sample4", - "Polish_male_2_sample3", - "Polish_female_1_sample1", - "Polish_female_2_sample3", - "Romanian_male_1_sample2", - "Romanian_male_2_sample1", - "Romanian_female_1_sample4", - "Romanian_female_2_sample1", - "greek_male_1a_v1", - "Greek_female_1_sample1", - "Greek_female_2_sample3", - "czech_male_1_v1", - "czech_female_5_v7", - "czech_female_2_v2", - "finnish_male_3_v1", - "finnish_male_1_v2", - "finnish_female_4_v1", - "hindi_male_1_v2", - "hindi_female_2_v1", - "hindi_female_1_v2", - "Abby", - "Alain", - "Alex", - "Amina", - "Anjali", - "Arjun", - "Ashley", - "Asuka", - "Avery", - "Bianca", - "Blake", - "Brandon", - "Brian", - "Callum", - "Carter", - "Cedric", - "Celeste", - "Chloe", - "Claire", - "Clive", - "Conrad", - "Craig", - "Damon", - "Darlene", - "Deborah", - "Dennis", - "Derek", - "Diego", - "Dmitry", - "Dominus", - "Duncan", - "Edward", - "Eleanor", - "Elena", - "Elizabeth", - "Elliot", - "Erik", - "Ethan", - "Étienne", - "Evan", - "Evelyn", - "Felix", - "Gareth", - "Gianni", - "Graham", - "Grant", - "Hades", - "Hamish", - "Hana", - "Hank", - "Heitor", - "Hélène", - "Hyunwoo", - "Jake", - "James", - "Jason", - "Jessica", - "Jing", - "Johanna", - "Jonah", - "Josef", - "Julia", - "Katrien", - "Kayla", - "Kelsey", - "Lauren", - "Lennart", - "Levi", - "Liam", - "Lore", - "Loretta", - "Lucian", - "Luna", - "Lupita", - "Maitê", - "Malcolm", - "Manoj", - "Marcus", - "Mark", - "Marlene", - "Mathieu", - "Mia", - "Miguel", - "Minji", - "Miranda", - "Mortimer", - "Nadia", - "Naomi", - "Nate", - "Nikolai", - "Nour", - "Oliver", - "Olivia", - "Omar", - "Oren", - "Orietta", - "Pippa", - "Pixie", - "Priya", - "Rafael", - "Reed", - "Riley", - "Riya", - "Ronald", - "Rupert", - "Saanvi", - "Sarah", - "Satoshi", - "Sebastian", - "Selene", - "Seojun", - "Serena", - "Shaun", - "Simon", - "Snik", - "Sophie", - "Svetlana", - "Szymon", - "Tessa", - "Theodore", - "Timothy", - "Trevor", - "Tristan", - "Tyler", - "Veronica", - "Victor", - "Victoria", - "Vinny", - "Wendy", - "Wojciech", - "Xiaoyin", - "Xinyi", - "Yael", - "Yichen", - "Yoona" -]
2 tool updates
- Changed
await_result1 field changed- added
Input schema / properties / paymentIdAdded value: +{ + "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" +}
- Changed
get_job_result1 field changed- changed
Input schema / properties / paymentId / descriptionPrevious value: -"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)."New value: +"The paymentId that bought this job. On a failed or refunded 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)."
2 tool updates
- Changed
check_job_status1 field changed- changed
Input schema / properties / jobType / descriptionPrevious value: -"Must 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-standard/video-fal-pro = the FAL fallback jobType generate_video returns when Replicate is at capacity."New value: +"Must 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-standard/video-fal-pro = the fallback jobType generate_video returns when the primary video model is at capacity."
- Changed
get_job_result1 field changed- changed
Input schema / properties / jobType / descriptionPrevious value: -"Must 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-standard/video-fal-pro = the FAL fallback jobType generate_video returns when Replicate is at capacity."New value: +"Must 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-standard/video-fal-pro = the fallback jobType generate_video returns when the primary video model is at capacity."
1 tool update
- Changed
transcribe_audio1 field changed- changed
Input schema / properties / language / descriptionPrevious value: -"Language code (e.g., 'en', 'es')"New value: +"Optional. One of: detect (the default), en, 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."
2 tool updates
- Changed
transcribe_audio1 field changed- added
Input schema / properties / namesAdded value: +{ + "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" +}
- Changed
transcribe_translate1 field changed- added
Input schema / properties / namesAdded value: +{ + "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" +}
Related MCP Connectors
270 pay-per-call AI tools for agents, paid via x402 (USDC on Base). No signup, no API keys.
89 pay-per-call tools for agents: screenshots, scraping, PDF, OCR, TTS, STT, invoices, KYC, utils
AI agent tools: web search, browser, 400+ LLMs, image gen, TTS, phone verify. Pay-per-use.
70+ pay-per-call tools for AI agents: web search, email verify, KYC, stocks, crypto, news, data
Related MCP Servers
- AlicenseNot gradedqualityCmaintenance29 pay-per-call DNS, SEO, SSL, security, and dev tools for AI agents. x402, no API key.1MIT
- FlicenseNot gradedqualityCmaintenanceProvides 63 production-ready API tools for AI agents, including web scraping, AI generation, crypto data, OCR, image generation, audio transcription, text-to-speech, email, and domain lookup.3-
- AlicenseBqualityDmaintenanceGive AI agents a real phone number and voice. Make calls, send email, manage contacts — 26 tools, 12 resources.431MIT
- AlicenseNot gradedqualityBmaintenance62 real-time data tools for AI agents via MCP. Finance, crypto, FMCSA, sanctions, courts, weather, vehicles, cybersecurity. One bearer token, one bill. Free tier available.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.