feat(wordpress): nova skill mcp-skyboot-icons — MCP Skyboot Custom Icons for Elementor

- Estado do plugin, catalogo dos 15 icon packs, listar icones de um
  pack activo, activar/desactivar pack.
- Plugin so encontrado activo em descomplicar.pt (producao); os
  outros 7 sites do bundle confirmados sem ele.
- MCP maioritariamente so-leitura: unica escrita real e o toggle
  on/off por pack (skb_cife_manage_icon), testada em ciclo idempotente
  contra producao.
This commit is contained in:
Descomplicar Agent
2026-08-19 07:06:30 +01:00
parent 174f2f9357
commit 36a0721349
+112
View File
@@ -0,0 +1,112 @@
---
name: mcp-skyboot-icons
description: MCP dedicado (node stdio, ligação `skyboot-icons` em ~/.omp/agent/mcp.json) para o Skyboot Custom Icons for Elementor — confirmado activo só em descomplicar.pt (produção). Estado do plugin, catálogo dos 15 icon packs bundlados (Elegant, Linearicons, Themify, Simple Line, Line, Ionicons, Icofont, Line Awesome, Material Design, Devicons, Icomoon, Elusive, Iconic, Brands, Open Iconic) com prefixo CSS e contagem de ícones ao vivo, listar os nomes de ícone de um pack activo, activar/desactivar um pack no selector de ícones do Elementor. Usar quando "skyboot icons", "custom icons elementor", "icon pack elementor", "activar pack de ícones", "material design icons elementor", "brands icon elementor", "quantos ícones tem o pack X".
layer: wiki
---
# /mcp-skyboot-icons — MCP dedicado ao Skyboot Custom Icons for Elementor
Projecto em `/media/ealmeida/Dados/Dev/mcp-skyboot-icons/` (TypeScript, SDK MCP oficial, stdio).
Sem código PHP novo no WordPress — leituras via `wp option get`/`wp plugin list` e `wp eval` sobre o
próprio filtro que o plugin usa (`elementor/icons_manager/additional_tabs`); a única escrita é
`wp option update` sobre o option nativo do plugin.
## Âmbito real do plugin (investigado no código-fonte v1.2.0 em 19-08-2026)
O Skyboot Custom Icons for Elementor **não gere ícones custom enviados pelo utilizador** — é um
plugin utilitário que embrulha **15 fontes de ícones de terceiros já bundladas** (CSS + fontes
estáticas em `assets/`, ~18k linhas de PHP a registá-las) e as regista no selector de ícones nativo
do Elementor via `add_filter('elementor/icons_manager/additional_tabs', ...)`, uma classe PHP
dedicada por pack em `classes/icons/class-<pack>-icon.php`.
A **única configuração real e gravável** é um interruptor on/off por pack, tudo dentro de UM único
wp_option:
- **`skb_cife_manage_icon`** — array associativo nativo `{ pack_key: "on"|"off" }`, um por cada um
dos 15 packs. Confirmado como **array PHP nativo** (não string com JSON dentro) — `wp option get`
com e sem `--format=json` devolvem a mesma estrutura, logo `--format=json` é seguro tanto para
leitura como escrita. `Skb_Cife_Base::include_files()` só faz `require_once` da classe de um pack
se a sua chave estiver `"on"` — um pack desactivado nunca chega a registar o seu tab no Elementor
nem a enfileirar o CSS (`classes/class-scripts-manager.php` segue exactamente a mesma condição
para o `wp_enqueue_style`).
- **`skb_cife_version`** — string simples com a versão gravada na última activação/upgrade
(`Skb_Cife_Base::activate()`/`check_for_updates()`).
Não há upload de packs SVG custom, não há gestão de licença PRO gravável (o gate PRO é só
`defined('SKB_CIFE_PRO_VERSION')` + filtro `skb_cife_is_pro`, sem UI de licença na Free), e não há
nenhuma outra opção do utilizador exposta pelo `settings-api/` além deste único toggle por pack —
confirmado por leitura de `settings-api/settings-fields.php::get_icon_packs()` (15 entradas, sem
mais nada). Por isso este MCP é **maioritariamente só-leitura com uma única tool de escrita real**,
em vez de inventar capacidades que o plugin não tem.
## Sites conhecidos
Chamar `skyboot_list_sites` para a lista actual. Verificado ao vivo via `wp plugin list` nos 8 sites
reais do bundle em 19-08-2026: **só `descomplicar` (produção, `/home/ealmeida/public_html`)** tem o
plugin instalado (v1.2.0, activo). Os outros 7 (`starter`, `emanuelalmeida`, `ccv`, `care`,
`ecommerce-demo`, `e-commerce`, `ecommerce`) não o têm. Também aceita um path absoluto directamente
(`/home/ealmeida/<site>`) para sites fora desta lista, sem exigir rebuild do MCP.
Estado verificado em produção em 19-08-2026: **todos os 15 packs activos** (`"on"`), PRO **não**
activo, Elementor 4.2.2, PHP 8.2.31.
## Tools (5)
| Tool | Read-only | Uso |
|---|---|---|
| `skyboot_list_sites` | sim | Aliases conhecidos, path WP, nota de estado |
| `skyboot_get_status` | sim | Instalado/activo, versão (plugin list + option), PRO activo, Elementor/PHP vistos pelo plugin, contagem de packs activos/totais |
| `skyboot_list_icon_packs` | sim | 15 packs: nome, descrição, fonte, contagem aproximada estática, estado activo/inactivo (`skb_cife_manage_icon`) e, se activo, prefixo CSS real + contagem exacta de ícones ao vivo |
| `skyboot_get_icon_pack_icons` | sim | Nomes de ícone (sufixo, sem prefixo CSS) de UM pack **activo**, com pesquisa por substring e paginação (`limit`/`offset`) |
| `skyboot_set_icon_pack_state` | não | Activa/desactiva um pack — merge sobre o `skb_cife_manage_icon` actual, as outras chaves ficam intactas |
Todas as tools exigem `site` como primeiro parâmetro. `skyboot_get_icon_pack_icons` e
`skyboot_set_icon_pack_state` exigem `pack` como uma das 15 chaves de `ICON_PACK_KEYS` (validado
pelo próprio schema Zod da tool — `elegant_icon`, `linearicons_icon`, `themify_icon`,
`simpleline_icon`, `line_icon`, `ion_icon`, `icofont_icon`, `lineawesome_icon`,
`materialdesign_icon`, `devicons_icon`, `icomoon_icon`, `elusive_icon`, `iconic_icon`,
`brands_icon`, `open_iconic_icon`).
**Gotcha ao consultar ícones:** `skyboot_get_icon_pack_icons` só funciona para um pack **já
activo** — se estiver desactivado a sua classe PHP nunca é carregada e o Elementor nunca viu o tab
(`tab_not_found`, mensagem de erro explícita a sugerir activar primeiro com
`skyboot_set_icon_pack_state`). Não há forma segura de ler os nomes de ícone de um pack desactivado
sem carregar código PHP arbitrário fora do fluxo normal do WordPress.
## Segurança
Todas as escritas usam `wp option update` sobre o option nativo do plugin, nunca SQL directo. O
merge (ler o option completo → alterar só a chave do pack pedido → escrever o objecto completo)
replica exactamente o que acontece quando um humano grava a página "Manage Icons" via
`options.php` (confirmado em `settings-api/class.settings-api.php::sanitize_options()` — o
`register_setting` por secção substitui o option inteiro, por isso o form da própria página também
submete sempre todas as checkboxes de uma vez). O JSON completo viaja em base64 pelo STDIN do
processo SSH remoto (`base64 -d | wp option update ... --format=json`), nunca interpolado na linha
de comando. As leituras dinâmicas (`skyboot_list_icon_packs`, `skyboot_get_icon_pack_icons`) usam
`wp eval` com um corpo PHP estático (template fixo, só os parâmetros `tabKey`/`search`/`limit`/
`offset` são interpolados via `JSON.stringify`, nunca texto livre do utilizador sem escaping JSON).
## Verificação
Construído e testado ponta-a-ponta contra produção (`descomplicar.pt`) em 19-08-2026:
- `npm run build` limpo, smoke test stdio (`initialize` + `tools/list`, 5 tools confirmadas).
- **3 leituras reais**: `skyboot_get_status` devolveu `v1.2.0 activo, PRO false, Elementor 4.2.2,
PHP 8.2.31, 15/15 packs activos` — confirmado byte-a-byte contra `wp plugin list`/`wp option get`
directos fora do MCP. `skyboot_list_icon_packs` devolveu as 15 entradas com contagens ao vivo
idênticas às lidas manualmente via `wp eval` (ex. `materialdesign_icon` 5346, `brands_icon` 934,
`icofont_icon` 2095). `skyboot_get_icon_pack_icons(brands_icon, search="adobe")` devolveu as 14
entradas Adobe (`adobe`, `adobeacrobatreader`, …, `adobexd`), idênticas ao array PHP lido
directamente do código-fonte da classe.
- **Escrita testada com ciclo completo idempotente**: `skyboot_set_icon_pack_state(open_iconic_icon,
false)` → confirmado `wp option get skb_cife_manage_icon` com `"open_iconic_icon":"off"` e as
outras 14 chaves intactas, e `apply_filters('elementor/icons_manager/additional_tabs', [])` já sem
o tab `skb_cife-open_iconic-icon` (`false`) → `skyboot_set_icon_pack_state(open_iconic_icon, true)`
→ confirmado `wp option get skb_cife_manage_icon` byte-a-byte idêntico ao estado inicial (todos os
15 packs `"on"`).
## Skills relacionadas
Nenhuma skill de conhecimento dedicada ao Skyboot Custom Icons for Elementor existe neste bundle —
esta skill é a única documentação (âmbito real + tools). Ver `elementor` para o ecossistema
Elementor/Crocoblock mais amplo e `wp-cli` para o padrão geral de gestão via WP-CLI no servidor CWP.