--- 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