Speekify has 2 tools with complete input schemas and descriptions. Tool naming follows verb_noun convention (generate_wav, generation_defaults). Descriptions are present but brief (18-28 chars for tool names, ~100 chars for descriptions). The generate_wav tool has 12 parameters with types and defaults, but parameter descriptions are minimal (10-30 chars each), below the 72-char baseline. Output schema is documented in code (_serialize_generation returns 7 fields) but not exposed in tool definition. No error handling guidance, no recovery hints, no parameter constraints (e.g., voice enum, speed range). The generation_defaults tool is read-only and well-scoped but lacks output schema documentation.
Convert inline text, readable URL content, or a .txt/.md/.pdf file to a local WAV file.
Return supported voices, languages, and default generation settings.
Parameter descriptions are too brief (10-30 chars vs 72-char baseline). 'Voice: Supertonic voice: M1-M5 or F1-F5' lacks context on when to use each voice or how they differ. LLMs cannot infer voice selection strategy.
Voice parameter should be an enum (M1, M2, M3, M4, M5, F1, F2, F3, F4, F5) rather than free-form string. Current definition invites hallucinated values like 'M6' or 'male'.
Language_code parameter lacks enum constraint. Description says 'ISO 639-1 language code, for example en, fr, ja, or na' but does not list all supported values. SUPPORTED_TTS_LANGUAGES is defined in config but not exposed to LLM.
Output schema not documented in tool definition. Code shows _serialize_generation returns {output_path, output_uri, duration_seconds, batch_count, title, text_length, warnings, log_path}, but LLM has no visibility into this structure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
No error handling guidance. If source is invalid URL, file not found, or synthesis fails, LLM receives no recovery hint. Should return actionable errors like 'File not found: /path/to/file. Check path and retry.' or 'Invalid voice: got M6, must be M1-M5 or F1-F5.'