Servidor MCP de texto a voz: TTS local para Claude con Kokoro

Crea un servidor MCP de texto a voz que le da a Claude una voz privada que se ejecuta en tu propio equipo. Descubre cómo funciona el modelo Kokoro de 82 millones de parámetros, consigue un servidor en Python de 60 líneas, conéctalo a Claude Desktop y Claude Code, y compáralo con las voces alojadas en la nube.

Servidor MCP de texto a voz: TTS local para Claude con Kokoro
Cristian Da Conceicao
Fundador de Picasso IA

Claude puede redactar un artículo de 2000 palabras en menos de un minuto, y luego tú pasas diez minutos entrecerrando los ojos para leerlo. Un servidor MCP de texto a voz acorta esa distancia. Claude llama a una herramienta, un pequeño modelo de voz en tu propio equipo convierte el texto en audio, y el resultado suena por tus altavoces antes de que se enfríe el café.

Kokoro es el modelo que hace esto práctico. Tiene solo 82 millones de parámetros, se distribuye bajo la licencia Apache 2.0 y produce voz a 24 kHz que aguanta la comparación con sistemas mucho más grandes. No hay factura de API, no hay subida de tus borradores a un tercero y no hay límite de uso. Este artículo muestra cómo encajan las piezas, te ofrece un servidor en Python funcional de unas 60 líneas, lo integra en Claude Desktop y Claude Code, y después analiza con honestidad cuándo es mejor opción una voz alojada.

Manos de un desarrollador escribiendo en un escritorio con un altavoz de estudio cerca

Por qué ejecutar texto a voz en local

Las voces en la nube suenan muy bien, pero tienen letra pequeña. Cada petición sale de tu equipo, cada carácter se cobra y cada caída del servicio se convierte en tu caída. Un servidor local da la vuelta a cada uno de esos puntos.

Privacidad sin esfuerzo extra

Cuando Claude lee en voz alta un contrato en borrador, una entrada de diario privada o una especificación de producto sin publicar, el texto pasa por tu servidor MCP y por nada más. Kokoro hace la inferencia en tu CPU o GPU, escribe un archivo WAV en el disco, y el rastro termina ahí. Una advertencia honesta: Claude sigue recibiendo todo lo que escribes, así que "local" describe el paso de la voz, no toda la conversación.

Candado de latón sobre un equipo portátil cerrado, símbolo del procesamiento local privado

Costo y uso sin conexión

Las API de voz alojadas suelen cobrar por carácter o por minuto. Eso está bien para la introducción de un pódcast y resulta doloroso para un agente que narra cada respuesta todo el día. Una vez descargados los pesos de Kokoro, una frase más cuesta unos segundos de electricidad. Los documentos largos, las repeticiones y los experimentos con voces distintas cuestan todos lo mismo: nada.

El primer arranque descarga el modelo desde Hugging Face. Después, el servidor funciona en un avión, en un sótano o detrás del cortafuegos de una empresa. La latencia depende de tu hardware, no de un viaje de ida y vuelta por la red, así que el comportamiento es idéntico a las 3 de la madrugada y a las 3 de la tarde.

Qué es realmente Kokoro

Tamaño, licencia y entrenamiento

Kokoro-82M es un modelo de texto a voz de pesos abiertos construido sobre la arquitectura StyleTTS 2 con un vocoder ISTFTNet. La versión 1.0 llegó el 27 de enero de 2025, tras una publicación anterior el 25 de diciembre de 2024. Los autores entrenaron el modelo con unos pocos cientos de horas de audio sintético y con licencias permisivas, por eso la licencia Apache 2.0 encaja sin problemas con proyectos comerciales.

EspecificaciónValor
Parámetros82 millones
LicenciaApache 2.0
Frecuencia de muestreo de salida24 kHz
ArquitecturaStyleTTS 2 con vocoder ISTFTNet
Voces en la v1.054
Idiomas en la v1.08
Dependencia del sistemaespeak-ng

💡 Pequeño no significa débil. El tamaño de Kokoro es lo que le permite funcionar en un equipo portátil. Para la narración sencilla de prosa en inglés, es difícil distinguirlo de muchas voces de pago en una escucha casual. La expresividad a demanda, como susurrar o reír, es donde los modelos alojados más grandes se adelantan.

Idiomas y códigos de voz

Los nombres de las voces siguen un patrón: la primera letra indica el idioma o el acento, y la segunda, el género. af_heart es una voz femenina del inglés americano, y bm_george es una voz masculina del inglés británico. La canalización también necesita un lang_code correspondiente para que el texto se convierta en fonemas correctamente.

Escritorio con un mapamundi, un cuaderno de vocabulario y auriculares

CódigoIdiomaVoces de ejemplo
aInglés americanoaf_heart, am_michael
bInglés británicobf_emma, bm_george
eEspañolef_dora
fFrancésff_siwis
hHindihf_alpha
iItalianoif_sara
jJaponésjf_alpha
pPortugués de Brasilpf_dora
zChino mandarínzf_xiaobei

El inglés americano y el británico cuentan como un solo idioma en la cifra de "8 idiomas". El japonés y el mandarín traen paquetes adicionales de la familia misaki, así que lee el README del proyecto antes de activarlos.

Cómo funciona el servidor MCP

Las tres piezas en movimiento

La configuración tiene solo tres piezas, y cada una tiene una tarea acotada:

  1. El cliente. Claude Desktop o Claude Code habla el Model Context Protocol y decide cuándo merece la pena llamar a una herramienta.
  2. El servidor. Un pequeño proceso de Python que el cliente inicia por stdio. Expone unas pocas herramientas y nada más.
  3. Kokoro. Se carga una vez en la memoria dentro de ese proceso, para que las llamadas posteriores eviten el arranque lento.

El flujo es breve. Claude decide llamar a speak, envía el texto junto con el nombre de una voz, el servidor sintetiza el audio, lo reproduce y devuelve la ruta del archivo como texto plano para que Claude te diga dónde quedó la grabación.

Estante compacto de laboratorio casero con un servidor pequeño y cables ordenados

Servidores ya hechos que vale la pena probar

No tienes que escribirlo todo tú. Varios proyectos de la comunidad ya envuelven Kokoro para MCP:

  • kristofferv98/MCP_tts_server ofrece más de un motor de TTS, incluido Kokoro, con reproducción en streaming.
  • kokoro-tts-mcp de scottschram ejecuta Kokoro-82M con aceleración MLX en Apple Silicon.
  • koroko-speech-mcp de hammeiam es un servidor de voz compacto construido en torno a Kokoro.

Los servidores preconfigurados ahorran una tarde. Escribir el tuyo, como se muestra a continuación, cuesta alrededor de una hora y te da control total sobre la limpieza del texto, las voces predeterminadas y el lugar donde se guardan los archivos.

Construye el servidor paso a paso

Instala las dependencias

Usa un entorno virtual para que las dependencias de PyTorch queden lejos del Python del sistema. Python 3.10, 3.11 o 3.12 es la opción segura.

python -m venv .venv
source .venv/bin/activate        # Windows: .venv\Scripts\activate
pip install "kokoro>=0.9.2" soundfile sounddevice numpy "mcp[cli]"

Kokoro también necesita el fonemizador espeak-ng en tu sistema:

  • macOS: brew install espeak-ng
  • Debian o Ubuntu: sudo apt-get install espeak-ng
  • Windows: instala el paquete oficial de espeak-ng y luego abre una terminal nueva

Mini PC negro sobre un escritorio de madera ordenado, con un altavoz y un cuaderno

Escribe el archivo del servidor

Guárdalo como kokoro_server.py. Expone dos herramientas, carga la canalización en inglés al arrancar, elimina el markdown del texto y reproduce el audio sin bloquear a Claude.

import os
import re
import time
from pathlib import Path

import numpy as np
import sounddevice as sd
import soundfile as sf
from kokoro import KPipeline
from mcp.server.fastmcp import FastMCP

SAMPLE_RATE = 24000
OUT_DIR = Path(os.environ.get("KOKORO_OUT", Path.home() / "kokoro_audio"))
OUT_DIR.mkdir(parents=True, exist_ok=True)

mcp = FastMCP("kokoro-tts")
pipelines = {}


def get_pipeline(lang_code: str) -> KPipeline:
    if lang_code not in pipelines:
        pipelines[lang_code] = KPipeline(lang_code=lang_code)
    return pipelines[lang_code]


def clean_text(text: str) -> str:
    text = re.sub(r"`{3}.*?`{3}", " code block omitted. ", text, flags=re.S)
    text = re.sub(r"https?://\S+", "link", text)
    text = re.sub(r"[#*_`>]+", "", text)
    return re.sub(r"[ \t]+", " ", text).strip()


@mcp.tool()
def speak(text: str, voice: str = "af_heart", speed: float = 1.0,
          lang_code: str = "a", play: bool = True) -> str:
    """Read text aloud with Kokoro. Returns the path of the saved WAV file."""
    pipeline = get_pipeline(lang_code)
    parts = []
    for _, _, audio in pipeline(clean_text(text), voice=voice, speed=speed):
        if audio is not None:
            parts.append(audio.detach().cpu().numpy())
    if not parts:
        return "No audio was produced. Check the text and the voice name."
    wave = np.concatenate(parts)
    path = OUT_DIR / f"speech_{time.strftime('%Y%m%d_%H%M%S')}.wav"
    sf.write(path, wave, SAMPLE_RATE)
    if play:
        sd.play(wave, SAMPLE_RATE)
    return f"Saved {len(wave) / SAMPLE_RATE:.1f}s of audio to {path}"


@mcp.tool()
def list_voices() -> str:
    """List a few Kokoro voices and the lang_code each one needs."""
    return (
        "a: af_heart, af_bella, am_michael | b: bf_emma, bm_george | "
        "e: ef_dora | f: ff_siwis | j: jf_alpha"
    )


if __name__ == "__main__":
    get_pipeline("a")
    mcp.run()

Tres decisiones de diseño importan aquí. La canalización se guarda en caché por idioma, así que cambiar entre inglés y español no recarga nada dos veces. La reproducción usa sd.play, que devuelve el control de inmediato, así que Claude nunca espera a que termine el audio. Y nada en el archivo llama a print, porque en un servidor stdio la salida estándar pertenece al protocolo. Un print suelto corrompe el flujo de mensajes.

Regístralo en Claude

Para Claude Desktop, abre claude_desktop_config.json. En macOS está en ~/Library/Application Support/Claude/, y en Windows, en %APPDATA%\Claude\. Apunta el comando al intérprete que está dentro de tu entorno virtual, no a un python sin más.

{
  "mcpServers": {
    "kokoro-tts": {
      "command": "/absolute/path/to/.venv/bin/python",
      "args": ["/absolute/path/to/kokoro_server.py"]
    }
  }
}

Para Claude Code, un solo comando hace el mismo trabajo:

claude mcp add kokoro-tts -- /absolute/path/to/.venv/bin/python /absolute/path/to/kokoro_server.py

Reinicia el cliente y prueba con una frase sencilla: "Usa la herramienta speak para decir hola con la voz bm_george". Si oyes a un caballero británico saludarte, toda la cadena funciona.

Haz que Claude hable con naturalidad

Escribe para el oído

El texto que se lee bien en pantalla suele sonar torpe en voz alta. Dale a Claude una instrucción permanente para que escriba pensando en la escucha desde el primer borrador:

Cuando te pida que leas algo en voz alta, llama a la herramienta speak. Escribe para el oído: frases cortas, sin símbolos de viñeta, sin URL, y deletrea los números o las siglas cuando sean difíciles de pronunciar.

La función clean_text del servidor es tu red de seguridad, pero no puede salvar una frase que no tiene pausas naturales. Unos cuantos hábitos mejoran la salida de inmediato:

  • Divide los textos largos en párrafos. La canalización corta el texto en los saltos de línea por defecto, lo que mantiene cada fragmento corto y el ritmo estable.
  • Escribe los nombres difíciles de forma fonética. Si un nombre de marca sale mal, escríbelo como suena.
  • Mantén la velocidad entre 0,9 y 1,1. Fuera de ese rango, el habla empieza a sonar apresurada o lenta.

Micrófono profesional sobre un brazo articulado en un pequeño rincón de grabación casero

Dónde da fruto la voz manos libres

Una herramienta de voz se gana su sitio en los momentos en que tienes ocupados los ojos o las manos:

  • Cocina. Pide a Claude que adapte una receta para seis personas y que lea los pasos en voz alta mientras la harina te cubre los dedos.
  • Corrección. Escuchar un borrador deja al descubierto un ritmo torpe y palabras repetidas que tus ojos pasan por alto.
  • Trayectos y paseos. Pide un resumen hablado de las notas de ayer o de un hilo largo antes de sentarte.
  • Accesibilidad. La salida hablada puede ayudar a las personas con baja visión o con dificultades de lectura a trabajar con textos largos con más comodidad.

Mujer cortando verduras en una cocina soleada mientras un altavoz reproduce audio

Hombre mayor con auriculares escuchando con los ojos cerrados en un sillón

Velocidad, hardware y soluciones a problemas comunes

Qué esperar en tu equipo

Kokoro funciona en la CPU de un equipo portátil corriente, y una GPU o Apple Silicon lo acelera todavía más. En lugar de fiarte del benchmark de nadie, haz tu propia prueba: envía un párrafo de 200 palabras y compara el tiempo de render con el tiempo de reproducción. Si el render termina antes, tienes margen para tiempo real y los documentos largos parecerán instantáneos.

Dos hábitos mantienen la experiencia fluida. Carga la canalización al arrancar, como hace el servidor de arriba, porque la primera síntesis siempre es la más lenta. Y mantén el modelo residente: el cliente MCP mantiene vivo el proceso del servidor entre llamadas, así que los pesos permanecen en memoria.

💡 Consejo: Ejecuta el servidor una vez desde una terminal antes de registrarlo. Cualquier dependencia que falte aparecerá como un error de Python legible, en lugar de un vago aviso de "el servidor falló" en el cliente.

Cinco problemas y sus soluciones

SíntomaCausa probableSolución
El cliente informa de que el servidor no pudo arrancarLa configuración apunta al Python equivocadoUsa la ruta absoluta al intérprete del entorno virtual
La llamada a la herramienta se queda colgada y luego da errorUna llamada a print escribió en stdoutElimina los print y registra en stderr
Error de fonemas o de espeakespeak-ng no está en el PATHInstálalo y luego abre una terminal nueva
El archivo se guarda pero no hay sonidoProblema con el dispositivo de salida de audio o con PortAudioInstala PortAudio en Linux, o elige un dispositivo en sounddevice
Algunos nombres se pronuncian raroEl fonemizador adivinó malEscribe el nombre como suena

Joven en una cafetería con auriculares junto a un equipo portátil abierto

Kokoro en local frente a voces alojadas

Lo local no siempre es la respuesta. Kokoro es excelente para narrar en privado, de forma repetible y gratuita, pero algunos trabajos necesitan más de lo que pueden ofrecer 54 voces.

Cuándo ganan las voces alojadas

Recurre a un modelo alojado cuando necesites clonación de voz, amplio soporte de idiomas o un control emocional fino. La colección de texto a voz de Picasso IA tiene muchas opciones, todas a un clic:

FactorKokoro en localVoces alojadas
Costo por fraseSolo electricidadPor uso medido o según el plan
El texto sale de tu equipoNo (paso de voz)Sí
Tiempo de configuraciónAlrededor de una horaMinutos
Clonación de vozNoSí, en varios modelos
Alcance de idiomas8 idiomasHasta más de 70 en algunos modelos
Funciona sin conexiónSíNo

Una división sensata: usa Kokoro para la lectura diaria, los borradores y todo lo privado, y cambia a una voz alojada para la toma final de un video, un pódcast o una demo de producto.

Combinarlo con un modelo de lenguaje

El servidor solo habla. Lo que dice depende del modelo que escribe las palabras. Para borradores largos y reescritura cuidadosa, Claude Sonnet 5 y Claude Opus 4.7 son buenas opciones, mientras que Claude 4.5 Haiku mantiene ágiles y rápidas las respuestas habladas. Elige el modelo según la tarea y deja que Kokoro se encargue de la entrega.

Tu turno: crea con Picasso IA

Ya tienes una voz privada para Claude que no cuesta nada por frase. El siguiente paso es darle cara a tus proyectos. La misma tarde en que termines este servidor, puedes crear miniaturas, cabeceras de artículos e ilustraciones de escena en Picasso IA para acompañar tu audio.

Prueba Seedream 4.5 para escenas fotorrealistas, o Flux 2 Pro cuando quieras detalle nítido y una composición limpia. Cuando un proyecto necesite una voz de estudio, prueba Speech 2.8 HD junto a tu configuración local de Kokoro y compara los resultados con el oído.

Abre Picasso IA, escribe un prompt y mira qué obtienes. Luego prueba un segundo con otro ángulo de cámara. Experimenta sin miedo, porque los mejores prompts salen de probar, escuchar y ajustar.

Compartir este artículo

Elige tu idioma