--- 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-`, 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`.