EasyVoice text to speech
Hosted text-to-speech MCP server: 66 voices in 9 languages, long-form narration, podcasts.
我该使用它吗
质量与安全性
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"tts": {
"url": "https://easyvoice.ae/api/mcp"
}
}
}远程端点
https://easyvoice.ae/api/mcpstreamable-http它能做什么
工具清单
工具(7)
🟢text_to_speech(text, voice, speed, format)
Convert text to a downloadable MP3 or WAV audio file with one of EasyVoice's 66 neural voices. Returns a hosted audio URL (no inline audio). Per-call limit: 8,000 characters (4,000 for Arabic ar_* voices) — text over the limit is automatically queued as a background job instead of erroring; poll get_job_status with the returned job_id for the result. Free keys can use the 12 free voices; Pro ($9.99/mo) unlocks the full catalog. A Pro account past the fair-use line is paced in characters a minute: a call may wait up to 20 seconds, and one that would wait longer returns a tool error saying when to retry.
输入模式
{
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "The text to speak."
},
"voice": {
"type": "string",
"default": "af_aoede",
"description": "Voice id — call list_voices for the catalog."
},
"speed": {
"type": "number",
"minimum": 0.5,
"maximum": 2,
"default": 1
},
"format": {
"type": "string",
"enum": [
"mp3",
"wav"
],
"default": "mp3"
}
},
"required": [
"text"
],
"additionalProperties": false
}输出模式
{
"type": "object",
"properties": {
"audio_url": {
"type": "string"
},
"voice": {
"type": "string"
},
"format": {
"type": "string"
},
"characters": {
"type": "number"
},
"remaining_free_chars_today": {
"type": "number"
}
},
"required": [
"audio_url",
"voice",
"format",
"characters"
],
"additionalProperties": false
}🟢list_voices
List all 66 EasyVoice catalog voices (id, name, language, accent, gender, free/pro tier) plus this key's cloned voices. Call this before text_to_speech or create_podcast to pick voice ids.
输入模式
{
"type": "object",
"properties": {},
"additionalProperties": false
}输出模式
{
"type": "object",
"properties": {
"plan": {
"type": "string",
"enum": [
"free",
"pro"
]
},
"voices": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"language": {
"type": "string"
},
"accent": {
"type": "string"
},
"gender": {
"type": "string"
},
"tier": {
"type": "string",
"enum": [
"free",
"pro"
]
},
"available": {
"type": "boolean"
}
},
"required": [
"id",
"name",
"language",
"accent",
"gender",
"tier",
"available"
],
"additionalProperties": false
}
},
"cloned": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"status": {
"type": "string"
}
},
"required": [
"id",
"name",
"status"
],
"additionalProperties": false
}
}
},
"required": [
"plan",
"voices",
"cloned"
],
"additionalProperties": false
}🟢get_usage
Check this API key's plan and usage. Free keys see today's used/remaining characters (shared 5,000/day pool, resets at midnight UTC), the 20 requests/minute rate limit and 2-concurrent cap. Pro keys are unlimited (fair use: 10M characters per rolling 30 days, then slowed to 30 requests and 10,000 characters a minute, 10 and 3,000 past 20M, on every surface -- never blocked or billed) at 60 requests/minute.
输入模式
{
"type": "object",
"properties": {},
"additionalProperties": false
}输出模式
{
"type": "object",
"properties": {
"plan": {
"type": "string",
"enum": [
"free",
"pro"
]
},
"unlimited": {
"type": "boolean"
},
"fair_use_chars_per_month": {
"type": "number"
},
"used": {
"type": "number"
},
"remaining": {
"type": "number"
},
"limit": {
"type": "number"
},
"rpm_limit": {
"type": "number"
},
"concurrency_limit": {
"type": "number"
},
"reset_at": {
"type": "string"
}
},
"required": [
"plan",
"rpm_limit"
],
"additionalProperties": false
}🟢generate_long_form(input, voice, speed, format, pitch, ...)
Generate long-form narration (up to 500,000 characters ≈ 9 hours of audio) as an async job. Requires a Pro subscription key. Kokoro narration voices only — Arabic (ar_*) and cloned (voice_*) voices are rejected by the Long-Form engine. Returns a job id — poll get_job_status; parts render progressively and audio_url appears when completed.
输入模式
{
"type": "object",
"properties": {
"input": {
"type": "string",
"description": "The full script, up to 500,000 characters."
},
"voice": {
"type": "string",
"default": "af_aoede",
"description": "Kokoro voice id — call list_voices for the catalog."
},
"speed": {
"type": "number",
"minimum": 0.5,
"maximum": 2,
"default": 1
},
"format": {
"type": "string",
"enum": [
"mp3",
"wav"
],
"default": "mp3"
},
"pitch": {
"type": "number",
"minimum": -4,
"maximum": 4,
"default": 0,
"description": "Pitch shift in semitones (-4 to 4)."
},
"tone": {
"type": "string",
"enum": [
"neutral",
"warm",
"bright",
"bass"
],
"default": "neutral",
"description": "Tone preset."
}
},
"required": [
"input"
],
"additionalProperties": false
}输出模式
{
"type": "object",
"properties": {
"job_id": {
"type": "string"
},
"status": {
"type": "string"
},
"input_chars": {
"type": "number"
}
},
"required": [
"job_id",
"status",
"input_chars"
],
"additionalProperties": false
}🟡create_podcast(segments, voice_a, voice_b, format)
Create a two-host (A/B) podcast episode as an async job. Requires a Pro subscription key. Up to 60 segments; combined text up to 30,000 characters. voice_a and voice_b set the two speaker voices — your READY cloned voice_* ids are allowed. Returns a job id — poll get_job_status.
输入模式
{
"type": "object",
"properties": {
"segments": {
"type": "array",
"description": "Alternating dialogue segments (max 60).",
"items": {
"type": "object",
"properties": {
"speaker": {
"type": "string",
"enum": [
"A",
"B"
]
},
"text": {
"type": "string"
}
},
"required": [
"speaker",
"text"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 60
},
"voice_a": {
"type": "string",
"description": "Voice id for speaker A — catalog voice or one of your READY cloned voice_* ids."
},
"voice_b": {
"type": "string",
"description": "Voice id for speaker B."
},
"format": {
"type": "string",
"enum": [
"mp3",
"wav"
],
"default": "mp3"
}
},
"required": [
"segments",
"voice_a",
"voice_b"
],
"additionalProperties": false
}输出模式
{
"type": "object",
"properties": {
"job_id": {
"type": "string"
},
"status": {
"type": "string"
}
},
"required": [
"job_id",
"status"
],
"additionalProperties": false
}🟡clone_voice(name, consent, audio_base64, audio_url, mime_type)
Enroll a custom cloned voice from an audio sample (async). Requires a Pro or active 7-day pass key. Provide exactly one of audio_base64 or audio_url (https). Sample limits: 10 MB max upload; wav, mp3 or m4a; a 10–30 second clean single-speaker recording (enrollment rejects clips shorter than 10 or longer than 30 seconds; trim longer recordings first). Account limits: maximum 3 cloned voices, 5 enrollments per day. Returns a voice_id with status "enrolling" — check list_voices until its status is "ready", then use it in create_podcast.
输入模式
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Display name for the cloned voice."
},
"consent": {
"type": "boolean",
"const": true,
"description": "Required attestation: you confirm you have the recording rights to this audio sample. The server rejects anything but an explicit true."
},
"audio_base64": {
"type": "string",
"description": "Base64-encoded audio sample (10 MB max decoded)."
},
"audio_url": {
"type": "string",
"description": "https URL to the audio sample — fetched server-side, same 10 MB bound."
},
"mime_type": {
"type": "string",
"default": "audio/wav",
"description": "Sample MIME type — wav, mp3 and m4a are accepted (the server enforces the exact allowlist)."
}
},
"required": [
"name",
"consent"
],
"oneOf": [
{
"required": [
"audio_base64"
]
},
{
"required": [
"audio_url"
]
}
],
"additionalProperties": false
}输出模式
{
"type": "object",
"properties": {
"voice_id": {
"type": "string"
},
"status": {
"type": "string"
}
},
"required": [
"voice_id",
"status"
],
"additionalProperties": false
}🟢get_job_status(job_id)
Check the status of a long-form, podcast or tts job owned by this key. Returns status plus audio URL(s) when completed. Audio links are not guaranteed to persist — download promptly.
输入模式
{
"type": "object",
"properties": {
"job_id": {
"type": "string",
"description": "Job id returned by an async tool."
}
},
"required": [
"job_id"
],
"additionalProperties": false
}输出模式
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"status": {
"type": "string"
},
"audio_url": {
"type": [
"string",
"null"
]
}
},
"required": [
"id",
"status"
],
"additionalProperties": true
}社区
证据