Files

118 lines
7.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: mcp-pro-elements
description: MCP dedicado (node stdio, ligação `pro-elements` em ~/.omp/agent/mcp.json) para gerir o PRO Elements (fork GPL do Elementor Pro) em starter/ccv/care.descomplicar.pt — estado/versão do plugin, os 4 módulos com toggle próprio via Elementor Experiments (mega_menu, size_variables, atomic_form, pro_interactions), reCAPTCHA v2/v3 das Forms (secret sempre mascarada), licença (vestígio histórico, sempre mascarada), restrições do Element Manager por role (read-only), via WP-CLI/SSH. Usar quando "pro elements", "elementor pro fork", "modulos pro elements", "experiment mega menu", "recaptcha forms elementor", "licenca pro elements", "elementor experiment toggle".
layer: wiki
---
# /mcp-pro-elements — MCP dedicado ao PRO Elements
Projecto em `/media/ealmeida/Dados/Dev/mcp-pro-elements/` (TypeScript, SDK MCP oficial, stdio).
Sem código PHP novo no WordPress — cada tool executa `wp option get/update` via `ssh server` sobre
o WP-CLI já instalado. Não é uma extensão do EMCP Tools (plugin comercial Freemius, catálogo de
tools fixo curado pelo autor, sem mecanismo de terceiros).
## O que é o PRO Elements (achado por leitura de código-fonte, 19-08-2026)
**Não** é um addon pack de terceiros como o Element Pack Pro (BdThemes) — é literalmente o
código-fonte do **Elementor Pro**, rebrandeado: `pro-elements.php` define
`ELEMENTOR_PRO_VERSION`/`namespace ElementorPro`, os mesmos `core/`, `modules/`, `base/` do
Elementor Pro genuíno. A diferença está em `license/api.php`: `License\API::get_license_data()`
está **hardcoded** para devolver sempre `success:true, expires:'lifetime'` com a lista completa de
features Pro — não há licença real a validar. `wp elementor-pro license activate/deactivate`
(comando WP-CLI próprio) tem os métodos vazios (no-ops). A própria description do plugin em
care.descomplicar.pt confirma: *"This plugin enables GPL features of Elementor Pro... is not a
substitute for Elementor Pro."*
## Âmbito
Ao contrário do Element Pack Pro (~150 widgets num único array com toggle individual), o PRO
Elements **não tem ecrã "Modules" com toggle por widget**. Só **4 dos ~80 módulos** têm toggle
próprio, via **Elementor Experiments** (`wp_options.elementor_experiment-<nome>`, string simples
`active`/`inactive`/`default`):
| Tool id | Experiment | Default | Disponível |
|---|---|---|---|
| `mega_menu` | `mega-menu` | inactive | 3.31.2 e 3.35.0 (confirmado nos 3 sites) |
| `size_variables` | `e_pro_variables` | active | só 3.35.0 (starter/ccv) — pasta ausente em 3.31.2 (care) |
| `atomic_form` | `e_pro_atomic_form` | inactive | só 3.35.0 |
| `pro_interactions` | `e_pro_interactions` | inactive | só 3.35.0 |
Os restantes módulos (query-control, popup, theme-builder, forms, woocommerce, etc.) activam
sempre — `Module::is_active()` por omissão `true` + licença hardcoded sempre completa.
A única **configuração geral real e gravável** é o **reCAPTCHA das Forms** (v2/v3). Não existe
"Google Maps API key" própria do PRO Elements — o Google Maps usa a key do Elementor **core**
(`elementor_google_maps_api_key`), fora do âmbito deste MCP.
## Sites conhecidos
Confirmado por `wp plugin get pro-elements` nos 3 (19-08-2026) — únicos do bundle com o plugin
activo:
- `starter` → starter.descomplicar.pt, v3.35.0
- `ccv` → ccv.descomplicar.pt, v3.35.0
- `care` → care.descomplicar.pt, v3.31.2
`descomplicar.pt` (produção), `emanuelalmeida.pt` e os sites `*ecommerce*` **não** têm o plugin.
## Tools (8)
| Tool | Read-only | Uso |
|---|---|---|
| `pe_list_sites` | sim | Aliases conhecidos + versão confirmada, sem SSH |
| `pe_get_status` | sim | Versão/estado do plugin via `wp plugin get` |
| `pe_get_modules` | sim | Estado dos 4 módulos: `installed_in_this_version` (dir existe nesta versão), `raw_state` (valor gravado ou `null`), `effective_active` (resolvido incl. default) |
| `pe_set_module_state` | não | `active`/`inactive`/`default` num módulo; recusa se `installed_in_this_version=false` (nunca escreve lixo sem efeito) |
| `pe_get_recaptcha_settings` | sim | Site keys em claro (públicas), secret keys sempre mascaradas (`{configured, length}`) |
| `pe_set_recaptcha_settings` | não | Actualiza campos v2/v3 passados; `threshold` só válido em v3, 0–1 |
| `pe_get_license_status` | sim | Vestígio de `elementor_pro_license_key` mascarado + nota fixa sobre o bypass hardcoded |
| `pe_get_role_restrictions` | sim | `elementor_pro_element_manager_role_permission` — restrições de widgets por role (vazio nos 3 sites) |
## Segurança
- Allowlist fixa de option keys (`src/wpcli.ts`) — nunca `wp option update` genérico.
- **Secrets nunca em claro**: `secret_key` do reCAPTCHA e `elementor_pro_license_key` passam
sempre por `describeSecret()` → só `{configured: boolean, length: number}`. Site keys reCAPTCHA
são públicas por natureza (embutidas em JS no browser) e são devolvidas em claro.
- Escritas via base64 em stdin, nunca interpoladas no comando SSH remoto.
- `elementor_experiment-*` e as chaves `elementor_pro_recaptcha_*` são strings escalares simples
(nunca `--format=json` — corromperia o valor, mesmo gotcha da skill `mcp-wpfc`).
`elementor_pro_element_manager_role_permission` é o único array PHP nativo do allowlist —
lido com `--format=json`, nunca escrito por aqui (formato complexo por-widget-por-role gerido
pela app React do editor, sem valor real a expor um write raw).
- `elementor_pro_license_key` fica fora da allowlist de escrita — o runtime ignora-a de qualquer
forma (ver acima), escrevê-la não activaria nada.
## Verificação
Construído e testado ponta-a-ponta contra produção (19-08-2026), os 3 sites:
- `pe_get_status` idêntico a `wp plugin get pro-elements` directo em starter (3.35.0), ccv
(3.35.0) e care (3.31.2).
- `pe_get_modules(care)` confirmou `installed_in_this_version` correcto — só `mega_menu=true`
(os outros 3 `false`, ausência das pastas `modules/{variables,atomic-form,interactions}`
confirmada em disco); `pe_get_modules(ccv)` confirmou os 4 `true` e `size_variables.
effective_active=true` (resolve o default `active` porque `raw_state` nunca foi gravado).
- `pe_get_recaptcha_settings(care)` idêntico à leitura directa (`site_key`/`secret_key` vazios,
`threshold=0.5`).
- `pe_get_license_status`: `care` → `{configured:true, length:45}` (o vestígio real de uma
instalação Elementor Pro genuína anterior, encontrado em `wp_options`); `starter`/`ccv` →
`{configured:false}` (nunca tiveram licença real).
- **Escrita com round-trip idempotente**, duas vezes: `pe_set_module_state(care, mega_menu,
"default")` — valor antes/depois idêntico (`"default"`), confirmado por `wp option get`
directo fora do MCP; `pe_set_recaptcha_settings(care, v3, threshold=0.5)` — valor antes/depois
idêntico (`0.5`), confirmado da mesma forma.
- Guard testado: `pe_set_module_state(care, size_variables, "active")` recusado com erro claro
(módulo não existe em 3.31.2) — nenhuma escrita tentada.
- Nenhum segredo devolvido em claro em qualquer chamada.
## Skills relacionadas
- `mcp-element-pack` — Element Pack Pro (BdThemes), um addon pack de terceiros genuíno, com
~150 widgets num único array de toggle — **não confundir** com este MCP (o PRO Elements é o
próprio Elementor Pro rebrandeado, mecanismo de toggle completamente diferente).
- `element-pack-widgets` — catálogo/inserção de widgets Element Pack via EMCP; não aplicável ao
PRO Elements (os widgets Pro do Elementor inserem-se pela ligação EMCP normal do site, não por
este MCP de configuração admin).
- `mcp-wpfc` — mesmo padrão de gotcha JSON vs string escalar em `wp option get/update`.