Skip to main content
Glama
TheoryofShadows

@mcpx-digital/i18n-keys

@mcpx-digital/i18n-keys

MCP server for locale key comparison.

Compare JSON/YAML locale files for missing or extra keys across languages, find empty translations, and list flattened keys. Supports nested objects via dot-path keys.

Local files only. No translation APIs; no network calls.

Install

npx -y @mcpx-digital/i18n-keys

Related MCP server: JSON Editor MCP

Cursor mcp.json example

{
  "mcpServers": {
    "i18n-keys": {
      "command": "npx",
      "args": ["-y", "@mcpx-digital/i18n-keys"]
    }
  }
}

Local clone:

{
  "mcpServers": {
    "i18n-keys": {
      "command": "node",
      "args": ["/absolute/path/to/i18n-keys-mcp/index.js"]
    }
  }
}

Tools

Tool

What it does

compare_locales

Missing/extra keys vs a base locale

find_empty_translations

Empty / null / whitespace values

list_keys

Flattened key list for one file

Example prompts

  • “Compare en.json, es.json, and fr.yaml — what’s missing in Spanish?”

  • “Find empty translations in locales/*.json

  • “List all keys in en.json

Development

git clone https://github.com/TheoryofShadows/i18n-keys-mcp.git
cd i18n-keys-mcp
npm install
npm test

License

MIT

Available Tools

3 tools
compare_localesA

Compare locale files for missing/extra keys vs a base locale. Supports flat and nested keys. Local locale JSON/YAML files only — does not call translation APIs.

ParametersJSON Schema
NameRequiredDescriptionDefault
filesYesPaths to locale JSON/YAML files (min 2).
baseLocaleNoBase locale file name or path fragment (default: first file).

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses that it handles both flat and nested keys and that it operates on local files without calling APIs, which is real behavioral context. It does not state that the operation is read-only/non-mutating, nor how results are reported, leaving notable gaps for a zero-annotation tool.

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?

Three short sentences, front-loaded with the core operation, followed by capability and scope constraints. No filler or redundancy.

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 two-parameter tool with no output schema and no annotations, the description covers the essential behaviors (flat/nested support, local-only scope). The main omission is the shape of the comparison result, which an agent would otherwise have to discover at runtime.

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 description coverage is 100%, so both parameters are already documented in the schema. The description's mention of comparing 'vs a base locale' loosely echoes the baseLocale parameter but adds no syntax, matching rules, or default-override detail beyond what the schema states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (Compare) and resource (locale files) plus the exact scope of the comparison (missing/extra keys vs a base locale). It clearly differs from find_empty_translations and list_keys in subject matter, but it never names or contrasts with those siblings, so the differentiation is implied rather than stated.

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 exclusion 'Local locale JSON/YAML files only — does not call translation APIs' usefully rules out one alternative class of tools. However, it gives no guidance on when to pick this over find_empty_translations or list_keys, so the selection rule among siblings is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_empty_translationsA

Find empty/null/whitespace-only translation values in locale files. Local locale JSON/YAML files only — does not call translation APIs.

ParametersJSON Schema
NameRequiredDescriptionDefault
filesYesPaths to locale JSON/YAML files.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It usefully discloses that the tool is local-file-only and does not hit translation APIs, but it never states that the operation is read-only/non-mutating or whether results are paginated, leaving behavioral traits partly unspecified.

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?

Two tight sentences, no waste, with the core purpose front-loaded and the scope constraint second. Every clause earns its place.

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?

For a simple one-parameter read tool this is nearly enough, but with no output schema the description never hints at the return shape (e.g., file paths plus keys or values), leaving a small but real gap.

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% with a single well-documented 'files' parameter, so the schema does the heavy lifting and the baseline is 3. The description's mention of JSON/YAML locale files echoes the schema rather than adding new syntax or format detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('find') and resource ('empty/null/whitespace-only translation values in locale files'), which is more precise than the name alone. It does not explicitly differentiate itself from list_keys or compare_locales, so it stops short of a 5.

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 'Local locale JSON/YAML files only — does not call translation APIs' clause draws a useful scope boundary, effectively a when-not condition. However, it offers no explicit guidance on when to pick this over list_keys or compare_locales, so usage remains implied rather than directed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_keysA

List flattened keys for a single locale file. Local locale JSON/YAML files only — does not call translation APIs.

ParametersJSON Schema
NameRequiredDescriptionDefault
filePathYesPath to locale JSON/YAML.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden. It usefully discloses that output is flattened keys and that the operation is local-only with no translation API calls, but says nothing about the return shape (array of key strings?) or error behavior for malformed/nonexistent files.

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?

Two short sentences, zero waste, with the core purpose front-loaded and the constraint immediately following. Nothing could be removed without losing signal.

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 single-parameter read tool this is nearly sufficient: purpose, input domain, and a key constraint are all covered. With no output schema present, a brief note on what the returned key list looks like would close the last gap.

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% and the sole filePath parameter is already documented as 'Path to locale JSON/YAML.' The description reinforces that only one file is involved, adding marginal meaning beyond the schema, which sets the baseline at 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and resource ('flattened keys') scoped to 'a single locale file,' which implicitly separates it from compare_locales (two files) and find_empty_translations (filtered subset). It stops short of naming those siblings explicitly, but the scope 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a hard boundary — 'Local locale JSON/YAML files only — does not call translation APIs' — which is useful exclusion guidance. However, it never states when to reach for this tool versus compare_locales or find_empty_translations, leaving that routing to inference.

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. 3 tool updatesv0.1.0
    • First observedcompare_locales
    • First observedfind_empty_translations
    • First observedlist_keys

TDQS

A3.9/5.0

Scored across 3 tools

Disambiguation5/5

Each tool targets a clearly distinct operation: enumerating keys, diffing locales against a base, and detecting empty values. There is minimal risk of confusing one for another.

Naming Consistency5/5

All three tools follow a strict verb_noun snake_case pattern (list_keys, compare_locales, find_empty_translations), which is predictable and readable.

Tool Count4/5

Three tools is a bit thin, but the server has a narrow read-only scope over local locale files, so each tool earns its place without redundancy.

Completeness4/5

Core inspection workflows (list, compare, find empties) are covered, but there is no way to look up a single key's value or search/sort keys, leaving minor gaps an agent must work around.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables efficient JSON file editing with targeted read, write, delete, and deep merge operations using dot notation paths, optimized for managing multilingual projects and large configuration files.
    4
    11
    1
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Translation QA for i18n locale files. Deterministic validators — missing keys, placeholder drift, collapsed plurals, glossary breaches — that need no API key, plus a review tool that hands translation pairs and judging criteria back to the calling agent, so meaning-level review runs on the model your client already has. Translation with your own LLM key is optional. JSON, Flutter .arb, Apple .
    8
    Apache 2.0