Skip to main content
Glama

Text to speech

text_to_speech

Synthesize spoken audio from text using a catalog voice that supportsDirectToolExecution. Returns toolExecutionId on hosted clients; poll get_tool_execution for status and results containing the audio fileId, downloadUrl, and file metadata. Local calls wait for a status snapshot.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "text": "<text>",
      "voiceId": "<voiceId>"
    },
    "name": "text_to_speech"
  }
}

Input Schema

NameRequiredDescriptionDefault
textYesWords to synthesize as spoken audio.
speedNoSpeech-rate multiplier relative to the voice's normal speed (1).
voiceIdYesCatalog display name (e.g. Matilda) or voice id from list_tts_voices.
languageNoISO-639-1 pronunciation language hint, such as en or es. Omit or pass null to leave pronunciation language selection automatic.

Output Schema

NameRequiredDescriptionDefault
errorNoError details when status is failed; otherwise null.
statusNoJob status: pending, running, succeeded, failed, or cancelled.
resultsNoGenerated results with download URLs when succeeded.
toolTypeNoTool name (e.g. GENERATE_IMAGE).
attemptIndexNoCurrent or latest attempt index.
toolExecutionIdYesTool execution id (vg_tool_...).
progressPercentageNoCompletion progress 0-100 (present after polling).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed35 schema fields changed
    • removedInput schema / properties / language / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / language / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / error / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": {},
      -    "properties": {
      -      "code": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Machine-readable error code."
      -      },
      -      "internalErrorCode": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Opaque code for support."
      -      },
      -      "message": {
      -        "description": "Human-readable error description.",
      -        "type": "string"
      -      },
      -      "requirement": {
      -        "anyOf": [
      -          {
      -            "additionalProperties": {},
      -            "properties": {
      -              "details": {
      -                "additionalProperties": {
      -                  "type": "string"
      -                },
      -                "propertyNames": {
      -                  "type": "string"
      -                },
      -                "type": "object"
      -              },
      -              "type": {
      -                "description": "Requirement type (e.g. purchase_add_on).",
      -                "type": "string"
      -              }
      -            },
      -            "required": [
      -              "type"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "What is needed to resolve the error, when applicable."
      -      }
      -    },
      -    "required": [
      -      "message"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": {},
      +    "properties": {
      +      "code": {
      +        "description": "Machine-readable error code.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "internalErrorCode": {
      +        "description": "Opaque code for support.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "message": {
      +        "description": "Human-readable error description.",
      +        "type": "string"
      +      },
      +      "requirement": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": {},
      +            "properties": {
      +              "details": {
      +                "additionalProperties": {
      +                  "type": "string"
      +                },
      +                "propertyNames": {
      +                  "type": "string"
      +                },
      +                "type": "object"
      +              },
      +              "type": {
      +                "description": "Requirement type (e.g. purchase_add_on).",
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "type"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "What is needed to resolve the error, when applicable."
      +      }
      +    },
      +    "required": [
      +      "message"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / results / items / properties / downloadUrl / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / results / items / properties / downloadUrl / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / results / items / properties / downloadUrlExpiresAt / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / results / items / properties / downloadUrlExpiresAt / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / results / items / properties / file / properties / description / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / results / items / properties / file / properties / description / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / results / items / properties / file / properties / downloadSource / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": {},
      -    "description": "A file rendition source (thumbnail, preview, download, …).",
      -    "properties": {
      -      "expiresAt": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Unix expiry for url."
      -      },
      -      "fileBytes": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Rendition size in bytes."
      -      },
      -      "height": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Rendition height in pixels."
      -      },
      -      "status": {
      -        "description": "Rendition status.",
      -        "enum": [
      -          "pending",
      -          "ready",
      -          "failed",
      -          "skipped"
      -        ],
      -        "type": "string"
      -      },
      -      "url": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Signed URL when status is ready."
      -      },
      -      "width": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Rendition width in pixels."
      -      }
      -    },
      -    "required": [
      -      "status"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": {},
      +    "description": "A file rendition source (thumbnail, preview, download, …).",
      +    "properties": {
      +      "expiresAt": {
      +        "description": "Unix expiry for url.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "fileBytes": {
      +        "description": "Rendition size in bytes.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "height": {
      +        "description": "Rendition height in pixels.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "status": {
      +        "description": "Rendition status.",
      +        "enum": [
      +          "pending",
      +          "ready",
      +          "failed",
      +          "skipped"
      +        ],
      +        "type": "string"
      +      },
      +      "url": {
      +        "description": "Signed URL when status is ready.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "width": {
      +        "description": "Rendition width in pixels.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "status"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / results / items / properties / file / properties / downloadUrl / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / results / items / properties / file / properties / downloadUrl / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / results / items / properties / file / properties / downloadUrlExpiresAt / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / results / items / properties / file / properties / downloadUrlExpiresAt / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / results / items / properties / file / properties / durationSeconds / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / results / items / properties / file / properties / durationSeconds / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • changedOutput schema / properties / results / items / properties / file / properties / hlsSource / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": {},
      -    "description": "A file rendition source (thumbnail, preview, download, …).",
      -    "properties": {
      -      "expiresAt": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Unix expiry for url."
      -      },
      -      "fileBytes": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Rendition size in bytes."
      -      },
      -      "height": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Rendition height in pixels."
      -      },
      -      "status": {
      -        "description": "Rendition status.",
      -        "enum": [
      -          "pending",
      -          "ready",
      -          "failed",
      -          "skipped"
      -        ],
      -        "type": "string"
      -      },
      -      "url": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Signed URL when status is ready."
      -      },
      -      "width": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Rendition width in pixels."
      -      }
      -    },
      -    "required": [
      -      "status"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": {},
      +    "description": "A file rendition source (thumbnail, preview, download, …).",
      +    "properties": {
      +      "expiresAt": {
      +        "description": "Unix expiry for url.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "fileBytes": {
      +        "description": "Rendition size in bytes.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "height": {
      +        "description": "Rendition height in pixels.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "status": {
      +        "description": "Rendition status.",
      +        "enum": [
      +          "pending",
      +          "ready",
      +          "failed",
      +          "skipped"
      +        ],
      +        "type": "string"
      +      },
      +      "url": {
      +        "description": "Signed URL when status is ready.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "width": {
      +        "description": "Rendition width in pixels.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "status"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / results / items / properties / file / properties / previewSource / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": {},
      -    "description": "A file rendition source (thumbnail, preview, download, …).",
      -    "properties": {
      -      "expiresAt": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Unix expiry for url."
      -      },
      -      "fileBytes": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Rendition size in bytes."
      -      },
      -      "height": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Rendition height in pixels."
      -      },
      -      "status": {
      -        "description": "Rendition status.",
      -        "enum": [
      -          "pending",
      -          "ready",
      -          "failed",
      -          "skipped"
      -        ],
      -        "type": "string"
      -      },
      -      "url": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Signed URL when status is ready."
      -      },
      -      "width": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Rendition width in pixels."
      -      }
      -    },
      -    "required": [
      -      "status"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": {},
      +    "description": "A file rendition source (thumbnail, preview, download, …).",
      +    "properties": {
      +      "expiresAt": {
      +        "description": "Unix expiry for url.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "fileBytes": {
      +        "description": "Rendition size in bytes.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "height": {
      +        "description": "Rendition height in pixels.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "status": {
      +        "description": "Rendition status.",
      +        "enum": [
      +          "pending",
      +          "ready",
      +          "failed",
      +          "skipped"
      +        ],
      +        "type": "string"
      +      },
      +      "url": {
      +        "description": "Signed URL when status is ready.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "width": {
      +        "description": "Rendition width in pixels.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "status"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / results / items / properties / file / properties / publicHlsUrl / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / results / items / properties / file / properties / publicHlsUrl / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / results / items / properties / file / properties / publicPlaybackId / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / results / items / properties / file / properties / publicPlaybackId / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / results / items / properties / file / properties / thumbnailSource / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": {},
      -    "description": "A file rendition source (thumbnail, preview, download, …).",
      -    "properties": {
      -      "expiresAt": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Unix expiry for url."
      -      },
      -      "fileBytes": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Rendition size in bytes."
      -      },
      -      "height": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Rendition height in pixels."
      -      },
      -      "status": {
      -        "description": "Rendition status.",
      -        "enum": [
      -          "pending",
      -          "ready",
      -          "failed",
      -          "skipped"
      -        ],
      -        "type": "string"
      -      },
      -      "url": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Signed URL when status is ready."
      -      },
      -      "width": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Rendition width in pixels."
      -      }
      -    },
      -    "required": [
      -      "status"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": {},
      +    "description": "A file rendition source (thumbnail, preview, download, …).",
      +    "properties": {
      +      "expiresAt": {
      +        "description": "Unix expiry for url.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "fileBytes": {
      +        "description": "Rendition size in bytes.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "height": {
      +        "description": "Rendition height in pixels.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "status": {
      +        "description": "Rendition status.",
      +        "enum": [
      +          "pending",
      +          "ready",
      +          "failed",
      +          "skipped"
      +        ],
      +        "type": "string"
      +      },
      +      "url": {
      +        "description": "Signed URL when status is ready.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "width": {
      +        "description": "Rendition width in pixels.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "status"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / results / items / properties / file / properties / thumbnailUrl / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / results / items / properties / file / properties / thumbnailUrl / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / results / items / properties / file / properties / thumbnailUrlExpiresAt / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / results / items / properties / file / properties / thumbnailUrlExpiresAt / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / results / items / properties / file / properties / transcriptText / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / results / items / properties / file / properties / transcriptText / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / results / items / properties / file / properties / type / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / results / items / properties / file / properties / type / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / results / items / properties / thumbnailUrl / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / results / items / properties / thumbnailUrl / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / results / items / properties / thumbnailUrlExpiresAt / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / results / items / properties / thumbnailUrlExpiresAt / type
      Added value: +[
      +  "number",
      +  "null"
      +]
  2. Changed3 schema fields changed
    • changedInput schema / properties / language / description
      Previous value: -"ISO-639-1 pronunciation language hint."New value: +"ISO-639-1 pronunciation language hint, such as en or es. Omit or pass null to leave pronunciation language selection automatic."
    • changedInput schema / properties / speed / description
      Previous value: -"Speech-rate multiplier."New value: +"Speech-rate multiplier relative to the voice's normal speed (1)."
    • changedInput schema / properties / text / description
      Previous value: -"Text to speak."New value: +"Words to synthesize as spoken audio."
  3. First observed

TDQS

A3.8/5.0
Behavior4/5

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

Annotations only declare the safety profile (non-read-only, non-idempotent, non-destructive), while the description adds genuine behavioral context: hosted clients return a toolExecutionId and require polling, local calls block for a snapshot. It stops short of mentioning cost, credit consumption, or whether generated audio persists as a file asset.

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?

Three sentences, front-loaded with the purpose, then execution model, then polling path. Tight overall, though the camelCase token "supportsDirectToolExecution" and the slightly compressed final sentence reduce readability marginally.

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

Completeness4/5

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

For an async media-generation tool with a full output schema, the description covers the essential gap — how results arrive and what intermediate state to poll. Adding the return payload detail (fileId, downloadUrl) is somewhat redundant given the output schema, but harmless.

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

Parameters4/5

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

Schema coverage is already 100%, so the baseline is 3. The description still adds a real constraint on voiceId — the voice must support direct tool execution — which is not stated in the schema and affects whether a list_tts_voices result is usable.

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

Purpose4/5

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

"Synthesize spoken audio from text" is a specific verb+resource pair that an agent can distinguish from siblings like generate_music or generate_sound_effect. It does not explicitly contrast with voiceover_to_video, but the TTS framing is unambiguous.

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

Usage Guidelines3/5

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

It gives workflow guidance (use a catalog voice supporting direct tool execution; poll get_tool_execution) but no explicit when-to-use / when-not-to-use versus alternatives such as voiceover_to_video. The voice constraint and follow-up tool are implied rather than framed as selection criteria.

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.