diff --git a/wordpress/skills/mcp-jetengine/SKILL.md b/wordpress/skills/mcp-jetengine/SKILL.md index 564368e..5bf8c32 100644 --- a/wordpress/skills/mcp-jetengine/SKILL.md +++ b/wordpress/skills/mcp-jetengine/SKILL.md @@ -1,6 +1,6 @@ --- name: mcp-jetengine -description: MCP dedicado (node stdio, ligação `jetengine` em ~/.omp/agent/mcp.json) para JetEngine (Crocoblock) em descomplicar.pt — proxy transparente stdio<->HTTPS do MCP nativo do próprio plugin (Features API, v3.8.0+): registar CPT, CCT, taxonomias, meta boxes, queries do Query Builder, listings, glossários, gerir módulos, ler configuração/website-config/macros. Não duplica lógica do plugin — reencaminha `tools/list`/`tools/call` tal como o JetEngine os expõe. Usar quando "mcp jetengine", "jetengine mcp", "criar cpt via mcp", "criar cct via mcp", "add-cpt", "add-cct", "query builder mcp", "jetengine features api", "ai command center jetengine". +description: MCP dedicado (node stdio, ligação `jetengine` em ~/.omp/agent/mcp.json) para JetEngine (Crocoblock) em descomplicar.pt — proxy transparente stdio<->HTTPS do MCP nativo do próprio plugin (Features API, v3.8.0+): registar CPT, CCT, taxonomias, meta boxes, queries do Query Builder, listings, glossários, gerir módulos, ler configuração/website-config/macros. Inclui playbooks (sequências de chamadas) para directório dinâmico CPT+Query+Listing, CCT de alta performance, activação de módulos opcionais. Não duplica lógica do plugin — reencaminha `tools/list`/`tools/call` tal como o JetEngine os expõe. Usar quando "mcp jetengine", "jetengine mcp", "criar cpt via mcp", "criar cct via mcp", "add-cpt", "add-cct", "query builder mcp", "jetengine features api", "ai command center jetengine", "playbook jetengine", "directorio dinamico jetengine", "activar modulo jetengine". layer: wiki --- @@ -58,6 +58,22 @@ Schemas de input completos: chamar `tools/list` (ou o `initialize` seguido de `t proxy devolve exactamente o que `wp-json/jet-engine/v1/mcp` responde). Não documentados campo a campo aqui para evitar duplicação que fica desactualizada — a fonte de verdade é o próprio plugin. +## Playbooks — como combinar as tools + +Referência da API acima diz o que cada tool faz isoladamente; `references/playbooks.md` mostra +sequências reais de chamadas: + +1. **Ler antes de criar** — `resource-get-configuration` para evitar slugs/queries duplicados. +2. **Módulos** — confirmar/activar módulo opcional (`custom-content-types`, `maps-listings`, etc.) + antes de usar a tool que depende dele; CPT/Taxonomia/Meta Box/Query/Listing normais não + precisam de nenhum módulo. +3. **CPT + Taxonomia + Meta Box** — conteúdo editorial estruturado, três chamadas em sequência. +4. **CCT** — dados de alta performance (requer módulo `custom-content-types`). +5. **Glossário** — opções reutilizáveis para campos `select`/`checkbox`/`radio`. +6. **Query Builder + Listing** — directório dinâmico; inclui o gotcha do `enum` de `query_type` + não incluir `"custom-content-type"` apesar da descrição da tool o mencionar. +7. **Levantar contexto** — macros, config, plugins activos antes de escrever conteúdo dinâmico. + ## Segurança - Autenticação por Application Password de um utilizador `administrator` (`manage_options`) — o diff --git a/wordpress/skills/mcp-jetengine/references/playbooks.md b/wordpress/skills/mcp-jetengine/references/playbooks.md new file mode 100644 index 0000000..ee1e3bb --- /dev/null +++ b/wordpress/skills/mcp-jetengine/references/playbooks.md @@ -0,0 +1,152 @@ +# Playbooks — mcp-jetengine + +Sequências de chamadas às 11 tools nativas para tarefas reais. Todos os exemplos usam +`tools/call` com `{name, arguments}` tal como o agente vê através do proxy (`mcp-jetengine` +reencaminha verbatim). Exemplos escritos a partir do `inputSchema` real de cada tool +(`tools/list`, 19-08-2026) — não exercidos contra produção nesta sessão (ver SKILL.md +§Verificação); ler o `inputSchema` ao vivo antes de confiar cegamente num nome de campo. + +## 0. Regra geral — ler antes de criar + +Antes de registar qualquer estrutura nova, chamar `resource-get-configuration` (com os `parts` +relevantes: `post_types`, `taxonomies`, `meta_boxes`, `queries`, `custom_content_types`, +`glossaries`) para confirmar que o slug não existe já e para reutilizar queries/glossários +existentes em vez de duplicar. Evita a classe de erro "criei um CPT com o mesmo slug de outro já +existente" e mantém o site em conformidade com a regra anti-duplicação do projecto. + +## 1. Módulos — pré-requisito antes de CCT, Mapas, REST API Listings + +`custom-content-types`, `maps-listings`, `rest-api-listings`, `gallery-grid`, `gallery-slider`, +`qr-code`, `calendar`, `listing-injections`, `profile-builder`, `dynamic-visibility`, +`data-stores`, `fullwidth-block-editor` são **módulos opcionais** (JetEngine > Modules) — só +`booking-forms` estava activo em descomplicar.pt a 19-08-2026. CPT, Taxonomias, Meta Boxes, +Query Builder e Listings "normais" (não-mapa) são **núcleo do plugin**, sempre disponíveis, sem +módulo a activar. + +```json +// 1. Confirmar estado actual +{"name": "tool-manage-modules", "arguments": {"operation": "list"}} + +// 2. Activar o que falta (ex. antes de criar um CCT) +{"name": "tool-manage-modules", "arguments": {"operation": "activate", "modules": ["custom-content-types"]}} +``` + +`operation: "activate"`/`"deactivate"` aceitam vários slugs de uma vez em `modules`. Chamar +`tool-add-cct` sem o módulo `custom-content-types` activo é o erro mais provável de quem salta +este passo. + +## 2. CPT + Taxonomia + Meta Box — conteúdo editorial estruturado + +Fluxo para um tipo de conteúdo público (ex. "Casos de Estudo", "Formadores"): CPT primeiro, +taxonomia associada ao CPT, depois campos. + +```json +// 1. Post Type +{"name": "tool-add-cpt", "arguments": { + "general_settings": {"name": "Casos de Estudo", "slug": "caso-estudo"}, + "advanced_settings": {"public": true, "show_in_rest": true, "supports": ["title", "editor", "thumbnail"]} +}} + +// 2. Taxonomia associada +{"name": "tool-add-taxonomy", "arguments": { + "general_settings": {"name": "Sectores", "object_type": ["caso-estudo"]}, + "advanced_settings": {"public": true, "hierarchical": true, "show_in_rest": true} +}} + +// 3. Meta Box com campos +{"name": "tool-add-meta-box", "arguments": { + "general_settings": {"name": "Detalhes do Caso", "object_type": "post", "allowed_post_type": ["caso-estudo"]}, + "meta_fields": [ + {"name": "cliente", "type": "text", "title": "Cliente", "is_required": true}, + {"name": "resultado_percent", "type": "number", "title": "Resultado (%)"} + ] +}} +``` + +`meta_fields` aceita descritores simplificados (`name`/`type`/`title`, como acima) OU o array +JetEngine "cru" completo (`object_type: "field"`, mesmo formato usado pela UI/`references/ +automation.md` da skill `jetengine`) quando é preciso uma opção que o descritor simplificado não +cobre (ex. referência a um glossário — ver §4). + +## 3. CCT — dados de alta performance + +Usar quando o volume/velocidade de leitura importa mais do que integração nativa WP (ver tabela +CPT vs CCT na skill `jetengine`). Requer o módulo `custom-content-types` activo (§1). + +```json +{"name": "tool-add-cct", "arguments": { + "name": "Leads Formulário", + "slug": "leads_formulario", + "fields": [ + {"field_name": "nome", "field_type": "text", "is_key_field": "yes"}, + {"field_name": "email", "field_type": "text", "is_key_field": "yes"}, + {"field_name": "criado_em", "field_type": "datetime", "save_as_timestamp": true} + ] +}} +``` + +## 4. Glossário — opções reutilizáveis + +Glossário = lista de pares `value`/`label` reutilizável em vários campos `select`/`checkbox`/ +`radio`. A tool nativa só cobre o **registo do glossário**: + +```json +{"name": "tool-add-glossary", "arguments": { + "name": "Estados de Proposta", + "source": "manual", + "fields": [ + {"value": "rascunho", "label": "Rascunho", "is_checked": true}, + {"value": "enviada", "label": "Enviada"}, + {"value": "aceite", "label": "Aceite"} + ] +}} +``` + +**Não confirmado nesta sessão:** o schema simplificado de `tool-add-meta-box.meta_fields` não +expõe uma propriedade explícita "glossário" — só `options`/`choices` inline. Ligar um campo a um +glossário existente é uma funcionalidade da UI do JetEngine (campo → Options Type → Glossary); +para o fazer via este MCP, passar o item do array `meta_fields` no formato JetEngine "cru" +(`object_type: "field"`, com a chave de opções apontando para o glossário) — confirmar a chave +exacta lendo `resource-get-configuration` num meta box existente que já use um glossário, ou a +UI, antes de replicar às cegas. + +## 5. Query Builder + Listing — directório dinâmico + +```json +// 1. Query (posts normais) +{"name": "tool-add-query", "arguments": { + "name": "Casos de Estudo Recentes", + "query_type": "posts", + "query_args": {"post_type": "caso-estudo", "posts_per_page": 12, "orderby": "date", "order": "DESC"} +}} + +// 2. Listing ligado à query +{"name": "tool-add-listing", "arguments": { + "title": "Grid Casos de Estudo", + "query_id": 123, + "view_type": "elementor" +}} +``` + +**Gotcha de schema (JetEngine, não deste proxy):** a descrição de `tool-add-query` menciona +`query_type: "custom-content-type"` para consultar um CCT, mas o `enum` real do campo `query_type` +não inclui esse valor — só `sql`, `posts`, `terms`, `users`, `comments`, `repeater`, +`current-wp-query`, `merged-query`, `relations-query`. Para consultar um CCT usar +`query_type: "posts"` com `query_args.post_type` no formato `"/"` (mesmo exemplo +que a descrição da tool dá) — o `enum` é a fonte vinculativa, a descrição está desactualizada. +Confirmar contra `tools/list` ao vivo antes de assumir que isto mudou. + +Query `sql` exige `query_args.sql` não-vazio; qualquer outro tipo exige argumentos estilo +`WP_Query` (`tax_query`, `meta_query`, etc.) — chamadas sem `query_args` são rejeitadas pelo +plugin ("Requests without query_args are invalid"). + +## 6. Levantar contexto (macros, config, plugins activos) + +```json +{"name": "resource-get-macros", "arguments": {}} +{"name": "resource-get-website-config", "arguments": {"parts": {"post_types": true, "taxonomies": true, "active_plugins": true}}} +{"name": "resource-get-configuration", "arguments": {"parts": {"queries": true, "custom_content_types": true, "glossaries": true}}} +``` + +Útil antes de escrever texto/URLs dinâmicos num Listing Template ou numa Query — `%macro%` só +funciona se a macro existir e aceitar os argumentos passados.