MCP server for Lopatnov.Translate — exposes TTS, STT, text translation, and language detection as AI tools over gRPC
Server has 5 tools with complete input schemas and descriptions. Naming follows verb_noun pattern (translate_text, detect_language, etc.). Descriptions are adequate (100-200 chars) but lack actionable context for LLM selection. Parameters are well-typed with enums for language_format. Output schemas are not documented, LLMs cannot predict response structure. Error handling converts gRPC errors to human-readable text but lacks recovery guidance. Missing tool annotations (readOnlyHint/destructiveHint) despite clear risk profiles.
Detect the language of a text string.
Convert text to speech using the configured Piper TTS voice and save the result as a WAV file.
Transcribe speech from a WAV audio file to text using Whisper.
Translate all string values in a JSON localization file, preserving key structure.
Translate text from one language to another using the configured translation model.
Output schemas not documented. LLMs cannot predict response structure (e.g., translate_text returns translated_text, model_used, detected_language). Agents must guess field names for downstream reasoning.
Error messages lack recovery guidance. grpcError() converts codes to names (e.g., 'UNAVAILABLE') but does not suggest next steps. LLMs cannot self-correct without actionable error text.
Tool annotations missing. synthesize_speech is WRITE (destructive) but not marked with destructiveHint. translate_text and detect_language are READ_ONLY but lack readOnlyHint. Agents cannot infer safety/idempotency.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Descriptions lack context for LLM selection. 'Translate text from one language to another' does not explain when to use this vs translate_localization, or what models are available. Missing dependency hints.
synthesize_speech writes to SYNTH_OUTPUT_DIR but does not return the file path in response. Agent cannot retrieve the generated audio without knowing the output directory structure.