A Text-to-Speech MCP server that integrates multiple TTS providers (OpenAI, ElevenLabs, Fish Audio, Cartesia, Neets, PlayHT, Azure, Local) with persona management and audio playback capabilities
Server has 10 tools with consistent parameter schemas (text, voice_id, volume) and descriptions present for all. However, descriptions are generic and lack LLM-optimized guidance on WHEN to use each tool vs. alternatives. Tool names follow verb_noun pattern (fishaudio_tts, create_persona) but lack clarity on provider differentiation. Parameter descriptions are minimal (10-30 chars) and do not explain constraints, formats, or dependencies. Output schemas are not documented, callers cannot predict response structure. Error handling is present but generic. No tool annotations (readOnlyHint/destructiveHint) despite clear risk classifications in metadata.
Text-to-speech synthesis using Azure Speech provider
Text-to-speech synthesis using Cartesia provider
Create and load a new persona configuration bound to a specific TTS provider and voice ID. Registers the configuration into the file system for persistent availability.
Text-to-speech synthesis using ElevenLabs provider
Text-to-speech synthesis using Fish Audio provider
Text-to-speech synthesis using local REST API endpoint
Provider TTS tools (fishaudio_tts, neets_tts, etc.) lack differentiation guidance. Descriptions do not explain when to choose one provider over another, what quality/latency/cost tradeoffs exist, or which voices each supports. LLMs cannot reason about provider selection.
Output schemas not documented. Callers cannot predict response structure (audio format, duration, metadata fields). Code shows audio is streamed and played, but response contract is invisible to LLMs.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | <=2025-11-25 | v2 |
Text-to-speech synthesis using Neets provider
Text-to-speech synthesis using OpenAI provider
Text-to-speech synthesis using PlayHT provider
Invoke a specific character persona from the locally configured directories. Abstracts the TTS backend and dynamically binds voices for seamless testing.
Parameter descriptions are under 20 characters and lack constraint documentation. 'voice_id' description is 'The [Provider] voice ID to use for synthesis', does not explain format (UUID, hex, string), how to discover valid IDs, or what happens if invalid ID is passed.
Tool annotations missing. create_persona is WRITE (destructive), TTS tools are READ_ONLY, but no mcp.WithDestructiveHint() or mcp.WithReadOnlyHint() applied. LLMs cannot infer safety/idempotency from names alone.
speak_as_persona enum for 'persona' parameter is empty (enum:[]). Tool is registered only if personas exist, but schema shows no valid options. LLMs cannot select a persona without discovery.