Skip to main content
Glama

Shipi18n

CI npm MCP License

배포 전에 깨진 번역을 잡아내세요. 로케일 파일을 위한 오픈소스 QA 게이트 — 그리고 원할 때는, 자신의 LLM 키로 실행되는 i18n 번역 엔진입니다.

영어가 Hello {{name}}인데 es.json에는 Hola라고 되어 있습니다. 플레이스홀더가 사라졌고, 빌드는 통과했으며, 버그가 배포됩니다. Shipi18n은 그런 문제를 찾아냅니다. 그리고 더 어려운 유형도 찾아냅니다: 모든 플레이스홀더가 있는데도 여전히 잘못된 내용을 말하는 문자열입니다.

shipi18n check finding a dropped placeholder, then an LLM catching a translation that says "will save" where the English says "delete"

실제 실행 결과입니다. 모형이 아닙니다 — docs/check-demo.tape로 재현할 수 있습니다.

npx @shipi18n/cli check ./locales -s en

API 키, 계정, 설정이 필요 없습니다. 누락된 키, 빠진 플레이스홀더, 축약된 복수형, 빈 값, 번역되지 않은 문구 — 사람이 읽을 수 있는 출력, JSON, SARIF(GitHub PR 주석) 또는 JUnit으로 제공됩니다.

그런 다음 의미를 확인하고 싶을 때, 자신의 키를 가져오세요. 판정기는 CLI와 함께 제공 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 --semantic

LLM이 각 쌍을 읽고 오역, 누락, 추가를 보고합니다:

⚠ 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á)

모든 플레이스홀더가 온전하고 모든 키가 존재하므로 구조적 검사는 이 파일을 통과합니다. 읽어야만 버그를 잡을 수 있습니다. 기본적으로 권고 사항입니다 — 경고만 하고 빌드를 실패시키지 않습니다.

측정된 결과이지, 주장이 아닙니다. 판정기를 작성하기 전에 커밋된 228쌍 말뭉치(60d699b)와 먼저 고정된 임계값 기준으로: 심은 오류 54/54개 발견(100%), 정상 쌍에서 오탐 12/168개(7.1%), 용어집 위반 6/6개 발견. claude-haiku-4-5, 3회 패스, 약 59k 토큰, 156초로 2026-08-16과 2026-08-17 두 번의 독립 실행에서 재현되었습니다. 라벨 정확도는 실행 간에 변동했습니다(100% → 98.1%) — 모델이므로 상수로 보지 말고 범위로 읽으세요. 하네스는 evals/semantic/입니다. 자신의 모델로 실행해 보세요.

우리 서버를 거치는 것은 없습니다. 서버가 없기 때문입니다. 유일한 네트워크 호출은 사용자 머신에서 선택한 제공자로 가는 것입니다.

Packages

Package

Description

@shipi18n/core

엔진: 번역 검사, 의미 판정, 플레이스홀더 검증 — 그리고 제공자에 구애받지 않고 구조를 보존하는 증분 모드 번역.

@shipi18n/cli

CI용 shipi18n check ./locales, 의미 확인용 --semantic, 수동 편집 보호용 lock, 필요할 때 translate.

@shipi18n/mcp

MCP 서버 — Claude Desktop, Cursor 또는 모든 MCP 클라이언트에서 로케일 파일을 검사, 비교, 검토합니다. 검증에는 API 키가 필요 없습니다.

vite-plugin-shipi18n

빌드 시 로케일 파일을 번역하고 캐싱하는 Vite 플러그인.

shipi18n-github-action

push/PR 시 번역을 동기화하는 GitHub Action.

Related MCP server: kaeris-mcp

Why

번역 생성은 해결된 문제입니다. 좋은 도구가 로케일 파일을 채워 주고, 에이전트가 무료로 해 주기도 합니다. 하지만 결과를 검사하는 도구는 없습니다. CI는 JavaScript를 린트하고, 타입을 검사하고, 테스트를 실행합니다 — 그리고 아무도 읽지 않은 de.json을 배포합니다. 아무도 감사하지 않은 모델이 만든 것입니다.

기존 검사는 구조적입니다: 키 집합을 비교하고 거기서 멈춥니다. 누락된 키는 잡아내지만, 모든 키와 모든 플레이스홀더가 있는데도 독일어 사용자에게 의도와 반대되는 내용을 전달하는 번역은 잡아내지 못합니다.

Shipi18n은 그 누락된 게이트입니다. 두 계층으로 구성됩니다:

  • 결정적, 오프라인, 키 없음. 누락되거나 고아가 된 키, 빠지거나 잘못된 플레이스홀더({{name}}, {count}, %s, %d, %1$s, $t(...), %{name}, HTML), 축약된 복수형, 빈 값, 번역되지 않은 문구, 언어별 커버리지.

  • 의미적, 자신의 키 사용. 변경된 키에 대해서만 LLM-as-judge 패스를 실행하며, 단일 패스 판정 점수는 불안정하므로 다중 패스 다수결 투표를 사용합니다. 오역, 누락, 추가를 보고합니다. 기본적으로 권고 사항입니다 — 빌드를 실패시키는 QA 도구는 곧 제거됩니다.

그리고 일상적으로 사용할 수 있게 해 주는 부분들:

  • JSON 외의 형식. Flutter .arb 및 Apple .xcstrings, %@/%lld 지정자 포함.

  • CI 네이티브. 올바른 종료 코드, --fail-on, --min-coverage, PR 주석용 SARIF, JUnit.

  • 수동 편집 보호. shipi18n lock은 사람이 승인한 번역을 기록하고, 어떤 것이 덮어쓰거나 소스가 그 아래에서 이동하면 경고합니다.

  • 에디터에서 키 없이. MCP 서버의 검증기는 모델을 전혀 호출하지 않습니다.

  • 번역도 합니다. 제공자에 구애받지 않고, 구조를 보존하며, 증분 방식 — Anthropic과 OpenAI가 기본 제공되며, complete(prompt) 메서드가 있는 모든 객체는 유효한 어댑터입니다.

Check from your editor — no API key

@shipi18n/mcp는 모든 MCP 클라이언트에 검사를 제공합니다. 검증 도구는 모델을 호출하지 않으므로 키가 전혀 필요 없습니다:

// claude_desktop_config.json
{
  "mcpServers": {
    "shipi18n": { "command": "npx", "args": ["-y", "@shipi18n/mcp"] }
  }
}

"./locales를 영어와 비교해서 스페인어에서 무엇이 깨졌는지 알려줘."

review_locales는 키 없이도 더 나아갑니다: 에이전트에게 번역 쌍과 검토 기준을 넘겨주면, 에이전트는 이미 실행 중인 모델로 의미를 추론합니다.

Check in CI — no key needed

검사는 어떤 소스의 번역에서도 작동합니다 — TMS, 다른 도구, 에이전트, 사람. 모든 push에 실행하세요:

npx @shipi18n/cli check ./locales -s en

누락된 키, 빠진 플레이스홀더, 축약된 복수형, 빈 값, 번역되지 않은 문구 — 사람이 읽을 수 있는 출력, JSON, SARIF(GitHub PR 주석) 또는 JUnit으로 보고됩니다. 일반 JSON 트리, Flutter .arb 번들, Apple .xcstrings 카탈로그에서 작동합니다. 결정적이고 오프라인: LLM도 API 키도 없습니다.

Protect hand-edited translations

문자열을 수동으로 수정하고 잠그면, check는 어떤 것이 덮어쓰거나 영어가 그 아래에서 이동하면 경고합니다:

npx @shipi18n/cli lock ./locales --keys 'legal.*'

.shipi18n/locks.json은 해시만 저장하므로 커밋해도 안전하며, 이러한 결과는 경고입니다 — 인간의 작업을 보호하는 것이 파이프라인을 막아서는 안 됩니다. 자세한 내용은 CLI README를 참조하세요.

It also translates

검사는 어디서든 가져온 번역에서 작동하지만, 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}}' }

구조를 보존하고, 플레이스홀더에 안전하며, 증분 방식 — 새로 추가되거나 변경된 키만 모델로 보냅니다. 그런 다음 같은 도구로 결과를 검사하세요.

Development

이것은 pnpm + turbo 모노레포입니다.

pnpm install
pnpm test          # all packages
pnpm --filter @shipi18n/core test

Changesets가 버전 관리를 담당합니다: pnpm changeset으로 추가하세요.

Contributing

이슈와 풀 리퀘스트를 환영합니다 — CONTRIBUTING.md를 참조하세요. pnpm install && pnpm test는 모의 어댑터로 105개의 테스트를 실행하므로, 이 작업에 API 키가 필요 없습니다.

License

Apache-2.0 © Shipi18n. NOTICE를 참조하세요.

Available Tools

8 tools
check_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the locale tree, .arb directory, or .xcstrings file
sourceNoSource language codeen
glossaryPathYesPath to a glossary JSON file

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the locale tree, .arb directory, or .xcstrings file
sourceNoSource language codeen
ignoreKeysNoComma-separated '*' globs of keys to silence
glossaryPathNoPath to a glossary JSON file

TDQS

A4.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYesThe source string
translationYesThe translated string to check

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
langNoLimit to one language
pathYesPath to the locale tree, .arb directory, or .xcstrings file
sourceNoSource language codeen

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
langYesLanguage to review
pathYesPath to the locale tree, .arb directory, or .xcstrings file
limitNoMaximum pairs to return
sourceNoSource language codeen

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesTarget language code(s), comma-separated, e.g. "es,fr,de"
fromNoSource language code (default: en)
pathYesPath to the source locale JSON file, e.g. locales/en.json
modelNo
outDirNoOutput directory (default: same directory as the source file)
providerNo
incrementalNoReuse existing <lang>.json and only translate new keys

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesTarget language code(s), comma-separated, e.g. "es,fr,de"
fromNoSource language code (default: en)
modelNoOverride the provider default model
contentYesThe source locale as a JSON string, e.g. {"greeting":"Hello {{name}}"}
providerNoForce a provider: anthropic or openai. Omit to auto-detect from the environment.

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 8 tool updatesv0.1.0
    • First observedcheck_glossary
    • First observedcheck_locales
    • First observedcheck_placeholders
    • First observeddiff_locales
    • First observedlist_languages
    • First observedreview_locales
    • First observedtranslate_file
    • First observedtranslate_json

TDQS

A4.2/5.0

Scored across 8 tools

Disambiguation4/5

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.

Naming Consistency5/5

All tools follow a clear verb_noun pattern (check_, diff_, review_, translate_, list_), with consistent and descriptive naming throughout.

Tool Count5/5

Eight tools is a reasonable, focused set for an i18n workflow, covering validation, diffing, translation, glossary, and language listing without feeling bloated.

Completeness5/5

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

ActivityActive
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    AI 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.
    7
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables 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 npm
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables 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.
    3
    MIT