TTSForFree

io.github.CalmNguyenPublished by GitHub account CalmNguyenv1.0.0Updated Oct 29, 2026

Generate AI voices, text-to-speech, subtitles, transcription, and video localization.

VerifiedStreamable HTTPWeb executableCommunication & CollaborationMedia & Design

Overview

AI-generated overview

Remote TTS service that lets an assistant generate AI voiceovers, multi-voice podcasts, subtitle-aligned audio, transcriptions and dubbed videos.

What you can do
  • Browse the voice catalog: list languages, search voices by language, gender or keywords, and read voice details, favorites and custom voices.
  • Manage favorites and design new personal voices from a text description.
  • Generate speech: single-voice MP3, multi-voice merged MP3, or SRT/WebVTT-timed audio.
  • Track jobs: poll status, list recent jobs, and get per-segment audio detail.
  • Transcribe media: get a one-time upload URL for a local file and receive a timestamped SRT.
  • Localize video: estimate credits, dub a video into several languages, and check per-language results.
When to use it
Useful when you want narration, podcast or dialogue audio, subtitle-synced voiceover, speech-to-text, or automatic dubbing of videos into other languages without leaving the assistant.
Requirements
Remote Streamable HTTP endpoint; nothing to install. Sign-in is by OAuth, or an X-API-Key header for clients without OAuth. A TTSForFree account is needed; a free plan is included and paid generation uses account credits. Uploads go through a one-time URL (HTTP PUT, up to 2 GB).
Before you install
Generation, transcription and dubbing consume account credits, so check account status and cost estimates before large jobs. Several tools write data: favorites, custom-voice design (uses a quota slot), uploads and dubbing jobs. Text, subtitles and uploaded media are sent to a third-party service for processing. Treat the API key as a secret.

Installation

In SourceWeft

  1. Open TTSForFree in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.CalmNguyen%2Fttsforfree/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "ttsforfree": {
      "type": "http",
      "url": "https://api.ttsforfree.com/mcp"
    }
  }
}

README

TTSForFree MCP server

Text-to-speech, multi-voice podcasts, subtitle voiceovers, transcription and video dubbing for Claude and any other MCP client. Thousands of AI voices in 100+ languages, returned as hosted MP3 URLs.

A free plan is included. Paid generation uses your TTSForFree credits.

Connect

Claude (claude.ai, Desktop, mobile)

  1. Settings → Connectors → Add custom connector
  2. URL: https://api.ttsforfree.com/mcp
  3. Click Connect, sign in to TTSForFree and allow access.

Claude Code

bash
claude mcp add --transport http ttsforfree https://api.ttsforfree.com/mcp

Then run /mcp → ttsforfree → Authenticate. With an API key instead:

bash
claude mcp add --transport http ttsforfree https://api.ttsforfree.com/mcp \  --header "X-API-Key: YOUR_API_KEY"

Cursor, VS Code and other clients

json
{  "mcpServers": {    "ttsforfree": {      "url": "https://api.ttsforfree.com/mcp"    }  }}

Add "headers": { "X-API-Key": "YOUR_API_KEY" } if the client does not support OAuth. Get an API key at ttsforfree.com/en/profile.

Claude API (MCP connector)

bash
curl https://api.anthropic.com/v1/messages \  -H "x-api-key: $ANTHROPIC_API_KEY" \  -H "anthropic-version: 2023-06-01" \  -H "anthropic-beta: mcp-client-2025-11-20" \  -H "content-type: application/json" \  -d '{    "model": "claude-opus-5-5",    "max_tokens": 2048,    "mcp_servers": [{      "type": "url",      "name": "ttsforfree",      "url": "https://api.ttsforfree.com/mcp",      "authorization_token": "YOUR_TTSFORFREE_API_KEY"    }],    "tools": [{ "type": "mcp_toolset", "mcp_server_name": "ttsforfree" }],    "messages": [{ "role": "user", "content": "Read this in a warm British voice: Welcome to our channel!" }]  }'

What you can ask

Ask ClaudeTools it uses
"Read this lesson in a calm British voice from my favorites."list_favorite_voices → text_to_speech
"Turn this article into a 2-host podcast, one MP3."multi_voice_to_speech → get_job_detail
"Translate this SRT to Spanish, keep the timestamps, voice it, give me the ffmpeg command."srt_to_speech → get_job_status
"Transcribe this video into an SRT file."create_upload_url → transcribe_media
"Dub this video into Vietnamese, Spanish and Japanese for YouTube. Cost first."create_upload_url → estimate_video_localization → localize_video → get_localization_status
"Make me a young male voice that reviews stories, southern Vietnamese accent."design_custom_voice

Video walkthroughs: ttsforfree.com/en/claude-tts-connector.

Tools (21)

ToolTypeWhat it does
list_languagesreadAll supported languages and their codes.
list_voicesreadSearch voices by language, gender, provider and keywords ("warm narrator").
get_voice_detailsreadPersona, use case, accent, styles, preview audio and credit cost of one voice.
list_favorite_voicesreadThe user's favorite voices, in saved order.
list_my_custom_voicesreadPersonal voices from Voice Design / Voice Clone and the remaining quota.
add_favorite_voicewriteSave a voice to favorites.
remove_favorite_voicewriteRemove a voice from favorites.
design_custom_voicewriteCreate a new personal voice from a text description.
get_account_statusreadPlan, remaining credits, per-request limits and API rate limits.
text_to_speechjobOne text + one voice → MP3 (narration, articles, lessons).
multi_voice_to_speechjobOrdered segments with different voices → one MP3 (podcast, dialogue).
srt_to_speechjobSRT/WebVTT or timed segments → timeline-aligned MP3 + ffmpeg merge commands.
get_job_statusreadPoll a job until SUCCESS and get the audio URL.
list_recent_jobsreadRecent jobs with audio URLs, to reuse instead of paying twice.
get_job_detailreadPer-segment audio of a multi-voice/SRT job (for Remotion and captions).
create_upload_urlwriteOne-time upload URL for a local video/audio file (PUT, up to 2 GB).
transcribe_mediajobVideo/audio → timestamped SRT (speech-to-text).
get_transcriptionreadStatus and SRT of a transcription.
estimate_video_localizationreadCredit estimate to dub a video into several languages.
localize_videojobDub one video into many languages: audio track + dubbed video per language.
get_localization_statusreadProgress and results (audio URL for YouTube, dubbed video, SRT) per language.

job tools are asynchronous: they return a job_id, and the client polls the matching status tool until SUCCESS.

Prompts: youtube_multi_language_audio, video_voiceover, podcast_episode, narrate_text.

Privacy and data

  • OAuth access is scoped to your TTSForFree account and can be revoked any time from your TTSForFree profile (Connected apps).
  • Text, subtitles and uploaded media are processed only to produce the audio, subtitles or video you asked for.
  • Privacy policy: ttsforfree.com/en/privacy-policy

Support

Open an issue in this repository or contact us via ttsforfree.com/en/contact.

Registry metadata

server.json is the entry published to the MCP Registry. To publish an update, bump version in server.json and push a tag vX.Y.Z (or run the Publish to MCP Registry workflow manually). The workflow signs in with GitHub OIDC, so no secret is needed.

Source: README.md at commit 294189e

Tools

21

list_languages

List languages

List every language supported by TTSForFree text-to-speech. Returns language codes to pass to list_voices.

Takes no parameters.

list_voices

Find voices

Search the AI voice catalog for one language. Each result has a `voice` token (v1:...) - pass it unchanged as `voice` to text_to_speech, multi_voice_to_speech or srt_to_speech. Results are sorted by popularity; `can_use=false` means the user's plan cannot use that voice. Prefer the user's favorite or custom voices when they exist.

Parameterslimitquerygenderlanguagerequiredprovideronly_usable

get_voice_details

Voice details

Get full metadata for one voice token: persona, use case, accent, pitch, styles, preview audio and credit cost.

Parametersvoicerequired

list_my_custom_voices

My custom voices

List the user's personal voices created with Voice Design (from a text prompt) or Voice Clone (from an audio sample), plus the remaining custom-voice quota. Use `voice` from the result in any speech tool.

Takes no parameters.

list_favorite_voices

My favorite voices

List the voices the user marked as favorites, in their saved order. Check this first when the user did not name a voice.

Takes no parameters.

add_favorite_voice

Add favorite voice

Save a voice to the user's favorites (only when the user asks).

Parametersvoicerequired

remove_favorite_voice

Remove favorite voice

Remove a voice from the user's favorites (only when the user asks).

Parametersvoicerequired

design_custom_voice

Design a custom voice

Create a new personal AI voice from a natural-language description (Gemini Voice Design). Uses one slot of the user's custom-voice quota - confirm with the user first. Good for a unique narrator or a character voice in a video/podcast. Returns the new `voice` token.

Parametersgenderrequiredpromptrequireddisplay_namerequiredlanguage_coderequired

get_account_status

Account status

Show the user's plan tier, remaining characters/credits, max characters per request, max blocks per multi-voice/SRT job and API rate limits. Call before large jobs.

Takes no parameters.

text_to_speech

Text to speech

Convert one text into one MP3 with one voice. Use for narration, voiceover scripts, articles, lessons, announcements or any audio whose length can follow the speech. Consumes credits (characters x voice rate). Returns job_id, status and audio_url when ready.

Parameterstextrequiredpitchvoicerequiredwait_seconds

multi_voice_to_speech

Multi-voice audio (podcast / dialogue)

Render ordered segments, each with its own voice, into ONE merged MP3. Use for podcasts, dialogues, interviews, audio dramas or explainer videos with several speakers when there are no fixed timestamps. Consumes credits.

Parameterssegmentsrequiredwait_seconds

srt_to_speech

Subtitles to speech (video voiceover / dubbing)

Create ONE MP3 that follows a subtitle timeline: every cue starts at its timestamp and speech speed auto-fits the cue duration. Use for video voiceover, dubbing translated subtitles, YouTube localization, tutorials and any edit where audio must line up with existing video. Pass either raw `srt` (SRT or WebVTT text) or `segments` with start_ms/end_ms. For several speakers set `speaker_voices` and prefix cue text with '[Name]' or 'Name:'. The resulting MP3 starts at 00:00 of the video, so it can be muxed directly with ffmpeg (commands are returned). Consumes credits.

Parameterssrtvoicesegmentswait_secondsspeaker_voicesmax_speech_ratemin_speech_rate

get_job_status

Job status

Check a speech job created earlier. Returns status (PENDING | SUCCESS | ERROR) and audio_url once SUCCESS. Never guess or fetch an audio URL before SUCCESS.

Parametersjob_idrequiredjob_typerequiredwait_seconds

list_recent_jobs

Recent jobs

List the user's most recent speech jobs with status and audio URLs, to reuse earlier audio instead of paying again.

Parameterslimitjob_type

get_job_detail

Job segments (for Remotion / editors)

Get a multi_voice_to_speech or srt_to_speech job with every segment: text, voice and its own audio_url, plus the merged audio. Use it to build captions or a Remotion/NLE timeline (one <Sequence> per segment; measure each file's duration in the renderer).

Parametersjob_idrequired

create_upload_url

Upload a video/audio file

Get a one-time URL to upload a local video or audio file (mp4, mov, webm, mkv, mp3, wav, m4a...) up to 2 GB. Upload with HTTP PUT of the raw bytes, e.g. `curl -T video.mp4 "<upload_url>"` (valid 15 minutes), then pass `public_url` to transcribe_media or localize_video. Only files uploaded here (or on ttsforfree.com) are accepted; YouTube and other external links are never downloaded. If you cannot run commands, ask the user to upload the file on https://ttsforfree.com/en/video-localization/ and paste the file link.

Parametersfile_namerequiredfile_size_bytes

transcribe_media

Transcribe video/audio to SRT

Speech-to-text for an uploaded video or audio file: returns timestamped SRT (the timeline to rewrite, translate or re-voice with srt_to_speech). Credits are charged per second of media, measured by the server. Use language = the spoken language code from list_languages.

Parameterslanguagerequiredmedia_urlrequiredwait_seconds

get_transcription

Transcription status

Check a transcribe_media job and get its SRT once finished.

Parametersjob_idrequiredwait_seconds

estimate_video_localization

Estimate video dubbing cost

Estimate the credits to dub one video into one or more languages (speech-to-text + translation + voice + video merge) before running localize_video. Pass video_url (duration is measured) or duration_seconds.

Parameterstargetsrequiredvideo_urlsource_languagerequiredduration_seconds

localize_video

Dub a video into other languages

Full automatic dubbing of an uploaded video: transcribe once, translate, voice every target language with its own voice and render a dubbed video per language. Each language returns an audio_url (voice track aligned to the original timeline - upload it to YouTube Studio as a multi-language audio track) and a final_video_url. Takes several minutes: returns job_guids immediately; poll get_localization_status. Confirm the cost with estimate_video_localization for long videos.

Parameterstargetsrequiredvideo_urlrequiredsource_languagerequiredoriginal_audio_volume_percent

get_localization_status

Video dubbing status

Status of localize_video jobs: current step, and when Completed the dubbed audio_url, final_video_url and translated SRT for each language.

Parametersjob_guidsrequiredwait_seconds

Version history

1
  1. v1.0.0LatestOct 22, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

    Declare a license in the repository or the registry entry.