Free for one app

Localization your AI agents can run

Push any translation file. Claude translates it with your glossary and rules, identical strings are shared across every app, and your agents review, audit and fix it over MCP, CLI and API.

A replacement for Crowdin by Meter. See how they compare.

claude · glossa mcp
Work through the Glossa review queue. Split merges whose context differs.
claim_tasks({ "kind": "merge_review", "limit": 10 })
10 tasks · "Open" used by 3 keys: menu.file.open, door.status.open, store.hours.open
menu.file.open is a verb; the other two are adjectives. Splitting it out.
resolve_task({ "task": "8c1e…", "action": "split", "key_ids": ["menu.file.open"], "note": "verb vs adjective" })
Split into a new unit; queued translation for 9 locales.
run_audit({ "locale": "es", "question": "Are we consistent about tú vs usted?" })
Audit queued. Findings arrive as audit_finding and rule_suggestion tasks.
An agent claiming review tasks, splitting a merged string and starting an audit through the MCP server.

The problem

Translation management was designed before agents could do the work

Crowdin and tools like it are good at coordinating human translators. Most teams shipping apps today want something else: machine translation they can trust, and a workflow their agents can run end to end.

Built for a translator in an editor
Traditional TMS tools center on a human working string by string. Machine translation is a pre-fill step, and the rest of the workflow assumes someone clicks through it.
The same string, translated five times
"Sign in" in your iOS app, Android app and web app are three strings in three projects. Fix one and the other two stay wrong.
Half the product is not in the API
Agents and scripts can upload and download files, but reviewing, approving and fixing quality problems happens in a web UI.
Quality does not compound
A reviewer fixes a mistranslation and the same mistake comes back in next week's strings, because the fix never reached the next prompt.

How it works

From source file to every language in four ops

  1. 1push_file

    Push any file

    Send the source file from your repo, CI or agent. The format is detected; strings are matched against every other app in the workspace.

  2. 2translate

    Claude translates

    New strings are translated into every target locale with their context, your glossary and your rules. Placeholders are checked on every string.

  3. 3claim_tasks

    Agents review

    Low-confidence translations, ambiguous merges and audit findings land in a queue an agent can work through in minutes.

  4. 4pull_file

    Pull every locale

    Get each language back in the file's own format and path layout, with comments kept where the format has them.

Push from your repo
npx @meterapp/glossa push locales/en.json --project web
Pull every locale
npx @meterapp/glossa pull --project web --locale es,fr,de

Formats

Every format your apps already use

12 formats are built in. Push one it has never seen and the AI writes a template for it from your file, which you approve once and reuse forever.

Review queue

A review queue an agent can rip through

Every decision that needs judgment becomes a small task with everything needed to decide it and a short list of actions. Agents claim a batch, decide, and resolve. Each resolution runs through the same ops a person would use.

  • merge_reviewKeys in different apps share text. Same meaning, or split?
  • translation_reviewThe model was unsure, or a placeholder did not survive.
  • audit_findingAn audit found a problem and proposes a fix.
  • rule_suggestionAn audit proposes a rule for every future translation.
  • glossary_suggestionA term that should be fixed or never translated.
  • learn_formatThe AI wrote a template for a new file format.
The same queue over REST
curl -X POST https://glossa-meterapp.vercel.app/api/v1/claim_tasks \  -H "Authorization: Bearer gls_…" \  -d '{"kind":"translation_review","limit":20}'
curl -X POST https://glossa-meterapp.vercel.app/api/v1/resolve_task \  -H "Authorization: Bearer gls_…" \  -d '{"task":"…","action":"edit","text":"Iniciar sesión","note":"Use the infinitive for buttons"}'

Deduplication

Fix once, fixed everywhere

Every key points at a unit: one source string with one translation per language, shared by every key in every file and app that uses the same text. When context says the same words mean different things, the key gets its own unit.

ios/en.lproj/Localizable.strings"auth.signin" = "Sign in";android/res/values/strings.xml<string name="sign_in">Sign in</string>web/locales/en.json"header.signIn": "Sign in"
1 unit · "Sign in"3 keys
esIniciar sesióndeAnmeldenjaサインイン

One translation per language, reviewed once. split_key separates a key whose context differs; merge_units joins near-duplicates.

Audits and rules

Translations that get better over time

Ask a question about a language and get an answer, a score and a list of fixes. What keeps going wrong becomes a rule or a glossary term, so the next batch does not repeat it.

  1. 01 · run_auditAsk"How is our Spanish? Are we consistent about tú and usted?"
  2. 02 · audit_findingFindThe audit scores the locale and files each problem with a proposed fix.
  3. 03 · resolve_taskFixAn agent or a person applies, edits or dismisses each finding.
  4. 04 · add_ruleLearnRecurring problems become glossary terms and rules that every future translation follows.

Every action is an API

48 ops. Dashboard, REST, MCP and CLI all call the same ones.

Each op has one name, one input schema and one handler. The dashboard has no private endpoints: whatever you can click, an agent can call.

Workspace4

Settings, stats and the activity log.

Projects3

Apps or repos, each with its source and target locales.

Files3

Push translation files in, pull any locale back out.

Formats4

Detect, list and teach file formats.

Review queue3

Claim and resolve review tasks.

Glossary3

Brand names and fixed terms.

Rules3

Standing instructions for every translation.

Audits3

Per-language quality reviews.

Jobs2

Background AI work and its status.

API keys3

Workspace keys for CLI, MCP and CI.

RESTPOST /api/v1/{op}
MCP/api/mcp
CLInpx @meterapp/glossa
Docs/llms.txt · /openapi.json

Integrations

Works where your agents already work

Connect Claude Code, Codex or Cursor to the MCP server, or run the CLI in GitHub Actions on every push.

claude mcp add --transport http glossa https://glossa-meterapp.vercel.app/api/mcp \  --header "Authorization: Bearer gls_…"

Full setup, including OAuth sign-in and the plugin, in the MCP guide.

FAQ

Questions

Push your first file

Glossa is free for one app. Sign in, push a translation file, and pull it back in every language.