MCP server for managing iOS app localization via Localizable.xcstrings files
This server has 7 tools with basic descriptions and input schemas, but significant gaps in parameter documentation, output schema clarity, and error handling guidance. Tool names follow verb_noun convention (get_, translate_, apply_), which is good. However, descriptions are minimal (10-80 chars), parameter descriptions are sparse or missing, and output schemas are undocumented. No tool annotations (readOnlyHint/destructiveHint). Error handling is minimal, no recovery guidance, no actionable error messages. The three write tools (apply_tool, apply_missing_tool, translate_key_tool) lack confirmation patterns or dry-run capability despite modifying user files. Most parameters lack format constraints, valid ranges, or dependency documentation. This is typical of a community MCP server that works but lacks production-grade polish.
MCP tool to apply only missing translations for a target language in xcstrings file. Only translates keys that don't already have translations in the target language.
MCP tool to translate and apply translations to xcstrings file.
MCP tool to get base language strings from xcstrings file.
MCP tool to get all localization keys from xcstrings file.
MCP tool to get supported languages from xcstrings file.
MCP tool to translate a specific key to multiple target languages and apply translations.
Output schemas completely undocumented. No tool returns a documented response structure. LLMs cannot plan downstream operations or extract data confidently from tool results.
Write tools lack confirmation/dry-run patterns. apply_tool and apply_missing_tool modify xcstrings files irreversibly with no recovery mechanism or confirmation step. Agents could corrupt user data.
Parameter descriptions are missing or minimal. 'target_language' in translate_tool has no format specification (e.g. 'ISO 639-1 code like es, fr, de'). 'app_description' in apply_tool is vague ('Optional description of the app for better translation context'). LLMs cannot validate inputs confidently.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 44 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 38 | - | v1 |
MCP tool to translate strings to target language and return translated keys.
No tool annotations present. Write tools lack destructiveHint. Read-only tools lack readOnlyHint. Agents cannot infer safety classification from tool metadata.
Error handling is generic. Code checks for FileNotFoundError and JSONDecodeError but returns no actionable recovery guidance to LLMs. translate_chunk_async catches parse errors and returns empty dict silently, LLM has no signal that translations failed.
No pagination or result limiting documented. Tools like get_keys_tool and get_base_strings_tool could return hundreds of keys with no limit, would blow context window.
'target_languages' parameter in translate_key_tool expects comma-separated string ('"es,fr,de"'). This is ambiguous, no validation that strings are valid codes, no documentation of allowed codes. Should accept array or enum.
Tool descriptions are too brief. 'MCP tool to get supported languages from xcstrings file' (9 words) does not explain WHEN to use it vs alternatives, or what format languages are returned in. Baseline for A-grade tools is 50 - 200 chars; these are 20 - 80 chars.