Skip to main content
Glama

agent-voice-mcp-minus

Versión mejorada de agent-voice-mcp · Servicio local de anuncios por voz MCP que proporciona capacidad de locución del progreso de tareas para asistentes de programación con IA (Trae / Claude Desktop / Cursor, etc.), profundamente adaptado al gran modelo de síntesis de voz 豆包 de 火山引擎 (seed-tts).

Este proyecto es un fork de al96169/agent-voice-mcp (autor Antonio Liang, licencia MIT), sobre el que se han realizado numerosos ajustes probados en entornos reales para la interfaz v3 de 火山引擎 y casos de uso reales. La versión original es el núcleo; este proyecto es el núcleo + mejoras prácticas. Todas las mejoras pueden desactivarse mediante interruptores de configuración para volver a un comportamiento cercano al original.


Características mejoradas (frente a la versión original 1.2.0)

Característica

Descripción

Interfaz de streaming v3 de 火山

Adaptación a la nueva interfaz /api/v3/tts/unidirectional (autenticación con X-Api-Key)

Mapeo acústico de emociones

Mapeo en el cliente de emotion → combinación de tono/velocidad/volumen (ver Notas, punto 3)

Control de pausas en textos largos

División por frases con síntesis paralela + silencio entre segmentos; los anuncios largos tienen ritmo natural y sensación de respiración

Limpieza de texto antes del anuncio

Elimina automáticamente bloques de código/URL/marcas Markdown + truncado; no lee «almohadillas ni comillas invertidas»

Respaldo local SAPI

Si falla la nube (sin red/timeout/key no válida/cuota agotada), cambia automáticamente a la voz local de Windows; el anuncio nunca se interrumpe

Sonido de aviso por escenario

Antes del anuncio suena un tono de aviso para activar con antelación el enlace de audio de los auriculares Bluetooth

Silencio inicial Bluetooth

1,5 s de silencio antes de la voz para evitar que el ruido de conexión Bluetooth se trague la primera palabra (ver silencio inicial)


1. Instalación

Requisitos previos

  • Node.js ≥ 18 (descargar)

  • Windows (la síntesis en la nube es multiplataforma; el respaldo SAPI y el pitido de aviso son exclusivos de Windows; en otras plataformas se degradan automáticamente)

  • Cuenta de 火山引擎 (se requiere activar el servicio de gran modelo de síntesis de voz; ver segundo paso)

Paso 1: Configurar el cliente MCP

Opción A · Ejecutar directamente con npx (recomendado, sin clonar)

Añade lo siguiente a la configuración del cliente MCP (en Trae es .trae/mcp.json en el directorio del proyecto; en Claude Desktop es claude_desktop_config.json; en Cursor es .cursor/mcp.json):

{
  "mcpServers": {
    "agent-voice": {
      "command": "npx",
      "args": ["-y", "github:doer1296/agent-voice-mcp-minus"]
    }
  }
}

Opción B · Clonar el repositorio y ejecutar localmente (recomendado para quienes necesitan modificar el código)

git clone https://github.com/doer1296/agent-voice-mcp-minus.git
cd agent-voice-mcp-minus
npm install

Cambia la configuración MCP a conexión directa con node (arranca más rápido y no se ve afectado por el registro npm):

{
  "mcpServers": {
    "agent-voice": {
      "command": "node",
      "args": ["D:/your/path/agent-voice-mcp-minus/dist/index.js"]
    }
  }
}

Tras configurar, reinicia el cliente / abre una nueva sesión. Cuando el servicio MCP se inicie, anunciará «servicio agent-voice iniciado» para indicar que está listo.

Paso 2: Obtener credenciales de 火山引擎

  1. Regístrate/inicia sesión en 火山引擎

  2. En la consola busca «Tecnología de voz» → activa el servicio «Gran modelo de síntesis de voz» (los nuevos usuarios disponen de cuota gratuita)

  3. En la página «Gestión de API Key», crea y obtén la X-Api-Key

  4. Aviso: es necesario activar el recurso de modelo correspondiente a la voz utilizada (seed-tts-1.0 o seed-tts-2.0; ver Configuración del gran modelo)

Alternativa gratuita: la versión original incluye el motor Edge TTS (síntesis en línea gratuita de Microsoft, sin API Key, cientos de voces). Basta con establecer engine en "edge-tts" para usarlo; consulta el README original para más detalles.

Paso 3: Crear el archivo de configuración

Copia el config.example.json de este repositorio como:

Windows: C:\Users\<你的用户名>\.agent-voice\config.json
macOS / Linux: ~/.agent-voice/config.json

A continuación, sustituye el campo apiKey por tu X-Api-Key (elige una de las dos opciones):

  • Texto plano directo: "apiKey": "你的key"

  • Referencia a variable de entorno (recomendado): mantén "${VOLCANO_API_KEY}" y luego define la variable de entorno del sistema VOLCANO_API_KEY=你的key (el archivo de configuración admite la sintaxis ${任意环境变量名} para evitar que la key quede en claro en el disco)


2. Cómo invocarlo (uso desde el agente)

El servicio MCP registra la herramienta speak; el agente puede llamarla para anunciar por voz:

Parámetro

Tipo

Descripción

text

string

El texto a anunciar (limpia automáticamente las marcas Markdown; si supera 200 caracteres se trunca automáticamente)

scene

string?

Escena: task_start / task_complete / task_error / need_interaction / milestone; aplica automáticamente la configuración de voz/velocidad/volumen/emoción de esa escena

emotion

string?

Emoción: neutral / happy / sad / angry / calm / excited

emotionIntensity

number?

Intensidad de la emoción 0–1, por defecto 0.7

voice / rate / volume

?

Sobrescribe voz/velocidad/volumen (prioridad superior a la configuración de escena)

Recomendado: combina con las reglas del proyecto para que el agente anuncie automáticamente el ciclo de vida de las tareas. En .trae/rules/project_rules.md de Trae (o en CLAUDE.md de Claude) añade:

在每次任务中,调用 agent-voice MCP 进行语音播报:
1. 任务开始时 — scene="task_start"
2. 每个子任务完成时 — scene="milestone"
3. 任务全部完成时 — scene="task_complete"
4. 遇到错误时 — scene="task_error"
5. 需要用户确认时 — scene="need_interaction"

Ejemplo de invocación:

speak(text="开始执行任务:重构登录模块", scene="task_start", emotion="calm")
speak(text="任务完成,测试全部通过", scene="task_complete", emotion="happy")

Otras herramientas: stop (detiene el anuncio actual y vacía la cola), get_voices (lista las voces disponibles), get_roles (lista los roles configurados).


3. Cómo configurar el gran modelo (selección de modelo)

En config.json, cloud.resourceId determina el gran modelo de síntesis de voz utilizado:

resourceId

Modelo

Sufijo de ID de voz correspondiente

seed-tts-1.0

Gran modelo de síntesis de voz 1.0

_moon_bigtts (también hay algunos nombres antiguos)

seed-tts-2.0

Gran modelo de síntesis de voz 2.0

_uranus_bigtts

⚠️ La voz y la versión del modelo deben coincidir: si se usa la voz _moon_bigtts con seed-tts-2.0 (o al revés), se producirá un error HTTP 403 de recurso no autorizado. Al cambiar de modelo, recuerda cambiar también el ID de voz y activar el servicio de modelo correspondiente en la consola de 火山引擎.

Sugerencias de elección: 1.0 es estable, con voces variadas y documentación madura; 2.0 admite nuevas capacidades como la clonación de voz. Todas las optimizaciones de este proyecto se han probado sobre 1.0.


4. Cómo cambiar la voz

Modifica cloud.voice en config.json (así como el campo voice de cada configuración de escena) y asegúrate de que coincide con la versión de resourceId:

seed-tts-1.0 示例:
  zh_female_daimengchuanmei_moon_bigtts   呆萌川妹(甜美女声,本项目默认)
  zh_female_qingxinnvsheng_mars_bigtts    清新女声

seed-tts-2.0 示例:
  zh_female_vv_uranus_bigtts              温柔女声
  zh_male_*.uranus_bigtts                 男声系列

La lista completa de voces está en la documentación de la biblioteca de voces de 火山引擎.


5. Cómo ajustar volumen / velocidad

Volumen volume (por defecto 1.3):

  • Relación de mapeo: loudness_rate = (volume − 1) × 100, es decir, 1.0 = sonoridad original, 1.3 = +30 % (ganancia RMS medida de aproximadamente +29 %, casi lineal)

  • Rango de valores recomendado: 0.5 – 2.0; 2.0 = +100 % (límite del servidor)

  • El valor global por defecto está en el nivel superior volume; cada escena puede sobrescribirlo (scenes.*.volume)

Velocidad rate (por defecto 200):

  • Relación de mapeo: speech_rate = (rate / 200 − 1) × 100, es decir, 200 = velocidad original, 220 = +10 %, 180 = −10 %

  • Gradiente predeterminado por escena (recomendado según pruebas de este proyecto): inicio 190 → interacción 200 → hito/error 210 → finalización 220


6. Silencio inicial para Bluetooth (importante)

cloud.leadingSilence (por defecto 1500, es decir, 1,5 segundos):

Este parámetro está diseñado para usuarios de auriculares Bluetooth. El enlace de audio Bluetooth tarda entre 1 y 2 segundos en establecerse; al iniciar el anuncio, los auriculares suelen estar aún sin conectar, por lo que la primera palabra queda tapada por el ruido de conexión. Este parámetro inserta un silencio total de los milisegundos indicados al principio de los datos de voz, de modo que la voz solo comienza cuando el enlace Bluetooth está listo.

  • Usuarios de auriculares Bluetooth: mantén 1500 (si aún se pierde la primera palabra, puedes aumentarlo a 2000)

  • Usuarios de auriculares con cable / altavoces: cámbialo a 0; el anuncio será más compacto

  • El tono de aviso previo al anuncio también es una salida de audio que activa el enlace Bluetooth con antelación, funcionando en sinergia con este parámetro


7. Tabla completa de parámetros

Parámetro

Valor por defecto

Descripción

cloud.provider

volcano

Motor en la nube (también admite openai / custom / edge-tts)

cloud.apiKey

X-Api-Key de 火山引擎 (admite ${ENV_VAR})

cloud.voice

zh_female_daimengchuanmei_moon_bigtts

ID de voz (debe coincidir con la versión del modelo)

cloud.resourceId

seed-tts-1.0

Gran modelo de síntesis (1.0 / 2.0)

cloud.format

pcm

Para streaming se recomienda pcm (el cliente envuelve automáticamente en WAV)

cloud.sampleRate

24000

Frecuencia de muestreo; 24k es el límite de ancho de banda de esta voz (ver nota 2)

cloud.silenceDuration

400

Silencio al final de la frase (ms)

cloud.leadingSilence

1500

Silencio inicial para Bluetooth (ms); ver sección 6

cloud.pauseControl

true

Interruptor de control de pausas para textos largos

cloud.pauseSentenceMs

400

Inserta pausa en los límites de las frases (ms)

cloud.pauseCommaMs

200

Pausa de coma dentro de frases muy largas (ms)

rate / volume

200 / 1.3

Velocidad / volumen globales

sceneSounds.*

beep:single

Sonido de aviso de los cinco escenarios (single tono único / info success error warning milestone multi-tono / false desactivado)

textClean

true

Interruptor de limpieza de texto antes del anuncio

maxTextLength

200

Longitud de truncado del texto del anuncio (cierra en las pausas de puntuación)

fallbackEngine

windows-sapi

Respaldo automático ante fallo de la nube (Windows)

watcher.enabled

false

Interruptor del canal de anuncio de respaldo (ver siguiente sección)

watcher.script

predeterminado del paquete

Ruta de script watcher personalizado (si se omite, usa watcher/voice-watcher.mjs del paquete)

scenes.*

ver example

voice/rate/volume/emotion de los cinco escenarios


Canal de anuncio de respaldo (watcher, opcional)

watcher/voice-watcher.mjs es un listener residente que no depende de la conexión MCP: sondea ~/.trae-cn/work/.voice-reader/pending.txt y, al detectar contenido marcado, reproduce el anuncio usando el mismo motor en la nube que el servicio principal (configuración, voz y volumen provienen en tiempo real de la misma fuente; si falla la nube, también recurre a SAPI).

Uso: cuando las herramientas MCP no están disponibles en la sesión del agente (por ejemplo, cambio de modelo o caída del servicio MCP), aún se puede escribir una marca en ese archivo para activar el anuncio, formando un canal de respaldo:

[VOICE_READER_START:success]
要播报的文本
[VOICE_READER_END]

Los tipos admitidos son info / success / error / warning, que se asignan respectivamente a los parámetros de escena task_start / task_complete / task_error / need_interaction.

Cómo activarlo: en config.json define "watcher": { "enabled": true }. Al iniciar, el servicio MCP principal lo levanta automáticamente como subproceso y lo recoge al salir (guardia de instancia única TCP 47613; con varias sesiones solo se ejecuta una instancia). También puede ejecutarse de forma independiente: node watcher/voice-watcher.mjs.

Rutas portables: todas las rutas se derivan de forma relativa o se construyen con os.homedir(), sin rutas absolutas fijas. Las variables de entorno pueden sobrescribirlas: AGENT_VOICE_CONFIG (ruta del archivo de configuración), AGENT_VOICE_PENDING_DIR (directorio donde se encuentra pending.txt; por defecto ~/.trae-cn/work/.voice-reader, adaptable a otros clientes MCP).


Notas

  1. La configuración se carga una vez al arrancar MCP. Tras modificar config.json, hay que reiniciar el cliente / abrir una nueva sesión para que surta efecto (no se vuelve a leer en cada anuncio).

  2. Frecuencia de muestreo y canales: las pruebas muestran que el ancho de banda real de esta voz es ≤ 12kHz; solicitar 32/44.1/48kHz solo produce un sobremuestreo por interpolación, sin ganancia de calidad (verificado mediante análisis de bandas de frecuencia FFT de múltiples ventanas). La API solo admite mono; al reproducir, el sistema mezcla automáticamente a ambos oídos. Mantener 24000 es óptimo.

  3. La emoción está implementada en el cliente: la interfaz v3 de seed-tts-1.0 no admite el parámetro emotion en el servidor (en las pruebas se envió y se ignoró silenciosamente). Este proyecto expresa seis emociones mediante la combinación de tono (pitch ±12) + desplazamientos de velocidad/volumen; emotionIntensity controla la intensidad.

  4. No actives SSML: la etiqueta de pausa <break> de SSML, probada con la interfaz de streaming 1.0 + v3, trunca el audio (solo sintetiza la primera frase). Las pausas en textos largos ya están implementadas con la solución del cliente; no se necesita SSML.

  5. Cuota y facturación: 火山引擎 factura por caracteres; se recomienda que los mensajes de anuncio de tareas sean breves (el truncado predeterminado de 200 caracteres de este proyecto se debe en parte a esto). Cuando se agota la cuota, se degrada automáticamente a la voz local SAPI (el timbre cambia, es normal).

  6. Dependencia de Windows: el tono de aviso usa System.Console::Beep y la reproducción de voz usa PowerShell Media.SoundPlayer; ambas vienen con Windows, pero si PowerShell está deshabilitado por directiva de grupo, las funciones correspondientes se degradan.

  7. Directorio de salida: el audio sintetizado se escribe en el directorio temporal del sistema y se limpia automáticamente después de reproducirse; no deja residuos.


Agradecimientos

Licencia

MIT (hereda el protocolo del proyecto original y conserva la atribución al autor original)

-
license - not tested
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • Voice-powered bug reporting with 13 MCP tools. Record bugs by talking; let AI find and fix them.

  • Voice and chat for AI agents — Discord, Teams, Meet, Slack, Zoom, Telegram, WhatsApp, NC Talk, SIP

  • Persistent memory and cross-session learning for AI coding assistants (hosted remote MCP).

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/doer1296/agent-voice-mcp-minus'

If you have feedback or need assistance with the MCP directory API, please join our Discord server