Two tools with complete schemas and reasonable descriptions. 'speak' has well-defined parameters with types, ranges, and defaults (text, voice, rate 1-500, background flag). 'list_voices' is simpler but lacks parameter descriptions (empty properties object). Both descriptions are adequate (50-80 chars) but lack actionable context for LLM selection. No output schemas documented. Error handling present but generic. Missing guidance on when to use each tool or what to expect in responses.
List available text-to-speech voices
Use macOS text-to-speech to speak text aloud
list_voices has no parameter descriptions and empty inputSchema properties. While the tool takes no parameters, the schema should be explicit about this (e.g., 'additionalProperties: false'). Current form is ambiguous.
No output schemas documented for either tool. LLMs cannot plan downstream calls or extract structured data. 'speak' returns a text confirmation; 'list_voices' returns raw stdout. Both should declare expected response structure.
Tool descriptions lack actionable context. 'Use macOS text-to-speech to speak text aloud' does not explain when to call this vs alternatives, what happens on error, or whether the call blocks. Missing dependency hints and prerequisites.
Error messages are generic ('Failed to speak text: <error.message>'). No guidance on recovery. If voice is invalid or text is empty, the LLM gets no hint on how to self-correct or what to try next.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
No input validation or constraint documentation. 'voice' parameter accepts any string; no enum of valid voices. 'rate' has min/max but no guidance on typical values. LLMs may pass invalid voices or extreme rates.