feat(wordpress): skill mcp-pro-elements — MCP dedicado ao PRO Elements (fork GPL Elementor Pro) via WP-CLI/SSH
This commit is contained in:
@@ -0,0 +1,117 @@
|
||||
---
|
||||
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`.
|
||||
Reference in New Issue
Block a user