Skip to main content
Glama

Design voice

createVoice

Design a new voice from a character description (such as "deep-voiced warrior" or "cheerful young girl"), a character image, or both, and have it speak a short line of text, returning a sample of that newly created voice. text is required, plus voice_description or image (an image of the speaking character, given as a URL or base64, makes the description optional); the spoken text is limited to 100 characters or the call returns HTTP 400, and type selects "human" or "non-human" voices. The job result is a single audio result containing the URL of an MP3 or WAV file (the URL's extension, .mp3 or .wav, says which). Credits are held when the job is accepted and refunded if it fails or is cancelled. Use this to invent and audition a voice from a description; use createSpeech for text-to-speech that clones a specific voice from an audio sample, and createSpeechPreset for text-to-speech using a named preset voice. Pass an optional request_id to tag the result so you can locate it later via listGenerations (type audio). Async generation job: returns {id, status} - poll getApiJob (job and credit contract: see the server instructions).

Credits: This endpoint consumes 2 credits per call.

Input Schema

NameRequiredDescriptionDefault
requestBodyYesPayload for generating a voice sample from a character description and/or a character image

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • changedInput schema / properties / requestBody / description
      Previous value: -"Payload for generating a voice sample from a character description"New value: +"Payload for generating a voice sample from a character description and/or a character image"
    • addedInput schema / properties / requestBody / properties / image
      Added value: +{
      +  "description": "URL or base64-encoded image of the speaking character (concept art, at most 15MB). The voice is designed from it, and voice_description becomes optional.",
      +  "example": "<url> OR data:image/png;base64,...",
      +  "type": "string"
      +}
    • changedInput schema / properties / requestBody / properties / text / description
      Previous value: -"Text for the voice to speak (max 200 characters)."New value: +"Text for the voice to speak (max 100 characters)."
    • changedInput schema / properties / requestBody / properties / text / maxLength
      Previous value: -200New value: +100
    • changedInput schema / properties / requestBody / properties / voice_description / description
      Previous value: -"Text description of the voice character (e.g., \"deep-voiced warrior\", \"cheerful young girl\")."New value: +"Text description of the voice character (e.g., \"deep-voiced warrior\", \"cheerful young girl\"). Required unless image is given; with an image, a few words of hints."
    • changedInput schema / properties / requestBody / required
      Previous value: -[
      -  "voice_description",
      -  "text"
      -]New value: +[
      +  "text"
      +]
  2. Changed1 schema field changed
    • changedInput schema / properties / requestBody / properties / augment_prompt / description
      Previous value: -"Augment the prompt behind the scenes. Disable to have more control. Default: true."New value: +"Rewrites your prompt behind the scenes into the form the model works best with. Leave it on (the default). Turning it off does not give you more control - it usually gives worse results. Do not disable it unless you really know what you are doing and have tested your prompts extensively. Default: true."
  3. Changed2 schema fields changed
    • changedInput schema / properties / requestBody / properties / request_id / description
      Previous value: -"Optional client-provided identifier, unique per request. Re-sending the same request_id returns the existing job instead of generating again. Also usable with the results endpoint."New value: +"Optional client-provided identifier, unique per request. Re-sending the same request_id returns the existing job instead of generating again. Also usable as the request_id filter of listGenerations."
    • changedInput schema / properties / requestBody / properties / text / description
      Previous value: -"Text for the voice to speak (max 20 words)."New value: +"Text for the voice to speak (max 200 characters)."
  4. Changed4 schema fields changed
    • removedInput schema / properties / requestBody / properties / augment_prompt / default
      Removed value: -true
    • changedInput schema / properties / requestBody / properties / augment_prompt / description
      Previous value: -"Augment the prompt behind the scenes. Disable to have more control."New value: +"Augment the prompt behind the scenes. Disable to have more control. Default: true."
    • removedInput schema / properties / requestBody / properties / type / default
      Removed value: -"human"
    • changedInput schema / properties / requestBody / properties / type / description
      Previous value: -"Type of voice to generate."New value: +"Type of voice to generate. Default: \"human\"."
  5. Changed1 schema field changed
    • changedInput schema / properties / requestBody / properties / request_id / description
      Previous value: -"Optional client-provided identifier for this request. Use this to retrieve results later via the results endpoint."New value: +"Optional client-provided identifier, unique per request. Re-sending the same request_id returns the existing job instead of generating again. Also usable with the results endpoint."
  6. Changed1 schema field changed
    • addedInput schema / properties / requestBody / properties / request_id
      Added value: +{
      +  "description": "Optional client-provided identifier for this request. Use this to retrieve results later via the results endpoint.",
      +  "type": "string"
      +}
  7. Added

TDQS

A4.4/5.0
Behavior4/5

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

Carries the full burden of behavior well beyond annotations: 100-character limit causing HTTP 400, credit hold-and-refund semantics, async job contract ({id, status} then poll getApiJob), and request_id dedupe behavior. The only gap is that it defers the job/credit contract to server instructions rather than restating it, which is acceptable given the pointer. Note the annotation idempotentHint=false is not contradicted — keyed dedupe via request_id is a narrower guarantee.

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

Conciseness4/5

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

Front-loaded with the primary action, then constraints, then sibling routing, then async/credit notes — a sensible priority order. It runs long and packs the credit line separately, but nearly every sentence adds information; only the credits sentence is mildly redundant with the held/refunded statement earlier.

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

Completeness5/5

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

No output schema exists, and the description compensates fully: it describes the returned audio result, the URL and MP3/WAV extension convention, the async polling path, and the credit lifecycle. Nothing an agent needs to call this correctly or interpret the result is missing.

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

Parameters3/5

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 does add a little beyond the schema: the conditional requirement (text plus voice_description or image), the type enum's human/non-human meaning, and the consequence of exceeding 100 characters. But the field-by-field detail (augment_prompt, request_id, image size limits) is already fully documented in the schema, so no credit above baseline.

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

Purpose5/5

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

States a specific verb and resource ('Design a new voice from a character description... or image') plus the concrete outcome ('have it speak a short line of text, returning a sample'). It also names the two nearest siblings (createSpeech, createSpeechPreset) and the exact axis that separates them, so an agent can disambiguate 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.

Usage Guidelines5/5

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

Explicitly says 'Use this to invent and audition a voice from a description', then gives when-to-use-otherwise: createSpeech for cloning from an audio sample, createSpeechPreset for named presets. The image-vs-description tradeoff is also spelled out, which is the main routing decision inside the tool.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.