MCP server

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.

$claude mcp add localize -- npx -y localize-dev mcp
~/acme/storefrontlocalize connected

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"])

- <button>Place order</button>
+ <button>{t('checkout.place_order')}</button>
  • 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.

- <h2>Order summary</h2>
+ <h2>{t('checkout.order_summary')}</h2>
locales/es.jsonlocales/fr.jsonlocales/de.json

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?"

agent

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.

First, once per machine:npx localize-dev login

Claude 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.

  1. 1Run claude mcp add in your repository.
  2. 2Restart the agent, or reload its MCP servers, so it starts localize.
  3. 3Open your repository and ask it something like the prompt below.

Try asking

“Localize src/components/Checkout.tsx into Spanish and French.”

→ localize.localize

terminal
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 mcp

Cursor

Cursor reads MCP servers from .cursor/mcp.json in the project, or ~/.cursor/mcp.json for every project.

  1. 1Add localize to .cursor/mcp.json.
  2. 2Restart the agent, or reload its MCP servers, so it starts localize.
  3. 3Open your repository and ask it something like the prompt below.

Try asking

“Add Japanese to this app.”

→ localize.add_language

.cursor/mcp.json
{
  "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.

  1. 1Add the [mcp_servers.localize] table to ~/.codex/config.toml.
  2. 2Restart the agent, or reload its MCP servers, so it starts localize.
  3. 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

~/.codex/config.toml
[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.

  1. 1Add localize to .vscode/mcp.json in your workspace.
  2. 2Restart the agent, or reload its MCP servers, so it starts localize.
  3. 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

.vscode/mcp.json
{
  "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.

  1. 1Add localize to ~/.config/devin/mcp_config.json (%APPDATA%\devin\mcp_config.json on Windows).
  2. 2Restart the agent, or reload its MCP servers, so it starts localize.
  3. 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

~/.config/devin/mcp_config.json
{
  "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.

  1. 1Add localize to the mcpServers in settings.json.
  2. 2Restart the agent, or reload its MCP servers, so it starts localize.
  3. 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

~/.gemini/settings.json
{
  "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.