Claude text to speech: make audio files with an MCP tool

For text to speech in Claude, connect a text-to-speech tool over MCP: Claude sends the script and a voice, then hands back a link to the audio file.

5 min readSume
All posts

For text to speech from Claude, meaning an audio file you can download and reuse, connect a text-to-speech tool over MCP. Claude sends the script and a voice to the tool, waits for the job, and hands back a link to the finished audio. With Sume's hosted MCP server at https://mcp.sume.com/mcp, that tool is tts_create: it takes up to 20,000 characters per call and returns an MP3 unless you ask for WAV or raw audio.

Claude's side comes from Anthropic's Help Center article on custom connectors and the Claude Code MCP docs; Sume's side from MCP quickstart, MCP tools and gates, and the TTS 1.0 schema in the Sume API reference. All were read on 2026-09-27. Sume's basics page says hosted MCP still works but is not the primary path today; from a backend, call the REST route in Text to speech API instead.

How do I add a text-to-speech tool to Claude?

Sume has no official Claude connector; you add its hosted MCP server yourself, once, then allow paid calls:

  • Claude, Claude Desktop, or Cowork: add https://mcp.sume.com/mcp as a custom connector. Add Sume to Claude as a custom connector has the steps.
  • Claude Code: run claude mcp add --transport http sume https://mcp.sume.com/mcp, then claude mcp login sume.
  • Turn Write on at Sume's consent page. The default sign-in is read-only (mcp:read), and paid tools such as tts_create return insufficient_scope until the session also has mcp:write.

What does Claude send to tts_create?

Every speech field goes inside payload, next to a required idempotency_key. With dry_run: true, the call returns an admission and cost preview and creates no job, so ask Claude to show the cost first. Word timings and one clip per sentence are optional extras, covered in Text to speech API.

From the TTS 1.0 schema in the Sume API reference and MCP tools and gates, read 2026-09-27.
FieldWhat it does
transcriptThe script: 1–20,000 characters. Spaces and punctuation count toward usage.
voice.id, avatar_id, or avatar_handleThe voice: a voice id, such as a Voices library id that starts with voi_, or a Sume avatar whose voice is ready.
languageThe language spoken. Omitted, it defaults to English, so set it for any other language.
output_formatMP3 at 44,100 Hz and 128 kbps by default; wav and raw are the other containers.
{
  "idempotency_key": "launch-voiceover-v1",
  "dry_run": true,
  "payload": {
    "transcript": "Meet the new dashboard. Setup takes one minute.",
    "avatar_handle": "narrator",
    "language": "en"
  }
}

How does Claude get the audio file back?

tts_create answers with a job id, not audio. Two more tool calls finish the task: jobs_wait, which holds at most 55 seconds per call and is repeated on the same id until the job ends, then jobs_result. The completed result lists the audio as a mirrored artifact on media.sume.com, and in current code it also carries that link as audio_url. The link is public, so you can open or download the file outside the chat.

Can Claude make music as well?

Yes, with another tool on the same server. In current code, music_create submits a Music 1.0 job: a prompt of up to 5,000 characters and an optional image_url, with no duration setting, and a duration field is rejected. Sume's docs mark Music 1.0 as retiring: its requests now resolve through the Music Router. The rate card lists music generation at $0.125 per audio.

What does it cost, and what are the limits?

tts_create bills $0.0475 per 1,000 characters, plus a 5.5% agent fee by default. dry_run: true shows the estimate first, and max_spend_usd caps a call when you pass it.

  • Up to 20,000 characters per call. Synthesized audio longer than 1,200 seconds fails with tts_duration_exceeded and captures no credit.
  • No live voice: TTS 1.0 is an asynchronous job that you poll or get a webhook for, not a stream.
  • In current code, if the voice's primary language on record differs from the requested one, the call comes back with a voice-language mismatch warning before any job or charge. After you confirm, the retry carries confirm_language_mismatch: true inside payload.
  • For a voice of your own, see AI voiceover with your own voice.

Sources

Related posts

More in Agents

All Agents posts

Written by Sume