# L10n.dev - AI Localization Agent (npm · ai-l10n-mcp)

MCP Server that turns your AI agent into a localization expert with token-efficient i18n translation

- Trust score: 79/100 (medium)
- Change this week: +28
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `ai-l10n-mcp`: 79/100 (this document), [markdown](https://verifymcp.io/servers/l10n-dev-ai-l10n-mcp/ai-l10n-mcp.md), [page](https://verifymcp.io/servers/l10n-dev-ai-l10n-mcp/ai-l10n-mcp)

## Channel facts

- Registry: `npm`
- Package: `ai-l10n-mcp`
- Version: `1.1.2`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 87/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (97 of 101), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (97 of 101), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 97/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to l10n-dev/ai-l10n).
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 20 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 75/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 2811 tokens (~175/item across 16 items; 16 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 23/100
  - Stability observed for 7 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add l10n-dev-ai-l10n-mcp -- npx -y ai-l10n-mcp
```

### Codex

```bash
codex mcp add l10n-dev-ai-l10n-mcp -- npx -y ai-l10n-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "l10n-dev-ai-l10n-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "ai-l10n-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add l10n-dev-ai-l10n-mcp --command npx --arg -y --arg ai-l10n-mcp
```

### Hermes

```yaml
mcp_servers:
  l10n-dev-ai-l10n-mcp:
    command: "npx"
    args: ["-y", "ai-l10n-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "l10n-dev-ai-l10n-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "ai-l10n-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 79, +3)

- [functional improvement] Stability: unverified → 0.23

### 2026-08-02 (score 76, +51)

- [security improvement] Known CVEs: unverified → partial
- [security improvement] Install scripts: unverified → pass
- [security improvement] Provenance: unverified → pass
- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [security] The attested source repository moved: l10n-dev/ai-l10n
- [functional regression] Security disclosure: fail → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Schema quality: 100 → unverified
- [functional improvement] License: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Schema quality: unverified → good
- [functional] Licence: MIT

### 2026-08-01 (score 25, −8)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-31 (score 33, −18)

- [security regression] Malware scan: pass → unverified

### 2026-07-27 (score 51)

First indexed and scored.

## MCP tools (16)

### `l10n_translate_file` (~1287 tokens)

Translate i18n File, configs, md documents, and other text-based formats

Translate an i18n source file to one or more target languages using l10n.dev AI.

Supports JSON, JSONC, Flutter ARB, YAML, PO (gettext), XLIFF, MD, and all other text-based localization formats.
Format is auto-detected from the file extension.

If sourceFile is omitted, scan the project for i18n source files. Common patterns to look for:
\- `locales/en.json`, `locales/en-US.json` (flat file-based)
\- `locales/en/common.json`, `locales/en/messages.json` (folder-based)
\- `app_en.arb` (Flutter ARB)
\- `*.po`, `*.xliff`, `*.yaml` files with language-code naming
\- `ai-l10n.config.json` if it already exists (read it to find the declared source files)

For each candidate source file found, call `l10n_detect_project_structure` and collect:
\- Structure type, source language code, and detected target languages
\- Which target files already exist on disk

If no source files can be found, ask me which file to use before continuing.
If targetLanguages is omitted, and if target languages are not detected, ask me for them.

Show a brief summary of what was found before continuing.

PRE-TRANSLATION CHECKS — perform all of these BEFORE calling translate:

1\. LINGUISTIC INSTRUCTIONS: If the user has not mentioned tone, style, or brand voice in this conversation,
   call l10n_list_instructions first. Check whether a saved instruction exists for each requested target
   language pair (source → target). If instructions exist for OTHER language pairs but NOT the requested
   targets, mention this gap explicitly. Ask the user in one sentence:
   "No instruction found for [language(s)] — would you like to set a tone/style rule before translating?
   (e.g. formal, casual, keep brand terms untranslated)"
   If yes, call l10n_create_instruction and pass the instruction text back via the 'instruction' parameter.
   If no or they want to skip, proceed without it.

2\. GLOSSARY: If generateGlossary was not explicitly set by the user, call l10n_list_glossaries and check
   whether an active glossary…

Input parameters:

- `generateGlossary` (boolean): Generate and save a glossary from this translation for consistent future translations. Costs extra characters (full source content debited upfront). Default false.
- `generatePluralForms` (boolean): Generate plural form strings with suffixes (e.g. for i18next). Do not enable for strict source-to-target mapping. Default false.
- `instruction` (string): Linguistic instruction for this translation e.g. 'Use formal tone, never translate Dashboard'. Overrides the active saved instruction for this request. Max 1000 characters.
- `replace` (boolean): Replace existing target files in-place. When false (default), uniquely-named copies are created.
- `sourceFile` (string, required): Absolute or relative path to the source i18n file (JSON, JSONC, ARB, YAML, PO, XLIFF, MD, etc.)
- `targetLanguages` (array): BCP-47 language codes e.g. ['es','fr','de']. Auto-detected from project structure if omitted.
- `translateMetadata` (boolean): Translate metadata entries along with UI strings (e.g. Flutter ARB @key descriptions). When false (default), metadata entries are preserved unchanged in target files.
- `translateOnlyNewStrings` (boolean): Only translate new/changed strings, skipping strings that already exist in the target file. Saves character quota. Default false. Note: on first run, only added strings are translated because the has…
- `useShortening` (boolean): Allow shorter translations where appropriate. Default false.
- `verbose` (boolean): Enable verbose SDK logging in the output. Default false.

### `l10n_list_instructions` (~75 tokens)

List Linguistic Instructions

List all saved linguistic instructions for this l10n.dev account.
Linguistic instructions guide AI translation style, tone, and brand voice
(e.g. "Use formal tone", "Never translate the word Dashboard").
Call this before translating if the user hasn't specified tone preferences,
to check whether instructions are already configured.

### `l10n_create_instruction` (~220 tokens)

Create Linguistic Instruction

Create and save a new linguistic instruction for a source→target language pair.
The instruction is stored in l10n.dev and applied automatically to future translations
for that language pair (unless overridden per-request).
Use this when the user wants to set a tone, style, or brand rule — for example after
they answer the suggestion made during translation.

Examples:
\- "Use formal tone (Sie, not du)"
\- "Keep product names Dashboard, Workspace, and Settings untranslated"
\- "Use simple, friendly language suitable for children"

Input parameters:

- `name` (string): Optional display name for this instruction
- `sourceLanguageCode` (string, required): Source language BCP-47 code e.g. 'en'
- `targetLanguageCode` (string, required): Target language BCP-47 code e.g. 'de'
- `text` (string, required): The instruction text e.g. 'Use formal tone (Sie, not du)'. Max 1000 characters. Use instructions for style/tone guidance. For specific term mappings, use glossaries instead.

### `l10n_update_instruction` (~125 tokens)

Update Linguistic Instruction

Update the text, name, or active status of an existing linguistic instruction.
Use to edit a previously saved instruction without deleting and recreating it.
Setting isActive to true deactivates all other instructions for the same language pair.

Input parameters:

- `instructionId` (integer, required): Numeric ID of the instruction to update
- `isActive` (boolean): Enable or disable this instruction. Setting true deactivates all other instructions for the same language pair.
- `name` (string): New display name
- `text` (string): New instruction text. Max 1000 characters.

### `l10n_delete_instruction` (~52 tokens)

Delete Linguistic Instruction

Permanently delete a linguistic instruction. This cannot be undone.
If the deleted instruction was active, no other instruction is automatically activated.

Input parameters:

- `instructionId` (integer, required): Numeric ID of the instruction to delete

### `l10n_list_glossaries` (~77 tokens)

List Glossaries

List all saved glossaries for this l10n.dev account.
Each glossary maps source terms to preferred translations for a language pair.
Active glossaries are applied automatically during translation.
Call this when the user asks about their glossaries, or to check whether
a glossary exists for a language pair before suggesting generateGlossary.

### `l10n_get_glossary` (~58 tokens)

Get Glossary

Get the full details and all term entries of a specific glossary by ID.
Use when the user wants to review or audit the terms in a glossary.

Input parameters:

- `glossaryId` (integer, required): Numeric ID of the glossary to retrieve

### `l10n_create_glossary` (~133 tokens)

Create Glossary

Create a new empty glossary for a source→target language pair.
After creating, use l10n_add_glossary_entry to add term mappings.
Note: to auto-generate a glossary from a translation, use generateGlossary: true
in l10n_translate_file instead.

Input parameters:

- `name` (string, required): Display name for this glossary e.g. 'My App German Glossary'
- `sourceLanguageCode` (string, required): Source language BCP-47 code e.g. 'en'
- `targetLanguageCode` (string, required): Target language BCP-47 code e.g. 'de'

### `l10n_update_glossary` (~95 tokens)

Update Glossary

Update the name or active status of an existing glossary.
Setting isActive to true deactivates all other glossaries for the same language pair.

Input parameters:

- `glossaryId` (integer, required): Numeric ID of the glossary to update
- `isActive` (boolean): Enable or disable this glossary. Setting true deactivates all other glossaries for the same language pair.
- `name` (string): New display name

### `l10n_delete_glossary` (~44 tokens)

Delete Glossary

Permanently delete a glossary and all its term entries. This cannot be undone.

Input parameters:

- `glossaryId` (integer, required): Numeric ID of the glossary to delete

### `l10n_add_glossary_entry` (~126 tokens)

Add Glossary Entry

Add a term mapping to an existing glossary.
Maps a source term to a preferred translation, with an optional context note
for disambiguating polysemous terms (e.g. 'bank' = financial institution vs. river bank).

Input parameters:

- `context` (string): Disambiguation note e.g. 'financial institution' to clarify the intended meaning
- `glossaryId` (integer, required): Numeric ID of the glossary to add to
- `sourceTerm` (string, required): Term in the source language
- `targetTerm` (string, required): Preferred translation of the term

### `l10n_delete_glossary_entry` (~51 tokens)

Delete Glossary Entry

Remove a single term mapping from a glossary.

Input parameters:

- `entryId` (integer, required): Numeric ID of the entry to remove
- `glossaryId` (integer, required): Numeric ID of the glossary

### `l10n_get_balance` (~77 tokens)

Get Account Balance

Check the remaining character balance for this l10n.dev account.
Each translation consumes characters from the balance.
Use this when the user asks how many characters they have left, or proactively
if a translation result shows a low remaining balance.

If balance is insufficient, suggest purchasing more characters at https://l10n.dev/#pricing

### `l10n_set_api_key` (~172 tokens)

Set API Key

Store an l10n.dev API key locally in the user's home directory (~/.ai-l10n/config.json).
Once stored, the key is used automatically by all l10n tools without needing to set L10N_API_KEY.
      
Get a free API key at https://l10n.dev/ws/keys

Use this when:
\- The user provides an API key and wants to save it
\- A translation fails with an authorization error and the user wants to persist their key

Note: if L10N_API_KEY environment variable is set in the MCP config, that takes precedence
over the stored key and this tool is not needed.

Input parameters:

- `apiKey` (string, required): The l10n.dev API key to store. Get yours at https://l10n.dev/ws/keys

### `l10n_get_api_key_status` (~48 tokens)

Get API Key Status

Check whether an l10n.dev API key is configured (via environment variable or stored config).
Use this to diagnose authorization errors or to confirm the key is set up correctly.

### `l10n_detect_project_structure` (~171 tokens)

Detect i18n Project Structure

Scan an i18n source file to understand the project's localization structure.

Returns: structure type (folder-based or file-based), source language code, all detected target
languages, and the resolved target file path for each language (showing whether files already exist).

Use this before translating or setting up automation to understand what source files and target
languages are in place. Call with the path to the source language file (e.g. locales/en.json,
app_en.arb, locales/en/common.json).

Input parameters:

- `sourceFile` (string, required): Absolute or relative path to the i18n source file (e.g. './locales/en.json', './lib/l10n/app_en.arb', './locales/en/common.json'). This is the file in the source language from which translations are…

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/l10n-dev-ai-l10n-mcp/ai-l10n-mcp#diagnostics

## Score history

- 2026-08-03: 79
- 2026-08-02: 76
- 2026-08-01: 25
- 2026-07-31: 33
- 2026-07-30: 51
- 2026-07-28: 51
- 2026-07-27: 51

## Links

- npm package: https://www.npmjs.com/package/ai-l10n-mcp
- Socket report: https://socket.dev/npm/package/ai-l10n-mcp
- Repository: https://github.com/l10n-dev/ai-l10n
- Website: https://l10n.dev/
- Changelog RSS feed: https://verifymcp.io/servers/l10n-dev-ai-l10n-mcp/ai-l10n-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/l10n-dev-ai-l10n-mcp/ai-l10n-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/l10n-dev-ai-l10n-mcp/ai-l10n-mcp
