EasyVoice text to speech

Hosted text-to-speech MCP server: 66 voices in 9 languages, long-form narration, podcasts.

我该使用它吗

质量与安全性

A
描述质量
100%
模式完整度
77%
命名质量
94%
投毒风险
100%
权限匹配度
100%
协议合规性
100%

基于对工具定义和协议合规性的自动分析。

上下文开销

~1,994token 数(工具定义)
~2.0 KB典型响应大小
对注意力有中等影响(占 128k 上下文窗口的 1.56%)

这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 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
}

社区

评价此服务器

证据

最近观测

已验证未记录版本7 个工具