A German language learning assistant that helps users learn German through sentence analysis, vocabulary extraction, and clear explanations using an agent-based architecture
Lichtblick defines 2 tools for German language learning. Both tools have descriptions and parameter schemas, but the schemas lack critical structure and type information. Parameter descriptions are minimal (5-10 chars), schemas are not formally documented, and tool names violate verb-first conventions. The codebase shows tool definitions in backend/lichtblick.py but they are instantiated within Agent definitions rather than as explicitly registered MCP tool objects with formal schemas. No input validation, error recovery guidance, or output schema documentation is visible. This is a proof-of-concept, not production-grade tooling.
Provide translation and grammatical breakdown of the German sentence
Extract German words with their English translations
Tool names do not start with action verbs. 'vocabulary_extraction' and 'sentence_translation_and_analysis' are gerunds/nouns, not imperative verbs. LLMs infer intent from names first, verb_noun style (e.g., 'extract_vocabulary', 'analyze_sentence') is standard across 90% of production tools.
Parameter descriptions are trivially short (5 - 10 characters). 'The German text from which to extract vocabulary' is good (58 chars), but context is sparse. No format constraints, examples, or edge case handling documented. Baseline for A+ tools is 72 chars per param; these are ~40.
Input schemas are minimally structured. Both tools accept only a single string parameter ('text' or 'sentence'). While this is valid JSON Schema, there is no formally documented output schema. LLMs cannot plan multi-step workflows without knowing what fields to expect in responses. No example outputs visible in code.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 27 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 21 | - | v1 |
Tool definitions are embedded within Agent instantiations in backend/lichtblick.py, not registered as explicit MCP tool objects. The code shows Agent(name=..., instructions=...) but does not show a formal tool registry with @tool decorators or equivalent MCP registration.
No error handling or recovery guidance. If the input is not German text, or if translation fails, there is no documented error response. LLMs cannot self-correct without actionable error messages (e.g., 'Input must be German text. If unsure, try a simple example like "Das Buch ist rot."')
No pagination or result limits documented. If vocabulary_extraction returns 100+ words from a long text, the output could explode token count. Production tools cap list results at 20 - 50 items and include pagination parameters (limit, offset, next_cursor).
Tool composition issue: vocabulary_extraction and sentence_translation_and_analysis operate on different input granularity (word-level vs. sentence-level) but share similar logic. No documented relationship or guidance on when to use which. For a cohesive German learning assistant, consider composing them with a single 'analyze_german_text' tool that accepts mode='vocabulary' or mode='sentence' and returns structured results.