7.9 KiB
name, description, layer
| name | description | layer |
|---|---|---|
| mcp-click-to-chat | MCP dedicado multi-site (node stdio, ligação `click-to-chat` em ~/.omp/agent/mcp.json) para gerir o Click to Chat for WhatsApp (HoliThemes) em qualquer site do bundle Descomplicar® via WP-CLI/SSH — estado do plugin, config completa, número de WhatsApp, mensagem pré-preenchida, call-to-action, activar/desactivar o widget globalmente, posição e estilo do botão flutuante. Site é um parâmetro em cada tool, não uma ligação fixa. Usar quando "click to chat mcp", "número whatsapp site", "widget whatsapp wordpress", "botão flutuante whatsapp", "mensagem pré-preenchida whatsapp", "ht_ctc_chat_options", "desactivar botão whatsapp", "posição botão whatsapp". | wiki |
/mcp-click-to-chat — MCP dedicado multi-site ao Click to Chat for WhatsApp
Projecto em /media/ealmeida/Dados/Dev/mcp-click-to-chat/ (TypeScript, SDK MCP oficial, stdio).
Sem código PHP novo no WordPress — cada tool executa wp option get/update --format=json via
ssh server sobre o WP-CLI já instalado. site é um parâmetro em cada tool, não uma ligação
fixa: o plugin está espalhado por vários sites reais do bundle com dados diferentes por site.
Não existe skill de conhecimento separada para este plugin — esta skill É a documentação
completa, incluindo o mapeamento de options. O plugin tem duas interfaces internas ("new" 2019+ e
"prev" legada, ver common/class-ht-ctc-switch.php); todos os sites do bundle usam a interface
"new" (a legada só se activa se a option ccw_options tiver a chave number, o que não
acontece em nenhum site verificado) — por isso este MCP só lê/escreve as options ht_ctc_*.
Âmbito
Config do widget flutuante de WhatsApp (versão Free — nenhum site do bundle tem o addon PRO
click-to-chat-pro.php instalado, por isso não há múltiplos agentes/departamentos, apenas um
número principal). Não cobre: activação/desactivação do próprio plugin (emcp-tools activate-plugin/deactivate-plugin cobre isso genericamente), estilos de cor detalhados por
variante (ht_ctc_s1..ht_ctc_s9 — cosméticos por style_desktop/style_mobile escolhido, fora
do âmbito deste MCP), integração de Analytics/GTM/Pixel (ht_ctc_othersettings), Grupos de
WhatsApp ou Share button (ht_ctc_group/ht_ctc_share), WooCommerce (ht_ctc_woo_options).
Sites conhecidos
Chamar ctc_list_sites para a lista actual com path e nota de estado. Verificado ao vivo
19-08-2026 (wp plugin list por site, slug click-to-chat-for-whatsapp 4.42.1, update 4.43
disponível em todos):
- Activos:
emanuelalmeida(número real configurado,+351919109155),starter(activo mas sem número configurado — config vazia),ccv(número real configurado),ecommerce(activo). - Instalado mas inactivo:
descomplicar(produção,public_html),ecommerce-demo. - Não instalado:
care,e-commerce.
Também aceita um path absoluto directamente (/home/ealmeida/<site>) para sites fora desta lista,
sem exigir rebuild do MCP.
Mapeamento de dados
Option principal: ht_ctc_chat_options (array PHP nativo — ver §Segurança). Campos usados por
este MCP:
| Campo | Tool que lê/escreve | Descrição |
|---|---|---|
number |
ctc_get_number / ctc_update_number |
Número de WhatsApp principal, com indicativo. Legado: cc+num (interface "prev", sempre limpos por ctc_update_number) |
pre_filled |
ctc_get_number / ctc_update_message |
Mensagem já escrita na conversa ao clicar |
call_to_action |
ctc_get_number / ctc_update_message |
Texto do tooltip/balão junto ao botão |
display.global_display |
ctc_get_config / ctc_toggle_widget |
show/hide — liga/desliga o widget em todo o site |
display.home/pages/posts/list_showon_pages/etc. |
ctc_get_config (só leitura) |
Excepções por tipo de página ao valor global — não alteradas por este MCP |
style_desktop/style_mobile |
ctc_get_config / ctc_update_position_style |
Id do estilo pré-definido do botão, "1"–"9" (paleta de cada um em ht_ctc_s1..ht_ctc_s9, fora do âmbito) |
side_1/side_1_value |
ctc_get_config / ctc_update_position_style |
Lado vertical (top/bottom) + offset CSS (ex. "15px") |
side_2/side_2_value |
ctc_get_config / ctc_update_position_style |
Lado horizontal (left/right) + offset CSS |
mobile_side_*, same_settings |
ctc_get_config (só leitura) |
Posição mobile — segue a desktop enquanto same_settings = "1" (comportamento nativo) |
Tools (8)
| Tool | Read-only | Uso |
|---|---|---|
ctc_list_sites |
sim | Aliases conhecidos, path WP, nota de estado |
ctc_get_status |
sim | Instalado/activo, versão, update disponível — chamar antes dos outros tools |
ctc_get_config |
sim | Option ht_ctc_chat_options completa (número, mensagem, posição, estilo, regras de exibição) |
ctc_get_number |
sim | Só number, pre_filled, call_to_action, intl_country — resposta enxuta. Free = um único número, sem multi-agente |
ctc_update_number |
não | Actualiza number com validação (8-15 dígitos após limpeza, igual a HT_CTC_Formatting::wa_number() do próprio plugin). Limpa cc/num legados |
ctc_update_message |
não | Actualiza pre_filled e/ou call_to_action — passa só o(s) campo(s) a mudar |
ctc_toggle_widget |
não | enabled: true/false → display.global_display = show/hide. Não toca nas excepções por página |
ctc_update_position_style |
não | style_desktop/style_mobile ("1"-"9") e/ou side_1/side_1_value/side_2/side_2_value — passa só o(s) campo(s) a mudar |
Todas as tools de escrita fazem read-modify-write (merge), nunca substituição completa da option.
site é obrigatório em todas.
Segurança
Allowlist fixa de 3 nomes de option ht_ctc_* relevantes (src/wpcli.ts, OPTION_KEYS) — nunca
wp option update genérico sobre uma chave arbitrária. Escritas via base64 em stdin, nunca
interpoladas no comando SSH remoto. Validação de número de WhatsApp em ctc_update_number
(mínimo 8, máximo 15 dígitos após remover tudo excepto dígitos).
Formato de armazenamento confirmado (caso seguro): ht_ctc_chat_options e as restantes
options ht_ctc_* são gravadas pelo próprio plugin via update_option( 'ht_ctc_xxx', $array_php ) — array PHP nativo, não uma string com JSON lá dentro (confirmado lendo
new/admin/db/class-ht-ctc-db.php, e comparando ao vivo a saída de wp option get sem formato
vs. --format=json em emanuelalmeida.pt — ambas descodificam o mesmo array, sem dupla
codificação). Por isso getOption/setOption deste MCP usam --format=json directamente, ao
contrário do mcp-wpfc (ver essa skill para o caso inverso, o gotcha de string-com-JSON-lá-dentro
que corrompeu produção nesse plugin).
Verificação
Construído e testado ponta-a-ponta contra produção 19-08-2026: ctc_get_status/ctc_get_config/
ctc_get_number confirmaram os dados reais em emanuelalmeida (número +351919109155,
call-to-action "Vamos conversar?"); ctc_update_message (call-to-action idempotente),
ctc_toggle_widget (enabled:true idempotente) e ctc_update_position_style (valores
idempotentes) testados em ccv, cada um confirmado por leitura SSH directa antes/depois —
ht_ctc_chat_options ficou byte-a-byte igual, incluindo o objecto aninhado display;
ctc_update_number testado em starter com um número real (+351 910 000 000 → normalizado para
+351910000000, confirmado por leitura SSH directa), depois restaurado ao estado original vazio
(também confirmado por leitura).
Skills relacionadas
mcp-wpfc— mesmo padrão de arquitectura, mas com o gotcha inverso de formato de armazenamento (string PHP com JSON lá dentro) — ler antes de construir um MCP novo sobre outro plugin.emcp-tools— activação/desactivação genérica de plugins, fora do âmbito deste MCP.