EasyVoice
VoicesArabicPricingAPIMCPNew
EasyVoice

Free text-to-speech powered by open source AI.

Product

  • Voices
  • Pricing
  • API
  • MCP for AI Agents
  • Kokoro TTS Online

Resources

  • Blog
  • Documentation
  • About

Legal

  • Privacy Policy
  • Terms of Service

Text to Speech by Language

  • American English
  • British English
  • Spanish
  • French
  • Hindi
  • Italian
  • Japanese
  • Portuguese
  • Arabic

Compare TTS Tools

  • Unlimited TTS (No Credits)
  • LOVO Alternative
  • Neets.ai Alternative
  • Play.HT API Replacement
  • vs ElevenLabs
  • vs PlayHT
  • vs Murf AI
  • vs Speechify
  • vs Google Cloud TTS
  • vs Amazon Polly
  • vs Azure Speech
  • vs OpenAI TTS
  • vs LOVO
  • vs Neets.ai

TTS API

  • Cheapest TTS API
  • API Documentation
  • OpenAI TTS Alternative
  • ElevenLabs API Pricing
  • Arabic TTS API
  • TTS MCP Server
  • OpenAI TTS Pricing
  • 5-Line Migration Guide
  • Free TTS API Tier

AI Voice Use Cases

  • AI Voice by Niche
  • God's Message Videos
  • Faceless YouTube
  • Motivational Videos
  • Learn-English Content
  • Gaming Videos
  • Content Creators
  • Developers
  • Business
  • TTS Cost for YouTube

© 2026 EasyVoice. Powered by Kokoro-82M (Apache 2.0).

Built with ❤️ and open source AI.

Built by InfoDriven

Dubai, United Arab Emirates · Support@infodriven.ae · infodriven.ae

  1. Home
  2. /MCP Server
Works with your free API key — no card

Your AI Agent Gets the Whole EasyVoice Platform — One MCP URL

Connect Claude, ChatGPT, Cursor, or any MCP client to EasyVoice and your agent can speak: instant text to speech with 56 voices, long-form narration up to 500,000 characters per job, two-speaker podcast episodes, and voice cloning — all over one URL, authenticated with the same ev_ API keys as the REST API.

https://easyvoice.ae/api/mcp

A free key gets 12 voices, 20 requests/minute, and instant TTS — no card. Pro ($9.99/mo flat) unlocks all 56 voices plus long-form, podcast, and cloning, with unlimited characters (fair use 10M/mo). Pro comes with a 14-day money-back guarantee.

Download connection file (.md)

The connection file is a single markdown doc you can hand to any AI assistant — it contains everything needed to connect and drive every tool.

What is MCP?

The Model Context Protocol (MCP) is how AI assistants gain abilities: you give your assistant a server URL, and every tool that server exposes becomes something the assistant can do on its own. Point it at EasyVoice and it gains seven tools — it can generate speech from any text it writes, narrate long scripts, produce two-speaker podcast episodes, clone voices, and check its own usage — without you copy-pasting anything between apps.

Connect your AI client

Free account, no card. You land back on this page — your key is one more click.

Copies the full connection file with your key filled in — paste it into any AI assistant and it can connect unaided.

Generate a key above and every block below fills in your real key automatically. Setting up by hand instead? Replace ev_your_api_key wherever it appears — manage keys anytime at .

/account/keys

claude.ai — custom connectors

Settings → Connectors → Add custom connector. Paste the server URL, then add a request header (the header option is labeled beta in the connector UI):

URL:    https://easyvoice.ae/api/mcp
Header: Authorization: Bearer ev_your_api_key

Claude Desktop

Uses the same account-level Connectors UI as claude.ai (Settings → Connectors — synced to your account). Honest note: claude_desktop_config.json only takes local stdio servers, not remote URLs — for a remote server use the Connectors UI, or the mcp-remote bridge at the bottom of this list.

Claude Code

claude mcp add --transport http easyvoice https://easyvoice.ae/api/mcp --header "Authorization: Bearer ev_your_api_key"

Or the equivalent .mcp.json entry:

{
  "mcpServers": {
    "easyvoice": {
      "type": "http",
      "url": "https://easyvoice.ae/api/mcp",
      "headers": { "Authorization": "Bearer ev_your_api_key" }
    }
  }
}

ChatGPT — developer mode

Available on Plus, Pro, Business, Enterprise, and Edu (web). Enable developer mode in settings, then add a connector. The form supports OAuth or no authentication only — no custom headers — so put the key in the URL and pick No authentication:

https://easyvoice.ae/api/mcp?key=ev_your_api_key

Key-in-URL caveat: the URL sits in your connector config, so treat it like a password — you can revoke and recreate the key anytime at /account/keys. Hedged note: multiple community reports say Plus/Pro may restrict connector tools to read-only (unconfirmed by OpenAI docs) — if text_to_speech refuses to run there, that is the likely cause, not your key.

Cursor

Add to ~/.cursor/mcp.json. Prefer to keep the key out of the file? ${env:EASYVOICE_API_KEY} interpolation also works:

{
  "mcpServers": {
    "easyvoice": {
      "url": "https://easyvoice.ae/api/mcp",
      "headers": { "Authorization": "Bearer ev_your_api_key" }
    }
  }
}

Anything else — mcp-remote fallback

Bridges any stdio-only MCP client to this server:

npx mcp-remote https://easyvoice.ae/api/mcp --header "Authorization:Bearer ev_your_api_key"

Windows note: some client configs mangle spaces inside args — write the header value with no space after the colon (as above), or use the ?key= URL form instead.

Authentication

Primary: Authorization: Bearer ev_your_api_key — the exact same keys and header as the REST API. Fallback for clients without custom-header support: ?key=ev_your_api_key on the server URL (the header wins if both are sent).

initialize and tools/list work without a key — your connector will save and list tools fine — but every tools/call needs a valid key. Honest note on ?key=: a key in the URL can land in server access logs and client config files. Prefer the header where the client allows it, and revoke/recreate the key at /account/keys if a URL ever leaks.

Tools reference — seven tools, four groups

Instant TTS

text_to_speech

Convert text to a hosted MP3/WAV download link — the core tool, and the one free keys can use. Per-call limit: 8,000 characters (4,000 for Arabic ar_* voices).

ParameterTypeRequiredDescription
textstringYesThe text to speak — up to 8,000 characters per call (4,000 on ar_* voices).
voicestringNoVoice id (default af_aoede) — call list_voices for the catalog.
speednumberNo0.5 to 2 (default 1).
formatstringNomp3 or wav (default mp3).
// tools/call arguments
{ "text": "Hello from my AI agent!", "voice": "af_aoede", "format": "mp3" }

// result (abridged)
{ "audio_url": "https://easyvoice.ae/api/tts/audio/1f6f7c2e-8a41.mp3",
  "voice": "af_aoede", "format": "mp3", "characters": 23 }

The result is a hosted download URL (https://easyvoice.ae/api/tts/audio/<uuid>.mp3). Audio links are not guaranteed to persist — download promptly. Over 8,000 characters on a Kokoro voice? Use generate_long_form (Pro) or the web studio. Over 4,000 characters on an ar_* voice? Use POST /api/v1/audio/speech (Arabic sync cap 12,000) or the web app — never the long-form tool, which is Kokoro-only and rejects Arabic voices. Cloned voice_* ids are not accepted here either — the tool returns an error pointing at POST /api/v1/audio/speech for synchronous cloned synthesis, or create_podcast to use clones over MCP.

list_voices

No parameters. Lists all 56 catalog voices with a tier column (free | pro) plus your cloned voices and their status. Free keys can synthesize with the 12 free-tier voices — the rest return a truthful Pro-required error.

// tools/call arguments
{}

// result (abridged)
{ "plan": "free",
  "voices": [ { "id": "af_aoede", "name": "Aoede", "language": "English",
                "tier": "free", "available": true }, "..." ],
  "cloned": [ { "id": "voice_abc123", "name": "My Voice", "status": "ready" } ] }

Async jobs — long-form, podcast, status

Pro gate, stated once up front: these tools reuse the Jobs API, and “The Jobs API requires a Pro subscription — free API keys can use /v1/audio/speech.” is exactly what a free key gets back (as an isError result). Free keys can use instant text_to_speech above. The agent flow for all job tools: create → poll get_job_status → download audio_url. Long-form and podcast audio is retained about 7 days after completion, so the audio_url can be re-fetched any time within that window by calling get_job_status again with the same job id.

generate_long_form

Narrate a full script — up to 500,000 characters in one job. Kokoro narration voices only: ar_* and cloned voice_* ids are rejected by the long-form engine.

ParameterTypeRequiredDescription
inputstringYesThe full script, up to 500,000 characters.
voicestringNoKokoro voice id (default af_aoede).
speednumberNo0.5 to 2 (default 1).
formatstringNomp3 or wav (default mp3).
// tools/call arguments
{ "input": "Chapter 1. The full 120,000-character script...", "voice": "af_aoede" }

// result — a job id, 202-style
{ "job_id": "1f6f7c2e-...", "status": "queued", "input_chars": 120000 }

// then poll get_job_status with that job_id:
{ "id": "1f6f7c2e-...", "status": "active", "completed": 3, "total": 12 }
{ "id": "1f6f7c2e-...", "status": "completed",
  "audio_url": "https://easyvoice.ae/api/tts/audio/1f6f7c2e.mp3" }

Voice cloning

clone_voice

Enroll a custom cloned voice from an audio sample (async). Honest gating, all enforced server-side: Pro only; consent: true attestation required (recorded); 5 enrollments per day; 3 cloned voices max — a full account returns 409. Sample: 10 MB max, wav/mp3/m4a, a 15–60 second clean single-speaker recording works best.

ParameterTypeRequiredDescription
namestringYesDisplay name for the cloned voice.
consentbooleanYesMust be literally true — you attest you have the recording rights to the sample. Anything else is rejected.
audio_base64stringOne ofBase64-encoded audio sample (10 MB max decoded).
audio_urlstringOne ofPublic https URL to the sample — fetched server-side, same 10 MB bound, redirects not followed.
mime_typestringNoSample MIME type (default audio/wav) — wav, mp3, m4a accepted.
// tools/call arguments
{ "name": "My Narrator", "consent": true,
  "audio_url": "https://example.com/sample.wav" }

// result
{ "voice_id": "voice_9f2c...", "status": "enrolling" }

After enrolling, check list_voices until the clone reports ready, then use it in create_podcast. For synchronous cloned synthesis, use POST /api/v1/audio/speech (REST, same key) — text_to_speech does not take cloned ids.

Account

get_usage

No parameters — returns your plan, remaining free characters, rate limits, and the daily reset time. Agents should call this to self-handle quota errors instead of retrying blindly.

// tools/call arguments
{}

// result (free key)
{ "plan": "free", "used": 1200, "remaining": 3800, "limit": 5000,
  "rpm_limit": 20, "concurrency_limit": 2, "reset_at": "2026-07-22T00:00:00Z" }

Limits — Free vs Pro

LimitFreePro ($9.99/mo)
Voices12 free voicesAll 56 + your cloned voices
Characters5,000/day, shared with the web app. Resets midnight UTC.Unlimited — fair use 10M API chars/mo
Requests per minute2060
Concurrent requests2No per-key cap
Instant TTS (text_to_speech)Free + Pro — 8,000 chars/call, 4,000 on ar_* voicesSame caps, full catalog
Long-form (generate_long_form)Pro only500,000 chars/job — Kokoro voices only
Podcast (create_podcast)Pro only (via API key)30,000 chars/episode, max 60 segments
Cloning (clone_voice)Pro only5 enrollments/day, 3 cloned voices max

Pro is unlimited in characters, not in requests — 60 requests/minute. Fair use is 10M API characters a month; past that we may throttle before we ever bill you. No overage charges.

Troubleshooting

  • 401 on tools/call — missing or invalid key. The connector saves fine without a key (initialize and tools/list are open), but every tools/call needs one. Create a key at /account/keys.
  • 403 plan_required family — truthful Pro gates, one line each: a Pro voice on a free key returns “This voice is only available on the Pro plan.”; the job tools return “The Jobs API requires a Pro subscription — free API keys can use /v1/audio/speech.”; cloning tools return the Pro-required cloning error. $9.99/mo flat unlocks them.
  • 429 family — rate_limit_exceeded (per-minute window: 20 free / 60 Pro), concurrency_limit_exceeded (more than 2 in flight on free), daily_quota_exceeded (free 5,000/day pool spent — resets midnight UTC). Cloning has its own 5/day enrollment limit, also surfaced as rate_limit_exceeded. Call get_usage to see where you stand.
  • 409 voice_quota_exceeded — 3 cloned voices max. Delete one (DELETE /api/v1/voices/{id} or the web app) and enroll again.
  • GET returns 405 — expected and spec-sanctioned. The endpoint is POST-only; a 405 on GET does not mean the server is down.
  • mcp-remote on Windows — spaces inside args get mangled in some client configs. Use "Authorization:Bearer ev_your_api_key" (no space after the colon) or the ?key= URL.

MCP server — frequently asked questions

How do I make Claude generate voice audio?▾

Claude cannot synthesize speech by itself — you connect it to a text-to-speech service over MCP. Add https://easyvoice.ae/api/mcp as a custom connector (Settings → Connectors on claude.ai and Claude Desktop, or "claude mcp add" in Claude Code) with your EasyVoice API key, then ask Claude to call the text_to_speech tool. It returns a hosted MP3 or WAV download link. Free API keys work — 12 voices, no card required.

What can an AI agent do with EasyVoice over MCP?▾

An AI agent connected to EasyVoice over MCP can turn any text it writes into downloadable speech — 56 voices, one URL, no SDK. Beyond instant TTS, a Pro key unlocks the full platform: long-form narration up to 500,000 characters per job, two-speaker podcast episodes, and voice cloning — the agent submits a job, polls get_job_status, and collects the audio URL when it completes.

Which AI apps can connect to the EasyVoice MCP server?▾

claude.ai and Claude Desktop (custom connectors), Claude Code, Cursor, ChatGPT developer mode, and any MCP client that speaks Streamable HTTP. Clients that only support local stdio servers can bridge with npx mcp-remote. The server answers plain JSON — no SSE required.

Does it work with ChatGPT?▾

ChatGPT developer mode (Plus, Pro, Business, Enterprise, Edu — web) accepts remote MCP servers. Its connector form supports OAuth or no-auth only, so use the key-in-URL form: https://easyvoice.ae/api/mcp?key=ev_your_api_key with authentication set to none. One honest caveat: community reports say ChatGPT Plus and Pro may restrict custom-connector tools to read-only, which would block text_to_speech. We could not confirm this from OpenAI's documentation, so treat write tools on Plus/Pro as unverified — Business/Enterprise/Edu with admin-enabled write tools is the reliably reported path.

Is my API key safe in the URL?▾

The Authorization header is safer and is the primary method — the ?key= URL form exists only for clients whose connector form has no header field. A key in the URL can end up in server access logs and in client config files, so treat that URL like a password. The blast radius is limited: a free key is capped at 20 requests/minute, 2 concurrent, and a shared 5,000 characters/day, and no key can spend money — keys only generate audio. You can revoke and re-create keys anytime at /account/keys.

Is it really unlimited?▾

Pro has no character meter — generate as much as your product needs at $9.99/month flat. Fair use is 10M API characters a month (roughly 180+ hours of finished audio); past that we may throttle to protect other users before we ever bill you. No overage charges. Pro requests are limited to 60 per minute. Reselling raw API capacity is the one thing fair use excludes.

Can my agent generate an audiobook or a podcast?▾

Yes, with a Pro key. generate_long_form takes a script up to 500,000 characters in one job (Kokoro narration voices only), and create_podcast builds a two-speaker episode from up to 60 dialogue segments (30,000 characters per episode). Both are async: the agent submits the job, polls get_job_status until it reports completed, then downloads the audio_url. Free API keys get a truthful error on these tools — the Jobs API requires a Pro subscription.

Can my agent use my cloned voice?▾

Partly — honestly: in create_podcast, yes. Pass one of your cloned voice_* ids (status ready) as voice_a or voice_b. In text_to_speech, no — the tool returns an error pointing you at POST /api/v1/audio/speech, the REST endpoint that does support synchronous cloned-voice synthesis with the same key. generate_long_form is Kokoro-only and rejects cloned and Arabic voices. New clones are enrolled with the clone_voice tool (Pro, consent required).

Free key, no card — 12 voices and instant TTS today; Pro ($9.99/mo flat) when your agent needs the whole platform.

New to MCP? What is a TTS MCP server? — the explainer

create_podcast

Two-speaker (A/B) episode from dialogue segments. Caps: up to 60 segments and 30,000 combined characters per episode on Pro. Your READY cloned voice_* ids are allowed as either speaker.

ParameterTypeRequiredDescription
segmentsarrayYesAlternating { speaker: "A" | "B", text } segments — max 60 per episode.
voice_astringYesVoice id for speaker A — catalog voice or an owned READY voice_* id.
voice_bstringYesVoice id for speaker B.
formatstringNomp3 or wav (default mp3).
// tools/call arguments
{ "segments": [
    { "speaker": "A", "text": "Welcome to the show." },
    { "speaker": "B", "text": "Great to be here." } ],
  "voice_a": "af_aoede", "voice_b": "am_adam" }

// result — then poll get_job_status; the completed job carries the episode
// audio_url plus per-segment audio URLs
{ "job_id": "3a9f1b7c-...", "status": "queued" }

get_job_status

Poll any job owned by your key. Long-form jobs add completed/total part progress; podcast jobs add per-segment audio URLs.

ParameterTypeRequiredDescription
job_idstringYesThe id returned by generate_long_form or create_podcast.
// tools/call arguments
{ "job_id": "1f6f7c2e-..." }

// result (abridged)
{ "id": "1f6f7c2e-...", "status": "completed",
  "audio_url": "https://easyvoice.ae/api/tts/audio/1f6f7c2e.mp3" }