<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Miragea</title>
    <description>The latest articles on DEV Community by Miragea (@miragea-voice).</description>
    <link>https://dev.to/miragea-voice</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4233553%2Fd67c1eba-0c21-4ebd-a6b0-ce0baeed7f6f.png</url>
      <title>DEV Community: Miragea</title>
      <link>https://dev.to/miragea-voice</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/miragea-voice"/>
    <language>en</language>
    <item>
      <title>How to Give Claude, Cursor or Any AI Agent a Voice: Voiceovers and Subtitles with an MCP Server</title>
      <dc:creator>Miragea</dc:creator>
      <pubDate>Sun, 08 Nov 2026 13:05:03 +0000</pubDate>
      <link>https://dev.to/miragea-voice/how-to-give-claude-cursor-or-any-ai-agent-a-voice-voiceovers-and-subtitles-with-an-mcp-server-pof</link>
      <guid>https://dev.to/miragea-voice/how-to-give-claude-cursor-or-any-ai-agent-a-voice-voiceovers-and-subtitles-with-an-mcp-server-pof</guid>
      <description>&lt;p&gt;You asked Claude to write a 60-second script for your next video. It did, in seconds. Then you copied the text into a text-to-speech website, downloaded an MP3, opened a subtitle editor, typed timings by hand, and dragged three files into your video editor. The AI wrote the words, but you still did all the production work.&lt;/p&gt;

&lt;p&gt;The missing piece is a &lt;strong&gt;voice&lt;/strong&gt;: a way for the agent itself to turn text into audio files and matching subtitles. This tutorial shows how to add one to Claude Desktop, Claude Code, Cursor, VS Code or any other MCP client using an open-source MCP server.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7al7v2s1q44ql1ykm7vy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7al7v2s1q44ql1ykm7vy.png" alt="Architecture diagram: an MCP client such as Claude or Cursor calls the local miragea-voice-mcp server over stdio, the server calls the Miragea API over HTTPS, and audio plus SRT/VTT subtitle files are saved to disk" width="800" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a voice MCP server?
&lt;/h2&gt;

&lt;p&gt;A voice MCP server is a small program that speaks the &lt;a href="https://modelcontextprotocol.io" rel="noopener noreferrer"&gt;Model Context Protocol&lt;/a&gt; and exposes text-to-speech and speech-to-text as tools an AI agent can call. The agent decides when to call them (for example, "narrate this script"), the server does the work, and the result comes back as data the agent can use in its next step. The server used here, &lt;strong&gt;&lt;a href="https://codeberg.org/miragea-voice/miragea-voice-mcp" rel="noopener noreferrer"&gt;miragea-voice-mcp&lt;/a&gt;&lt;/strong&gt;, runs locally over stdio, uses the &lt;a href="https://miragea.ai" rel="noopener noreferrer"&gt;Miragea&lt;/a&gt; voice API as its speech engine, and always writes real files to disk (MP3, WAV, FLAC, Opus or AAC audio plus SRT and VTT subtitles) and returns their absolute paths, so the agent can hand them to &lt;code&gt;ffmpeg&lt;/code&gt;, your editor, or another tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  What can the agent do once it has a voice?
&lt;/h2&gt;

&lt;p&gt;The server exposes eight tools:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;th&gt;Spends credits&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;text_to_speech&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Text of any length → audio file + SRT/VTT subtitles&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;generate_dialogue&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;Speaker: line&lt;/code&gt; script → one joined audio file, per-line WAVs, speaker-labelled subtitles&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;transcribe_to_subtitles&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Local audio or video → SRT, VTT, TXT, JSON&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;list_voices&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Voices saved in your Miragea account&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_capabilities&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Live models, emotion/style tags, formats, limits, pricing&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;estimate_cost&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Credits a text would cost, before you generate it&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;check_task&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Resume a long job by &lt;code&gt;task_id&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;list_recent_tasks&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Recent jobs with status and credits used&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A few design choices matter for real production work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Subtitles are timed to the generated audio&lt;/strong&gt;, not guessed from word counts alone. For dialogue and long texts, each line is its own audio segment, so cue boundaries are exact.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Long text is split at sentence boundaries&lt;/strong&gt; and joined back together, so you can voice a full script in one call.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retries never double-charge.&lt;/strong&gt; Requests use deterministic idempotency keys, so re-running the same request returns the original task.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost control is built in.&lt;/strong&gt; &lt;code&gt;estimate_cost&lt;/code&gt; is free, and &lt;code&gt;max_credits&lt;/code&gt; stops a job before it starts if it would cost more than you allow.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How do I add a voice to Claude, Cursor or another AI agent? (3 steps)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Get an API key and install uv
&lt;/h3&gt;

&lt;p&gt;Create a Miragea API key at &lt;a href="https://miragea.ai/workspace/api" rel="noopener noreferrer"&gt;miragea.ai/workspace/api&lt;/a&gt;. The server itself is free and MIT-licensed; speech generation uses your Miragea account's credits.&lt;/p&gt;

&lt;p&gt;The server is launched with &lt;a href="https://docs.astral.sh/uv/" rel="noopener noreferrer"&gt;&lt;code&gt;uvx&lt;/code&gt;&lt;/a&gt;, which downloads and runs it from &lt;a href="https://pypi.org/project/miragea-voice-mcp/" rel="noopener noreferrer"&gt;PyPI&lt;/a&gt; with no separate install step:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# macOS / Linux&lt;/span&gt;
curl &lt;span class="nt"&gt;-LsSf&lt;/span&gt; https://astral.sh/uv/install.sh | sh

&lt;span class="c"&gt;# Windows&lt;/span&gt;
winget &lt;span class="nb"&gt;install &lt;/span&gt;astral-sh.uv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Prefer pip? &lt;code&gt;pip install miragea-voice-mcp&lt;/code&gt; works too, and the command is then just &lt;code&gt;miragea-voice-mcp&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Add the server to your MCP client
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Claude Desktop&lt;/strong&gt;: Settings → Developer → Edit Config, then add this to &lt;code&gt;claude_desktop_config.json&lt;/code&gt; and restart Claude:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"miragea-voice"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"uvx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"miragea-voice-mcp"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"MIRAGEA_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;your-miragea-api-key&amp;gt;"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Cursor&lt;/strong&gt;: put the same block in &lt;code&gt;~/.cursor/mcp.json&lt;/code&gt; (global) or &lt;code&gt;.cursor/mcp.json&lt;/code&gt; (per project).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Claude Code&lt;/strong&gt;: one command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add miragea-voice &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;MIRAGEA_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;your-miragea-api-key&amp;gt; &lt;span class="nt"&gt;--&lt;/span&gt; uvx miragea-voice-mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;VS Code (Copilot agent mode)&lt;/strong&gt;: add this to &lt;code&gt;.vscode/mcp.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"servers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"miragea-voice"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"stdio"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"uvx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"miragea-voice-mcp"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"MIRAGEA_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;your-miragea-api-key&amp;gt;"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You don't have to copy these by hand: &lt;code&gt;uvx miragea-voice-mcp config &amp;lt;client&amp;gt;&lt;/code&gt; prints the right snippet for &lt;code&gt;claude-desktop&lt;/code&gt;, &lt;code&gt;cursor&lt;/code&gt;, &lt;code&gt;claude-code&lt;/code&gt;, &lt;code&gt;vscode&lt;/code&gt; or &lt;code&gt;windsurf&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9bvejk19pxi0kiakb3wh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9bvejk19pxi0kiakb3wh.png" alt="Terminal output of miragea-voice-mcp --version, --help and config claude-code, which prints the claude mcp add command" width="799" height="228"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Check the setup, then ask for a voiceover
&lt;/h3&gt;

&lt;p&gt;Run the built-in check. It verifies the key, the API connection and the output folder without spending any credits:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;MIRAGEA_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;your-miragea-api-key&amp;gt; uvx miragea-voice-mcp doctor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhd6gwg1v8vl55nkj9c1b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhd6gwg1v8vl55nkj9c1b.png" alt="Terminal output of miragea-voice-mcp doctor: API key set, Miragea API reachable, output folder writable, ffmpeg found, available models listed" width="800" height="259"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then restart your client and ask in plain language:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Estimate the cost first, then read intro.md as a calm voiceover and give me SRT and VTT subtitles."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Files land in &lt;code&gt;~/miragea-voice&lt;/code&gt; by default (change it with &lt;code&gt;MIRAGEA_OUTPUT_DIR&lt;/code&gt;), and existing files are never overwritten.&lt;/p&gt;

&lt;h2&gt;
  
  
  3 real use cases for video creators
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. YouTube or course voiceover with subtitles in one prompt
&lt;/h3&gt;

&lt;p&gt;Write or paste your script, then ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Voice script.md with my 'Narrator' voice, save it to ./assets/vo.mp3, and create subtitles."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;text_to_speech&lt;/code&gt; returns &lt;code&gt;vo.mp3&lt;/code&gt;, &lt;code&gt;vo.srt&lt;/code&gt; and &lt;code&gt;vo.vtt&lt;/code&gt;. Because the agent receives the paths, it can keep going in the same conversation, for example by running &lt;code&gt;ffmpeg&lt;/code&gt; to mux the audio and burn in the subtitles. If you haven't saved a voice in your account yet, pass a public &lt;code&gt;https://&lt;/code&gt; link to a clean 5–30 second speech sample as the voice to clone it (only clone voices you have the rights to use).&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Two-host explainer or podcast-style dialogue
&lt;/h3&gt;

&lt;p&gt;Write the script with one speaker per line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Narrator: Welcome to Two Minute Tech.
Ava: Today's idea: the Model Context Protocol.
Leo: Wait, is that the thing that lets Claude use tools?
[pause 600ms]
Ava: Exactly.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then ask the agent to call &lt;code&gt;generate_dialogue&lt;/code&gt; with a voice for each speaker. You get one joined audio file, a separate WAV per line (handy for fine-tuning in your editor), and subtitles with speaker labels: &lt;code&gt;Ava: …&lt;/code&gt; in SRT and &lt;code&gt;&amp;lt;v Ava&amp;gt;&lt;/code&gt; voice spans in VTT. Each line's exact start and end time in the final file comes back too.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Subtitles for footage you already recorded
&lt;/h3&gt;

&lt;p&gt;For talking-head clips, screen recordings or interviews, ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Create SRT and VTT subtitles for ./raw/interview.mp4."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;transcribe_to_subtitles&lt;/code&gt; uploads the media to Miragea's speech recognition, then cuts the transcript into readable sentence cues and writes &lt;code&gt;interview.srt&lt;/code&gt;, &lt;code&gt;interview.vtt&lt;/code&gt; (plus TXT or JSON if you ask) next to the video. Pass &lt;code&gt;max_credits&lt;/code&gt; if you want a hard budget, since this tool is billed by media duration.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How do I add text-to-speech to Claude Desktop?
&lt;/h3&gt;

&lt;p&gt;Add the &lt;code&gt;miragea-voice&lt;/code&gt; block shown in Step 2 to &lt;code&gt;claude_desktop_config.json&lt;/code&gt;, set your Miragea API key, and restart Claude Desktop. Claude can then call &lt;code&gt;text_to_speech&lt;/code&gt; whenever you ask it to read, narrate or voice something.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can Cursor or Claude Code generate a voiceover for my video project?
&lt;/h3&gt;

&lt;p&gt;Yes. Both support MCP servers. Once the server is added, ask for a voiceover and an output path inside your project, such as &lt;code&gt;./assets/vo.mp3&lt;/code&gt;. The agent gets the file paths back and can wire them into your project.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I generate SRT subtitles from text with AI?
&lt;/h3&gt;

&lt;p&gt;Use &lt;code&gt;text_to_speech&lt;/code&gt;: it writes &lt;code&gt;.srt&lt;/code&gt; and &lt;code&gt;.vtt&lt;/code&gt; next to every voiceover by default, timed to the audio it just generated. For an existing video, use &lt;code&gt;transcribe_to_subtitles&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is it free?
&lt;/h3&gt;

&lt;p&gt;The MCP server is free and open source (MIT). The speech itself is generated by the Miragea API and uses credits from your Miragea account. &lt;code&gt;estimate_cost&lt;/code&gt; and &lt;code&gt;get_capabilities&lt;/code&gt; are free and show the price before you generate anything.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does it work offline?
&lt;/h3&gt;

&lt;p&gt;No. Speech generation and transcription run on the Miragea API, so you need an internet connection. If you need fully offline TTS, a local engine is the better fit.&lt;/p&gt;

&lt;h3&gt;
  
  
  What happens if a long job times out in my client?
&lt;/h3&gt;

&lt;p&gt;The task keeps running on the API side. Ask the agent to call &lt;code&gt;check_task&lt;/code&gt; with the returned &lt;code&gt;task_id&lt;/code&gt;, or simply repeat the request: the idempotency key returns the original task, so you aren't charged twice.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which MCP clients are supported?
&lt;/h3&gt;

&lt;p&gt;Any client that can launch a stdio MCP server: Claude Desktop, Claude Code, Cursor, VS Code (GitHub Copilot agent mode), Windsurf and others. The command is always &lt;code&gt;uvx miragea-voice-mcp&lt;/code&gt; with &lt;code&gt;MIRAGEA_API_KEY&lt;/code&gt; in its environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Source code, issues and full documentation: &lt;a href="https://codeberg.org/miragea-voice/miragea-voice-mcp" rel="noopener noreferrer"&gt;codeberg.org/miragea-voice/miragea-voice-mcp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Package: &lt;a href="https://pypi.org/project/miragea-voice-mcp/" rel="noopener noreferrer"&gt;pypi.org/project/miragea-voice-mcp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Voice engine and API keys: &lt;a href="https://miragea.ai" rel="noopener noreferrer"&gt;miragea.ai&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Model Context Protocol: &lt;a href="https://modelcontextprotocol.io" rel="noopener noreferrer"&gt;modelcontextprotocol.io&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you build something with it, a video pipeline, a course generator or a podcast workflow, issues and pull requests are welcome on Codeberg.&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>ai</category>
      <category>python</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
