@mcpx-digital/i18n-keys
Provides tools for comparing YAML locale files, including finding missing or extra keys against a base locale, detecting empty or null translations, and listing flattened dot-path keys across nested objects.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@@mcpx-digital/i18n-keysCompare en.json, es.json, and fr.yaml — what's missing in Spanish?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@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-keysRelated 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 |
| Missing/extra keys vs a base locale |
| Empty / null / whitespace values |
| Flattened key list for one file |
Example prompts
“Compare
en.json,es.json, andfr.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 testLicense
MIT
Available Tools
3 toolscompare_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.
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | Paths to locale JSON/YAML files (min 2). | |
| baseLocale | No | Base locale file name or path fragment (default: first file). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | Paths to locale JSON/YAML files. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| filePath | Yes | Path to locale JSON/YAML. |
TDQS
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.
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.
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.
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.
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.
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.
3 tool updates
v0.1.0- First observed
compare_locales - First observed
find_empty_translations - First observed
list_keys
TDQS
Scored across 3 tools
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.
All three tools follow a strict verb_noun snake_case pattern (list_keys, compare_locales, find_empty_translations), which is predictable and readable.
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.
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
Related MCP Connectors
Compare two JSON files deeply without worrying about key or array order. Detect missing, extra, an…
Compare two JSON files deeply, regardless of order. Get a detailed difference report highlighting…
Compare two JSON files deeply, ignoring order, to surface every difference. Get a clear, structure…
Detect breaking changes, generate changelogs, diff, and validate OpenAPI specs.
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.165-
- AlicenseAqualityDmaintenanceEnables 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.4111MIT
- FlicenseAqualityDmaintenanceEnables automatic discovery and fast searching of translation files in projects, supporting partial/exact key-value matching with file watching and multiple translation file formats.2-
- AlicenseAqualityAmaintenanceTranslation 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 .8Apache 2.0