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 18 tools to read and write keys, translate, 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

    The agent writes the feature's new source strings to the branch in one batched call with upsert_labels – new keys are created, existing ones updated, and the base branch never sees a half-finished change.

    upsert_labelsupsert_label
  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, and it writes the translations back with upsert_labels. 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_translationsauto_translatetranslation_job_status
  4. Step 4

    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
  5. Step 5

    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.

    merge_branchdelete_branch
Safe to hand an agent

A create-own token can propose branches – but only its own. It can never read, merge, or delete a branch it did not create, so a leaked token can never roam beyond its base branch and the branches it made. The merge gate is role-bound: merging and deleting require the developer role or higher.

Setup

The server ships as @translatize/mcp with the binary translatize-mcp. Point your client at npx -y @translatize/mcp and pass a token – no global install needed.

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.

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

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. It can never touch branches 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

Eighteen tools in four 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. The same operations are available over REST – see the Integration API reference.

Project & labels

ToolArgumentsWhat it does
get_project_infoProject id/name, configured languages, base branch, token role, branch scope, writable branches, total key count, and per-language completeness %. Call this first.
list_labelsnamespace?, status?, include_values?, branch?Keys with their status and tags (values too when include_values is true). Values are capped at 300 with a note.
get_labelskeys[], branch?The full record (all values, status, tags) for each named key, plus a not_found list.
search_labelsquery, in?, branch?Case-insensitive substring search over keys, values, or both; returns matches with values, capped at 100.
upsert_labelkey, values?, status?, tags?, branch?Creates or updates one label; reports whether it was created or updated.
upsert_labelslabels[], branch?Batch create/update (chunked automatically); returns { updated, created, failed }.

Branches

create_branch, merge_branch and delete_branch require a create-own scoped token – create_branch on a fixed token fails with branch_scope_fixed. list_branches, compare_with_base and get_merge_conflicts work with any token.

ToolArgumentsWhat it does
list_branchesEvery 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 / deleted keys of the branch vs the base, each with per-language values, plus a summary.
get_merge_conflictsbranchFlat per-key/per-language conflicts vs the base; an empty list means it is safe to merge with the default strategy.
merge_branchbranch, strategy?, conflicts?Merges a branch you created into the base (overwrite, keep-newer, manual, replace). Does not delete the branch.
delete_branchbranchDeletes a branch this token created – cleanup after a merge.

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: { key, source, missing[] }. Translate these yourself on any plan, then upsert_labels.
auto_translatebranch?, target_languages?, label_keys?, overwrite_translated?Starts a platform-AI background job (Professional/Agency, metered against the AI quota), or a no-op when nothing needs work.
translation_job_statusThe current/most-recent AI job (status, progress, queue position) plus the AI quota { used, limit, remaining }.

Review

ToolArgumentsWhat it does
set_labels_statuskeys[], status, branch?Bulk-set the workflow status (draft / review / approved / rejected) of many keys without touching their values.
review_changesbranch?A capped (100-key) review packet – added/changed keys with values – plus a platformUrl to open in the web app. Then ask the user.
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) and the 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.