MCP Server for TechWordTranslator API - Translate technical terms across English, Spanish, and German
The TechWord Translator MCP exhibits a moderate foundation with clear naming conventions and structured schemas, but lacks depth in descriptions, parameter validation guidance, and error recovery patterns. All 5 tools follow verb-noun naming (translate_term, search_tech_terms, get_all_translations, get_term_details, list_tech_terms), which is positive. However, descriptions are generic and lack context about when to use each tool versus alternatives. Parameter descriptions exist but are minimal (5-15 words typical), failing to explain constraints, ranges, or valid values inline. No tool documentation addresses error recovery, and responses are formatted as plain strings rather than structured objects, limiting LLM ability to parse and chain results. The server demonstrates basic competency but falls short of production-grade agent tool design.
Get all available translations for a term from a specific source language.
Get detailed information about a specific technical term by its ID.
List technical terms with pagination.
Search for technical terms in the database.
Translate a technical term from one language to another. Supported languages: - en: English - es: Spanish (Español) - de: German (Deutsch)
Descriptions lack context for tool selection. No explanation of when to use translate_term vs get_all_translations, or search_tech_terms vs list_tech_terms. LLMs cannot distinguish between similar tools without explicit comparison guidance.
All tools return plain string responses instead of structured JSON objects. LLMs cannot programmatically extract fields like term_id, locale, translations, or pagination cursors for chaining. This violates the response-shaper pattern and forces the LLM to parse unstructured text.
Parameter descriptions are minimal (5-10 words) and lack constraint documentation. The 'limit' parameter in search_tech_terms says 'Maximum number of results (default: 10, max: 50)' but does not explain what happens if limit=0 or if partial results are acceptable. No enum constraints for locale parameters, they should declare valid_locales as an enum.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 57 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Error handling is generic and non-actionable. When translate_term fails with 'Term not found', the response does not suggest recovery steps (e.g., 'Try search_tech_terms() to find similar terms'). Locale validation errors return plain strings instead of guiding the LLM toward valid locales via enum or recovery advice.
Tool output schemas are not documented. The code shows ResponseFormatter calls but no JSON schema is exposed to the LLM. Without documented output schemas, LLMs cannot plan downstream tool calls or extract the right fields. For example, list_tech_terms likely returns pagination info, but LLM does not know what field name to use for the next cursor.
Locale parameter lacks enum constraint. All three tools (translate_term, search_tech_terms, get_all_translations) accept locale as a free-form string, but should expose an enum ['en', 'es', 'de']. This allows LLMs to self-correct invalid locales at planning time rather than hitting runtime validation errors.
No pagination details in tool descriptions. list_tech_terms accepts 'cursor' but does not explain cursor format, whether it is opaque or human-readable, or whether the response includes a next_cursor. LLM cannot reliably construct pagination loops without this documentation.
get_term_details accepts only word_id (integer) with no way to look up by term name or human-readable identifier. Users say 'Tell me about the term compiler', not 'Tell me about word_id 12345'. Tool should accept term + locale parameters alongside word_id, or description should explain how to discover word_id.