Localize from inside your coding agent.
localize-dev mcp gives your coding agent the same tools as the CLI. Ask for a page in Spanish, and it finds the hardcoded copy, extracts it into keys and translates it, following your glossary.
Ship the checkout page in Spanish, French and German.
localize.check(only: "strings")
2 hardcoded strings in components/Checkout.tsx.
- components/Checkout.tsx:18 "Place order"
- components/Checkout.tsx:24 "Discount code"
localize.localize(paths: ["components/Checkout.tsx"])
- es Realizar pedido
- fr Passer la commande
- de Bestellung aufgeben
2 keys written, 3 languages filled in. The diff is in your working tree to review.
Works with any agent that runs MCP servers over stdio
Tools
Five tools, the ones the CLI already has.
The agent picks the tool; each answers with structured results (files, lines, keys) it can act on.
localize
Extracts hardcoded strings into translation keys, rewrites the code to your i18n library and translates the new messages into every language. For some files only, or as a dry run first.
check
Finds UI copy still hardcoded in the code, and translations missing or out of date, each with its file and line. Changes nothing.
- hardcoded Checkout.tsx:18
- missing fr · cart.empty
- outdated de · cart.total
translate
Fills in missing translations, and redoes ones whose source text changed, in your existing locale files.
- JSON
- YAML
- .po
- .arb
- strings.xml
- .xcstrings
add_language
Translates every message into a new language, then adds it to localize.config.json. Without a key, nothing is changed.
"targetLocales": ["es", "fr", "ja"]
config
Your languages, locale files and i18n library, and the project's glossary, so copy the agent writes by hand follows it too.
- Keep: Acme
- checkout → es: pago
No key neededcheck and config work without an API key.
A session
Ask in plain words. Review the diff.
The agent decides when to call each tool. You see every call, and the result lands in your working tree.
01 / 04
You ask
"Ship the checkout page in Spanish", "Add Japanese", or "Is anything left untranslated?"
Ship the checkout page in Spanish, French and German.
I'll check the checkout page for hardcoded copy first.
localize.check(only: "strings")
Setup
Set it up in your agent.
The server runs on your machine from the npm package; nothing to host. Pick your agent below.
npx localize-dev loginClaude Code
Anthropic's coding agent in the terminal. Add the server from the repository you work in; with --scope project it's saved in .mcp.json for everyone on the team.
- 1Run claude mcp add in your repository.
- 2Restart the agent, or reload its MCP servers, so it starts localize.
- 3Open your repository and ask it something like the prompt below.
Try asking
“Localize src/components/Checkout.tsx into Spanish and French.”
→ localize.localize
claude mcp add localize -- npx -y localize-dev mcp
# Share it with your team through .mcp.json
claude mcp add --scope project localize -- npx -y localize-dev mcpCursor
Cursor reads MCP servers from .cursor/mcp.json in the project, or ~/.cursor/mcp.json for every project.
- 1Add localize to .cursor/mcp.json.
- 2Restart the agent, or reload its MCP servers, so it starts localize.
- 3Open your repository and ask it something like the prompt below.
Try asking
“Add Japanese to this app.”
→ localize.add_language
{
"mcpServers": {
"localize": {
"command": "npx",
"args": ["-y", "localize-dev", "mcp"]
}
}
}Codex
OpenAI's Codex reads MCP servers from its config file, shared by the CLI and the IDE extension.
- 1Add the [mcp_servers.localize] table to ~/.codex/config.toml.
- 2Restart the agent, or reload its MCP servers, so it starts localize.
- 3Open your repository and ask it something like the prompt below.
Try asking
“Before I open the PR, check for hardcoded copy and missing translations.”
→ localize.check
[mcp_servers.localize]
command = "npx"
args = ["-y", "localize-dev", "mcp"]GitHub Copilot in VS Code
Copilot's agent mode in VS Code reads MCP servers from .vscode/mcp.json in the workspace.
- 1Add localize to .vscode/mcp.json in your workspace.
- 2Restart the agent, or reload its MCP servers, so it starts localize.
- 3Open your repository and ask it something like the prompt below.
Try asking
“Translate the new keys in locales/en.json into every language.”
→ localize.translate
{
"servers": {
"localize": {
"type": "stdio",
"command": "npx",
"args": ["-y", "localize-dev", "mcp"]
}
}
}Devin
Devin, formerly Windsurf, reads MCP servers from ~/.config/devin/mcp_config.json, or .devin/mcp_config.json in the project. The Devin CLI adds one with devin mcp add.
- 1Add localize to ~/.config/devin/mcp_config.json (%APPDATA%\devin\mcp_config.json on Windows).
- 2Restart the agent, or reload its MCP servers, so it starts localize.
- 3Open your repository and ask it something like the prompt below.
Try asking
“Do a dry run of localizing the settings page, then apply it.”
→ localize.localize
{
"mcpServers": {
"localize": {
"command": "npx",
"args": ["-y", "localize-dev", "mcp"]
}
}
}Gemini CLI
Google's Gemini CLI reads MCP servers from ~/.gemini/settings.json, or .gemini/settings.json in the project.
- 1Add localize to the mcpServers in settings.json.
- 2Restart the agent, or reload its MCP servers, so it starts localize.
- 3Open your repository and ask it something like the prompt below.
Try asking
“Which languages does this app ship, and what's in its glossary?”
→ localize.config
{
"mcpServers": {
"localize": {
"command": "npx",
"args": ["-y", "localize-dev", "mcp"]
}
}
}Security and privacy
Your code stays on your machine.
The server is the CLI, running locally. Only what needs translating goes to the API.
Runs locally
The server runs on your machine over stdio, started by your agent. There's nothing to host and no port to open.
Strings, not source
Only the extracted strings go to the API, with their file path and component as context. Whole files are never sent.
Stays in its folder
Every tool works inside the folder the server was started in. An app argument picks one app in a monorepo, never a path outside it.
Nothing committed
Changes land in your working tree. The server never commits or pushes, and tool calls run one at a time.
FAQ
Questions about the MCP server
Which agents does it work with?+
Any MCP client that starts servers over stdio: Claude Code, Cursor, Codex, GitHub Copilot in VS Code, Devin (formerly Windsurf), Gemini CLI and others. The setup is the same command: npx -y localize-dev mcp.
Do I need an API key?+
For check and config, no. localize, translate and add_language translate through localize.dev, so they need the key from npx localize-dev login (or LOCALIZE_API_KEY). Translations count toward your plan like any other run.
Do I still need the GitHub Action?+
No, they work on their own. The MCP server localizes while you build; the Action keeps every push localized and opens a pull request. They read the same localize.config.json and glossary.
Will it commit or push my code?+
The server doesn't: it writes files in your working tree and returns what it changed. What your agent does next is up to you and the agent's own permissions.
Does it work in a monorepo?+
Yes. Every tool takes an app argument, such as apps/web, and works there with that app's config and locale files.
Get an API key and add the server.
The free plan covers small apps, and check works without a key.