From 67f6d6e6e1a1dd92286eb115f106dc7e9af9ff65 Mon Sep 17 00:00:00 2001 From: Emanuel Almeida Date: Wed, 19 Aug 2026 04:47:07 +0100 Subject: [PATCH] wordpress: adiciona skills element-pack-widgets e mcp-element-pack - element-pack-widgets: catalogo verificado 168 widgets core + 95 integracao Element Pack Pro (BdThemes), get_name() extraido do codigo-fonte, 11 excepcoes de nome confirmadas - mcp-element-pack: documenta o MCP dedicado (node stdio) para licenca/ modulos/mega-menu/white-label/custom-code do Element Pack Pro --- .../skills/element-pack-widgets/SKILL.md | 80 +++++ .../references/catalogo.md | 338 ++++++++++++++++++ wordpress/skills/mcp-element-pack/SKILL.md | 49 +++ 3 files changed, 467 insertions(+) create mode 100644 wordpress/skills/element-pack-widgets/SKILL.md create mode 100644 wordpress/skills/element-pack-widgets/references/catalogo.md create mode 100644 wordpress/skills/mcp-element-pack/SKILL.md diff --git a/wordpress/skills/element-pack-widgets/SKILL.md b/wordpress/skills/element-pack-widgets/SKILL.md new file mode 100644 index 0000000..c241f12 --- /dev/null +++ b/wordpress/skills/element-pack-widgets/SKILL.md @@ -0,0 +1,80 @@ +--- +name: element-pack-widgets +description: Catálogo completo e verificado dos widgets Element Pack Pro (BdThemes) para Elementor — 168 widgets core (`element_pack_active_modules`) + 95 widgets de integração com plugins de terceiros, com o widgetType real de cada um extraído do código-fonte (`get_name()` em `modules//widgets/*.php`) — não estão no catálogo curado do EMCP Tools (list-widgets), por isso precisam de get-widget-schema com full:true. Usar quando "element pack", "bdt-widget", "advanced heading elementor", "mega menu elementor", "custom carousel elementor", "brand grid", "crypto currency widget". +layer: wiki +--- + +# /element-pack-widgets — Catálogo de Widgets Element Pack Pro (BdThemes) + +Element Pack Pro (plugin `bdthemes-element-pack`, activo em **descomplicar.pt**, v9.8.12) regista +os próprios widgets Elementor **fora** do catálogo curado do EMCP Tools — `list-widgets` não os +lista e `get-widget-schema` sem `full:true` devolve `"Not in the curated catalog"`. + +Catálogo extraído directamente de `get_name()` em cada `modules//widgets/*.php`, num site em +produção — **não adivinhado por convenção de nomes**, o que importa porque a convenção +`bdt-` tem 11 excepções reais confirmadas (ver `references/catalogo.md`). Catálogo +completo (168 core + 95 integração) em `references/catalogo.md`. + +## Como usar (workflow) + +1. Confirmar que `bdthemes-element-pack` está activo: `list-plugins`, procurar o slug (ou + `wp option get element_pack_active_modules --format=json` via SSH para ver módulos on/off). +2. `get-widget-schema({ widget_type: "bdt-", full: true })` — **sempre `full:true`**, nunca + confiar no catálogo curado. Devolve o schema de controlos real e vivo do widget (responsivo, + condições de exibição, efeitos). +3. Adicionar com `add-free-widget({ post_id, parent_id, widget_type, settings })` num container + **legacy** (`add-container`) — mesma mecânica de `elementskit-widgets`/`powerpack-widgets`, sem + equivalente atómico v4. +4. **Nunca assumir o `widgetType` pela pasta do módulo** — confirmado no código-fonte, 11 excepções + reais: `we-forms` → `bdt-we-form` (singular), `gravity-forms` → `bdt-gravity-form`, + `ninja-forms` → `bdt-ninja-form`, `edd-download-history` → `bdt-easy-digital-download-history`, + `edd-profile-editor` → `bdt-easy-digital-profile-editor`, `edd-purchase-history` → + `bdt-easy-digital-purchase-history`, `events-calendar-carousel/grid/list` → `bdt-event-*` (sem + "calendar"), `fooevents-calendar` → `fooevents-calendar` (sem prefixo `bdt-`). E **um caso não + resolvido**: `lightbox` resolve para `widgetType: "lightbox"` no código, mas `get-widget-schema` + devolve 0 propriedades para `bdt-lightbox` e uma resposta anormalmente grande (1624 propriedades + — provável fallback do EMCP, não o schema real) para `lightbox`; tratar como **não confirmado** + até verificar directamente numa página de teste antes de usar em produção. +5. Testado ponta-a-ponta em produção (19-08-2026): página draft → `add-container` → + `add-free-widget` com `bdt-advanced-heading` → `get-page-structure`/`get-element-settings` + confirmaram persistência → limpeza da página de teste. + +## Widgets mais usados (ver `references/catalogo.md` para os 168+95 completos) + +| `widgetType` | Título | Uso | +|---|---|---| +| `bdt-advanced-heading` | Advanced Heading | título com sub-heading, split text, efeitos de fundo | +| `bdt-custom-carousel` | Custom Carousel | carrossel genérico de slides imagem/vídeo/template | +| `bdt-mega-menu` | Mega Menu | menu mega multi-coluna, requer `element_pack_other_settings.mega-menu = on` | +| `bdt-brand-grid` / `bdt-brand-carousel` | Brand Grid/Carousel | logótipos de marcas em grelha/carrossel | +| `bdt-price-table` | Price Table | tabela de preços | +| `bdt-flip-box` | Flip Box | cartão com flip ao hover | +| `bdt-testimonial-carousel` | Testimonial Carousel | testemunhos em carrossel | +| `bdt-countdown` | Countdown | temporizador de contagem decrescente | +| `bdt-crypto-currency-ticker` | Crypto Ticker | ticker de criptomoedas em tempo real | +| `bdt-post-grid` | Post Grid | grelha de posts com query control | +| `bdt-timeline` | Timeline | linha do tempo vertical/horizontal | +| `bdt-table-of-content` | Table of Content | índice automático da página | +| `bdt-instagram` | Instagram Feed | feed do Instagram | +| `bdt-svg-maps` | SVG Maps | mapas SVG interactivos por região | +| `bdt-review-card` | Review Card | cartão de avaliação/review | + +## Notas + +- 168 widgets são **core**, controlados por `element_pack_active_modules` (todos `on` neste site + excepto `cookie-consent`, verificado 19-08-2026) — ver `mcp-element-pack` para ligar/desligar via + MCP dedicado. +- 95 widgets são **de integração**: só funcionam com o plugin de terceiros correspondente activo + (ACF, bbPress, BuddyPress, Charitable, Easy Digital Downloads, The Events Calendar, Tutor LMS, + WooCommerce, Give, LearnPress, vários plugins de formulários). Confirmar o plugin dependente antes + de inserir — `add-free-widget` não valida isto, pode inserir um widget "órfão" que não renderiza. +- `mega-menu` é widget **e** módulo de outros_settings — o widget só produz saída com + `element_pack_other_settings['mega-menu'] = 'on'` (hoje `off` em produção); confirmar/activar via + `mcp-element-pack` antes de o usar. + +## Skills relacionadas +- `mcp-element-pack` — MCP dedicado para gerir licença/módulos/mega-menu/white-label/custom-code + do Element Pack Pro em descomplicar.pt via WP-CLI/SSH (não cobre inserção de widgets). +- `emcp-page-building` — mecânica de coexistência atómico/legacy, sequência de construção. +- `elementskit-widgets` / `powerpack-widgets` — catálogos dos addons concorrentes, mesmo padrão de + descoberta (`full:true` obrigatório, fora do catálogo curado). diff --git a/wordpress/skills/element-pack-widgets/references/catalogo.md b/wordpress/skills/element-pack-widgets/references/catalogo.md new file mode 100644 index 0000000..2d0d71e --- /dev/null +++ b/wordpress/skills/element-pack-widgets/references/catalogo.md @@ -0,0 +1,338 @@ +# Catálogo completo — Element Pack Pro (BdThemes) widgets + +Extraído do código-fonte real (`get_name()` em cada `modules//widgets/*.php`) em descomplicar.pt, Element Pack Pro 9.8.12, 19-08-2026. 168 widgets core (gerados por `element_pack_active_modules`, todos activos neste site) + 95 widgets de integração com plugins de terceiros (activos independentemente do toggle de módulos core). + +## Widgets core (168) — controlados por `element_pack_active_modules` + +| Módulo | `widgetType` | +|---|---| +| `accordion` | `bdt-accordion` | +| `advanced-button` | `bdt-advanced-button` | +| `advanced-calculator` | `bdt-advanced-calculator` | +| `advanced-counter` | `bdt-advanced-counter` | +| `advanced-divider` | `bdt-advanced-divider` | +| `advanced-gmap` | `bdt-advanced-gmap` | +| `advanced-heading` | `bdt-advanced-heading` | +| `advanced-icon-box` | `bdt-advanced-icon-box` | +| `advanced-image-gallery` | `bdt-advanced-image-gallery` | +| `advanced-progress-bar` | `bdt-advanced-progress-bar` | +| `age-gate` | `bdt-age-gate` | +| `air-pollution` | `bdt-air-pollution` | +| `animated-card` | `bdt-animated-card` | +| `animated-heading` | `bdt-animated-heading` | +| `animated-link` | `bdt-animated-link` | +| `audio-player` | `bdt-audio-player` | +| `barcode` | `bdt-barcode` | +| `brand-carousel` | `bdt-brand-carousel` | +| `brand-grid` | `bdt-brand-grid` | +| `breadcrumbs` | `bdt-breadcrumbs` | +| `business-hours` | `bdt-business-hours` | +| `calendly` | `bdt-calendly` | +| `call-out` | `bdt-call-out` | +| `carousel` | `bdt-carousel` | +| `changelog` | `bdt-changelog` | +| `chart` | `bdt-chart` | +| `circle-info` | `bdt-circle-info` | +| `circle-menu` | `bdt-circle-menu` | +| `comment` | `bdt-comment` | +| `comparison-list` | `bdt-comparison-list` | +| `contact-form` | `bdt-contact-form` | +| `content-switcher` | `bdt-content-switcher` | +| `cookie-consent` | `bdt-cookie-consent` | +| `countdown` | `bdt-countdown` | +| `coupon-code` | `bdt-coupon-code` | +| `creative-button` | `bdt-creative-button` | +| `crypto-currency-card` | `bdt-crypto-currency-card` | +| `crypto-currency-carousel` | `bdt-crypto-currency-carousel` | +| `crypto-currency-chart` | `bdt-crypto-currency-chart` | +| `crypto-currency-chart-carousel` | `bdt-crypto-currency-chart-carousel` | +| `crypto-currency-grid` | `bdt-crypto-currency-grid` | +| `crypto-currency-list` | `bdt-crypto-currency-list` | +| `crypto-currency-table` | `bdt-crypto-currency-table` | +| `crypto-currency-ticker` | `bdt-crypto-currency-ticker` | +| `custom-carousel` | `bdt-custom-carousel` | +| `custom-gallery` | `bdt-custom-gallery` | +| `dark-mode` | `bdt-dark-mode` | +| `device-slider` | `bdt-device-slider` | +| `document-viewer` | `bdt-document-viewer` | +| `dropbar` | `bdt-dropbar` | +| `dual-button` | `bdt-dual-button` | +| `dynamic-carousel` | `bdt-dynamic-carousel` | +| `dynamic-grid` | `bdt-dynamic-grid` | +| `facebook-feed` | `bdt-facebook-feed` | +| `facebook-feed-carousel` | `bdt-facebook-feed-carousel` | +| `fancy-card` | `bdt-fancy-card` | +| `fancy-icons` | `bdt-fancy-icons` | +| `fancy-list` | `bdt-fancy-list` | +| `fancy-slider` | `bdt-fancy-slider` | +| `fancy-tabs` | `bdt-fancy-tabs` | +| `featured-box` | `bdt-featured-box` | +| `flip-box` | `bdt-flip-box` | +| `floating-knowledgebase` | `bdt-floating-knowledgebase` | +| `google-reviews` | `bdt-google-reviews` | +| `helpdesk` | `bdt-helpdesk` | +| `honeycombs` | `bdt-honeycombs` | +| `horizontal-scroller` | `bdt-horizontal-scroller` | +| `hover-box` | `bdt-hover-box` | +| `hover-video` | `bdt-hover-video` | +| `icon-mobile-menu` | `bdt-icon-mobile-menu` | +| `iconnav` | `bdt-iconnav` | +| `iframe` | `bdt-iframe` | +| `image-accordion` | `bdt-image-accordion` | +| `image-compare` | `bdt-image-compare` | +| `image-expand` | `bdt-image-expand` | +| `image-magnifier` | `bdt-image-magnifier` | +| `image-stack` | `bdt-image-stack` | +| `instagram` | `bdt-instagram` | +| `interactive-card` | `bdt-interactive-card` | +| `interactive-tabs` | `bdt-interactive-tabs` | +| `lightbox` | `lightbox` ⚠️ excepção de nome | +| `logo-carousel` | `bdt-logo-carousel` | +| `logo-grid` | `bdt-logo-grid` | +| `lottie-icon-box` | `bdt-lottie-icon-box` | +| `lottie-image` | `bdt-lottie-image` | +| `mailchimp` | `bdt-mailchimp` | +| `marker` | `bdt-marker` | +| `marquee` | `bdt-marquee` | +| `mega-menu` | `bdt-mega-menu` | +| `member` | `bdt-member` | +| `modal` | `bdt-modal` | +| `navbar` | `bdt-navbar` | +| `news-ticker` | `bdt-news-ticker` | +| `notification` | `bdt-notification` | +| `offcanvas` | `bdt-offcanvas` | +| `open-street-map` | `bdt-open-street-map` | +| `panel-slider` | `bdt-panel-slider` | +| `post-block` | `bdt-post-block` | +| `post-block-modern` | `bdt-post-block-modern` | +| `post-card` | `bdt-post-card` | +| `post-comments` | `bdt-post-comments` | +| `post-content` | `bdt-post-content` | +| `post-featured-image` | `bdt-post-featured-image` | +| `post-gallery` | `bdt-post-gallery` | +| `post-grid` | `bdt-post-grid` | +| `post-grid-tab` | `bdt-post-grid-tab` | +| `post-info` | `bdt-post-info` | +| `post-list` | `bdt-post-list` | +| `post-slider` | `bdt-post-slider` | +| `post-title` | `bdt-post-title` | +| `price-list` | `bdt-price-list` | +| `price-table` | `bdt-price-table` | +| `product-carousel` | `bdt-product-carousel` | +| `product-grid` | `bdt-product-grid` | +| `profile-card` | `bdt-profile-card` | +| `progress-pie` | `bdt-progress-pie` | +| `protected-content` | `bdt-protected-content` | +| `qrcode` | `bdt-qrcode` | +| `reading-progress` | `bdt-reading-progress` | +| `reading-timer` | `bdt-reading-timer` | +| `remote-arrows` | `bdt-remote-arrows` | +| `remote-fraction` | `bdt-remote-fraction` | +| `remote-pagination` | `bdt-remote-pagination` | +| `remote-thumbs` | `bdt-remote-thumbs` | +| `review-card` | `bdt-review-card` | +| `review-card-carousel` | `bdt-review-card-carousel` | +| `review-card-grid` | `bdt-review-card-grid` | +| `scroll-button` | `bdt-scroll-button` | +| `scroll-image` | `bdt-scroll-image` | +| `scrollnav` | `bdt-scrollnav` | +| `search` | `bdt-search` | +| `single-post` | `bdt-single-post` | +| `slider` | `bdt-slider` | +| `slideshow` | `bdt-slideshow` | +| `slinky-vertical-menu` | `bdt-slinky-vertical-menu` | +| `social-proof` | `bdt-social-proof` | +| `social-share` | `bdt-social-share` | +| `source-code` | `bdt-source-code` | +| `stacker` | `bdt-stacker` | +| `static-carousel` | `bdt-static-carousel` | +| `static-grid-tab` | `bdt-static-grid-tab` | +| `step-flow` | `bdt-step-flow` | +| `sub-menu` | `bdt-sub-menu` | +| `svg-blob` | `bdt-svg-blob` | +| `svg-image` | `bdt-svg-image` | +| `svg-maps` | `bdt-svg-maps` | +| `switcher` | `bdt-switcher` | +| `table` | `bdt-table` | +| `table-of-content` | `bdt-table-of-content` | +| `tabs` | `bdt-tabs` | +| `tags-cloud` | `bdt-tags-cloud` | +| `threesixty-product-viewer` | `bdt-threesixty-product-viewer` | +| `thumb-gallery` | `bdt-thumb-gallery` | +| `time-zone` | `bdt-time-zone` | +| `timeline` | `bdt-timeline` | +| `toggle` | `bdt-toggle` | +| `total-count` | `bdt-total-count` | +| `trailer-box` | `bdt-trailer-box` | +| `twitter-carousel` | `bdt-twitter-carousel` | +| `twitter-grid` | `bdt-twitter-grid` | +| `twitter-slider` | `bdt-twitter-slider` | +| `user-login` | `bdt-user-login` | +| `user-register` | `bdt-user-register` | +| `vertical-menu` | `bdt-vertical-menu` | +| `video-gallery` | `bdt-video-gallery` | +| `video-player` | `bdt-video-player` | +| `weather` | `bdt-weather` | +| `webhook-form` | `bdt-webhook-form` | + +## Widgets de integração (95) — plugin de terceiros tem de estar activo + +### ACF (Advanced Custom Fields) (5) + +| Módulo | `widgetType` | +|---|---| +| `acf-accordion` | `bdt-acf-accordion` | +| `acf-gallery` | `bdt-acf-gallery` | +| `acf-list` | `bdt-acf-list` | +| `acf-slider` | `bdt-acf-slider` | +| `acf-tabs` | `bdt-acf-tabs` | + +### BuddyPress (3) + +| Módulo | `widgetType` | +|---|---| +| `buddypress-friends` | `bdt-buddypress-friends` | +| `buddypress-group` | `bdt-buddypress-group` | +| `buddypress-member` | `bdt-buddypress-member` | + +### Charitable (8) + +| Módulo | `widgetType` | +|---|---| +| `charitable-campaigns` | `bdt-charitable-campaigns` | +| `charitable-donation-form` | `bdt-charitable-donation-form` | +| `charitable-donations` | `bdt-charitable-donations` | +| `charitable-donors` | `bdt-charitable-donors` | +| `charitable-login` | `bdt-charitable-login` | +| `charitable-profile` | `bdt-charitable-profile` | +| `charitable-registration` | `bdt-charitable-registration` | +| `charitable-stat` | `bdt-charitable-stat` | + +### Easy Digital Downloads (15) + +| Módulo | `widgetType` | +|---|---| +| `edd-cart` | `bdt-edd-cart` | +| `edd-category-carousel` | `bdt-edd-category-carousel` | +| `edd-category-grid` | `bdt-edd-category-grid` | +| `edd-checkout` | `bdt-edd-checkout` | +| `edd-download-history` | `bdt-easy-digital-download-history` ⚠️ excepção de nome | +| `edd-login` | `bdt-edd-login` | +| `edd-mini-cart` | `bdt-edd-mini-cart` | +| `edd-product` | `bdt-edd-product` | +| `edd-product-carousel` | `bdt-edd-product-carousel` | +| `edd-product-review-carousel` | `bdt-edd-product-review-carousel` | +| `edd-product-reviews` | `bdt-edd-product-reviews` | +| `edd-profile-editor` | `bdt-easy-digital-profile-editor` ⚠️ excepção de nome | +| `edd-purchase-history` | `bdt-easy-digital-purchase-history` ⚠️ excepção de nome | +| `edd-register` | `bdt-edd-register` | +| `edd-tabs` | `bdt-edd-tabs` | + +### FooEvents (1) + +| Módulo | `widgetType` | +|---|---| +| `fooevents-calendar` | `fooevents-calendar` ⚠️ excepção de nome | + +### Formulários (vários plugins) (6) + +| Módulo | `widgetType` | +|---|---| +| `contact-form-7` | `bdt-contact-form-7` | +| `gravity-forms` | `bdt-gravity-form` ⚠️ excepção de nome | +| `ninja-forms` | `bdt-ninja-form` ⚠️ excepção de nome | +| `quform` | `bdt-quform` | +| `we-forms` | `bdt-we-form` ⚠️ excepção de nome | +| `wp-forms` | `bdt-wp-forms` | + +### Outros / a confirmar dependência (30) + +| Módulo | `widgetType` | +|---|---| +| `download-monitor` | `bdt-download-monitor` | +| `everest-forms` | `bdt-everest-forms` | +| `faq` | `bdt-faq` | +| `fluent-forms` | `bdt-fluent-forms` | +| `fooevents-calendar-carousel` | `bdt-fooevents-calendar-carousel` | +| `fooevents-calendar-events` | `bdt-fooevents-calendar-events` | +| `formidable-forms` | `bdt-formidable-forms` | +| `forminator-forms` | `bdt-forminator-forms` | +| `give-donation-history` | `bdt-give-donation-history` | +| `give-donor-wall` | `bdt-give-donor-wall` | +| `give-form` | `bdt-give-form` | +| `give-form-grid` | `bdt-give-form-grid` | +| `give-goal` | `bdt-give-goal` | +| `give-login` | `bdt-give-login` | +| `give-profile-editor` | `bdt-give-profile-editor` | +| `give-receipt` | `bdt-give-receipt` | +| `give-register` | `bdt-give-register` | +| `give-totals` | `bdt-give-totals` | +| `instagram-feed` | `bdt-instagram-feed` | +| `layer-slider` | `bdt-layer-slider` | +| `learnpress-carousel` | `bdt-learnpress-carousel` | +| `learnpress-grid` | `bdt-learnpress-grid` | +| `mailchimp-for-wp` | `bdt-mailchimp-for-wp` | +| `portfolio-carousel` | `bdt-portfolio-carousel` | +| `portfolio-gallery` | `bdt-portfolio-gallery` | +| `portfolio-list` | `bdt-portfolio-list` | +| `testimonial-carousel` | `bdt-testimonial-carousel` | +| `testimonial-grid` | `bdt-testimonial-grid` | +| `testimonial-slider` | `bdt-testimonial-slider` | +| `the-newsletter` | `bdt-the-newsletter` | + +### Slider Revolution (1) + +| Módulo | `widgetType` | +|---|---| +| `revolution-slider` | `bdt-revolution-slider` | + +### Tabelas (WP Data Tables / TablePress) (2) + +| Módulo | `widgetType` | +|---|---| +| `tablepress` | `bdt-tablepress` | +| `wpdatatable` | `bdt-wpdatatable` | + +### The Events Calendar (3) + +| Módulo | `widgetType` | +|---|---| +| `events-calendar-carousel` | `bdt-event-carousel` ⚠️ excepção de nome | +| `events-calendar-grid` | `bdt-event-grid` ⚠️ excepção de nome | +| `events-calendar-list` | `bdt-event-list` ⚠️ excepção de nome | + +### Tutor LMS (2) + +| Módulo | `widgetType` | +|---|---| +| `tutor-lms-course-carousel` | `bdt-tutor-lms-course-carousel` | +| `tutor-lms-course-grid` | `bdt-tutor-lms-course-grid` | + +### WooCommerce (7) + +| Módulo | `widgetType` | +|---|---| +| `wc-add-to-cart` | `bdt-wc-add-to-cart` | +| `wc-carousel` | `bdt-wc-carousel` | +| `wc-categories` | `bdt-wc-categories` | +| `wc-elements` | `bdt-wc-elements` | +| `wc-mini-cart` | `bdt-wc-mini-cart` | +| `wc-products` | `bdt-wc-products` | +| `wc-slider` | `bdt-wc-slider` | + +### bbPress (12) + +| Módulo | `widgetType` | +|---|---| +| `bbpress-forum-form` | `bdt-bbpress-forum-form` | +| `bbpress-forum-index` | `bdt-bbpress-forum-index` | +| `bbpress-reply-form` | `bdt-bbpress-reply-form` | +| `bbpress-single-forum` | `bdt-bbpress-single-forum` | +| `bbpress-single-reply` | `bdt-bbpress-single-reply` | +| `bbpress-single-tag` | `bdt-bbpress-single-tag` | +| `bbpress-single-topic` | `bdt-bbpress-single-topic` | +| `bbpress-single-view` | `bdt-bbpress-single-view` | +| `bbpress-stats` | `bdt-bbpress-stats` | +| `bbpress-topic-form` | `bdt-bbpress-topic-form` | +| `bbpress-topic-index` | `bdt-bbpress-topic-index` | +| `bbpress-topic-tags` | `bdt-bbpress-topic-tags` | diff --git a/wordpress/skills/mcp-element-pack/SKILL.md b/wordpress/skills/mcp-element-pack/SKILL.md new file mode 100644 index 0000000..5af5e51 --- /dev/null +++ b/wordpress/skills/mcp-element-pack/SKILL.md @@ -0,0 +1,49 @@ +--- +name: mcp-element-pack +description: MCP dedicado (node stdio, ligação `element-pack` em ~/.omp/agent/mcp.json) para gerir o Element Pack Pro (BdThemes) em descomplicar.pt — licença (read-only), módulos, mega menu, white-label, custom CSS/JS, via WP-CLI/SSH sem passar pelo EMCP Tools. Usar quando "element pack licença", "módulos element pack", "mega menu toggle", "white label element pack", "activar/desactivar widget element pack". +layer: wiki +--- + +# /mcp-element-pack — MCP dedicado Element Pack Pro (admin settings) + +Projecto em `/media/ealmeida/Dados/Dev/mcp-element-pack/` (TypeScript, SDK MCP oficial, stdio). +Não é uma extensão do EMCP Tools — é um MCP independente porque o EMCP Tools é plugin comercial +(Freemius) com catálogo de tools fixo, curado pelo autor, sem mecanismo de terceiros registarem +abilities visíveis no `list-tools`. Sem código PHP novo no WordPress: cada tool executa +`wp option get/update` via `ssh server` sobre o WP-CLI já instalado. + +## Âmbito + +Gestão de **configuração admin** do Element Pack Pro. Para **inserir/editar widgets** em páginas +Elementor (qualquer um dos 168+95 catalogados), usar a skill `element-pack-widgets` via ligação EMCP +normal — este MCP não cobre isso. + +## Tools (9) + +- `ep_get_license_status` (read-only) — licença nunca é escrita por aqui; activação exige handshake + com a API da BdThemes (`Element_Pack_Base::get_lic_key_param`), não é um simples `option update`. +- `ep_get_modules` / `ep_set_module_state` — grupos `active_modules`, `third_party_widget`, + `elementor_extend`, `other_settings`; read-modify-write, nunca substitui o array inteiro. +- `ep_get_mega_menu_toggle` / `ep_set_mega_menu_toggle` — só o toggle global + (`element_pack_other_settings.mega-menu`); edição por item de menu (postmeta `_ep_mega_menu_*`) + fica fora do âmbito v1. +- `ep_get_white_label` / `ep_set_white_label` +- `ep_get_custom_code` / `ep_set_custom_code` — blocos `ep_custom_css`/`_js` (1 e 2). + +## Segurança + +Allowlist fixa de option keys (`src/wpcli.ts`, `element_pack_*`/`ep_*`) — nunca `wp option update` +genérico. Escritas via base64 em stdin, nunca interpoladas no comando SSH remoto. + +## Verificação + +Construído e testado ponta-a-ponta contra produção 19-08-2026: leitura real (`ep_get_license_status` +→ `it@descomplicar.pt`; `ep_get_mega_menu_toggle` → `off`, ambos confirmados contra `wp option get` +directo) e escrita real com round-trip (`ep_set_custom_code`/`ep_get_custom_code` num slot vazio, +sem alterar comportamento do site). + +## Skills relacionadas +- `element-pack-widgets` — catálogo de widgets e workflow de inserção via EMCP (`get-widget-schema` + com `full:true`). +- `full-cliente` — se a licença Element Pack Pro algum dia passar a ser gerida via FULL.Cliente em + vez de licença directa BdThemes, é essa a skill certa, não esta.