AI Localization Agent
Description
AI Localization Agent adds professional localization. Instead of loading large i18n files into the AI's context, it translates them server-side via MCP (the ai-l10n-mcp package, built on the ai-l10n SDK and CLI), saving tokens and keeping the agent focused on coding. It…
About
AI Localization Agent adds professional localization. Instead of loading large i18n files into the AI's context, it translates them server-side via MCP (the ai-l10n-mcp package, built on the ai-l10n SDK and CLI), saving tokens and keeping the agent focused on coding. It preserves file formats, placeholders, and…
Details
- Author
- l10n.dev
- GitHub stars
- 3
- Downloads
- 348
- Categories
- Developer Tools, AI
Jump to
Setting up with Highlight
This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:
- Download and install Highlight from highlightai.com/download
- Navigate to the plugins tab and select "Add Custom Plugin"
-
Configure the plugin with the settings below
Plugin Name
AI Localization AgentCommand (node, npx, python, etc.)Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.
- Enable "Start Automatically" if you want the plugin to start when Highlight launches
From the repository
{
"mcpServers": {
"l10n": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"ai-l10n-mcp"
],
"env": {
"L10N_API_KEY": "your-api-key-here"
}
}
}
}
l10n_translate_file
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) - `locales/common.en.json`, `locales/en-US.common.json` (language code inside the file name) - `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 exists for the requested target language pairs. If glossaries exist for OTHER language pairs but NOT the requested targets, mention this gap. Then ask the user: "No glossary found for [language(s)] — enabling glossary generation saves key terms for consistent future translations (costs extra characters). Enable it for this run?" If yes, set generateGlossary: true. If no, proceed without it. Do this check BEFORE translating — do not suggest a rerun after the fact. 3. INCREMENTAL UPDATE: For JSON-based formats (.json, .jsonc, .arb) only: if the target language files already exist on disk and translateOnlyNewStrings was not explicitly set by the user, suggest enabling it: "Target files already exist — enable incremental mode to skip unchanged strings and save quota?" If yes, set translateOnlyNewStrings: true. 4. BALANCE: If the translation fails with paymentRequired (HTTP 402 / Insufficient balance), analyze the error message (it contains current balance and required balance). Suggest purchasing more characters at https://l10n.dev/#pricing 5. API KEY: If the error indicates unauthorized access or no API key, suggest creating a free account and API key at https://l10n.dev/ws/keys. Offer to store the key using the l10n_set_api_key tool. POST-TRANSLATION CHECKS — perform all of these AFTER calling translate: 1. USAGE DETAILS: Always present a character usage breakdown to the user. For each entry in results[], report the output file path (outputPath) and a cost breakdown from usageDetails — omit zero values and use these descriptive labels: - sourceStringsCharCount → "content" - glossaryCharCount → "glossary applied" - instructionCharCount → "linguistic instruction" - terminologyCharCount → "terminology" Then report total characters used and remaining balance. 2. FILTERED STRINGS: If filteredStringsP…
l10n_list_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
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"
l10n_update_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.
l10n_delete_instruction
Permanently delete a linguistic instruction. This cannot be undone. If the deleted instruction was active, no other instruction is automatically activated.
l10n_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
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.
l10n_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.
l10n_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.
l10n_delete_glossary
Permanently delete a glossary and all its term entries. This cannot be undone.
l10n_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).
l10n_delete_glossary_entry
Remove a single term mapping from a glossary.
l10n_get_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
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.
l10n_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
Scan an i18n source file to understand the project's localization structure. Returns: structure type (folder-based, file-based or unknown), source language code, all detected target languages, and the resolved target file path for each language (showing whether files already exist). Structure types: - folder-based: a language-code directory per language (locales/en/common.json) - file-based: the language code is in the file name, either as the whole name (locales/en.json) or next to other parts (app_en.arb, locales/common.en.json, locales/en-US.common.json, locales/messages_en_US.properties). In the latter case the detected naming pattern is reported as well. 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). If the structure comes back as unknown even though localization files exist, pass languageCodeRegex to describe the naming pattern.
Claude Desktop / Cursor
Paste into your MCP client config file to install this server.
{
"mcpServers": {
"ai localization agent": {
"l10n": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"ai-l10n-mcp"
],
"env": {
"L10N_API_KEY": "your-api-key-here"
}
}
}
}
}
McpServers
{
"l10n": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"ai-l10n-mcp"
],
"env": {
"L10N_API_KEY": "your-api-key-here"
}
}
}
AI Localization Agent adds professional localization. Instead of loading large i18n files into the AI's context, it translates them server-side via MCP (the ai-l10n-mcp package, built on the ai-l10n SDK and CLI), saving tokens and keeping the agent focused on coding. It preserves file formats, placeholders, and existing translations, supports 165 languages, applies persistent glossaries and custom linguistic instructions, and translates only changed strings for fast, production-ready localization.
MCP server that gives AI agents access to l10n.dev — aprofessionallocalization servicepurpose-built for software i18n files.
When an AI agent needs to translate your app, the naive approach is to paste file contents into the chat. That breaks down fast: localization files are large, formats are strict, placeholders must survive verbatim, glossaries drift across sessions, and the agent has no memory between runs.This MCP replaces that fragile workflowwith a dedicated localization engine that the agent calls as a tool — getting professional-grade output without wasting context window on raw file contents.
Think of it as giving your AI agent a professional localization co-pilot:the agent handles intent and orchestration; l10n.dev handles the actual translation with accuracy, consistency, and format guarantees.
Why use this instead of asking your AI agent directly?
- 165 Languages— translate to the full range of world languages in one call
- Format guaranteed— JSON, JSONC, Flutter ARB, YAML, PO (gettext), XLIFF, MD and all text-based i18n formats; placeholders, keys, and structure preserved and validated after translation
- Auto-detecttarget languages from project structure
- Persistent glossary— generate a glossary from your content, save it, and have it applied automatically across every subsequent file and chunk for consistent terminology
- Linguistic instructions— save style/tone rules per language pair (e.g. "Use formal tone")
- Incremental translation— hash-based change detection skips strings already translated, saving quota and protecting existing translations
- Proactive quality control— checks instructions and glossary for each language pair before translating, not after
Connect Claude Desktop, Cursor, Windsurf, GitHub Copilot, OpenAI Codex, or any MCP-compatible agent directly to l10n.dev's translation engine.
Create a free account and get your API key athttps://l10n.dev/ws/api-keys
Tip:Instead of settingL10N_API_KEYin each config, you can ask the AI to store your key withl10n_set_api_key. The key is saved to~/.ai-l10n/config.jsonand used automatically.
In Claude Desktop, openSettings > Developer > Edit Config. Claude Desktop will open the correct MCP config file for your install. On macOS this is typically~/Library/Application Support/Claude/claude_desktop_config.json. On Windows, the backing path can vary by installation, so preferEdit Configinstead of navigating manually. Add:
{ "mcpServers": { "l10n": { "command": "npx", "args": ["-y", "ai-l10n-mcp"], "env": { "L10N_API_KEY": "your-api-key-here" } } } }
OpenCustomizein Cursor to add and manage MCP servers. For a file-based setup, create one of these configs:
- ~/.cursor/mcp.jsonfor a user-wide setup
- .cursor/mcp.jsonin your project for a workspace-specific setup
{ "mcpServers": { "l10n": { "type": "stdio", "command": "npx", "args": ["-y", "ai-l10n-mcp"], "env": { "L10N_API_KEY": "your-api-key-here" } } } }
In Windsurf, open theMCPspanel in Cascade, or go toDevin Settings > Cascade > MCP Servers. If you need to add it manually, edit~/.codeium/windsurf/mcp_config.jsonand add:
{ "mcpServers": { "l10n": { "command": "npx", "args": ["-y", "ai-l10n-mcp"], "env": { "L10N_API_KEY": "your-api-key-here" } } } }
Open the Command Palette and select MCP: Open User Configuration. Alternatively, create a.vscode/mcp.jsonfile in your workspace or user settings. Add:
{ "servers": { "l10n": { "type": "stdio", "command": "npx", "args": ["-y", "ai-l10n-mcp"], "env": { "L10N_API_KEY": "your-api-key-here" } } } }
Add to~/.codex/config.tomlfor a user-wide setup, or.codex/config.tomlin a trusted project:
[mcp_servers.l10n] command = "npx" args = ["-y", "ai-l10n-mcp"] [mcp_servers.l10n.env] L10N_API_KEY = "your-api-key-here"
codex mcp add l10n --env L10N_API_KEY=your-api-key-here -- npx -y ai-l10n-mcp
claude mcp add --env L10N_API_KEY=your-api-key-here --transport stdio l10n -- npx -y ai-l10n-mcp
For a shared project setup, Claude Code can also store MCP servers in a.mcp.jsonfile at your project root.
Both tools detect language codes in language-code folders (locales/en/common.json, reported asfolder-based) and in file names (file-based) — whether the name is the code itself (locales/en.json) or holds it alongside other parts (app_en.arb,locales/emails.en.json,locales/en-US.common.json,messages_en_US.properties). For naming conventions that are not recognized, passlanguageCodeRegex, a regex containing a(?<language>...)group, e.g.^emails\.(?<language>[\w-]+)\.json$. The text around the group is reused for target files, soemails.en.jsonproducesemails.ru-RU.json.
Guides through checking and configuring linguistic instructions and glossaries for optimal translation quality. Invoke it at the start of a new project or when reviewing l10n.dev settings.
- sourceLanguage— source language code (default:en)
- targetLanguages— comma-separated target language codes (e.g.es,fr,de)
Scans the project for i18n source files (usingl10n_detect_project_structure), checks linguistic instructions, glossary, and balance, then interactively sets up fully automated translation via GitHub Actions or npm scripts.
For GitHub Actions, guides through four trigger options:
- A)On every push tomain— translate and commit back directly
- B)On pull requests — translate and open a PR for review
- C)On a schedule — translate nightly or on a cron
- D)Manual trigger only —workflow_dispatch
Writesai-l10n.config.jsonand.github/workflows/translate.yml(or updatespackage.jsonscripts), then tells you where to add the API key and what happens on the next trigger.
- sourceLanguage— source language code (default:en)
- targetLanguages— comma-separated target language codes (e.g.es,fr,de)
User:"Translate my app to Spanish and French"
- Calll10n_list_instructions— finds no instruction fores/frlanguage pairs
- Ask:"No instruction found for Spanish/French — would you like to set a tone/style rule before translating? (e.g. formal, casual, keep brand terms untranslated)"
- User says:"Tone should be informal, it's for a food app in Latin America"
- Calll10n_create_instructionwith the style rule
- Calll10n_list_glossaries— finds no active glossary fores/fr
- Ask:"No glossary found for Spanish/French — enable glossary generation for this run? It saves key terms for consistent future translations."
- User says:"Yes"
- Detect thates.jsonandfr.jsonalready exist — ask:"Target files already exist — enable incremental mode to skip unchanged strings and save quota?"
- User says:"Yes"
- Calll10n_translate_filewithsourceFile,targetLanguages: ["es", "fr"],instruction,generateGlossary: true,translateOnlyNewStrings: true
- Report results
For JSON-based formats, enabletranslateOnlyNewStrings: trueto skip strings that are already translated. A hash of each source string (not content itself) is stored on the l10n.dev server for change detection — only added or changed strings are translating, saving your character quota.
Note:First translation it translates only added strings, because hash table is empty to detect changed strings.
For CI/CD automation and command-line usage, see:
- ai-l10n CLI— translate files from the terminal or CI pipelines
- GitHub Action— auto-translate on push, PR, or manual trigger
- Free tier— 10,000 characters free every month, no credit card required.
- Pay-as-you-go— Affordable character-based pricing with no subscription required.
- Current packages— Visitl10n.dev/#pricingfor up-to-date pricing.
- No data retention— Source text and translations are not stored on l10n.dev servers beyond the time needed to process the request.
- Encrypted communication— All API calls use HTTPS.
- Privacy first— Built by developers for developers, with privacy, reliability, and quality as core priorities.
This is a web browser that enables your coding agent, such as Claude Code, to visit websites on your behalf and assist you in identifying bugs or creating UI test cases.
Create crafted UI components inspired by the best 21st.dev design engineers.
Bring agent evaluations, observability, and synthetic test set generation directly into your IDE for free with Galileo's new MCP server
An MCP server to help AI assistants to answer questions and generate AccelByte Extend SDK code more effectively .
MCP server for AI Diagram Maker — generate beautiful software engineering diagrams directly inside Cursor, Claude Desktop, Claude Code, or any MCP-compatible AI agent
ALAPI MCP Tools,Call hundreds of API interfaces via MCP
AI-powered SVG animation generator that transforms static files into animated SVG components using the Allyson platform
MCP server that gives AI assistants on-demand access to 1,500+ amCharts docs, ~300 code examples, and 1000+ class API references.
APIMatic MCP Server is used to validate OpenAPI specifications using APIMatic. The server processes OpenAPI files and returns validation summaries by leveraging APIMatic’s API.
One shared context layer for AI agents and humans — live API specs, DB schemas, and versioned contracts across repos so every agent and teammate works from the same source of truth.
Build and deploy full-stack Next.js apps with 98 tools for React, AWS, and MongoDB
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.




