Files
claude-plugins/wordpress/skills/mcp-gtranslate/SKILL.md
T
ealmeida e127e85ef8 feat(mcp-gtranslate): adiciona skill do MCP dedicado ao GTranslate
- 9 tools: idiomas activos/ordem, estilo/posicao do widget, idioma de
  origem, estado da licenca Pro/Enterprise (read-only)
- Documenta formato de armazenamento (array PHP nativo, --format=json
  correcto) e o gotcha de escrita idempotente do wp option patch update
- Confirmado ao vivo: so descomplicar.pt tem o plugin instalado
2026-08-19 06:29:47 +01:00

6.9 KiB

name, description, layer
name description layer
mcp-gtranslate MCP dedicado multi-site (node stdio, ligação `gtranslate` em ~/.omp/agent/mcp.json) para gerir o GTranslate (widget de tradução frontend) via WP-CLI/SSH — idiomas activos e ordem (widget principal e flutuante), estilo/posição do widget, idioma de origem, estado da licença Pro/Enterprise (read-only). Site é um parâmetro em cada tool, não uma ligação fixa. Usar quando "gtranslate mcp", "idiomas activos gtranslate", "estilo widget traducao", "widget flutuante gtranslate", "licenca pro gtranslate", "mudar idioma origem site". wiki

/mcp-gtranslate — MCP dedicado multi-site ao GTranslate

Projecto em /media/ealmeida/Dados/Dev/mcp-gtranslate/ (TypeScript, SDK MCP oficial, stdio). Sem código PHP novo no WordPress: cada tool executa wp option get/wp option patch update via ssh server sobre o WP-CLI já instalado. site é um parâmetro em cada tool, não uma ligação fixa — hoje só descomplicar.pt (produção) tem o GTranslate instalado, mas o MCP aceita qualquer alias conhecido ou path absoluto.

Não existe skill de conhecimento separada para o GTranslate — esta skill é a ÚNICA documentação, incluindo o mapeamento de dados (a única option envolvida).

Âmbito

Toda a config do GTranslate Free vive numa única option, GTranslate (confirmado por grep completo a get_option/update_option/add_option em gtranslate.php — sem tabela custom, sem comando WP-CLI próprio registado). Não cobre: activação/desactivação do próprio plugin (emcp-tools activate-plugin/deactivate-plugin já cobre isso genericamente), a config do "URL Translation Addon" (url_addon/config.php, um ficheiro PHP editado directamente pelo plugin quando Pro/Enterprise está activo — fora do âmbito, o site actual é Free), nem activação de licença Pro/Enterprise (handshake client-side contra gtranslate.net, sem endpoint WP-CLI/SSH).

Sites conhecidos

Chamar gtranslate_list_sites para a lista actual com path e nota de estado. Verificado ao vivo 19-08-2026: só descomplicar.pt (produção) tem o GTranslate instalado e activo (v3.1.1, Free — pro_version/enterprise_version ambos vazios). Os outros 7 sites reais do bundle (starter, emanuelalmeida, ccv, care, ecommerce-demo, e-commerce, ecommerce) não o têm — todos só têm o Loco Translate instalado, um plugin de tradução de ficheiros .po/.mo sem qualquer relação com o GTranslate. Também aceita um path absoluto directamente (/home/ealmeida/<site>) para sites fora desta lista, sem exigir rebuild do MCP.

Tools (9)

Tool Read-only Uso
gtranslate_list_sites sim Aliases conhecidos, path WP, nota de estado
gtranslate_get_status sim Instalado/activo/versão — chamar sempre antes dos outros tools
gtranslate_get_config sim Option GTranslate completa (array PHP nativo)
gtranslate_get_license_status sim pro_version/enterprise_version normalizados a booleano + tier (free/pro/enterprise). Não activa licença
gtranslate_get_languages sim default_language, incl_langs (widget principal), fincl_langs (widget flutuante), mais a lista completa dos 103 idiomas suportados
gtranslate_toggle_language não Activa/desactiva 1 código de idioma em incl_langs/fincl_langs/both, preservando a ordem dos restantes. Recusa esvaziar uma lista
gtranslate_get_widget_style sim widget_look, flag_size/flag_style, globe_size/globe_color, cores, floating_language_selector (posição do flutuante, no = desligado), direcções de abertura, select_language_label, wrapper_selector, custom_css
gtranslate_set_widget_style não Grava, chave a chave via wp option patch update, só as chaves de estilo fornecidas. widget_look/floating_language_selector/flag_style/direcções validados contra os enums reais do plugin
gtranslate_set_default_language não Muda default_language (idioma de origem/nativo do conteúdo). Não mexe em incl_langs/fincl_langs

Todas as tools exigem site como primeiro parâmetro.

Formato de armazenamento — confirmado, oposto ao WP Fastest Cache

GTranslate é um array PHP nativo (confirmado ao vivo: wp option get GTranslate sem --format=json devolve array(...) desenrolado, não uma string com JSON lá dentro). --format=json é portanto correcto aqui em leitura e escrita — mesma verificação prévia obrigatória que gerou o gotcha inverso no mcp-wpfc (ver skill wp-fastest-cache §16.2), mas com resultado oposto: aqui não há dupla codificação a evitar.

Gotcha de escrita idempotente (WP-CLI)

wp option patch update quando o valor gravado é idêntico ao actual às vezes devolve Success: ... is unchanged (exit 0), mas foi reproduzido ao vivo a devolver Error: Could not update option (exit != 0) para o mesmo caso — update_option() do WordPress devolve false quando o valor não muda, e o WP-CLI nem sempre trata esse false como sucesso. patchKey() (src/wpcli.ts) relê a chave após qualquer falha e só propaga o erro se o valor no site continuar diferente do pretendido — evita que uma chamada idempotente (ex. desactivar um idioma já desactivado) rebente por um falso negativo do WP-CLI.

Segurança

Allowlist fixa de 1 option (GTranslate) — nunca wp option update genérico sobre uma chave arbitrária. Escritas via base64 em stdin, nunca interpoladas no comando SSH remoto. Sem licença/API key para mascarar: confirmado por grep a "license"/"api_key"/"secret"/"token" em todo o código-fonte do plugin — pro_version/enterprise_version são flags booleanas gravadas por checkbox, a validação real da licença é feita client-side contra gtranslate.net pelo domínio do site, não por um segredo em wp_options.

Verificação

Construído e testado ponta-a-ponta contra produção (descomplicar.pt) 19-08-2026: gtranslate_get_status confirmou v3.1.1 activo; gtranslate_get_languages confirmou default_language: "pt", incl_langs com 10 idiomas e fincl_langs com 3, ambos batendo certo com leitura SQL/WP-CLI directa fora do MCP; gtranslate_get_widget_style confirmou widget_look: "flags", floating_language_selector: "no"; gtranslate_get_license_status confirmou tier: "free". Escrita testada com gtranslate_toggle_language (activou "ja" em incl_langs, confirmado por wp option get directo, depois desactivou — testado 3x seguidas incluindo o caso idempotente que expôs o gotcha do WP-CLI acima — estado final idêntico ao original, confirmado por leitura SSH directa); gtranslate_set_widget_style e gtranslate_set_default_language testados com os valores já-correntes (no-op idempotente), confirmado sem alteração via leitura SSH directa.

Skills relacionadas

  • wp-fastest-cache — o gotcha de formato inverso que motivou a verificação obrigatória aqui.
  • mcp-wpmeteor — mesmo padrão de option nativa + wp option patch update atómico.