diff --git a/wordpress/skills/mcp-ai-engine/SKILL.md b/wordpress/skills/mcp-ai-engine/SKILL.md new file mode 100644 index 0000000..3527773 --- /dev/null +++ b/wordpress/skills/mcp-ai-engine/SKILL.md @@ -0,0 +1,144 @@ +--- +name: mcp-ai-engine +description: MCP dedicado (node stdio, ligação `ai-engine` em ~/.omp/agent/mcp.json) para gerir o AI Engine (Meow Apps, slug `ai-engine`) multi-site (bundle Descomplicar) via WP-CLI/SSH — estado/versão, fornecedores de IA e de embeddings/vector DB configurados (chave API SEMPRE mascarada), modelos/ambientes por omissão por tipo de tarefa, módulos/feature-toggles, chatbots/assistentes configurados, estatísticas de uso agregadas (tokens/custos por modelo/mês/dia, sem PII), add-ons, limites de utilização. Escrita: activar/desactivar um módulo, actualizar modelo/instruções de um chatbot. Usar quando "ai engine", "mwai", "meow apps", "chatbot wordpress", "mwai_options", "mwai_chatbots", "chave API openai wordpress", "fornecedor de IA configurado", "estatísticas de uso IA wordpress", "assistente de IA wordpress". +layer: wiki +--- + +# /mcp-ai-engine — MCP dedicado ao AI Engine (Meow Apps) + +Projecto em `/media/ealmeida/Dados/Dev/mcp-ai-engine/` (TypeScript, SDK MCP oficial, stdio). Cada +tool executa `wp option get/patch` via WP-CLI já instalado em `server.descomplicar.pt`. Escritas +viajam em base64 por stdin (`base64 -d | wp option patch update ...`), nunca interpoladas na linha +de comando remota. + +Não há skill de conhecimento separada para o AI Engine — esta skill é a única documentação, +incluindo o mapeamento completo de armazenamento (abaixo). + +## Âmbito + +Estado/configuração/estatísticas do plugin: fornecedores de IA e as suas capacidades, chatbots +configurados, módulos activos, defaults por tipo de tarefa, uso agregado (tokens/custos), +add-ons, limites. **Nunca** chaves API em claro. **Fora do âmbito** (excluído estruturalmente, não +por falta de tempo): histórico de conversas/discussões de visitantes (tabela `wp_mwai_chats` — +PII, e nem sequer existe ainda nos sites verificados porque o módulo `chatbot_discussions` está +desligado em todos), ficheiros enviados (`wp_mwai_files`), tarefas agendadas (`wp_mwai_tasks`), +qualquer escrita em `apikey`/`apiKey` (por desenho — ver Segurança). + +## Sites conhecidos + +Confirmado por `wp plugin list --format=csv` em todos os 8 sites reais do bundle (19-08-2026): + +| Site | Estado AI Engine | Notas | +|---|---|---| +| `starter` (starter.descomplicar.pt) | **ACTIVO**, 3.7.1 | Chatbot "Default" (`botId: default`) configurado, providers OpenAI + Claude registados **sem** chave API. Site principal de teste deste MCP. | +| `ccv` (ccv.descomplicar.pt) | Instalado, **inactivo**, 3.7.1 | Config (`mwai_options`/`mwai_chatbots`) persiste na BD mesmo com o plugin desactivado — continua legível/editável via WP-CLI. | +| `ecommerce-demo` (ecommerce-demo.descomplicar.pt) | Instalado, **inactivo**, 3.7.1 | Sem chatbots configurados (`mwai_chatbots` nunca chegou a ser gravada). | +| `ecommerce` (ecommerce.descomplicar.pt) | Instalado, **inactivo**, 3.7.1 | — | +| `descomplicar` (produção) | **NÃO instalado** | Apesar de referido como "activo" num briefing anterior — confirmado por leitura directa `wp plugin list` que NÃO está no site. | +| `emanuelalmeida`, `care`, `e-commerce` | **NÃO instalado** | — | + +`ai_engine_list_sites` devolve esta lista com as notas; qualquer tool aceita também um path +absoluto directo para uma instalação futura noutro site. + +## Mapeamento de armazenamento (confirmado por leitura do código-fonte do plugin) + +O AI Engine guarda **arrays PHP nativos** (não strings com JSON lá dentro) em 2 options — +confirmado ao vivo com `wp eval "echo gettype(get_option('mwai_options'));"` → `array`. Por isso +`--format=json` é seguro tanto para leitura como para escrita (ao contrário do WP Fastest Cache ou +do TablePress, que serializam JSON como string plana — ver `mcp-wpfc`/`mcp-tablepress`). + +| Option | Conteúdo | Formato | +|---|---|---| +| `mwai_options` (`classes/core.php`, `$option_name`) | Config principal: `ai_envs` (fornecedores de IA), `embeddings_envs` (fornecedores de embeddings/vector DB), `module_*`/`workspace_*`/`chatbot_*`/`speech_*`/`mcp_*` (feature toggles), `ai_*_default_env`/`ai_*_default_model` (defaults por tipo de tarefa: texto, fast, visão, imagens, áudio, JSON, embeddings), `ai_usage`/`ai_usage_daily` (estatísticas de uso agregadas), `addons`, `limits`/`default_limits`, `chatbot_defaults`, `logs_path`, etc. | Array PHP nativo | +| `mwai_chatbots` (`$chatbots_option_name`) | Array de chatbots/assistentes: `botId`, `name`, `model`, `instructions` (prompt de sistema), `temperature`, `maxMessages`, `maxTokens`, `apiKey` (override opcional por chatbot), tema/UI, `functions`, `mcpServers`, `crossSite`. | Array PHP nativo | +| `mwai_themes` (`$themes_option_name`) | Temas visuais custom do widget de chat. Vazio/`false` em todos os sites verificados — fora do âmbito deste MCP (não é config de IA). | Array PHP nativo (ou `false` quando nunca gravada) | + +**Gotcha confirmado ao vivo**: a option `mwai_options` lida por `wp option get` inclui campos que +o próprio plugin trata como "dinâmicos" no seu código (`populate_dynamic_options()` em +`core.php:1404`, chamado só pelo acessor interno `get_all_options()`, nunca pelo WordPress core +`get_option()`) — nomeadamente `addons` (com `enabled` calculado) e `ai_engines` (catálogo enorme +e estático de modelos por fornecedor). Na prática estes campos **já estão persistidos na BD** em +todos os sites verificados, porque o painel admin (React) faz round-trip do objecto completo que +recebe via REST (que já vem enriquecido) de volta para `update_option()` na gravação. Ou seja: não +é um artefacto deste MCP, é o estado real da BD — `ai_engine_list_addons` lê exactamente isso. +Para não agravar este "bloat" nem arriscar persistir uma cópia desactualizada do catálogo `ai_engines` +(que é grande e evolui com cada release do plugin), **nenhuma tool de escrita deste MCP relê e +regrava a option inteira** — todas usam `wp option patch update