diff --git a/wordpress/skills/mcp-jetengine/SKILL.md b/wordpress/skills/mcp-jetengine/SKILL.md new file mode 100644 index 0000000..564368e --- /dev/null +++ b/wordpress/skills/mcp-jetengine/SKILL.md @@ -0,0 +1,91 @@ +--- +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". +layer: wiki +--- + +# /mcp-jetengine — MCP dedicado ao JetEngine + +Projecto em `/media/ealmeida/Dados/Dev/mcp-jetengine/` (TypeScript, SDK MCP oficial, stdio). + +**Diferente dos MCPs irmãos (`mcp-wpfc`, `mcp-webp-express`):** o JetEngine, a partir da v3.8.0, +já expõe o seu próprio servidor MCP nativo (`Jet_Engine\MCP_Tools`, "Features API") em +`{site}/wp-json/jet-engine/v1/mcp` — JSON-RPC 2.0 sobre HTTP simples (POST, uma única resposta +JSON por pedido, sem SSE, sem sessão), autenticado por `current_user_can('manage_options')`. Este +projecto **não reimplementa nenhuma lógica de negócio** do plugin: é apenas uma ponte +stdio↔HTTPS com autenticação Basic (Application Password), porque o harness liga-se a servidores +MCP locais por stdio, não a endpoints HTTPS arbitrários fora do gateway. `tools/list` e +`tools/call` são reencaminhados verbatim — os 11 tools, nomes, descrições e schemas vistos pelo +agente são exactamente os que o próprio plugin regista, não uma cópia mantida à mão. + +## Site + +Único site do bundle com JetEngine activo (19-08-2026): **descomplicar.pt** +(`jet-engine` v3.8.11.1). Configurável via `JETENGINE_SITE_URL`/`JETENGINE_APP_USER`/ +`JETENGINE_APP_PASSWORD` no `env` da entrada `jetengine` em `mcp.json` — sem parâmetro `site` por +tool (ao contrário de `wpfc`/`webpx`) porque só há um site a servir; adicionar suporte +multi-site (registo tipo `sites.ts`) se outro site do bundle activar o plugin. + +**Activação feita nesta sessão (19-08-2026):** `jet-engine-misc-settings` não existia +(`enable_features_api` teria o default `true` mesmo assim, mas foi escrito explicitamente); +Application Password dedicada `mcp-jetengine` criada para `ealmeida`. + +## Âmbito + +Tudo o que o plugin regista na sua própria Features API. Não cobre: Relations (tabela +`wp_jet_rel_default` — sem tool nativo, ver `references/automation.md` da skill `jetengine` para +gestão via PHP/SQL), Profile Builder, Dynamic Tags dentro do Elementor, bridge MU-plugin +(`descomplicar-jet-bridge.php`, endpoint próprio `POST /wp-json/descomplicar/v1/manage` — projecto +à parte, ver skill `jetengine` §"Bridge Plugin"). + +## Tools (11, nomes nativos do plugin — 19-08-2026) + +| Tool | Read-only | Uso | +|---|---|---| +| `resource-get-configuration` | sim | CPTs, taxonomias, meta boxes, options pages, queries, relations, CCTs, endpoints REST, glossários — visão geral em JSON, por `parts` | +| `resource-get-website-config` | sim | Post types/taxonomias/plugins activos registados no WordPress (não só JetEngine) | +| `resource-get-macros` | sim | Todas as macros JetEngine com argumentos e exemplos de uso | +| `tool-manage-modules` | sim/não (`operation: list\|activate\|deactivate`) | Listar ou activar/desactivar módulos do JetEngine | +| `tool-add-cpt` | não | Registar Custom Post Type — labels, storage, meta fields, admin columns/filters | +| `tool-add-cct` | não | Registar Custom Content Type (tabela SQL própria) com campos tipados | +| `tool-add-taxonomy` | não | Registar taxonomia e associar a post types | +| `tool-add-meta-box` | não | Meta Box com campos e condições de visibilidade | +| `tool-add-query` | não | Query do Query Builder — `sql`, `posts`, `terms`, `users`, `comments`, `repeater`, `current-wp-query`, `merged-query`, `relations-query` | +| `tool-add-listing` | não | Listing item ligado a uma query existente (`elementor`/`bricks`/`twig`/`blocks`) | +| `tool-add-glossary` | não | Glossário manual (`source: "manual"`) com pares `value`/`label` | + +Schemas de input completos: chamar `tools/list` (ou o `initialize` seguido de `tools/list` — o +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. + +## Segurança + +- Autenticação por Application Password de um utilizador `administrator` (`manage_options`) — o + próprio plugin recusa (`rest_forbidden`, 401/403) sem essa capability; o proxy traduz isso num + `McpError` claro em vez de deixar a chamada rebentar em silêncio. +- Sem lógica local de bloqueio de chaves — todo o `tools/call` chega ao plugin tal como recebido + do agente. As guardas de segurança (validação de slug, sanitização de campos, etc.) são as do + próprio JetEngine, não deste MCP. +- Erros JSON-RPC de nível transporte (rede, HTTP != 200, `error` no envelope JSON-RPC — método + desconhecido, parse error) tornam-se `McpError`. Erros de execução de tool (`isError: true` no + `CallToolResult`, ex. "Tool not found") são devolvidos tal como o plugin os construiu — nunca + convertidos em excepção, para o agente poder ler o texto do erro. + +## Verificação + +Construído e testado ponta-a-ponta 19-08-2026: `tools/list` via stdio devolve os 11 tools +idênticos ao pedido directo por `curl` contra `wp-json/jet-engine/v1/mcp` (mesmos nomes, +descrições, schemas); `tools/call` real (`resource-get-macros`) devolve o mesmo JSON do plugin; +`tools/call` com nome inexistente devolve `isError: true` + `"Tool not found"` passado +verbatim. Ferramentas de escrita (`tool-add-cpt`, `tool-add-cct`, etc.) não foram exercidas contra +produção nesta sessão — mesmo caminho de código (`callJetEngine` + `tools/call`) já validado pelas +chamadas de leitura e pelo caso de erro. + +## Skills relacionadas + +- `jetengine` — conhecimento do plugin (CPT vs CCT, Relations, Query Builder, Listings, Macros, + Profile Builder, bridge MU-plugin). Consultar para entender o que uma tool faz antes de a + chamar; este MCP é o "como executar". +- `mcp-wpfc` / `mcp-webp-express` — MCPs irmãos para plugins sem API nativa (reimplementam a + gestão via WP-CLI/SSH). `mcp-jetengine` é o primeiro caso do bundle em que o próprio plugin já + fala MCP — o padrão aqui é ponte de transporte, não reimplementação.