KAERIS i18n (kaeris-mcp)

Localização por IA direto do seu editor — traduza os arquivos de strings de um app para 46 idiomas com saída segura para placeholders e reproduzível.

Documentação

KAERIS

KAERIS i18n — MCP Server

Localização nativa por IA sobre o Model Context Protocol. Dê ao Claude Desktop, Cursor, Claude Code (ou qualquer cliente MCP) a capacidade de traduzir as strings do seu aplicativo para 46 idiomas — segura para placeholders, ciente de formatos, incremental, com QA de tradução integrado.

Ferramentas

FerramentaO que fazChama a API?
kaeris_scan_repoDescobre a configuração de i18n de um repositório: arquivos de locale encontrados, idioma base, idiomas-alvo, suposição de framework (i18next/next-intl/vue-i18n/Flutter/Android/iOS/gettext/generic)Não
kaeris_statusIntegridade/saúde por locale-alvo — chaves ausentes, chaves extras, incompatibilidades de placeholders, além dos detectores de qualidade que bloqueiam um merge no CI: desvios numéricos, tags inline perdidas, entidades/escapes quebrados, lacunas de plural do ICU/CLDR (mesmo veredito que o kaeris check --json)Não
kaeris_list_missing_keysAs chaves ausentes/quebradas exatas (com texto-fonte) para um locale-alvo, para que um agente saiba exatamente o que corrigirNão
kaeris_list_languagesLista todos os idiomas-alvo suportadosNão
kaeris_translateTraduz strings inline → resultados por idioma, com QA (sinalizações de perda de placeholder e estouro de UI; o verify=True faz retro-tradução para verificar o significado)Sim
kaeris_translate_fileTraduz um arquivo em disco (JSON/YAML/.strings/.po/ARB/XML/CSV/XLIFF/.properties/.resx/.ftl), incremental opcional — reproduzível via kaeris.lockSim
kaeris_add_languageInicializa um locale-alvo totalmente novo ao traduzir o arquivo-fonte inteiro para eleSim

As quatro primeiras ferramentas são apenas locais (sem chamada de rede, sem custo) — um agente pode usá-las livremente para auditar e entender o i18n de um repositório antes de decidir o que (se é que algo) traduzir.

Reproduzível por design

O kaeris_translate_file com o incremental=True mantém um kaeris.lock ao lado do seu arquivo-fonte — o mesmo lock que o CLI grava, para que um agente e um humano compartilhando um repositório permaneçam sincronizados. Ele registra um hash de cada string-fonte mais as configurações que a produziram: tom, glossário, contexto do aplicativo e o modelo. Isso significa:

  • Edite uma string — apenas essa string é retraduzida; todo o resto permanece byte por byte.
  • Mude tom, glossário ou contexto — o locale inteiro é retraduzido, nunca uma mistura de antigo e novo.
  • Mude de plano — todos os níveis executam o mesmo modelo (Gemini 2.5 Flash-Lite), então um upgrade não força retradução. O lock registra o modelo de qualquer forma: no dia em que o mudarmos, o locale é reconstruído por completo, em vez de silenciosamente acabar sendo o trabalho de dois modelos.

Faça commit do kaeris.lock junto com seu arquivo-fonte para que o agente, seus colegas de equipe e o CI todos concordem sobre o que já foi feito.

Instalação

pip install kaeris-mcp

Ou execute com Docker

docker build -t kaeris-mcp .
docker run -i --rm -v "$PWD:/work" -w /work kaeris-mcp

O servidor fala JSON-RPC via stdin/stdout, então não há porta para expor — o -i é o que mantém a conversa aberta. Monte seu projeto em /work e as ferramentas cientes do repositório (scan_repo, status, list_missing_keys) o leem diretamente; passe o -e KAERIS_API_KEY=… para os níveis pagos.

Configure seu cliente

Claude Desktop — adicione ao claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\):

{
  "mcpServers": {
    "kaeris-i18n": {
      "command": "kaeris-mcp",
      "env": {
        "KAERIS_API_KEY": "kaerisp_optional_for_pro_team"
      }
    }
  }
}

Cursor — Settings → MCP → Add, ou .cursor/mcp.json:

{ "mcpServers": { "kaeris-i18n": { "command": "kaeris-mcp" } } }

Claude Code — um comando:

claude mcp add kaeris-i18n kaeris-mcp

Reinicie o cliente; as ferramentas KAERIS aparecem automaticamente.

Autenticação e níveis (todos opcionais)

Variável de ambienteFinalidade
KAERIS_API_KEYChave Pro/Scale — limites maiores (caso contrário, o nível gratuito de 10k caracteres é usado)
KAERIS_OPENROUTER_KEYChave OpenRouter para Lifetime/BYOK — sem limite mensal de volume
KAERIS_API_URLSubstitui a URL base da API

Nenhuma chave é necessária para experimentar — o nível anônimo gratuito funciona de imediato.

Exemplos de prompts

  • "Traduza as strings em locales/en.json para alemão, ucraniano e japonês."
  • "Adicione traduções em francês e espanhol para estes botões: Salvar, Cancelar, Excluir."
  • "Traduza apenas as novas chaves que adicionei ao en.json — não refaça o arquivo inteiro."
  • "Verifique o i18n deste repositório e me diga o que está ausente ou quebrado." (escaneia e depois reporta o status — sem chamada de API)
  • "Ainda não temos ucraniano — adicione." (inicializa um novo locale via tradução)

Licença

MIT