local MCP server giving Claude Desktop / Codex / Cursor a cloned TTS voice
auk-voice has 4 tools with basic schemas and descriptions, but significant gaps prevent higher scores. All tools have descriptions (10-100 chars, mostly adequate) and input schemas with type definitions. However, parameter descriptions are minimal or absent (e.g., 'voice' and 'instruction_override' in speak lack descriptions; 'instruction' in set_voice_instruction lacks detail). Output schemas are undocumented, callers cannot predict response structure. Error handling is present but not actionable (e.g., 'render failed: {e}' gives no recovery guidance). No tool annotations (readOnlyHint, destructiveHint). The speak tool accepts free-form 'voice' strings instead of enums from list_voices, inviting hallucinated voice names. Parameter relationships (e.g., {text} placeholder requirement in instruction) are documented in descriptions but not enforced via schema constraints.
Return current voice reference and instruction template.
List available voice reference files.
Change the base voice instruction used by speak() for all future replies. Pass a template containing {text}.
Speak text aloud with the configured cloned voice. Args: text (required), voice (optional filename from list_voices), instruction_override (optional, {text} marks where the spoken text goes).
Parameter descriptions missing or incomplete. 'voice' param in speak() has no description; 'instruction' in set_voice_instruction() lacks format/constraint details. LLMs cannot infer valid values or format requirements.
Output schemas undocumented. speak() returns {seconds, file, voice, quality, played, error} but callers have no schema to validate or plan downstream calls. get_voice_config() and list_voices() responses are unspecified.
'voice' parameter accepts free-form strings instead of enum of available voices. LLMs will hallucinate voice names. Should accept only values from list_voices() output or default to 'none'.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
Error messages lack recovery guidance. 'render failed: {e}' and 'voice not found' do not tell LLM what to do next (retry? call list_voices? adjust instruction?). Errors should be actionable.
No tool annotations. speak() and set_voice_instruction() are destructive (modify state/files) but lack destructiveHint. get_voice_config() and list_voices() are read-only but lack readOnlyHint. Agents cannot infer safety properties.