Let AI agents manage your translations

The Translatize MCP server gives AI agents – Claude Code, Cursor, Claude Desktop, and any other Model Context Protocol client – direct, branch-scoped access to your translations. It runs over stdio and exposes 28 tools and 2 workflow prompts to read and write keys with context, translate, run QA checks, publish over-the-air releases and manage git-like branches.

The agent workflow

With a create-own token, an agent can take a translation change from start to finish inside the conversation – and never touch main without your say-so.

  1. Step 1

    Ship a feature – on its own branch

    You build a feature with your AI agent. Before touching a single string, the agent forks a translation branch off the base with create_branch. Your main branch stays untouched the whole time.

    create_branch
  2. Step 2

    Add the new keys with context

    The agent writes the feature's new source strings to the branch in one batched call with upsert_labels, each with its context: what the UI element is, a character limit when the layout has one, the path:line it came from, and doNotTranslate for product names and codes. The base branch never sees a half-finished change.

    upsert_labelsset_label_context
  3. Step 3

    Translate the missing values

    On any plan, the agent translates them itself: get_missing_translations returns each key with an empty target value, get_glossary and find_translation_memory keep the wording consistent with what the project already uses, and upsert_labels writes the result back. On a Professional or Agency plan it can instead hand the work to Translatize's platform AI with auto_translate and watch the job with translation_job_status.

    get_missing_translationsfind_translation_memoryauto_translatetranslation_job_status
  4. Step 4

    Run QA until it is clean

    The agent calls run_qa, fixes every error it reports (a rewritten value or repaired placeholders), runs it again, and finishes with check_merge_gate to see whether the merge would be refused.

    run_qaget_qa_issuescheck_merge_gate
  5. Step 5

    Mark for review – and ask you

    The agent marks the touched keys with set_labels_status, then calls review_changes for a diff and a platformUrl. It stops and asks: “review here in the chat, or on Translatize?” – and waits for your approval before going any further.

    set_labels_statusreview_changes
  6. Step 6

    You approve – it merges and cleans up

    Once you approve, the agent folds the branch into the base with merge_branch (checking get_merge_conflicts first when needed), then removes the working branch with delete_branch. The change lands on main only after your sign-off – and merging into main needs an admin-role token, otherwise you merge in the app.

    merge_branchdelete_branch
What an agent token can reach

A create-own token works on its base branch and the branches it created, nothing else. It merges and deletes only its own branches, so a leaked token can't reach the rest of the project. Merging and deleting need the developer role or higher, merging into main needs an admin token, and a token can never override a blocking QA merge gate.

Setup

The server ships on npm as @translatize/mcp (version 0.2.0) with the binary translatize-mcp, and is listed in the MCP Registry as com.translatize/mcp. Point your client at npx -y @translatize/mcp and pass a token – no global install needed. It needs Node.js 18.17 or newer.

Claude Code

Register the server once; Claude Code launches it on demand with npx. Drop the -e flag if TRANSLATIZE_API_TOKEN is already exported in your shell. For the server plus ready-made skills, install the Claude Code plugin instead.

bash
claude mcp add translatize -e TRANSLATIZE_API_TOKEN=mcni_xxx -- npx -y @translatize/mcp

Cursor

Add the server to .cursor/mcp.json in your project (or the global ~/.cursor/mcp.json):

.cursor/mcp.json
{
  "mcpServers": {
    "translatize": {
      "command": "npx",
      "args": ["-y", "@translatize/mcp"],
      "env": {
        "TRANSLATIZE_API_TOKEN": "mcni_xxx"
      }
    }
  }
}

Any MCP client (Claude Desktop, etc.)

The same mcpServers block works for any client that speaks MCP over stdio – for Claude Desktop, put it in claude_desktop_config.json. For a pinned install, run npm i -g @translatize/mcp and set "command": "translatize-mcp" with "args": [].

claude_desktop_config.json
{
  "mcpServers": {
    "translatize": {
      "command": "npx",
      "args": ["-y", "@translatize/mcp"],
      "env": {
        "TRANSLATIZE_API_TOKEN": "mcni_xxx",
        "TRANSLATIZE_API_URL": "https://api.translatize.com/v1"
      }
    }
  }
}

Claude Code plugin

The Translatize plugin for Claude Code bundles the MCP server with two skills, so Claude knows when to use the tools without being told. The plugin reads your token from TRANSLATIZE_API_TOKEN in the environment Claude Code runs in, so the token never lives in the plugin. Its directory, claude-plugin, is in the public Translatize/integrations repository. Clone it, export the token and start Claude Code with the plugin:

bash
git clone https://github.com/Translatize/integrations.git
export TRANSLATIZE_API_TOKEN=mcni_xxx
claude --plugin-dir ./integrations/claude-plugin

Run /mcp in the session to check that the translatize server is connected. Then ask something like “Localize the checkout page into Latvian and German”.

SkillWhen Claude uses itWhat it does
localize-repoYou ask to localize or internationalize an app, add languages, or extract hardcoded strings.Ten steps: detect the i18n library, find hardcoded strings, propose dotted keys, create a branch, upsert the source labels with context, replace the strings in code, translate, run QA and fix errors, check the merge gate, then summarise. It never merges into main without your approval.
translatize-stringsAny time Claude adds or changes user-visible text.The day-to-day rules: no hardcoded UI strings, keys created through the MCP server with a description (and a character limit when the UI has one), dotted key names, work on a branch, QA before merge.

Other coding agents can follow the same rules from your repository. This CLI command writes them into a marked section of AGENTS.md (and CLAUDE.md, when it exists):

bash
npx @translatize/cli init --agents

How it works

Every token is bound to one project and one base branch, and carries a branch scope. Call get_project_info (or list_branches) to see the base branch, the scope, and which branches the token may write to.

Branch scope

fixed (the default) – the token can only read and write its one base branch. create-own – the token may additionally create branches (always forked from the base), read/write/export the branches it created, and compare, merge, and delete those back into the base. Apart from its base branch, it can never touch a branch it did not create. The label and translation tools take an optional branch argument naming any branch in that allowed set; omit it to act on the base branch, and naming a branch outside the set fails with branch_not_allowed.

Environment variables

VariableRequiredDescription
TRANSLATIZE_API_TOKENyesThe mcni_... integration token. The server exits immediately if it is missing.
TRANSLATIZE_API_URLnoAPI base URL including the /v1 segment. Defaults to https://api.translatize.com/v1.
TRANSLATIZE_APP_URLnoWeb-app base used to build the platformUrl review link returned by review_changes. Defaults to https://app.translatize.com.

Tool catalog

Twenty-eight tools in seven groups. Every label and translation tool accepts an optional branch argument (default: the token's base branch). When a call fails, the tool returns the API error code and a short remedy, so the agent can react without the session breaking. merge_branch, delete_branch and publish_release are marked as destructive, so clients that confirm risky calls will ask you first. The same operations are available over REST – see the Integration API reference.

Project & labels

ToolArgumentsWhat it does
get_project_info–Project name and id, its languages and source language, the token's base branch, role and branch scope, the branches it may write to, the key count and completeness per language. Call this first.
list_labelsnamespace?, status?, include_values?, branch?Keys with their status and tags, filtered by a dotted namespace prefix or status. With include_values, the values too – the first 300, with a note when there are more.
get_labelskeys[], branch?The full record (all values, status, tags) of each named key, plus a not_found list.
search_labelsquery, in?, branch?Case-insensitive substring search over keys, values or both (the default); up to 100 matches with their values.
upsert_labelkey, values?, status?, tags?, context?, branch?Creates or updates one label and says which. context is { description?, charLimit?, location?, doNotTranslate? }; tags and context need the developer role.
upsert_labelslabels[], branch?Batch create or update, split into API-sized chunks automatically; each item may carry tags and context. Returns { updated, created, failed }.
set_label_contextlabels[] ({ key, description?, charLimit?, location?, doNotTranslate?, tags? }), branch?Sets context and tags on existing keys without touching their values (developer role). A missing key fails with label_not_found.

Glossary & translation memory

Both are project-wide, so neither tool takes a branch. See Translation memory.

ToolArgumentsWhat it does
get_glossary–Project and workspace glossary terms: the required translation per language, case sensitivity and prohibited terms.
find_translation_memorytexts[], target_lang, source_lang?, threshold?Up to 3 earlier approved or human-edited translations per text, with match score and quality, placeholders mapped to your text. Up to 500 texts; source_lang defaults to the project's source language.

Translation

ToolArgumentsWhat it does
translation_statusbranch?Per language: total keys, translated, missing, and up to 50 example missing keys.
get_missing_translationsbranch?, languages?, limit?Keys with an empty target value as { key, source, missing[] }, 200 rows by default. Translate these yourself on any plan, then upsert_labels.
auto_translatebranch?, target_languages?, label_keys?, overwrite_translated?Starts a platform-AI job from the project's source language (Professional and Agency, metered against the AI allowance), or reports that nothing needs work. See AI translation.
translation_job_status–The current or most recent AI job (status, progress, its place in line while queued) plus the AI allowance { used, limit, remaining }.

Quality

The checks and the merge gate are explained in Quality checks.

ToolArgumentsWhat it does
run_qabranch?, keys?Runs the 10 rule checks now (placeholders, HTML tags, ICU syntax and plural categories, glossary, length, numbers, punctuation, untranslated, whitespace): counts per severity, the issues and what to do next. Changes no translation.
get_qa_issuesbranch?, severity?, key?, lang?, source?, cursor?, limit?One page of stored issues with counts; source "ai" lists AI review findings.
check_merge_gatebranch, strategy?Previews the merge gate for that branch and strategy: mode, whether it applies, blocked, errors and warnings with the issues, plus a verdict.
start_ai_reviewbranch?, keys?, langs?Queues a platform AI review (Professional and Agency, own monthly allowance, developer role). Findings never block a merge.
ai_review_status–The latest AI review job: status, branch, progress counts and characters billed.

Branches

create_branch needs a create-own token (a fixed one fails with branch_scope_fixed), and merge_branch and delete_branch work only on branches the token created. list_branches, compare_with_base and get_merge_conflicts work with any token.

ToolArgumentsWhat it does
list_branches–Every branch with writable and createdByThisToken flags, plus baseBranch and branchScope.
create_branchname, description?Forks a new branch from the base. Needs the developer role. Name: ^[a-zA-Z0-9_-]+$, 1–100 chars, not "main".
compare_with_basebranchChanged, added and deleted keys of the branch against the base, each with per-language values, plus a summary.
get_merge_conflictsbranchFlat per-key, per-language conflicts against the base; an empty list means it is safe to merge with the default strategy.
merge_branchbranch, strategy?, conflicts?Merges a branch the token created into the base with overwrite (default), keep-newer, manual, branch-changes or replace (destructive), and keeps the branch. Into main it needs an admin-role token (admin_token_required_for_main), and a blocking QA gate refuses it (qa_gate_blocked) – a token can never override the gate. The strategies are described in the Integration API reference.
delete_branchbranchDeletes a branch this token created – cleanup after a merge.

Review

ToolArgumentsWhat it does
set_labels_statuskeys[], status, branch?Sets the workflow status (draft, review, approved or rejected) of many keys without touching their values.
review_changesbranch?A review packet – up to 100 added or changed keys with new and previous values, plus the deleted keys – and a platformUrl to open in the web app. Then the agent asks you.

Delivery (OTA)

Over-the-air delivery is an add-on, and anything you publish is public. See Delivery (CDN).

ToolArgumentsWhat it does
list_distributions–Distributions on branches this token may use: branch, format, all or approved-only, status, latest version and manifest URL.
publish_releasedistribution_id, confirmPublishes the distribution's branch to the CDN (developer role). Does nothing unless confirm is true; the agent calls it only when you asked to publish.

Workflow prompts

Two prompts package the whole workflow. In Claude Code they appear as /mcp__translatize__localize_repo and /mcp__translatize__prepare_branch_for_merge.

PromptArgumentsWhat it does
localize_repotarget_languages, path?The full localization workflow, the same ten steps as the localize-repo skill: detect the i18n library, find hardcoded strings, propose dotted keys, branch, upsert source labels with context, replace the strings in code, translate, run QA and fix errors, check the merge gate, then summarise – never merging into main without approval.
prepare_branch_for_mergebranchRuns QA on the branch, fixes the errors, reports the merge gate and the changes – without merging.
Minting a token for an agent
Create the token under Project Settings → Integrations in the app. For the full branch workflow above, give it the developer role (or higher; merging into main needs admin) and the agent-workflow (create-own) branch scope – that is what lets it create, review, and merge its own branches. A fixed-scope token skips the branching steps and works directly on its one bound branch.