Shipi18n
OfficialShipi18n
在发布之前捕获损坏的翻译。 一个针对你的语言文件的开源 QA 门禁——而且,当你需要时,它也是一个使用你自己的 LLM 密钥运行的 i18n 翻译引擎。
当英语为 Hello {{name}} 时,你的 es.json 却写着 Hola。占位符不见了,构建绿灯,bug 随之发布。Shipi18n 能发现这一点,也能发现更难的那种:所有占位符都在、却仍然表达错误的字符串。

这是真实运行,不是模拟——docs/check-demo.tape 可以重现。
npx @shipi18n/cli check ./locales -s en无需 API 密钥,无需账户,无需配置。缺失的键、丢失的占位符、合并的复数形式、空值和未翻译的文案——以人类可读输出、JSON、SARIF(GitHub PR 注释)或 JUnit 形式呈现。
然后,当你希望检查语义时,请使用你自己的密钥。评判器需要与 CLI 一起使用一个 provider SDK:
npm i -D @shipi18n/cli @anthropic-ai/sdk # or `openai`
export ANTHROPIC_API_KEY=sk-ant-... # or OPENAI_API_KEY
npx shipi18n check ./locales -s en --semanticLLM 读取每一对翻译,并报告误译、遗漏和增添:
⚠ es coverage 100.0% 0 error(s), 1 warning(s)
warning delete semantic-mistranslation — Translation says 'will save' (guardará)
instead of 'will delete' (eliminará/borrará)每个占位符都完好,每个键都存在,因此结构检查会通过此文件。只有真正阅读它才能发现这个 bug。默认仅建议——它发出警告,但不会使你的构建失败。
有数据为证,而非空口断言。 在一个包含 228 对翻译、且是在评判器编写之前提交的语料上 (
60d699b),并且阈值事先固定: 54/54 个人为植入的错误被发现(100%),在干净翻译对上有 12/168 个误报(7.1%),并发现 6/6 个术语表违规。在两次独立运行(2026-08-16 和 2026-08-17)中使用claude-haiku-4-5、3 轮、 ~59k tokens、耗时 156 秒复现。标签准确率在两次运行之间有所变化(100% → 98.1%)——它是一个 模型,所以请将这些结果视为一个范围,而非恒定值。 测试框架位于evals/semantic/。你可以用自己的模型运行它。
没有任何数据经过我们的服务器,因为根本没有服务器。唯一的网络调用是从你的机器到你选择的提供商。
包
包 | 描述 |
引擎:翻译检查、语义评判、占位符验证——外加与提供商无关、保留结构的翻译,支持增量模式。 | |
| |
MCP 服务器——可从 Claude Desktop、Cursor 或任何 MCP 客户端检查、对比和审阅语言文件。验证无需 API 密钥。 | |
Vite 插件,在构建时翻译语言文件,并带有缓存。 | |
GitHub Action,在 push/PR 时保持翻译同步。 |
Related MCP server: kaeris-mcp
为什么
生成翻译是个已解决的问题。五六个好工具就能填满你的语言文件,而且 agent 会免费完成。但没有人检查结果。 你的 CI 会检查 JavaScript 的 lint、对类型做类型检查并运行测试——然后发布了一个没人读过的 de.json,它由没人审计过的模型生成。
现有的检查都是结构性的:它们对比键集合,然后仅此而已。这能发现缺失的键,却无法发现那种拥有所有键和所有占位符、仍然向你的德语用户传达了与你本意相反信息的翻译。
Shipi18n 就是那道缺失的门禁,分两层:
确定性、离线、无需密钥。 缺失和孤立的键、丢失或格式错误的占位符(
{{name}}、{count}、%s、%d、%1$s、$t(...)、%{name}、HTML)、合并的复数形式、空值、未翻译的文案、每种语言的覆盖率。语义检查,使用你自己的密钥。 仅对更改过的键执行 LLM 作为评判器的检查,并通过多轮多数投票来判定,因为单轮评判器的得分不稳定。报告误译、遗漏和增添。默认仅建议——一个会让构建失败的 QA 工具会被卸载。
再加上让它日常可用的部分:
超越 JSON 的格式。 Flutter
.arb和 Apple.xcstrings,包括%@/%lld说明符。CI 原生。 正确的退出码、
--fail-on、--min-coverage、用于 PR 注释的 SARIF、JUnit。手工编辑受到保护。
shipi18n lock记录人工认可的翻译,并在任何内容覆盖它们或源文本在它们之下发生变化时发出警告。编辑器内无需密钥。 MCP 服务器的验证器完全不调用模型。
它也能翻译。 与提供商无关、保留结构、增量式——内置 Anthropic 和 OpenAI,任何具有
complete(prompt)方法的对象都是有效的适配器。
从你的编辑器检查——无需 API 密钥
@shipi18n/mcp 将检查功能带到任何 MCP 客户端。验证工具不调用模型,因此完全不需要密钥:
// claude_desktop_config.json
{
"mcpServers": {
"shipi18n": { "command": "npx", "args": ["-y", "@shipi18n/mcp"] }
}
}“将 ./locales 与英语对照,然后告诉我西班牙语里有什么问题。”
review_locales 更进一步,同样不需要密钥:它把翻译对和评审标准交给你的 agent,然后你的 agent 用它已在运行的模型来推理语义。
在 CI 中检查——无需密钥
这些检查适用于来自任何来源的翻译——TMS、另一个工具、agent 或人工。每次 push 时运行:
npx @shipi18n/cli check ./locales -s en缺失的键、丢失的占位符、合并的复数形式、空值和未翻译的文案——以人类可读输出、JSON、SARIF(GitHub PR 注释)或 JUnit 形式报告。适用于普通 JSON 树、Flutter .arb 包和 Apple .xcstrings 目录。确定且离线:无 LLM,无 API 密钥。
保护手工编辑的翻译
手工修复一个字符串,将其锁定,如果任何内容覆盖了它——或英文在它下面发生了变动——check 就会警告你:
npx @shipi18n/cli lock ./locales --keys 'legal.*'.shipi18n/locks.json 仅存储哈希值,可以安全提交,并且这些发现是警告——保护人工成果绝不应阻塞流水线。详情见 CLI README。
它也能翻译
检查功能适用于来自任何地方的翻译,但如果你也希望 Shipi18n 来生成译文,它也能做到——使用你的密钥、你的模型,中间没有任何中间环节。
npm i -D @shipi18n/cli @anthropic-ai/sdk # or `openai`
export ANTHROPIC_API_KEY=sk-ant-... # or OPENAI_API_KEY
npx shipi18n translate locales/en.json -t es,fr,de✔ es → locales/es.json (2 translated, 0 reused)或者从 Node 中使用(相同的 SDK 要求):
import { translateJSON } from '@shipi18n/core'
const { result, stats } = await translateJSON({
content: { greeting: 'Hello {{name}}' },
from: 'en',
to: 'es',
provider: 'anthropic', // 'anthropic' | 'openai' | custom { complete } adapter
})
// result → { greeting: 'Hola {{name}}' }保留结构、占位符安全且增量式——只有新增或更改过的键才会被发送给模型。然后用同一个工具检查结果。
开发
这是一个 pnpm + turbo 的 monorepo。
pnpm install
pnpm test # all packages
pnpm --filter @shipi18n/core test版本管理由 Changesets 负责:运行 pnpm changeset 添加一个版本变更。
贡献
欢迎提交 Issue 和 pull request——请参阅 CONTRIBUTING.md。运行 pnpm install && pnpm test 会针对一个 mock 适配器运行 105 个测试,因此你无需 API 密钥即可参与开发。
许可证
Apache-2.0 © Shipi18n。请参阅 NOTICE。
Available Tools
8 toolscheck_glossaryCheck glossary complianceA
Enforce do-not-translate terms and locked per-language translations across a locale tree. Deterministic string matching — no API key and no model call required.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the locale tree, .arb directory, or .xcstrings file | |
| source | No | Source language code | en |
| glossaryPath | Yes | Path to a glossary JSON file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility. It explicitly states 'Deterministic string matching — no API key and no model call required,' which transparently explains the method and resource needs. This exceeds the minimum but could mention side effects (e.g., read-only, exit codes).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no redundant wording. The first sentence states the core purpose, and the second clarifies the technical approach. Ideal for quick agent comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (3 params, no output schema) and the description is enough for an agent to understand its role and behavior. It does not specify return format or error handling, but for a checking tool with no output schema, this is not critical. The mention of deterministic matching covers the execution context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers all three parameters and the descriptions add useful context (e.g., 'Path to locale tree, .arb directory, or .xcstrings file' for path, 'Source language code' for source, 'Path to a glossary JSON file' for glossaryPath). Since coverage is 100% and descriptions are meaningful, this scores above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('enforce') and identifies the resource (glossary compliance) across a locale tree. It clearly differentiates from sibling tools like check_locales or check_placeholders, which focus on different aspects of localization.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for checking glossary terms but does not explicitly state when to prefer it over alternatives or list exclusion criteria. It could benefit from a note like 'Use when you need to validate glossary adherence rather than general locale structure.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_localesCheck locale filesA
Validate translated locale files against the source language: missing/orphaned keys, dropped or invented placeholders, collapsed plurals, empty values, untranslated copy. Deterministic — no API key and no model call required.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the locale tree, .arb directory, or .xcstrings file | |
| source | No | Source language code | en |
| ignoreKeys | No | Comma-separated '*' globs of keys to silence | |
| glossaryPath | No | Path to a glossary JSON file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description enumerates the checks performed (missing/orphaned keys, dropped/invented placeholders, collapsed plurals, empty values, untranslated copy) and states determinism, but does not specify the output format, return codes, or behavior on success/failure. Users know what it does but not exactly what they will receive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that lists the validation checks in a clear sequence. It is concise without unnecessary detail, providing essential information in a compact form.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description gives sufficient context about the tool's function within the set of sibling tools (e.g., validation vs. diffing or reviewing), but it omits an output schema and details about error handling or return structure. Without these, users may need additional information to fully integrate the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All four parameters are described clearly in the schema: path indicates the locale tree/directory/file, source specifies the language code, ignoreKeys explains the glob pattern for silencing, and glossaryPath points to a JSON glossary. The descriptions fully cover the parameters with no ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: validating translated locale files against a source language, listing specific validation checks (missing keys, placeholders, plurals, empty values, untranslated copy). It also notes that the tool is deterministic and requires no API key or model call, reinforcing its intended use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by listing what it validates and noting it requires no API key or model call, which suggests it can be run offline. However, it does not explicitly state when to prefer this tool over siblings like diff_locales or review_locales, or what conditions trigger its use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_placeholdersCheck PlaceholdersA
Verify a translated string preserves all placeholders from the source (no LLM call).
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | The source string | |
| translation | Yes | The translated string to check |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It correctly indicates a verification action (implying read-only), but does not disclose return format, error behavior, or placeholder syntax expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence with no redundant words. It conveys the essential function and a notable characteristic ('no LLM call') efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple verification tool, the description is mostly complete. It lacks an output schema and specifics about placeholder format, but the inputs are simple and the purpose is clear enough for an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions are minimal ('The source string', 'The translated string to check'), but the tool description clarifies that placeholders are the focus, giving meaningful context to both parameters. Coverage is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: verifying that a translated string preserves all placeholders from the source. The verb 'Verify' and specific object make the action unambiguous, and it is distinct from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through '(no LLM call)' suggesting a lightweight deterministic check, but it does not explicitly state when to prefer this over siblings or provide exclusions. The context is minimal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diff_localesDiff locales against the sourceA
Answer "what needs translating?": per language, the keys missing from the translation and the keys present that no longer exist in the source. No API key required.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Limit to one language | |
| path | Yes | Path to the locale tree, .arb directory, or .xcstrings file | |
| source | No | Source language code | en |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavior. It discloses the output type (missing and obsolete keys per language) and notes that no API key is required, but it does not state whether the operation is read-only, whether it modifies anything, or how errors are handled. This is partial transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured. It front-loads the key question ('what needs translating?') and then specifies the two output categories, followed by a short authentication note. Every sentence adds value with no redundant fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and lack of an output schema, the description provides sufficient context: it explains the output conceptually (per-language missing and obsolete keys) and mentions authentication. It does not specify the return format or edge cases, but for a diff tool this is adequate, though not exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all three parameters. 'path' and 'source' are well-defined, but 'lang' is vague ('Limit to one language') – it does not specify if this is a target language code, a filter, or its relationship to 'source'. Overall, the descriptions add meaning beyond parameter names, but the ambiguity of 'lang' prevents a top score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to answer 'what needs translating?' by listing missing keys and obsolete keys per language. This is specific and distinguishes it from general locale tools, though it doesn't explicitly name siblings. The core function is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given on when to use this tool versus alternatives like check_locales or review_locales. The description implies use for identifying translation gaps, but it does not state conditions, exclusions, or comparisons to sibling tools, leaving the agent to infer applicability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_languagesList LanguagesA
List the language codes and names Shipi18n recognizes (any BCP-47 code works; these have friendly names).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It mentions that BCP-47 codes work and that some have friendly names, which gives a hint of behavior but doesn't disclose return format or any other constraints. For a simple list tool this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is front-loaded with the purpose and includes a clarifying note about BCP-47. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter listing tool, the description is complete: it states what is returned and the scope. No output schema exists, but the description covers what an agent needs to know to call it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema is empty. The description adds meaning by explaining that it returns recognized codes and friendly names, which compensates for the lack of parameters. Baseline for 0 params is 4, and the description maintains that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists language codes and names that Shipi18n recognizes, with a specific verb and resource. It distinguishes itself from sibling tools (check, diff, review, translate) by being a listing operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on when to use it: to get recognized language codes and friendly names, and notes that any BCP-47 code works. It doesn't explicitly exclude alternatives, but for a list tool the usage is self-evident among the siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
review_localesGet translation pairs for semantic reviewA
Return source/translation pairs plus review criteria so YOU can judge translation quality with your own reasoning. The server performs no model call and needs no API key. Structurally broken keys are excluded — run check_locales for those.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | Yes | Language to review | |
| path | Yes | Path to the locale tree, .arb directory, or .xcstrings file | |
| limit | No | Maximum pairs to return | |
| source | No | Source language code | en |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden and does well by disclosing that the server makes no model call, needs no API key, and excludes structurally broken keys. It also states what is returned—source/translation pairs plus review criteria—giving agents the essential behavioral context without requiring them to infer it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three tight sentences, each earning its place: it states the purpose and output, discloses the no-model-call/no-API-key behavior, and routes broken-key work to check_locales. It is front-loaded and contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a retrieval tool with no output schema and no annotations, the description explains what the response contains, the key behavioral constraints, and the boundary with check_locales. It leaves the exact content of 'review criteria' unspecified, but the stated purpose gives an agent enough context to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description does not add parameter-specific meaning beyond what the schema already documents for path, lang, limit, and source, but that is acceptable because the schema fully covers all parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Return source/translation pairs plus review criteria,' and clearly states the tool's purpose—enabling semantic review of translation quality. It also differentiates from the sibling check_locales by noting that structurally broken keys are excluded.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use the tool: when an agent needs to judge translation quality using its own reasoning, with no model call or API key. It also explicitly routes structurally broken key checks to check_locales, though it does not discuss when to prefer other siblings like check_glossary or diff_locales.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
translate_fileTranslate FileA
Read a JSON locale file from disk, translate it into one or more languages, and write .json files. Set incremental=true to reuse existing output files and only translate new/missing keys.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Target language code(s), comma-separated, e.g. "es,fr,de" | |
| from | No | Source language code (default: en) | |
| path | Yes | Path to the source locale JSON file, e.g. locales/en.json | |
| model | No | ||
| outDir | No | Output directory (default: same directory as the source file) | |
| provider | No | ||
| incremental | No | Reuse existing <lang>.json and only translate new keys |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains the core behavior of reading, translating, and writing, and implies overwriting by mentioning incremental mode. However, it does not mention error handling, provider selection, or output details beyond file names.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with two sentences, and effectively communicates the main function without unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description lacks context about how it relates to sibling tools like translate_json, and does not specify the provider/model usage or potential side effects, making it incomplete for full context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Most parameters have descriptions (5 out of 7), but 'model' and 'provider' lack descriptions. The provider has an enum, but model is completely unspecified, leaving ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads a JSON locale file, translates it, and writes output files, which is specific and distinct from potential sibling tools like translate_json.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a tip about using incremental=true but does not explicitly state when to choose this tool over siblings like translate_json, so guidance is minimal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
translate_jsonTranslate JSONA
Translate an i18n locale JSON object to one or more target languages, preserving structure and placeholders. Requires your own LLM key (ANTHROPIC_API_KEY/OPENAI_API_KEY). For key-free work use the validation tools. Legacy: the MCP client's model via sampling.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Target language code(s), comma-separated, e.g. "es,fr,de" | |
| from | No | Source language code (default: en) | |
| model | No | Override the provider default model | |
| content | Yes | The source locale as a JSON string, e.g. {"greeting":"Hello {{name}}"} | |
| provider | No | Force a provider: anthropic or openai. Omit to auto-detect from the environment. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description provides some behavioral insight (preserving structure/placeholders, using external LLM keys, legacy mode) but does not explicitly state whether the operation is read-only or has side effects. It implies a translation action but lacks a clear safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each providing useful information: core functionality, key requirement, and legacy behavior. It is fairly concise but the legacy note adds a slight layer of complexity that could be separated or clarified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description gives context about the tool's purpose, prerequisites, and alternatives. It does not describe output format or error scenarios, but for a translation tool these are not essential for basic usage and the schema covers parameter specifics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage with descriptions for all five parameters, so the description adds little beyond what is already known. It mentions 'target languages' and 'source locale' but doesn't elaborate on each parameter's meaning or constraints beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: translating an i18n locale JSON object to one or more target languages while preserving structure and placeholders. It also distinguishes itself from validation tools and mentions legacy behavior, giving a full picture of its purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states the requirement for an LLM key, directs users to validation tools for key-free work, and mentions legacy mode. This gives clear guidance on when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v0.1.0- First observed
check_glossary - First observed
check_locales - First observed
check_placeholders - First observed
diff_locales - First observed
list_languages - First observed
review_locales - First observed
translate_file - First observed
translate_json
TDQS
Scored across 8 tools
Tools are mostly distinct, but translate_json and translate_file overlap in purpose, and check_locales/diff_locales/review_locales cover related validation concerns that could occasionally be confused.
All tools follow a clear verb_noun pattern (check_, diff_, review_, translate_, list_), with consistent and descriptive naming throughout.
Eight tools is a reasonable, focused set for an i18n workflow, covering validation, diffing, translation, glossary, and language listing without feeling bloated.
The toolset covers the core i18n lifecycle: listing languages, translating JSON/files, validating structure, checking glossaries, identifying missing keys, and reviewing translation quality. No major gaps are apparent.
Maintenance
Related MCP Connectors
Translation QA: automated checks, AI evaluation, linguistic review, and visual in-context testing.
Localize apps from your AI assistant: translate locale files, set glossaries, connect GitHub repos.
Deterministic validation for AI-generated artifacts: JSON Schema, OpenAPI response, SQL syntax.
Read Localazy projects, files, keys and glossary; submit translations, import keys, AI suggestions.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables translation of JSON i18n files to multiple languages using various AI providers (Google Gemini, OpenAI, Ollama/DeepSeek) with intelligent caching and deduplication.21 npm5-
- AlicenseAqualityBmaintenanceAI localization from your editor — translate an app's string files into 46 languages with placeholder-safe, reproducible output. Eleven formats (JSON, .arb, .po, .strings, Android XML and more), and every translation is read back and checked before it lands.7MIT
- AlicenseNot gradedqualityBmaintenanceEnables deterministic linting of locale files across JSON, Laravel PHP, gettext, and YAML, with no LLM or network, verifying translations for missing keys, placeholders, plural forms, glossary consistency, and stale entries.10 npmMIT
- AlicenseAqualityCmaintenanceEnables comparing local JSON/YAML locale files to find missing or extra keys against a base locale, detect empty, null, or whitespace translations, and list flattened dot-path keys for a single file. Works entirely on local files with no network calls or translation APIs.3MIT