EasyVoice text to speech

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

¿Debería usar esto?

Calidad y seguridad

A
Calidad de la descripción
100%
Integridad del esquema
77%
Calidad de los nombres
94%
Riesgo de envenenamiento
100%
Coincidencia de permisos
100%
Cumplimiento del protocolo
100%

Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.

Costo de contexto

~1,994Tokens (definiciones de herramientas)
~2.0 KBTamaño de respuesta típico
Impacto moderado en la atención (1.56% del contexto de 128k)

Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.

Instalar

Instalación con un clic

Agrega esto a tu archivo `claude_desktop_config.json`:

{
  "mcpServers": {
    "tts": {
      "url": "https://easyvoice.ae/api/mcp"
    }
  }
}

Puntos de conexión remotos

https://easyvoice.ae/api/mcpstreamable-http

Qué puede hacer

Inventario de herramientas

Herramientas (7)

🟢 Solo lectura🟡 Escritura🔴 Eliminación⚪ Desconocido
🟢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.

Esquema de entrada

{
  "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
}

Esquema de salida

{
  "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.

Esquema de entrada

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

Esquema de salida

{
  "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.

Esquema de entrada

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

Esquema de salida

{
  "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.

Esquema de entrada

{
  "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
}

Esquema de salida

{
  "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.

Esquema de entrada

{
  "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
}

Esquema de salida

{
  "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.

Esquema de entrada

{
  "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
}

Esquema de salida

{
  "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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "job_id": {
      "type": "string",
      "description": "Job id returned by an async tool."
    }
  },
  "required": [
    "job_id"
  ],
  "additionalProperties": false
}

Esquema de salida

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    },
    "status": {
      "type": "string"
    },
    "audio_url": {
      "type": [
        "string",
        "null"
      ]
    }
  },
  "required": [
    "id",
    "status"
  ],
  "additionalProperties": true
}

Comunidad

Califica este servidor

Evidencia

Observaciones recientes

verificadoversión no registrada7 herramientas