- emcp-page-building, emcp-content-ops, emcp-site-audit: EMCP Tools MCP workflows verified live (atomic/legacy interplay, apply-template overwrite risk, create-theme-template goes live immediately, false-positive malware pattern in scan-security, change ledger + rollback) - elementor-pro-widgets: 30+5 native Elementor Pro widgets (curated catalog) - elementskit-widgets / powerpack-widgets: 42 + 97 third-party widgets, widgetType extracted from plugin source (not guessed by convention) - plugin.json bumped 1.2.0 -> 1.3.0, keywords + description updated - commits pending wordpress skills already present as untracked files (emcp-tools, wordfence, wp-activity-log, seguranca-descomplicar, webp-express, wp-fastest-cache, wp-font-perf, wp-meteor, wp-activity-log, redis-object-cache, app-for-cloudflare) and pending edits (rank-math, wp-cli, wp-content-seo-gate)
9.9 KiB
name, description, layer
| name | description | layer |
|---|---|---|
| emcp-page-building | Construção e edição de páginas Elementor via qualquer ligação MCP EMCP Tools (emcp-descomplicar, emcp-emanuelalmeida, emcp-tools/starter, ou outra). Cobre elementos atómicos Elementor 4.0+, containers/widgets legacy, templates, operações em lote, e as armadilhas reais de parâmetros/comportamento encontradas por teste ao vivo. Usar quando "construir página elementor", "emcp page building", "widget atómico", "add-flexbox", "apply-template", "criar página com mcp". | wiki |
/emcp-page-building — Construção de Páginas Elementor via EMCP Tools
Aplica-se a qualquer ligação MCP EMCP Tools, não a um site específico. Confirma sempre o site alvo com core/get-site-info antes de escrever — nunca assumas pelo nome da ligação.
Factos abaixo verificados ao vivo contra uma instalação EMCP Tools 3.12.1 em produção (Elementor 4.2.2 + Pro), revertidos depois via ledger. Descrevem o comportamento do plugin, por isso generalizam a qualquer site com a mesma versão — reverifica numa página de rascunho descartável se o site tiver uma versão materialmente diferente.
Ordem de descoberta (antes de construir algo desconhecido)
detect-elementor-version— confirma suporte atómico +recommended_mode("atomic"em sites 4.0+, usar tools atómicas por omissão).list-widgets(opcionaltier: free|pro|woo,category, ou pesquisa livre) — catálogo curado nativo Elementor/Pro/Woo. Não inclui widgets de terceiros (ElementsKit, PowerPack) — ver skillselementskit-widgetsepowerpack-widgets.get-widget-schema({ widget_type })— o parâmetro éwidget_type, nãotype. Nome errado falha com um erro genérico de "propriedade obrigatória" que não diz qual campo.get-container-schema— schema completo de controlos de container (flex + grid).get-page-structure({ post_id })antes de tocar numa página existente — conhece sempre a árvore actual antes de mutar.
Atómico (Elementor 4.0+) vs legacy — coexistem na mesma página
Confirmado ao vivo: uma página com um e-flexbox atómico (com widgets e-heading/e-paragraph filhos) ao lado de um container legacy (com um widget heading legacy) gravou e renderizou a estrutura correctamente. Não é preciso escolher um modo por página.
- Containers atómicos:
add-flexbox,add-div-block. Widgets atómicos só ligam a estes (ou a outro container atómico) comoparent_id—add-atomic-headingetc. rejeitam umcontainerlegacy como pai. - Containers legacy:
add-container. Widgets legacy (add-free-widget, ex.widget_type: "heading") só ligam a containers legacy. - Usa legacy para qualquer widget sem equivalente atómico ainda — confirmado ao vivo: widgets de terceiros como
elementskit-*/elementskit-wp-formssó existem como widgets legacy. update-elementfunciona em elementos atómicos e legacy genericamente.update-atomic-widgeté a variante de merge parcial específica para atómicos — preferir para atómicos, masupdate-elementé o fallback universal seguro.batch-update({ post_id, operations: [{element_id, settings}, ...] })actualiza vários elementos (atómicos ou legacy, misturados) numa só gravação — preferir sempre isto a N chamadas sequenciais deupdate-element.
🔴 Armadilhas confirmadas ao vivo — não confiar só na descrição da tool
set-element-label: o campo real obrigatório étitle, nãolabel, apesar da descrição "Sets an element's Navigator label" sugerirlabel. Ler o schema (read xd://mcp__<ligação>_emcp_tools_set_element_label) antes da primeira utilização numa ligação nova.add-custom-js: exigeparent_id(tem de ser um container legacy — insere um widget HTML) e o campo de código éjs, nãocode. Não liga a ume-flexbox/e-div-blockatómico.apply-templatepode substituir TODO o conteúdo existente da página em vez de inserir. Testado: chamarapply-template(post_id, template_id)sempositionexplícito numa página com 7 elementos existentes resultou em substituição total — só ficaram os elementos do template (elements_addedigual à contagem própria do template). A descrição sugere inserção ("at a given position, inserting its elements"); o comportamento observado foi sobrescrita. Sequência obrigatória:get-page-structureantes →apply-template(..., position: -1)explícito →get-page-structuredepois, comparar. Se o conteúdo foi apagado, recuperar viarollback-changena entrada mais recente delist-changespara essepost_id(ver skillemcp-site-audit) — confirmado a funcionar.create-theme-templatefica publicado de imediato, não como rascunho. Testado:create-theme-template(type:"single", title:"...")devolveustatus: "publish"comconditions.include: [{"object":"all-singular"}]por omissão — com conteúdo vazio, aplicar-se-ia de imediato a todo o singular do site. Chamar logoset-template-conditionspara restringir o alcance antes de construir conteúdo, oudelete-theme-templatede imediato se criado por engano (confirmado limpo/reversível).get-element-settingsnormaliza os wrappers$$typeatómicos;get-page-structureeexport-pagenão. Para o mesmo heading atómico,get-element-settingsdevolve{"title": "string simples"}enquanto os outros dois mostram a estrutura crua{"$$type":"html-v3","value":{"content":{"$$type":"string","value":"..."}}}. Usarget-element-settingspara "qual é o valor agora"; usarget-page-structure/export-pagepara entender ou reproduzir a estrutura crua de prop-types atómicos.set-post-termscomcreate_missing:truedeixa termos de taxonomia permanentes — sem tool de eliminação de termos no conjunto activo em nenhum site testado até agora. Confirmar o nome do termo antes de usar em conteúdo descartável/teste.
Construir uma página de raiz — sequência recomendada
create-page({ title, status: "draft" })— nunca construir directamente numa página publicada.add-flexbox({ post_id, settings: { flex_direction, gap } })(ouadd-div-block) para o primeiro container estrutural.add-containersó se precisares especificamente de comportamento legacy ou nesting sob uma árvore legacy existente.- Aninhar widgets atómicos:
add-atomic-heading/add-atomic-paragraph/add-atomic-button/add-atomic-image/add-atomic-svg/add-atomic-video/add-atomic-youtube/add-atomic-divider, ou o genéricoadd-atomic-widgetpara o que não tenha tool de conveniência. - Para qualquer widget legacy necessário (Pro/terceiros ainda sem versão atómica,
add-pro-widgetse o deny-list do site permitir):add-containerdepoisadd-free-widget. - Verificar com
get-page-structureapós cada passo relevante, não só no fim. reorder-elements,move-element,duplicate-element,remove-elementoperam por ID de elemento das chamadas de structure/find-element — nunca adivinhar IDs.set-element-label({ post_id, element_id, title })para manter o Navigator legível em páginas complexas (campotitle, ver armadilha #1).update-page-settingspara definições de página ao nível Elementor (background, padding, CSS custom — funcionalidades Pro degradam de forma graciosa se indisponíveis).- Antes de publicar:
get-page-snapshotpara um único digest normalizado (estrutura + contagens + cores/tipografia globais em uso + resumo SEO-lite) em vez de encadear chamadas separadas de structure/global-settings/classes.
Tokens de design globais
get-global-settings— kit de todo o site (cores, tipografia, espaçamento, breakpoints).update-global-colors/update-global-typography— muta o kit directamente; afecta todas as páginas que usam esses tokens, confirmar com o utilizador primeiro.list-global-classes— resolve IDsg-do Class Manager do Elementor 4.0 para nomes/CSS legíveis. Normalmente só-leitura;create-global-class/update-global-class/delete-global-class/reorder-global-classesestão comummente no deny-list (mutação de CSS partilhado) — verificar se estão montadas antes de assumir que funcionam.
Templates
list-templates(templates guardados na biblioteca Elementor, qualquer tipo: page/section/container) esave-as-templatepara criar novos. Não há tool de eliminação de template no conjunto comummente activo em nenhum site testado — guardar um template é efectivamente permanente via MCP. Obter confirmação explícita antes desave-as-template.import-template/export-pagepara estruturas JSON portáveis.- Theme Builder (
create-theme-template/list-theme-templates/get-theme-template/update-theme-template/set-template-conditions/resolve-template/delete-theme-template) — ver armadilha #4 acima.list-condition-targetsantes deset-template-conditionspara ver selectores/post-types/taxonomias válidos naquele site.
Padrão de teste seguro
Nunca experimentar numa página publicada real. create-page(status:"draft"), construir/mutar livremente, confirmar via get-page-structure, depois delete-post(post_id) (vai para o Lixo — reversível; só force:true se o utilizador pedir explicitamente remoção permanente). Verificar list-changes depois — toda a escrita aqui fica registada no ledger, por isso um teste falhado é sempre recuperável com rollback-change mesmo antes de chegares a apagar o rascunho.
Skills relacionadas
emcp-content-ops— operações de conteúdo WordPress (posts/pages/media/menus/redirects/blocos).emcp-site-audit— scan de segurança, análise de performance, acesso só-leitura a BD/filesystem, ledger de mudanças.elementor-pro-widgets— catálogo completo de widgets nativos Elementor Pro.elementskit-widgets/powerpack-widgets— catálogos de widgets de terceiros (não estão no catálogo curado do EMCP).emcp-tools— arquitectura do plugin, inventário completo de ~162 abilities, mecanismo de deny-list.