{"format":"fastapp.llm-catalog","catalogVersion":"1.0.0","generatedAt":"2026-07-15T05:40:14.069Z","routes":{"llmsTxt":"https://creator.fastapp.cloud/fastapp/public-docs/llms.txt","llmsFullTxt":"https://creator.fastapp.cloud/fastapp/public-docs/llms-full.txt","docsManifest":"https://creator.fastapp.cloud/fastapp/public-docs/manifest.json","llmCatalog":"https://creator.fastapp.cloud/fastapp/public-docs/catalog.json","apiLlmCatalog":"https://creator.fastapp.cloud/api/public-docs/catalog","mcp":"https://creator.fastapp.cloud/api/mcp","agentCatalog":"https://creator.fastapp.cloud/api/agent/catalog","agentExecute":"https://creator.fastapp.cloud/api/agent/execute"},"mcp":{"transport":"http-jsonrpc","endpoint":"https://creator.fastapp.cloud/api/mcp","protocolVersion":"2024-11-05","methods":["initialize","tools/list","tools/call"]},"docs":{"generatedAt":"2026-07-15T05:40:14.069Z","count":30,"documents":[{"id":"docs/api-parsers","source":"docs","sourceLabel":"docs/","sourcePath":"docs/api-parsers.md","routePath":"/fastapp/public-docs/page/docs/api-parsers","rawPath":"/fastapp/public-docs/raw/docs/api-parsers","slug":["docs","api-parsers"],"slugPath":"docs/api-parsers","title":"API Parsers e Exportacao","description":"As APIs dinamicas do FastApp suportam dois fluxos parecidos, mas com usos diferentes:","headings":["API Parsers e Exportacao","Parsers Inline","Exportacao De Arquivos","Escopos","Configuracao Por Objeto","UI","Limites"],"wordCount":320},{"id":"docs/backlog-agent","source":"docs","sourceLabel":"docs/","sourcePath":"docs/backlog-agent.md","routePath":"/fastapp/public-docs/page/docs/backlog-agent","rawPath":"/fastapp/public-docs/raw/docs/backlog-agent","slug":["docs","backlog-agent"],"slugPath":"docs/backlog-agent","title":"Autonomous Task Board worker","description":"The local worker polls Task Board, but only acquires cards explicitly moved to AGENT READY. The server control endpoint performs the lease operation in a Firestore transaction. The worker fails closed when that endpoint or its token is u...","headings":["Autonomous Task Board worker","Setup","Release adapter contract"],"wordCount":250},{"id":"docs/export-data/context","source":"docs","sourceLabel":"docs/","sourcePath":"docs/export-data/CONTEXT.md","routePath":"/fastapp/public-docs/page/docs/export-data/context","rawPath":"/fastapp/public-docs/raw/docs/export-data/context","slug":["docs","export-data","context"],"slugPath":"docs/export-data/context","title":"Contexto Exportacao de Dados","description":"Missao: adicionar exportacao/download de dados nas abas e views do FastApp que mostram registros de objetos. A feature deve respeitar o modelo do produto: apps sao definidos por JSON, objetos sao modulares e o runtime dinamico deve ofere...","headings":["Contexto Exportacao de Dados","Overview","Decisoes Tomadas","Evidencias Lidas","Estado das Tasks","Fase 0","Sprint feat/export data","Proximo Passo","Prompt de Continuacao"],"wordCount":1384},{"id":"docs/export-data/spec","source":"docs","sourceLabel":"docs/","sourcePath":"docs/export-data/SPEC.md","routePath":"/fastapp/public-docs/page/docs/export-data/spec","rawPath":"/fastapp/public-docs/raw/docs/export-data/spec","slug":["docs","export-data","spec"],"slugPath":"docs/export-data/spec","title":"Exportacao de Dados Spec Final","description":"Status: Sprint implementada na branch feat/export data.","headings":["Exportacao de Dados Spec Final","1. Evidencias Lidas no Repositorio","2. Como Esta Feature Deve Seguir o Modelo FastApp","3. Objetivo","4. Fora de Escopo Inicial","5. Estado Atual","6. UX Proposta","7. Contrato de API Proposto","8. Modelagem em App JSON","9. Permissionamento e Seguranca","10. Sprint feat/export data","Task 1 Contexto e planejamento SDD Concluida","Task 2 Contrato server side de exportacao Concluida","Task 3 Serializadores CSV/XLSX/PDF/JSON Concluida","Task 4 UI universal no CoreDynamicCRUD Concluida","Task 5 Escopos de exportacao Concluida","Task 6 Cobertura em CMS e views especiais Concluida","Task 7 Testes e regressao Concluida","Task 8 Documentacao final e handoff Concluida apos commit desta task","11. Decisoes Fechadas e Riscos Restantes","12. Handoff"],"wordCount":1117},{"id":"docs/fastapp-agent-project-bootstrap","source":"docs","sourceLabel":"docs/","sourcePath":"docs/FASTAPP_AGENT_PROJECT_BOOTSTRAP.md","routePath":"/fastapp/public-docs/page/docs/fastapp-agent-project-bootstrap","rawPath":"/fastapp/public-docs/raw/docs/fastapp-agent-project-bootstrap","slug":["docs","fastapp-agent-project-bootstrap"],"slugPath":"docs/fastapp-agent-project-bootstrap","title":"FastApp Agent Project Bootstrap","description":"This document defines the first structured LLM/MCP ready agent surface for FastApp.","headings":["FastApp Agent Project Bootstrap","Goal","Why This Layer Exists","First Agent","Routes","MCP Transport","Tool Model","Tool Families","Dry Run Support","Current Orchestration Status","Suggested Next Steps"],"wordCount":622},{"id":"docs/jean/contexto","source":"docs","sourceLabel":"docs/","sourcePath":"docs/jean/CONTEXTO.md","routePath":"/fastapp/public-docs/page/docs/jean/contexto","rawPath":"/fastapp/public-docs/raw/docs/jean/contexto","slug":["docs","jean","contexto"],"slugPath":"docs/jean/contexto","title":"Contexto de Trabalho Jean / FastApp","description":"Este documento registra o modo generico de trabalho no projeto FastApp. Ele deve servir para qualquer sprint, sem depender de uma feature especifica.","headings":["Contexto de Trabalho Jean / FastApp","Principios","Fluxo de Sprint","Task Board","Comunicados","Commits","Como a IA Deve Agir","Arquivos Para Entender a FastApp","Task 1 Como Fonte De Contexto"],"wordCount":617},{"id":"repo/agent-architecture","source":"repo","sourceLabel":"repository root","sourcePath":"AGENT_ARCHITECTURE.md","routePath":"/fastapp/public-docs/page/repo/agent-architecture","rawPath":"/fastapp/public-docs/raw/repo/agent-architecture","slug":["repo","agent-architecture"],"slugPath":"repo/agent-architecture","title":"🤖 FastApp Agent — Arquitetura e Guia Técnico","description":"Visão: O FastApp Agent não é apenas um chatbot. É uma camada de inteligência que lê, entende e modifica a própria estrutura de um app em tempo real — com parsing de linguagem natural, execução de APIs e feedback visual imediato.","headings":["🤖 FastApp Agent — Arquitetura e Guia Técnico","1. Os Dois Agentes Atuais","2. Arquitetura Geral","3. Contexto: O que o Agente Recebe","3.1 System Prompt (composto dinamicamente)","3.2 Escopos de Contexto (scopedContext)","4. Formatos de Output do LLM","4.1 AGENT DELTA (Schema Mutations)","AGENT DELTA","4.2 DATA ACTION (Execução de APIs)","4.3 SUGGESTION (Próximos Passos)","5. Parser: Como Funciona o parseDeltaBlocks()","Limpeza de JSON (cleanJson)","6. Merging Engine (useFastappArchitect)","Schema Sanitizer (validateAndSanitizeSchema)","7. Agent Presets System","8. Input Multimodal","Voz (Whisper STT)","Imagem (Vision)","9. Fluxo Completo de uma Interação","10. O que Funciona Bem Hoje","10.1 Estado Atual da Inteligencia AI","11. Gaps Atuais e Melhorias Propostas","🔴 Crítico"],"wordCount":1639},{"id":"repo/antigravity-guidelines","source":"repo","sourceLabel":"repository root","sourcePath":"ANTIGRAVITY_GUIDELINES.md","routePath":"/fastapp/public-docs/page/repo/antigravity-guidelines","rawPath":"/fastapp/public-docs/raw/repo/antigravity-guidelines","slug":["repo","antigravity-guidelines"],"slugPath":"repo/antigravity-guidelines","title":"🛰️ ANTIGRAVITY GUIDELINES — As Leis da Abstração Soberana (v3.1)","description":"\"Se algo é repetitivo, deve ser abstraído; se é específico, deve ser generalizado. Se é generalizável, o motor deve fazê lo sozinho.\"","headings":["🛰️ ANTIGRAVITY GUIDELINES — As Leis da Abstração Soberana (v3.1)","1. O Princípio da Generalização Soberana","2. Camadas de Core (A Escada de Abstração)","3. Orquestração de Dados (DataSources)","4. Protocolo FADAP 3.0 (Sovereign Sync & DDL)","11. Defensive Dynamic Rendering (L1/L2)","12. Metadata Integrity & Recovery","5. Alinhamento Laravel (Identity & RBAC)","6. Atributos de Comportamento (Ontologia v3)","7. AI Mutation Guard & Fetch Rule","8. Arquitetura de Performance (Architect Sync)","9. UX Singleton Pattern (The Designer Hub)","10. Taxonomy Driven GUI (Semantic Layer)"],"wordCount":1176},{"id":"repo/app-hierarchy","source":"repo","sourceLabel":"repository root","sourcePath":"APP_HIERARCHY.md","routePath":"/fastapp/public-docs/page/repo/app-hierarchy","rawPath":"/fastapp/public-docs/raw/repo/app-hierarchy","slug":["repo","app-hierarchy"],"slugPath":"repo/app-hierarchy","title":"🏛️ APP HIERARCHY — A Pirâmide de Metadados","description":"Este guia detalha a anatomia rigorosa de uma \"Aplicação\" no Fastapp Engine. A estrutura de metadados é o DNA que permite ao motor renderizar interfaces dinâmicas com inteligência.","headings":["🏛️ APP HIERARCHY — A Pirâmide de Metadados","🏛️ A Pirâmide de Abstração","📦 1. App (App)","🧱 2. Objeto (SystemObject)","🏷️ 3. Propriedades (Property)","📄 4. Páginas (Page)","🔗 Relacionamentos (Relation)","Estratégias de Persistência"],"wordCount":449},{"id":"repo/architecture","source":"repo","sourceLabel":"repository root","sourcePath":"ARCHITECTURE.md","routePath":"/fastapp/public-docs/page/repo/architecture","rawPath":"/fastapp/public-docs/raw/repo/architecture","slug":["repo","architecture"],"slugPath":"repo/architecture","title":"🏛️ Fastapp Engine — Arquitetura","description":"Documento vivo. Atualizado para refletir o motor Anti Gravity e a Sovereign Navigation Architecture .","headings":["🏛️ Fastapp Engine — Arquitetura","Visão Geral","📚 Dimensões de Documentação","Stack","Hierarquia: App → Module → Object → Property","Taxonomia Semântica de Objetos","1. Categoria Semântica (object.category)","2. Natureza Arquitetural (object.nature)","3. Relacionamentos (object.relations[])","Matriz Category × Nature","Exemplo Concreto: App Gestão de Ativos","Meta API & Gestão de Sistema","1. Snapshot (POST /api/system/snapshot)","2. Schema Evolution (PATCH /api/app/:id)","3. Storage Adaptation (POST /api/data/:object/storage) [Planejado]","4. Admin Portal (Ferramentas de Gestão)","5. Custom Pages & Dynamic Routing","Fluxo de Runtime — Onde vive a inteligência","API Dinâmica v1","Endpoints","Estratégia Híbrida: Native vs Generic","Validação Meta Driven","Filtragem & Ordenação (URL Driven)","Sistema de Snapshot"],"wordCount":1294},{"id":"repo/auth-rbac-data-scope-plan","source":"repo","sourceLabel":"repository root","sourcePath":"AUTH_RBAC_DATA_SCOPE_PLAN.md","routePath":"/fastapp/public-docs/page/repo/auth-rbac-data-scope-plan","rawPath":"/fastapp/public-docs/raw/repo/auth-rbac-data-scope-plan","slug":["repo","auth-rbac-data-scope-plan"],"slugPath":"repo/auth-rbac-data-scope-plan","title":"Auth/RBAC por App Membership em /api/v1/data","description":"Atualizado em: 2026 02 27","headings":["Auth/RBAC por App Membership em /api/v1/data","Objetivo","Status Atual","Implementado","Ajuste de abilities","Plano Tecnico por Camadas","1) Frontend","2) Backend (Nuxt BFF)","3) Backend (Laravel API)","4) Schema","5) Dados","Criterios de Aceite","Validacao de Regressao","Observacoes"],"wordCount":518},{"id":"repo/cms-v2-roadmap","source":"repo","sourceLabel":"repository root","sourcePath":"CMS_V2_ROADMAP.md","routePath":"/fastapp/public-docs/page/repo/cms-v2-roadmap","rawPath":"/fastapp/public-docs/raw/repo/cms-v2-roadmap","slug":["repo","cms-v2-roadmap"],"slugPath":"repo/cms-v2-roadmap","title":"CMS V2 Implementacao Atual e Guia Tecnico","description":"Atualizado em: 2026 02 26","headings":["CMS V2 Implementacao Atual e Guia Tecnico","Objetivo","Escopo Entregue (Sprint 1 + 1.5)","Mapa de Arquivos (Implementacao CMS)","Contratos e utilitarios","Core CMS components","Integracao nas paginas","Validacao de API","Contrato de Dados (PageSchemaV2)","Exemplo de Pagina CMS V2","Fluxo de Runtime e Persistencia","Runtime em pagina custom","Payload salvo no localStorage","Binding com Objetos (Query Mapping)","Grid 12 Colunas + Rows (Sprint 1.5)","Pontos Fortes Atuais","Gaps para ficar \"CMS real\" (mais faceis agora)","Diferencial FastApp (Abstracao + IA)","Guia Rapido para Adicionar Novo Tipo de Secao","Checklist de Validacao","Conclusao"],"wordCount":980},{"id":"repo/component-architecture","source":"repo","sourceLabel":"repository root","sourcePath":"COMPONENT_ARCHITECTURE.md","routePath":"/fastapp/public-docs/page/repo/component-architecture","rawPath":"/fastapp/public-docs/raw/repo/component-architecture","slug":["repo","component-architecture"],"slugPath":"repo/component-architecture","title":"🏗️ Arquitetura de Componentes — Padrão Dinâmico vs Concreto","description":"A estrutura de componentes do Fastapp segue a Escada de Abstração definida em ANTIGRAVITY GUIDELINES.md. A divisão de pastas reflete a intenção de separação entre o motor universal e as necessidades específicas:","headings":["🏗️ Arquitetura de Componentes — Padrão Dinâmico vs Concreto","📚 Princípio: Abstração Soberana","✅ Componentes Dinâmicos em core/","1. DynamicList.vue ✅","2. DynamicCRUD.vue ✅ [EVOLVED]","3. DynamicForm.vue ✅","4. RelationList.vue ✅","5. DynamicTable.vue ✅","6. BiWidget.vue ✅ [NEW]","7. DynamicFilter.vue ✅ [EVOLVED]","🎯 Componentes Concretos em Subpastas","components/fastapp/PropertyListEditor.vue ✅","components/crm/Kanban.vue ✅","components/crm/LeadCard.vue ✅","🏗️ Padrão de Decisão","📋 Estrutura Proposta (Pós Refactor)","🔄 Padrão de Integração","Fluxo Correto","❌ Anti Patterns","❌ Evitar","❌ Evitar Duplicação","❌ Evitar Lógica Específica em Core","✅ Boas Práticas","1️⃣ Componente Genérico em Core"],"wordCount":732},{"id":"repo/comunicado-system","source":"repo","sourceLabel":"repository root","sourcePath":"COMUNICADO_SYSTEM.md","routePath":"/fastapp/public-docs/page/repo/comunicado-system","rawPath":"/fastapp/public-docs/raw/repo/comunicado-system","slug":["repo","comunicado-system"],"slugPath":"repo/comunicado-system","title":"📣 Sistema de Comunicados — Manual Tecnico","description":"Painel de configuracao de notificacoes/alertas baseado em eventos. E mail nesta primeira fase, WhatsApp (via WAHA) na proxima. Segue o padrao do Fastapp Engine: o painel e um Object em app.objects[].","headings":["📣 Sistema de Comunicados — Manual Tecnico","1. Conceito","2. Posicionamento Arquitetural","3. Definicao do Object comunicado config","Properties","Placeholders","4. Como instalar em um App","Opcao A — Script (recomendado)","Apenas no app task board:","Em todos os apps:","Opcao B — Manual via Schema Manager","5. Roadmap — Fases","Fase 1 — Painel (✓ entregue)","Fase 2 — Dispatcher + Email (✓ entregue)","Fase 3 — WhatsApp (✓ entregue)","Fase 4 — UI Refinada","6. Como funciona o gatilho (vista geral, fase 2)","7. Exemplo Completo (caso do usuario)"],"wordCount":759},{"id":"repo/data-taxonomy","source":"repo","sourceLabel":"repository root","sourcePath":"DATA_TAXONOMY.md","routePath":"/fastapp/public-docs/page/repo/data-taxonomy","rawPath":"/fastapp/public-docs/raw/repo/data-taxonomy","slug":["repo","data-taxonomy"],"slugPath":"repo/data-taxonomy","title":"🧬 DATA TAXONOMY — A Semântica do Dado","description":"Este documento define os eixos de classificação semântica que permitem ao motor Fastapp reagir de forma inteligente à natureza dos dados. No motor Anti Gravity, a semântica governa a infraestrutura. Atualizado para a Ontologia v3 .","headings":["🧬 DATA TAXONOMY — A Semântica do Dado","🏗️ Os 3 Eixos da Taxonomia Semântica","1. Categoria Semântica (object.category)","2. Natureza Arquitetural (object.nature)","3. Orquestração Logística e Roteirização (object.routing type) [NEW]","4. Origem da API (app. e object. )","🛰️ Tipologia de Recursos e Espaço","Tipos de Recurso (object.resource type)","Tipos Espaciais (property.spatial type)","🎨 Os 2 Novos Eixos da Ontologia v3","4. Semântica de Campo (property.semantic)","5. Topologia de Apresentação (module.topology)","⛓️ Restrições de Governança (object.geo constraint)","⛓️ Relacionamentos e Persistência (object.relations)","🏗️ Reação do Motor (Behaviors)","📈 6. Extensões Analíticas (Ontologia v3) [NEW]","Propriedades Analíticas (property)","Eixos de Análise (object)","🔗 Contribuição Dimensional (relation)"],"wordCount":883},{"id":"repo/docker-run","source":"repo","sourceLabel":"repository root","sourcePath":"DOCKER_RUN.md","routePath":"/fastapp/public-docs/page/repo/docker-run","rawPath":"/fastapp/public-docs/raw/repo/docker-run","slug":["repo","docker-run"],"slugPath":"repo/docker-run","title":"Docker Commands","description":"Run these commands from g:\\FastApp in PowerShell:","headings":["Docker Commands"],"wordCount":37},{"id":"repo/drag-drop-summary","source":"repo","sourceLabel":"repository root","sourcePath":"DRAG_DROP_SUMMARY.md","routePath":"/fastapp/public-docs/page/repo/drag-drop-summary","rawPath":"/fastapp/public-docs/raw/repo/drag-drop-summary","slug":["repo","drag-drop-summary"],"slugPath":"repo/drag-drop-summary","title":"Resumo de Implementação: Reordenação Nativa Drag & Drop","description":"Integração Vuedraggable : Componente <draggable envolvendo a lista Prop Condicional : sortable (default: false) para ativar/desativar Drag Handle : Ícone ⋮⋮ com classe .drag handle Badges de Taxonomia : Exibi category, nature, status Eve...","headings":["Resumo de Implementação: Reordenação Nativa Drag & Drop","📋 O Que Foi Implementado","Componentes Criados/Modificados","🎯 Funcionalidades Implementadas","1. ✅ DynamicList.vue Drag & Drop Nativo","2. ✨ PropertyListEditor.vue Editor de Propriedades","3. ✅ schema.vue Integração no Schema Manager","🎨 Interface Visual","Antes (sem reordenação)","Depois (com Drag & Drop)","📊 Fluxo de Dados","🔧 Configuração Técnica","Vuedraggable Options","CSS Classes Aplicadas","✨ Destaques da Implementação","📝 Eventos Emitidos","DynamicList.vue","PropertyListEditor.vue","🧪 Casos de Teste","📚 Documentação","🚀 Próximos Passos","📦 Dependências"],"wordCount":425},{"id":"repo/fadap-protocol","source":"repo","sourceLabel":"repository root","sourcePath":"FADAP_PROTOCOL.md","routePath":"/fastapp/public-docs/page/repo/fadap-protocol","rawPath":"/fastapp/public-docs/raw/repo/fadap-protocol","slug":["repo","fadap-protocol"],"slugPath":"repo/fadap-protocol","title":"🔌 FADAP PROTOCOL — O Motor de Sincronização","description":"O FADAP Protocol (Fastapp Data & Architecture Protocol) rege a sincronia entre as três camadas do sistema: Metadados, Manifesto e Storage.","headings":["🔌 FADAP PROTOCOL — O Motor de Sincronização","🧩 O Problema das Três Camadas","🔄 O Ciclo de Sincronização (Fadap Sync)","🛠️ Heurísticas de Mapeamento (DDL Generator)","🧬 Ontologia v3 e o FADAP"],"wordCount":347},{"id":"repo/faq-drag-drop","source":"repo","sourceLabel":"repository root","sourcePath":"FAQ_DRAG_DROP.md","routePath":"/fastapp/public-docs/page/repo/faq-drag-drop","rawPath":"/fastapp/public-docs/raw/repo/faq-drag-drop","slug":["repo","faq-drag-drop"],"slugPath":"repo/faq-drag-drop","title":"FAQ Reordenação Drag & Drop (Perguntas Frequentes)","description":"R : Adicione a prop sortable=\"true\" ao DynamicList:","headings":["FAQ Reordenação Drag & Drop (Perguntas Frequentes)","❓ Perguntas sobre Funcionalidade","P: Como ativo a reordenação no meu componente?","P: Qual é a diferença entre DynamicList e PropertyListEditor?","P: O que é o \"drag handle\"?","P: Preciso atualizar a API quando reordenar?","P: Como funciona a sincronização com o estado \"dirty\"?","P: Posso reordenar dentro de um grupo específico?","P: O que acontece se o usuário sair sem salvar?","❓ Perguntas sobre UI/UX","P: Como faço o handle aparecer apenas ao passar o mouse?","P: Posso customizar o ícone do handle?","P: Qual é a cor durante o arraste?","P: Posso mudar a duração da animação?","P: Como funciona no mobile?","❓ Perguntas sobre Dados","P: Os dados são salvos automaticamente ao reordenar?","P: Como garanto que a ordem é única?","P: E se duas propriedades tiverem o mesmo nome?","P: Como desfaço uma reordenação?","P: Posso reordenar entre múltiplas listas?","❓ Perguntas sobre Performance","P: Qual é o limite de propriedades que posso reordenar?","P: Há lag ao arrastar muitos itens?"],"wordCount":917},{"id":"repo/fastapp-schema","source":"repo","sourceLabel":"repository root","sourcePath":"FASTAPP_SCHEMA.md","routePath":"/fastapp/public-docs/page/repo/fastapp-schema","rawPath":"/fastapp/public-docs/raw/repo/fastapp-schema","slug":["repo","fastapp-schema"],"slugPath":"repo/fastapp-schema","title":"📄 FASTAPP SCHEMA — Ciclo de Vida do Esquema","description":"O esquema do Fastapp existe em dois estados: Dinâmico (Banco de Dados) e Estático (Sistema de Arquivos) . Esta dualidade garante agilidade no desenvolvimento e robustez em produção.","headings":["📄 FASTAPP SCHEMA — Ciclo de Vida do Esquema","1. Esquema Dinâmico (Primary Source)","2. Esquema Estático (Snapshot)","🔄 Fluxo de Evolução","📐 Estrutura Técnia (V3)","📦 ObjectSchema","🔗 RelationSchema","🛠️ Custom Actions"],"wordCount":293},{"id":"repo/implementation-drag-drop","source":"repo","sourceLabel":"repository root","sourcePath":"IMPLEMENTATION_DRAG_DROP.md","routePath":"/fastapp/public-docs/page/repo/implementation-drag-drop","rawPath":"/fastapp/public-docs/raw/repo/implementation-drag-drop","slug":["repo","implementation-drag-drop"],"slugPath":"repo/implementation-drag-drop","title":"Funcionalidade de Reordenação Nativa Documentação de Implementação","description":"A funcionalidade de Drag & Drop foi implementada nativamente no componente DynamicList.vue e em um novo componente especializado PropertyListEditor.vue, permitindo que coleções de metadados (como properties em um objeto) sejam reorganiza...","headings":["Funcionalidade de Reordenação Nativa Documentação de Implementação","Visão Geral","Componentes Implementados","1. DynamicList.vue (Melhorado)","2. PropertyListEditor.vue (Novo)","Integração no Schema Manager","Mudanças Implementadas","Caso de Uso: Schema Manager","Fluxo de Uso","Exemplo Visual","Sincronização com Store","Estado \"Dirty\" Flow","Estilos e Animações","Classes CSS Personalizadas","Configuração Vuedraggable","Considerações de Performance","Testes Recomendados","Backward Compatibility","Próximas Melhorias (Sugestões)","Referências"],"wordCount":477},{"id":"repo/meta-api-spec","source":"repo","sourceLabel":"repository root","sourcePath":"META_API_SPEC.md","routePath":"/fastapp/public-docs/page/repo/meta-api-spec","rawPath":"/fastapp/public-docs/raw/repo/meta-api-spec","slug":["repo","meta-api-spec"],"slugPath":"repo/meta-api-spec","title":"🔌 META API SPEC — A Meta Interface","description":"Este documento é a referência oficial das rotas de gestão do Fastapp Engine. Estas rotas permitem gerir a estrutura das aplicações e acompanhar a evolução do ecossistema.","headings":["🔌 META API SPEC — A Meta Interface","🛠️ Gerenciamento de Aplicações (/api/app)","🚩 Listar/Criar Apps","✏️ Atualizar App (Metadata Patch)","📸 Sistema de Snapshot (/api/system)","🧊 Gerar Snapshot","🗃️ Sincronização de Storage (/api/data)","⚙️ Adaptar Storage (DDL Adapt)","📊 Endpoints de Dados (v1) (/api/v1/data)","🔍 Filtragem (Formatos Aceitos)","📑 Paginação e Ordenação","🚀 Exemplo de Requisição Completa"],"wordCount":270},{"id":"repo/product","source":"repo","sourceLabel":"repository root","sourcePath":"PRODUCT.md","routePath":"/fastapp/public-docs/page/repo/product","rawPath":"/fastapp/public-docs/raw/repo/product","slug":["repo","product"],"slugPath":"repo/product","title":"⚙️ Fastapp Engine — Produto","description":"Documento de produto. Define o quê, para quem, e para onde estamos indo sob a filosofia Anti Gravity .","headings":["⚙️ Fastapp Engine — Produto","O que é?","Para quem?","🗺️ O Mapa de Voo — As 4 Fases do Fastapp","Fase 1: O Intérprete ✅ (Base)","Fase 2: O Snapshot ✅ (Performance)","Fase 3: A Forja 🔮 (Próximo Passo)","Fase 4: O Ecossistema 🌐 (Visão)","Fase 2.5: O Arquiteto & O Gestor ✅ (Concluído)","Fase 2.75: Architect Tool Chain & Sovereign Navigation ✅ (Concluído)","Fase 3: A Forja 🔮 (Próximo Passo)","Fase 4: O Ecossistema 🌐 (Visão)","Features Implementadas","Motor Dinâmico (Core)","Schema Manager v3 (Novo) 🏗️","Inteligência Artificial (Arquiteto) 🧠","API Dinâmica","Taxonomia","Snapshot System","Dashboard de Ecossistema 🔗","CRM Flux (Modelo 01)","Admin Panel","Builder Hub & Sovereign Navigation 🛣️","Ontologia v3 (Semântica Expandida) 🧠"],"wordCount":1377},{"id":"repo/project-evolution","source":"repo","sourceLabel":"repository root","sourcePath":"PROJECT_EVOLUTION.md","routePath":"/fastapp/public-docs/page/repo/project-evolution","rawPath":"/fastapp/public-docs/raw/repo/project-evolution","slug":["repo","project-evolution"],"slugPath":"repo/project-evolution","title":"🚀 FASTAPP CORE — Evolução do Projeto (Provisório)","description":"Este documento registra os marcos alcançados e os próximos passos para a soberania do motor FastApp.","headings":["🚀 FASTAPP CORE — Evolução do Projeto (Provisório)","✅ Concluído Recentemente (Fev/2026)","🧱 Arquitetura DevShell Singleton (UX & Infra)","🎨 Componentes & Páginas Dinâmicas (Core Runtime)","🛡️ Soberania de Dados & Integridade (Stability Patch)","✅ Concluído (Março/2026)","⚡ L3 Data Engine & SWR Stability","📅 Próximos Passos (Roadmap)","🔍 Camada de Inteligência & UX (Core L3)","🌐 Conectividade & Orquestração","🧪 Robustez & Governança de Taxonomia"],"wordCount":712},{"id":"repo/protocol-schema-mutation","source":"repo","sourceLabel":"repository root","sourcePath":"PROTOCOL_SCHEMA_MUTATION.md","routePath":"/fastapp/public-docs/page/repo/protocol-schema-mutation","rawPath":"/fastapp/public-docs/raw/repo/protocol-schema-mutation","slug":["repo","protocol-schema-mutation"],"slugPath":"repo/protocol-schema-mutation","title":"Protocolo de Mutação de Schema (Anti Gravity)","description":"Este documento define o método soberano para alteração de schemas de aplicações no ecossistema FastApp. O não cumprimento deste protocolo pode comprometer a integridade da metadados e causar inconsistências entre o banco de dados e o man...","headings":["Protocolo de Mutação de Schema (Anti Gravity)","🚫 O que NÃO fazer","✅ O Método Soberano (Get Parse Modify Patch)","1. AQUISIÇÃO (Fetch)","2. PRESERVAÇÃO (Versioning/Backup)","3. MODIFICAÇÃO ESTRUTURADA (Parse & Modify)","4. APLICAÇÃO (Patch)","5. SINCRONIZAÇÃO (Snapshot)","🛠️ Ferramentas Recomendadas"],"wordCount":303},{"id":"repo/readme","source":"repo","sourceLabel":"repository root","sourcePath":"README.md","routePath":"/fastapp/public-docs/page/repo/readme","rawPath":"/fastapp/public-docs/raw/repo/readme","slug":["repo","readme"],"slugPath":"repo/readme","title":"FastApp Engine (lead nuxt)","description":"Nuxt 4 app for FastApp Engine. This repository now includes both Docker development and production deployment flows.","headings":["FastApp Engine (lead nuxt)","Deployment Target (Current)","Docker Files in This Repo","Required Runtime Environment","Local Docker (Development)","Local Docker (Nuxt + Laravel API)","VPS Production Paths","VPS Production Deploy Commands","update code here (git pull or rsync/scp)","Nginx Reverse Proxy (creator.fastapp.cloud)","Health Checks","Issues Fixed During Deploy","GitHub Actions CI/CD","Git Push Commands (Docker Changes)"],"wordCount":369},{"id":"repo/testing-guide","source":"repo","sourceLabel":"repository root","sourcePath":"TESTING_GUIDE.md","routePath":"/fastapp/public-docs/page/repo/testing-guide","rawPath":"/fastapp/public-docs/raw/repo/testing-guide","slug":["repo","testing-guide"],"slugPath":"repo/testing-guide","title":"📋 Guia de Testes Drag & Drop Reordenação","description":"!/usr/bin/env node","headings":["📋 Guia de Testes Drag & Drop Reordenação","1. Pré requisitos","2. Testes de Interface (UI)","2.1 Componente PropertyListEditor","2.2 Componente DynamicList","3. Testes Funcionais (Drag & Drop)","3.1 Reordenar Propriedades PropertyListEditor","3.2 Reordenar Registros DynamicList","4. Testes de Estado (Dirty Flag)","4.1 Marcar como Dirty","4.2 Limpar Dirty Flag","5. Testes de Persistência","5.1 Banco de Dados","6. Testes de Performance","6.1 Muitas Propriedades","7. Testes de Validação","7.1 Formários de Entrada","8. Testes de Acessibilidade","8.1 Keyboard Navigation","8.2 Responsive Design","9. Testes de Integração","9.1 Com CRM.vue (Formulários)","10. Testes de Erro","10.1 Tratamento de Erros"],"wordCount":1572},{"id":"repo/tutorial-system","source":"repo","sourceLabel":"repository root","sourcePath":"TUTORIAL_SYSTEM.md","routePath":"/fastapp/public-docs/page/repo/tutorial-system","rawPath":"/fastapp/public-docs/raw/repo/tutorial-system","slug":["repo","tutorial-system"],"slugPath":"repo/tutorial-system","title":"Sistema de Tutoriais Interativos — Manual Tecnico","description":"Documento vivo. Sistema de onboarding guiado integrado ao Fastapp Engine com Driver.js. Tutoriais vivem como JSON dentro da entidade App (Estrategia A — Cidadao Pleno do App).","headings":["Sistema de Tutoriais Interativos — Manual Tecnico","Visao Geral","Stack & Dependencias","1. Modelo de Dados (DNA)","Arquitetura: Tutorial como JSON da App","Interface: TutorialDefinition (JSON dentro de app.tutorials)","Relacionamento entre Entidades","2. Integracao Tutorial x Workflow","Conceito","Conversao de Steps","Ciclo de Vida","Utilitario: server/utils/tutorial workflow.ts","3. API Endpoints","CRUD","Status & Disponibilidade","Suporte ao Editor","Logica de Disponibilidade (available.get.ts)","4. Arquitetura de Componentes","Estrutura de Diretorios","5. Fluxo de Runtime","Fluxo Completo","6. Painel Administrativo","Acessivel em","Lista (/fastapp/tutorials)"],"wordCount":832},{"id":"repo/waha-integration","source":"repo","sourceLabel":"repository root","sourcePath":"WAHA_INTEGRATION.md","routePath":"/fastapp/public-docs/page/repo/waha-integration","rawPath":"/fastapp/public-docs/raw/repo/waha-integration","slug":["repo","waha-integration"],"slugPath":"repo/waha-integration","title":"📱 WAHA Integration — Manual Tecnico","description":"Camada de infraestrutura para envio/recebimento de mensagens WhatsApp via WAHA (https://waha.devlike.pro/). Vive em server/utils/waha.ts + server/api/waha/ — fora do dominio de metadados (App.objects).","headings":["📱 WAHA Integration — Manual Tecnico","1. Posicionamento Arquitetural","2. Configuracao de Ambiente","Subir o servidor WAHA (Docker, dev)","3. Camadas","Funcoes do wrapper (server/utils/waha.ts)","4. Endpoints Publicos (proxy)","Sessions","Mensagens","Webhook","5. Ciclo de Pareamento (primeira vez)","6. Exemplo de Envio (uso futuro pelo Painel de Comunicados)","7. Como o \"Painel de Comunicados\" vai usar isso (segunda fase)","8. Eventos do Webhook (referencia)","9. Limitacoes Conhecidas"],"wordCount":560},{"id":"repo/workflow-system","source":"repo","sourceLabel":"repository root","sourcePath":"WORKFLOW_SYSTEM.md","routePath":"/fastapp/public-docs/page/repo/workflow-system","rawPath":"/fastapp/public-docs/raw/repo/workflow-system","slug":["repo","workflow-system"],"slugPath":"repo/workflow-system","title":"🔄 Sistema de Workflow (Human Led) — Manual Técnico","description":"O Sistema de Workflow do Fastapp permite a modelagem, visualização e monitoramento de processos manuais conduzidos por humanos. Ele é integrado ao Core para permitir que a interface se adapte ao estado atual de cada registro transacional.","headings":["🔄 Sistema de Workflow (Human Led) — Manual Técnico","🧬 1. Anatomia do Metadado (DNA)","Interface: WorkflowDefinition","Interface: WorkflowStep","🎨 2. Visualização e Studio","Tecnologias Utilizadas","Comportamento de Navegação","🔄 3. Governança FADAP","🛠️ 4. Como Adicionar um Workflow","Exemplo de Payload via Meta API (App ID 19)","🚀 5. Roadmap e Integrações Futuras"],"wordCount":456}]},"schemas":{"jsonRpcRequest":{"type":"object","required":["jsonrpc","method"],"additionalProperties":false,"properties":{"jsonrpc":{"type":"string","enum":["2.0"]},"id":{"description":"String, number, or null request id."},"method":{"type":"string","enum":["initialize","tools/list","tools/call","listTools","callTool"]},"params":{"type":"object","additionalProperties":true}}},"mcpInitialize":{"type":"object","additionalProperties":true,"properties":{"protocolVersion":{"type":"string"},"capabilities":{"type":"object","additionalProperties":true},"clientInfo":{"type":"object","additionalProperties":true}}},"mcpListTools":{"type":"object","additionalProperties":false,"properties":{"agentId":{"type":"string","description":"Defaults to fastapp-generic-app-operator."},"app":{"type":"string","description":"Optional app slug/id scope."},"appSlug":{"type":"string","description":"Optional app slug scope."},"context":{"type":"object","additionalProperties":true}}},"mcpCallTool":{"type":"object","required":["name"],"additionalProperties":true,"properties":{"agentId":{"type":"string","description":"Defaults to fastapp-generic-app-operator."},"name":{"type":"string","description":"Tool name from tools/list."},"arguments":{"type":"object","additionalProperties":true},"context":{"type":"object","additionalProperties":true},"dryRun":{"type":"boolean","description":"When true, force preview/no mutation."},"write_policy":{"type":"string","enum":["preview","execute","block"],"description":"Writes default to preview unless explicit approval is supplied."},"approval":{"type":"object","additionalProperties":true,"properties":{"confirmed":{"type":"boolean"},"previewAccepted":{"type":"boolean"}}}}},"agentExecute":{"type":"object","required":["tool"],"additionalProperties":true,"properties":{"agentId":{"type":"string"},"tool":{"type":"string"},"input":{"type":"object","additionalProperties":true},"context":{"type":"object","additionalProperties":true},"dryRun":{"type":"boolean"},"write_policy":{"type":"string","enum":["preview","execute","block"]},"approval":{"type":"object","additionalProperties":true}}},"draftAppPatch":{"type":"object","required":["version","operations"],"additionalProperties":false,"properties":{"version":{"type":"integer","enum":[1]},"id":{"type":"string"},"source":{"type":"string","enum":["agent","wizard","manual"]},"reason":{"type":"string"},"operations":{"type":"array","items":{"type":"object","required":["op"],"additionalProperties":false,"properties":{"op":{"type":"string","enum":["set_app_meta","upsert_module","delete_module","upsert_object","delete_object","upsert_field","delete_field","upsert_permission","delete_permission","upsert_page","delete_page","set_validation"]},"target":{"type":"string"},"value":{"type":"object","additionalProperties":true}}}}},"examples":[{"version":1,"id":"patch-001","source":"agent","operations":[{"op":"upsert_object","target":"object.lead","value":{"name":"lead","label":"Lead","properties":[{"name":"email","type":"string","semantic":"email","required":true}]}}]}]},"links":{"mcp":"https://creator.fastapp.cloud/api/mcp","agentCatalog":"https://creator.fastapp.cloud/api/agent/catalog","agentExecute":"https://creator.fastapp.cloud/api/agent/execute"}},"agents":[{"id":"fastapp-generic-app-operator","name":"FastApp Generic App Operator","description":"A structured agent surface for reading docs, editing app schema, and managing generic data and RBAC records through Nuxt APIs.","status":"experimental","transport":"http","tags":["fastapp","llm","mcp-ready","nuxt-api","generic-app","schema-tools","rbac"],"instructions":"Use list_public_docs and get_public_doc to gather product and architecture context before changing app structure. Use list_apps and get_app to inspect current apps before mutating them. Prefer granular schema tools such as upsert_module, upsert_object, upsert_property, upsert_relation, upsert_action, and upsert_page over coarse whole-app patching. Use list_roles, create_role, list_permissions, list_memberships, create_permission, and assign_membership for RBAC management. Create roles only when the caller has platform/admin access or explicit role-create permission. Use the /api/v1/data-backed tools for runtime records inside an app and object context. Use lookup_identifier and extract_from_image to acquire external or visual data before form filling. Use aggregate_records, profile_object_data, and suggest_filters for generic analytics, summaries, grouping, KPI questions, and choosing useful table filters without hardcoded app logic. Use prepare_record_upsert before commit_record_upsert for safe generic writes across apps. Use ui_apply_filters after read/list tools when the frontend table/list should reflect the same generic filters or sort. Prefer dryRun mode before write operations when building higher-level orchestration.","tools":[{"name":"list_public_docs","title":"List Public Docs","description":"Return the public FastApp documentation manifest generated from repository markdown.","readOnly":true,"api":{"method":"GET","path":"/api/public-docs"},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"examples":[],"mcp":{"method":"tools/call","params":{"name":"list_public_docs","arguments":{}}}},{"name":"get_public_doc","title":"Get Public Doc","description":"Return a single public documentation record by slug path.","readOnly":true,"api":{"method":"GET","path":"/api/public-docs/{slugPath}"},"inputSchema":{"type":"object","required":["slugPath"],"additionalProperties":false,"properties":{"slugPath":{"type":"string","description":"Documentation slug path from the public docs manifest, for example docs/fastapp-agent-project-bootstrap."}}},"examples":[{"title":"Read the agent bootstrap document","input":{"slugPath":"docs/fastapp-agent-project-bootstrap"}}],"mcp":{"method":"tools/call","params":{"name":"get_public_doc","arguments":{}}}},{"name":"list_apps","title":"List Apps","description":"List all apps visible through the Nuxt app catalog.","readOnly":true,"api":{"method":"GET","path":"/api/app"},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"examples":[],"mcp":{"method":"tools/call","params":{"name":"list_apps","arguments":{}}}},{"name":"get_app","title":"Get App","description":"Load one app by numeric id.","readOnly":true,"api":{"method":"GET","path":"/api/app/{id}"},"inputSchema":{"type":"object","required":["id"],"additionalProperties":false,"properties":{"id":{"type":"integer","description":"Numeric app id."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"get_app","arguments":{}}}},{"name":"create_app","title":"Create App","description":"Create a new generic app, including optional modules, objects, and pages.","readOnly":false,"api":{"method":"POST","path":"/api/app"},"inputSchema":{"type":"object","required":["name"],"additionalProperties":false,"properties":{"name":{"type":"string","description":"Human-readable app name."},"slug":{"type":"string","description":"Route-safe slug. Optional on create; inferred from name when omitted."},"description":{"type":"string","description":"High-level app purpose."},"version":{"type":"string","description":"Semantic version string."},"icon":{"type":"string","description":"Optional icon token."},"is_active":{"type":"boolean","description":"Whether the app is active."},"is_frozen":{"type":"boolean","description":"Whether editing should be blocked in the app."},"default_storage":{"type":"string","description":"Default persistence strategy.","enum":["generic","native","external"]},"provider":{"type":"string","description":"App provider identifier, usually local or external."},"api_base_url":{"type":"string","description":"Base URL for API-backed app objects."},"is_api_data_source":{"type":"boolean","description":"Marks the app as backed by an external API."},"api_auth_token":{"type":"string","description":"Optional upstream API auth token."},"modules":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"App modules array."},"objects":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"App object schema array."},"pages":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"App page definition array."},"theme_config":{"type":"object","additionalProperties":true,"description":"Optional theme configuration payload."}}},"examples":[{"title":"Create a minimal task app","input":{"name":"Task Board","slug":"task-board","description":"Track tasks, assignees, and due dates.","objects":[{"name":"task","label":"Task","properties":[{"name":"title","type":"string","required":true},{"name":"due_date","type":"date"}]}]}}],"mcp":{"method":"tools/call","params":{"name":"create_app","arguments":{}}}},{"name":"update_app","title":"Update App","description":"Patch an existing app by id using the same shape accepted by the Nuxt app API.","readOnly":false,"api":{"method":"PATCH","path":"/api/app/{id}"},"inputSchema":{"type":"object","required":["id","patch"],"additionalProperties":false,"properties":{"id":{"type":"integer","description":"Numeric app id."},"patch":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string","description":"Human-readable app name."},"slug":{"type":"string","description":"Route-safe slug. Optional on create; inferred from name when omitted."},"description":{"type":"string","description":"High-level app purpose."},"version":{"type":"string","description":"Semantic version string."},"icon":{"type":"string","description":"Optional icon token."},"is_active":{"type":"boolean","description":"Whether the app is active."},"is_frozen":{"type":"boolean","description":"Whether editing should be blocked in the app."},"default_storage":{"type":"string","description":"Default persistence strategy.","enum":["generic","native","external"]},"provider":{"type":"string","description":"App provider identifier, usually local or external."},"api_base_url":{"type":"string","description":"Base URL for API-backed app objects."},"is_api_data_source":{"type":"boolean","description":"Marks the app as backed by an external API."},"api_auth_token":{"type":"string","description":"Optional upstream API auth token."},"modules":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"App modules array."},"objects":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"App object schema array."},"pages":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"App page definition array."},"theme_config":{"type":"object","additionalProperties":true,"description":"Optional theme configuration payload."}},"description":"Partial app payload to patch."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"update_app","arguments":{}}}},{"name":"delete_app","title":"Delete App","description":"Delete an app by numeric id.","readOnly":false,"api":{"method":"DELETE","path":"/api/app/{id}"},"inputSchema":{"type":"object","required":["id"],"additionalProperties":false,"properties":{"id":{"type":"integer","description":"Numeric app id."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"delete_app","arguments":{}}}},{"name":"list_records","title":"List Records","description":"List records from a generic app object using the existing /api/v1/data route.","readOnly":true,"api":{"method":"GET","path":"/api/v1/data/{app}/{object}"},"inputSchema":{"type":"object","required":["app","object"],"additionalProperties":false,"properties":{"app":{"type":"string","description":"App route segment, usually slug or id string."},"object":{"type":"string","description":"Technical object name."},"query":{"type":"object","additionalProperties":true,"description":"Optional querystring payload forwarded to the Nuxt data API."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"list_records","arguments":{}}}},{"name":"get_record","title":"Get Record","description":"Load one object record by id.","readOnly":true,"api":{"method":"GET","path":"/api/v1/data/{app}/{object}/{id}"},"inputSchema":{"type":"object","required":["app","object","id"],"additionalProperties":false,"properties":{"app":{"type":"string","description":"App route segment, usually slug or id string."},"object":{"type":"string","description":"Technical object name."},"id":{"type":"integer","description":"Record id."},"query":{"type":"object","additionalProperties":true,"description":"Optional querystring payload."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"get_record","arguments":{}}}},{"name":"create_record","title":"Create Record","description":"Create one record for an object inside the selected app context.","readOnly":false,"api":{"method":"POST","path":"/api/v1/data/{app}/{object}"},"inputSchema":{"type":"object","required":["app","object","data"],"additionalProperties":false,"properties":{"app":{"type":"string","description":"App route segment, usually slug or id string."},"object":{"type":"string","description":"Technical object name."},"data":{"type":"object","additionalProperties":true,"description":"Record payload accepted by the generic Nuxt data API."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"create_record","arguments":{}}}},{"name":"update_record","title":"Update Record","description":"Patch one record for an object inside the selected app context.","readOnly":false,"api":{"method":"PATCH","path":"/api/v1/data/{app}/{object}/{id}"},"inputSchema":{"type":"object","required":["app","object","id","data"],"additionalProperties":false,"properties":{"app":{"type":"string","description":"App route segment, usually slug or id string."},"object":{"type":"string","description":"Technical object name."},"id":{"type":"integer","description":"Record id."},"data":{"type":"object","additionalProperties":true,"description":"Partial record payload accepted by the generic Nuxt data API."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"update_record","arguments":{}}}},{"name":"delete_record","title":"Delete Record","description":"Delete one record for an object inside the selected app context.","readOnly":false,"api":{"method":"DELETE","path":"/api/v1/data/{app}/{object}/{id}"},"inputSchema":{"type":"object","required":["app","object","id"],"additionalProperties":false,"properties":{"app":{"type":"string","description":"App route segment, usually slug or id string."},"object":{"type":"string","description":"Technical object name."},"id":{"type":"integer","description":"Record id."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"delete_record","arguments":{}}}},{"name":"lookup_identifier","title":"Lookup Identifier","description":"Lookup public identifier data using pluggable providers. Works generically; CNPJ is currently implemented.","readOnly":true,"api":{"method":"POST","path":"/api/intel/lookup-identifier"},"inputSchema":{"type":"object","required":["type","value"],"additionalProperties":false,"properties":{"type":{"type":"string","description":"Identifier type, e.g. cnpj."},"value":{"type":"string","description":"Raw identifier value."},"country":{"type":"string","description":"Country code. Default BR for cnpj."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"lookup_identifier","arguments":{}}}},{"name":"extract_from_image","title":"Extract From Image","description":"Extract structured record fields from an image using vision. Generic over target object schema.","readOnly":true,"api":{"method":"POST","path":"/api/intel/extract-from-image"},"inputSchema":{"type":"object","required":["image_data"],"additionalProperties":false,"properties":{"image_data":{"type":"string","description":"Data URL or image URL."},"app":{"type":"string","description":"Optional app slug/id scope for schema resolution."},"object":{"type":"string","description":"Optional target object name."},"field_candidates":{"type":"array","items":{"type":"string"}},"locale":{"type":"string","description":"Locale hint (default pt-BR)."},"model":{"type":"string","description":"Optional vision model override."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"extract_from_image","arguments":{}}}},{"name":"prepare_record_upsert","title":"Prepare Record Upsert","description":"Prepare a generic create/update payload from arbitrary data, map to object schema, validate required fields, and detect duplicates.","readOnly":true,"api":{"method":"POST","path":"/api/intel/prepare-record-upsert"},"inputSchema":{"type":"object","required":["data"],"additionalProperties":false,"properties":{"app":{"type":"string","description":"Optional app slug/id (falls back to runtime context)."},"object":{"type":"string","description":"Optional object name (falls back to runtime context)."},"data":{"type":"object","additionalProperties":true},"match_by":{"type":"array","items":{"type":"string"}}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"prepare_record_upsert","arguments":{}}}},{"name":"commit_record_upsert","title":"Commit Record Upsert","description":"Commit a generic create/update operation with duplicate handling policy. Requires confirm=true for actual writes.","readOnly":false,"api":{"method":"POST","path":"/api/intel/commit-record-upsert"},"inputSchema":{"type":"object","required":["data"],"additionalProperties":false,"properties":{"app":{"type":"string","description":"Optional app slug/id (falls back to runtime context)."},"object":{"type":"string","description":"Optional object name (falls back to runtime context)."},"data":{"type":"object","additionalProperties":true},"mode":{"type":"string","enum":["auto","create","update","upsert"],"description":"Write mode."},"record_id":{"type":"integer","description":"Optional explicit record id for update mode."},"match_by":{"type":"array","items":{"type":"string"}},"conflict_policy":{"type":"string","enum":["abort","update_first_match","create_anyway"],"description":"How to handle duplicates in auto/upsert modes."},"confirm":{"type":"boolean","description":"Must be true to execute the write operation."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"commit_record_upsert","arguments":{}}}},{"name":"aggregate_records","title":"Aggregate Records","description":"Compute generic count, sum, average, min, max, and distinct-count metrics over any object, with optional filters, grouping, date bucketing, sorting, and RBAC-aware data access.","readOnly":true,"api":{"method":"POST","path":"/api/intel/aggregate-records"},"inputSchema":{"type":"object","required":["app","object"],"additionalProperties":false,"properties":{"app":{"type":"string","description":"App slug/id."},"object":{"type":"string","description":"Object technical name."},"query":{"type":"object","additionalProperties":true},"group_by":{"type":"array","items":{"type":"string"}},"metrics":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"field":{"type":"string","description":"Optional field to aggregate. Omit for count."},"aggregate":{"type":"string","enum":["count","count_distinct","sum","avg","min","max"],"description":"Aggregation function."},"label":{"type":"string","description":"Optional output label."}}}},"date_bucket":{"type":"object","additionalProperties":false,"properties":{"field":{"type":"string"},"interval":{"type":"string","enum":["day","week","month","year"]}}},"sort_by":{"type":"object","additionalProperties":false,"properties":{"field":{"type":"string"},"direction":{"type":"string","enum":["asc","desc"]}}},"max_rows":{"type":"integer","description":"Maximum records to scan, capped at 1000."},"limit":{"type":"integer","description":"Maximum aggregate groups returned."}}},"examples":[{"title":"Count records by status","input":{"app":"my-app","object":"lead","group_by":["status"],"metrics":[{"aggregate":"count","label":"count"}]}},{"title":"Sum amount by state","input":{"app":"my-app","object":"customer","group_by":["state"],"metrics":[{"field":"total_amount","aggregate":"sum","label":"sum_total_amount"}],"sort_by":{"field":"sum_total_amount","direction":"desc"}}}],"mcp":{"method":"tools/call","params":{"name":"aggregate_records","arguments":{}}}},{"name":"profile_object_data","title":"Profile Object Data","description":"Profile any object data set generically: field fill rates, distinct values, numeric/date summaries, and useful filter/sort candidates.","readOnly":true,"api":{"method":"POST","path":"/api/intel/profile-object-data"},"inputSchema":{"type":"object","required":["app","object"],"additionalProperties":false,"properties":{"app":{"type":"string","description":"App slug/id."},"object":{"type":"string","description":"Object technical name."},"query":{"type":"object","additionalProperties":true},"sample_size":{"type":"integer","description":"Maximum records to sample, capped at 1000."},"max_distinct":{"type":"integer","description":"Maximum top values per field."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"profile_object_data","arguments":{}}}},{"name":"suggest_filters","title":"Suggest Filters","description":"Return generic filter and sort candidates for an object using schema metadata, relations, and optional user prompt keywords.","readOnly":true,"api":{"method":"POST","path":"/api/intel/suggest-filters"},"inputSchema":{"type":"object","required":["app","object"],"additionalProperties":false,"properties":{"app":{"type":"string","description":"App slug/id."},"object":{"type":"string","description":"Object technical name."},"prompt":{"type":"string","description":"Optional user request to rank filter suggestions."},"limit":{"type":"integer","description":"Maximum suggestions returned."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"suggest_filters","arguments":{}}}},{"name":"ui_update_fields","title":"Update UI Fields","description":"Update the fields of the currently active form in the user interface. Use this to fill forms, change addresses, or update record data live.","readOnly":false,"api":{"method":"POST","path":"/api/ui/update-fields"},"inputSchema":{"type":"object","required":["fields"],"additionalProperties":false,"properties":{"fields":{"type":"object","additionalProperties":true,"description":"KV map of field names and their new values."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"ui_update_fields","arguments":{}}}},{"name":"ui_navigate","title":"Navigate UI","description":"Trigger a navigation to a specific path in the application (e.g. object list, dashboard, page).","readOnly":true,"api":{"method":"POST","path":"/api/ui/navigate"},"inputSchema":{"type":"object","required":["path"],"additionalProperties":false,"properties":{"path":{"type":"string","description":"Target application path."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"ui_navigate","arguments":{}}}},{"name":"ui_apply_filters","title":"Apply UI Filters","description":"Apply generic filters, search, and sorting to the active object list/table UI by updating the frontend query state. Use after list_records when the user is on a frontend data surface and expects the table/list to reflect the same filtered result.","readOnly":true,"api":{"method":"POST","path":"/api/ui/apply-filters"},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"app":{"type":"string","description":"Optional app slug for navigation when the target object is not the active object."},"module":{"type":"string","description":"Optional module slug for navigation."},"object":{"type":"string","description":"Optional target object technical name."},"path":{"type":"string","description":"Optional target path. If omitted, the active route is used."},"mode":{"type":"string","enum":["replace","merge"],"description":"replace clears existing filters/sort; merge keeps existing query keys."},"query":{"type":"object","additionalProperties":true,"description":"Query payload accepted by generic data views, e.g. filters[field][operator], field[operator], field=value, q, or $sort[field]."},"filters":{"type":"array","description":"Structured filters to apply.","items":{"type":"object","required":["field","value"],"additionalProperties":false,"properties":{"field":{"type":"string"},"operator":{"type":"string","description":"Generic operator such as =, $like, contains, in, >, >=, <, <=, between."},"value":{}}}},"sort":{"type":"object","additionalProperties":true,"description":"Sort map, e.g. { sale_at_max: \"desc\" } or { total: -1 }."},"search":{"type":"string","description":"Global search text."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"ui_apply_filters","arguments":{}}}},{"name":"ui_set_wizard_step","title":"Set Wizard Step","description":"Set the active step index for wizard-style forms.","readOnly":false,"api":{"method":"POST","path":"/api/ui/wizard/set-step"},"inputSchema":{"type":"object","required":["step"],"additionalProperties":false,"properties":{"step":{"type":"integer","description":"Zero-based step index to activate."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"ui_set_wizard_step","arguments":{}}}},{"name":"ui_next_wizard_step","title":"Next Wizard Step","description":"Advance the active wizard form to the next step.","readOnly":false,"api":{"method":"POST","path":"/api/ui/wizard/next-step"},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"examples":[],"mcp":{"method":"tools/call","params":{"name":"ui_next_wizard_step","arguments":{}}}},{"name":"ui_prev_wizard_step","title":"Previous Wizard Step","description":"Move the active wizard form back to the previous step.","readOnly":false,"api":{"method":"POST","path":"/api/ui/wizard/prev-step"},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"examples":[],"mcp":{"method":"tools/call","params":{"name":"ui_prev_wizard_step","arguments":{}}}},{"name":"upsert_module","title":"Upsert Module","description":"Create or update one module inside an existing app.","readOnly":false,"api":{"method":"PATCH","path":"/api/app/{id}"},"inputSchema":{"type":"object","required":["appId","module"],"additionalProperties":false,"properties":{"appId":{"type":"integer","description":"Numeric app id."},"module":{"type":"object","additionalProperties":true,"properties":{"key":{"type":"string","description":"Module key."},"slug":{"type":"string","description":"Optional module slug."},"name":{"type":"string","description":"Human-readable module name."},"icon":{"type":"string","description":"Optional icon token."},"centralObject":{"type":"string","description":"Optional central object name."},"objects":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"Optional object references array."}}}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"upsert_module","arguments":{}}}},{"name":"delete_module","title":"Delete Module","description":"Delete one module from an app by module key.","readOnly":false,"api":{"method":"PATCH","path":"/api/app/{id}"},"inputSchema":{"type":"object","required":["appId","moduleKey"],"additionalProperties":false,"properties":{"appId":{"type":"integer","description":"Numeric app id."},"moduleKey":{"type":"string","description":"Module key."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"delete_module","arguments":{}}}},{"name":"upsert_object","title":"Upsert Object","description":"Create or update one object schema inside an app, with optional module assignment.","readOnly":false,"api":{"method":"PATCH","path":"/api/app/{id}"},"inputSchema":{"type":"object","required":["appId","object"],"additionalProperties":false,"properties":{"appId":{"type":"integer","description":"Numeric app id."},"moduleKey":{"type":"string","description":"Optional module key to attach the object to."},"object":{"type":"object","additionalProperties":true,"properties":{"name":{"type":"string","description":"Object technical name."},"key":{"type":"string","description":"Optional object key alias."},"label":{"type":"string","description":"Human-readable object label."},"description":{"type":"string","description":"Optional object description."},"semantic":{"type":"string","description":"Object semantic classification."},"topology":{"type":"string","description":"Object topology classification."},"is_agent":{"type":"boolean","description":"Whether the object represents an agent actor."},"agent_metadata":{"type":"object","additionalProperties":true,"description":"Optional agent metadata payload."},"properties":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"Optional full property list."},"relations":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"Optional full relation list."},"actions":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"Optional full action list."}}}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"upsert_object","arguments":{}}}},{"name":"delete_object","title":"Delete Object","description":"Delete one object schema from an app and remove module references to it.","readOnly":false,"api":{"method":"PATCH","path":"/api/app/{id}"},"inputSchema":{"type":"object","required":["appId","objectName"],"additionalProperties":false,"properties":{"appId":{"type":"integer","description":"Numeric app id."},"objectName":{"type":"string","description":"Technical object name."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"delete_object","arguments":{}}}},{"name":"upsert_property","title":"Upsert Property","description":"Create or update one property inside an object schema.","readOnly":false,"api":{"method":"PATCH","path":"/api/app/{id}"},"inputSchema":{"type":"object","required":["appId","objectName","property"],"additionalProperties":false,"properties":{"appId":{"type":"integer","description":"Numeric app id."},"objectName":{"type":"string","description":"Technical object name."},"property":{"type":"object","additionalProperties":true,"properties":{"name":{"type":"string","description":"Property technical name."},"label":{"type":"string","description":"Human-readable property label."},"type":{"type":"string","description":"Property data type."}}}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"upsert_property","arguments":{}}}},{"name":"delete_property","title":"Delete Property","description":"Delete one property from an object schema.","readOnly":false,"api":{"method":"PATCH","path":"/api/app/{id}"},"inputSchema":{"type":"object","required":["appId","objectName","propertyName"],"additionalProperties":false,"properties":{"appId":{"type":"integer","description":"Numeric app id."},"objectName":{"type":"string","description":"Technical object name."},"propertyName":{"type":"string","description":"Property technical name."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"delete_property","arguments":{}}}},{"name":"upsert_relation","title":"Upsert Relation","description":"Create or update one relation inside an object schema.","readOnly":false,"api":{"method":"PATCH","path":"/api/app/{id}"},"inputSchema":{"type":"object","required":["appId","objectName","relation"],"additionalProperties":false,"properties":{"appId":{"type":"integer","description":"Numeric app id."},"objectName":{"type":"string","description":"Source object name."},"relation":{"type":"object","additionalProperties":true,"properties":{"name":{"type":"string","description":"Relation technical name."},"target":{"type":"string","description":"Target object name."},"type":{"type":"string","description":"Relation type."},"foreign_key":{"type":"string","description":"Foreign key field name."},"storage":{"type":"string","description":"Relation storage strategy."}}}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"upsert_relation","arguments":{}}}},{"name":"delete_relation","title":"Delete Relation","description":"Delete one relation from an object schema by target and optional type.","readOnly":false,"api":{"method":"PATCH","path":"/api/app/{id}"},"inputSchema":{"type":"object","required":["appId","objectName","targetObject"],"additionalProperties":false,"properties":{"appId":{"type":"integer","description":"Numeric app id."},"objectName":{"type":"string","description":"Source object name."},"targetObject":{"type":"string","description":"Target object name."},"relationType":{"type":"string","description":"Optional relation type."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"delete_relation","arguments":{}}}},{"name":"upsert_view","title":"Upsert View","description":"Create or update one visualization (table/kanban/list/calendar/map/gallery) on an object. Every view type has field requirements: bind the required role to an existing property (e.g. kanban.group_by → a status enum field; calendar.start → a date field; map.location → a location field). Ensure the bound property exists (via upsert_property) before adding the view.","readOnly":false,"api":{"method":"PATCH","path":"/api/app/{id}"},"inputSchema":{"type":"object","required":["appId","objectName","view"],"additionalProperties":false,"properties":{"appId":{"type":"integer","description":"Numeric app id."},"objectName":{"type":"string","description":"Technical object name the view belongs to."},"view":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string","description":"Stable view id (auto-generated from type+label if omitted)."},"type":{"type":"string","description":"View type: 'table' | 'kanban' | 'list' | 'calendar' | 'map' | 'gallery'."},"label":{"type":"string","description":"Human-readable view label."},"icon":{"type":"string","description":"Optional icon token."},"is_default":{"type":"boolean","description":"Whether this view opens by default."},"bindings":{"type":"object","additionalProperties":true,"description":"Maps view roles to property names. Each view type has REQUIRED roles: kanban→group_by (enum/foreign_key field), calendar→start (date field), map→location (location field), gallery→image, list→title.","properties":{"group_by":{"type":"string","description":"Kanban: property used for columns (enum or foreign_key)."},"title":{"type":"string","description":"Primary label property."},"subtitle":{"type":"string","description":"Secondary label property."},"start":{"type":"string","description":"Calendar: start date/datetime property."},"end":{"type":"string","description":"Calendar: end date/datetime property."},"location":{"type":"string","description":"Map: location property."},"color":{"type":"string","description":"Accent color property."},"image":{"type":"string","description":"Gallery/list: image url property."},"columns":{"type":"array","items":{"type":"string"},"description":"Table: explicit column order (property names)."}}},"filters":{"type":"object","additionalProperties":true,"description":"Optional saved filter applied when the view is active."}}}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"upsert_view","arguments":{}}}},{"name":"delete_view","title":"Delete View","description":"Delete one visualization from an object schema by view id.","readOnly":false,"api":{"method":"PATCH","path":"/api/app/{id}"},"inputSchema":{"type":"object","required":["appId","objectName","viewId"],"additionalProperties":false,"properties":{"appId":{"type":"integer","description":"Numeric app id."},"objectName":{"type":"string","description":"Technical object name."},"viewId":{"type":"string","description":"View id to remove."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"delete_view","arguments":{}}}},{"name":"upsert_action","title":"Upsert Action","description":"Create or update one action inside an object schema.","readOnly":false,"api":{"method":"PATCH","path":"/api/app/{id}"},"inputSchema":{"type":"object","required":["appId","objectName","action"],"additionalProperties":false,"properties":{"appId":{"type":"integer","description":"Numeric app id."},"objectName":{"type":"string","description":"Technical object name."},"action":{"type":"object","additionalProperties":true,"properties":{"name":{"type":"string","description":"Action technical name."},"label":{"type":"string","description":"Human-readable action label."},"method":{"type":"string","description":"HTTP verb used by the action."},"endpoint":{"type":"string","description":"Action endpoint path."}}}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"upsert_action","arguments":{}}}},{"name":"delete_action","title":"Delete Action","description":"Delete one action from an object schema.","readOnly":false,"api":{"method":"PATCH","path":"/api/app/{id}"},"inputSchema":{"type":"object","required":["appId","objectName","actionName"],"additionalProperties":false,"properties":{"appId":{"type":"integer","description":"Numeric app id."},"objectName":{"type":"string","description":"Technical object name."},"actionName":{"type":"string","description":"Action technical name."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"delete_action","arguments":{}}}},{"name":"upsert_page","title":"Upsert Page","description":"Create or update one app page.","readOnly":false,"api":{"method":"PATCH","path":"/api/app/{id}"},"inputSchema":{"type":"object","required":["appId","page"],"additionalProperties":false,"properties":{"appId":{"type":"integer","description":"Numeric app id."},"page":{"type":"object","additionalProperties":true,"properties":{"slug":{"type":"string","description":"Page slug."},"name":{"type":"string","description":"Page name."},"label":{"type":"string","description":"Page label."},"type":{"type":"string","description":"Page type, usually cms."},"path":{"type":"string","description":"Optional page path."},"icon":{"type":"string","description":"Optional icon token."},"sections":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"Optional CMS sections array."}}}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"upsert_page","arguments":{}}}},{"name":"delete_page","title":"Delete Page","description":"Delete one app page by slug.","readOnly":false,"api":{"method":"PATCH","path":"/api/app/{id}"},"inputSchema":{"type":"object","required":["appId","pageSlug"],"additionalProperties":false,"properties":{"appId":{"type":"integer","description":"Numeric app id."},"pageSlug":{"type":"string","description":"Page slug."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"delete_page","arguments":{}}}},{"name":"list_roles","title":"List Roles","description":"List role records scoped to an app.","readOnly":true,"api":{"method":"GET","path":"/api/v1/data/{app}/role"},"inputSchema":{"type":"object","required":["app"],"additionalProperties":false,"properties":{"app":{"type":"string","description":"App route segment, usually slug or id string."},"query":{"type":"object","additionalProperties":true,"description":"Optional querystring payload forwarded to the underlying Nuxt route."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"list_roles","arguments":{}}}},{"name":"create_role","title":"Create Role","description":"Create a role row scoped to an app. Requires platform/admin access or explicit role-create permission.","readOnly":false,"api":{"method":"POST","path":"/api/v1/data/{app}/role"},"inputSchema":{"type":"object","required":["app","name"],"additionalProperties":false,"properties":{"app":{"type":"string","description":"App route segment, usually slug or id string."},"name":{"type":"string","description":"Role name."},"label":{"type":"string","description":"Human-readable role label."},"data":{"type":"object","additionalProperties":true}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"create_role","arguments":{}}}},{"name":"update_role","title":"Update Role","description":"Update an existing role row.","readOnly":false,"api":{"method":"PATCH","path":"/api/v1/data/{app}/role/{id}"},"inputSchema":{"type":"object","required":["app","id","data"],"additionalProperties":false,"properties":{"app":{"type":"string","description":"App route segment, usually slug or id string."},"id":{"type":"integer","description":"Role record id."},"data":{"type":"object","additionalProperties":true}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"update_role","arguments":{}}}},{"name":"delete_role","title":"Delete Role","description":"Delete an existing role row.","readOnly":false,"api":{"method":"DELETE","path":"/api/v1/data/{app}/role/{id}"},"inputSchema":{"type":"object","required":["app","id"],"additionalProperties":false,"properties":{"app":{"type":"string","description":"App route segment, usually slug or id string."},"id":{"type":"integer","description":"Role record id."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"delete_role","arguments":{}}}},{"name":"list_permissions","title":"List Permissions","description":"List permission rows scoped to an app.","readOnly":true,"api":{"method":"GET","path":"/api/v1/data/{app}/permission"},"inputSchema":{"type":"object","required":["app"],"additionalProperties":false,"properties":{"app":{"type":"string","description":"App route segment, usually slug or id string."},"query":{"type":"object","additionalProperties":true,"description":"Optional querystring payload forwarded to the underlying Nuxt route."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"list_permissions","arguments":{}}}},{"name":"create_permission","title":"Create Permission","description":"Create a permission row for an app, role, object, and action.","readOnly":false,"api":{"method":"POST","path":"/api/v1/data/{app}/permission"},"inputSchema":{"type":"object","required":["app"],"additionalProperties":false,"properties":{"app":{"type":"string","description":"App route segment, usually slug or id string."},"role":{"type":"string","description":"Role name."},"object":{"type":"string","description":"Target object name."},"targetObject":{"type":"string","description":"Alias for the target object name."},"action":{"type":"string","description":"Permission action."},"name":{"type":"string","description":"Optional explicit permission name."},"data":{"type":"object","additionalProperties":true}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"create_permission","arguments":{}}}},{"name":"update_permission","title":"Update Permission","description":"Update a permission row.","readOnly":false,"api":{"method":"PATCH","path":"/api/v1/data/{app}/permission/{id}"},"inputSchema":{"type":"object","required":["app","id","data"],"additionalProperties":false,"properties":{"app":{"type":"string","description":"App route segment, usually slug or id string."},"id":{"type":"integer","description":"Permission record id."},"data":{"type":"object","additionalProperties":true}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"update_permission","arguments":{}}}},{"name":"delete_permission","title":"Delete Permission","description":"Delete a permission row.","readOnly":false,"api":{"method":"DELETE","path":"/api/v1/data/{app}/permission/{id}"},"inputSchema":{"type":"object","required":["app","id"],"additionalProperties":false,"properties":{"app":{"type":"string","description":"App route segment, usually slug or id string."},"id":{"type":"integer","description":"Permission record id."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"delete_permission","arguments":{}}}},{"name":"list_memberships","title":"List Memberships","description":"List app membership rows from the user_app object.","readOnly":true,"api":{"method":"GET","path":"/api/v1/data/{app}/user_app"},"inputSchema":{"type":"object","required":["app"],"additionalProperties":false,"properties":{"app":{"type":"string","description":"App route segment, usually slug or id string."},"query":{"type":"object","additionalProperties":true,"description":"Optional querystring payload forwarded to the underlying Nuxt route."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"list_memberships","arguments":{}}}},{"name":"assign_membership","title":"Assign Membership","description":"Create one user_app membership row for a user and role.","readOnly":false,"api":{"method":"POST","path":"/api/v1/data/{app}/user_app"},"inputSchema":{"type":"object","required":["app","userId","role"],"additionalProperties":false,"properties":{"app":{"type":"string","description":"App route segment, usually slug or id string."},"userId":{"type":"integer","description":"User id."},"role":{"type":"string","description":"Role name."},"referenceObject":{"type":"string","description":"Optional constrained reference object."},"referenceId":{"type":"integer","description":"Optional constrained reference id."},"data":{"type":"object","additionalProperties":true}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"assign_membership","arguments":{}}}},{"name":"update_membership","title":"Update Membership","description":"Update one user_app membership row.","readOnly":false,"api":{"method":"PATCH","path":"/api/v1/data/{app}/user_app/{id}"},"inputSchema":{"type":"object","required":["app","id","data"],"additionalProperties":false,"properties":{"app":{"type":"string","description":"App route segment, usually slug or id string."},"id":{"type":"integer","description":"Membership record id."},"data":{"type":"object","additionalProperties":true}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"update_membership","arguments":{}}}},{"name":"remove_membership","title":"Remove Membership","description":"Delete one user_app membership row.","readOnly":false,"api":{"method":"DELETE","path":"/api/v1/data/{app}/user_app/{id}"},"inputSchema":{"type":"object","required":["app","id"],"additionalProperties":false,"properties":{"app":{"type":"string","description":"App route segment, usually slug or id string."},"id":{"type":"integer","description":"Membership record id."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"remove_membership","arguments":{}}}}]},{"id":"fastapp-wizard-agent","name":"FastApp App Wizard","description":"Guided conversational wizard that translates business problem descriptions into fully configured FastApp applications through a discovery-first, propose-then-build conversation.","status":"active","transport":"http","tags":["fastapp","wizard","onboarding","app-creation","guided","llm","mcp-ready"],"instructions":"You are the FastApp Wizard. Your job: read a business description and immediately build a rich, production-quality first-draft app — or extend/modify an existing one. Always overshoot on structure; the user will trim what they don't need.\n\n## IDENTITY\n- Always reply in the user's language (Portuguese if they write Portuguese, English if English).\n- Never expose: \"schema\", \"object\", \"property\", \"taxonomy\", \"slug\", \"entity\", \"CRUD\", \"FADAP\", \"provider\", \"physical\", \"embedded\", \"virtual\", \"transactional\", \"master\". Use \"seção\" (module), plain business names (item types), \"campo\" (property).\n- Say \"quadro\" not kanban. \"Mapa\" not map mode. \"Agenda\" not resource_schedule.\n- Tone: direct, confident, no filler, no apologies.\n\n---\n\n## WHEN TO ASK VS WHEN TO BUILD\n\n**Build immediately** (no questions) when the first message contains a recognizable business domain — a single word like \"floricultura\", \"imobiliária\", \"oficina\", \"clínica\" is enough. Infer the full domain structure.\n\n**Ask at most ONE round of 2 short questions** only when the domain is completely ambiguous (e.g. \"preciso de um app\" with zero context). After ONE answer — however brief — always build. Never ask a second round.\n\nNever ask for confirmation before building. Never present a plan and wait. Just announce and build.\n\n---\n\n## OVERSHOOT PRINCIPLE — CRITICAL\nAlways build MORE than the user described. Think like a domain expert who knows what a fully operational business needs. Use your training knowledge to enumerate the full set of objects a real operator would need — not just what the user mentioned.\n\nIf the user only mentions 2-3 things, still build the FULL domain picture. The user trims extras; missing objects slow the whole project.\n\n**Minimum quality bar:** Every app MUST have at least: 2 master objects (reference data), 1 transactional object (with quadro view), 1 embedded sub-object (line items), and at least 2 explicit FK relations. Fewer than this is insufficient.\n\n---\n\n## BUILD SEQUENCE (strict order)\n\n**Step 0 — App target:**\n- No context.app_slug, or app is empty (no modules): run full creation from Step 1.\n- context.app_slug set and app has structure: skip to Step 5, apply changes directly.\n- context.app_slug set but app is empty: skip Step 2 (app already exists), run from Step 1.\n\n**Step 1:** Call wizard_get_taxonomy_guide (silent) — get the classification rules.\n\n**Step 2:** Using your own knowledge of the {domain} business type, design the complete object set internally. Do not ask — you already know what a real business in this sector needs.\n\n**Step 3:** Call wizard_create_app_with_owner — name from domain, one-sentence description, ownerUserId = context.user_id. SKIP if context.app_slug already exists.\n\n**Step 4:** Announce in one line: \"Montando o app agora...\" — then execute Steps 5-9 without stopping.\n\n**Step 5:** upsert_module for each section. After each: \"✓ Seção [Name].\"\n\n**Step 6:** upsert_object for each item type with correct taxonomy (category, nature, ui_mode, crud_mode, is_agent). After each: \"✓ [Name].\"\n\n**Step 7:** upsert_property for each field — all fields per object in sequence without pausing. Use domain example field definitions. After all fields of an object: \"✓ [N] campos para [Name].\"\n- FK fields (e.g. cliente_id) MUST be type: integer\n- Status enums MUST use domain-appropriate Portuguese stage names from the domain example (not generic New/In Progress/Done)\n- Always include: status for transactional objects, valor for financial objects, telefone+email for contact objects\n\n**Step 8 — Visualizations (quadro/agenda/mapa/galeria):** For every object that benefits from a non-table visualization, call upsert_view AFTER its fields exist. A view is generic: it binds a ROLE to one of the object's fields. Respect each view's field requirement:\n- \"quadro\" (kanban): `{ type: 'kanban', label: 'Quadro', is_default: true, bindings: { group_by: '<status enum field>', title: '<main text field>' } }` — REQUIRES an enum/foreign_key field to group by. If none exists, create the status field first (Step 7).\n- \"agenda\" (calendar): `{ type: 'calendar', label: 'Agenda', bindings: { start: '<date field>', end: '<date field>', title: '<text field>' } }` — REQUIRES a date/datetime field.\n- \"mapa\" (map): `{ type: 'map', label: 'Mapa', bindings: { location: '<location field>', title: '<text field>' } }` — REQUIRES a field of type location.\n- \"galeria\" (gallery): `{ type: 'gallery', bindings: { image: '<image url field>', title: '<text field>' } }` — REQUIRES an image field.\nSet the most useful view as is_default. Table is always implicitly available — do not create it explicitly. NEVER bind a role to a field that doesn't exist or whose type doesn't match.\n\n**Step 8b:** DO NOT call upsert_relation in this pass. Relations are handled automatically by the system in a dedicated second pass. Your job here is ONLY objects, properties, modules, views, and pages — do not output any upsert_relation calls.\n\n**Step 9:** upsert_page for each item type (auto list page).\n\n**Step 10:** If roles mentioned: create_role for each, then assign_membership.\n\n**Done:** Short summary (N seções, N tipos, N campos). Say: \"Estrutura criada! As ligações entre os tipos serão verificadas automaticamente.\"\n\n---\n\n## TAXONOMY (internal — never expose)\n- Stable reference data (clients, products, suppliers) → category: master, nature: physical\n- Event/flow records (orders, tickets, tasks) → category: transactional, nature: physical\n- Sub-items inside a parent (order lines, checklist items) → nature: embedded\n- Has status/stage field → add a kanban view (upsert_view, bindings.group_by = the status field)\n- Has location/address field → add a map view (upsert_view, bindings.location = the location field)\n- Scheduling/appointments → add a calendar view (upsert_view, bindings.start = the date field)\n- Represents a human role → is_agent: true, agent_metadata.role = role name\n- ≤8 fields → crud_mode: modal; 8–15 → crud_mode: sidebar; more → crud_mode: page\n\n## STANDARD FIELDS (apply silently — no asking)\n- Any entity with stages → status (enum, domain-specific options)\n- Any entity with ownership → responsavel (string)\n- Any entity with a deadline → data_entrega (date)\n- Any entity with money → valor (number, semantic: money)\n- People/contacts → email (semantic: email), telefone (semantic: phone)\n\n## EDITING AN EXISTING APP\nWhen context.app_slug is set and the app has structure, interpret user message as a change:\n- New section → upsert_module\n- New item type → upsert_object + upsert_page\n- New/changed fields → upsert_property\n- New relation → upsert_relation\n- New/changed visualization (\"quadro\", \"agenda\", \"mapa\", \"galeria\") → upsert_view with the correct bindings (create the required field first if missing)\n- New role/access → create_role + assign_membership\nAct immediately. No discovery phase. Confirm each change in one sentence.\n\n## ERROR HANDLING\nIf a tool call fails, say plainly what failed and ask to retry or skip. Never swallow errors.","tools":[{"name":"wizard_get_templates","title":"Get App Templates","description":"Return available app templates with descriptions and example use cases. Use this to suggest a starting point based on the user's business description.","readOnly":true,"api":{"method":"GET","path":"/api/wizard/templates"},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"examples":[],"mcp":{"method":"tools/call","params":{"name":"wizard_get_templates","arguments":{}}}},{"name":"wizard_get_taxonomy_guide","title":"Get Taxonomy Guide","description":"Return the FastApp taxonomy classification rules. Call this before creating objects to correctly classify each entity's category, nature, view mode, and actor designation.","readOnly":true,"api":{"method":"GET","path":"/api/wizard/taxonomy-guide"},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"examples":[],"mcp":{"method":"tools/call","params":{"name":"wizard_get_taxonomy_guide","arguments":{}}}},{"name":"wizard_create_app_with_owner","title":"Create App with Owner","description":"Create a new app and immediately assign the owner user as admin. Use this instead of create_app to ensure the creator has admin access from the start.","readOnly":false,"api":{"method":"POST","path":"/api/app"},"inputSchema":{"type":"object","required":["name"],"additionalProperties":false,"properties":{"name":{"type":"string","description":"Human-readable app name."},"slug":{"type":"string","description":"URL-safe slug. Inferred from name when omitted."},"description":{"type":"string","description":"One-sentence app purpose."},"icon":{"type":"string","description":"Optional icon token, e.g. pi pi-box."},"ownerUserId":{"type":"integer","description":"User ID to assign as admin. Pass context.user_id here when available."}}},"examples":[{"title":"Create a CRM app for the current user","input":{"name":"CRM Comercial","description":"Gestão de leads e oportunidades comerciais.","ownerUserId":1}}],"mcp":{"method":"tools/call","params":{"name":"wizard_create_app_with_owner","arguments":{}}}},{"name":"upsert_module","title":"Upsert Module","description":"Create or update one module inside an existing app.","readOnly":false,"api":{"method":"PATCH","path":"/api/app/{id}"},"inputSchema":{"type":"object","required":["appId","module"],"additionalProperties":false,"properties":{"appId":{"type":"integer","description":"Numeric app id."},"module":{"type":"object","additionalProperties":true,"properties":{"key":{"type":"string","description":"Module key."},"slug":{"type":"string","description":"Optional module slug."},"name":{"type":"string","description":"Human-readable module name."},"icon":{"type":"string","description":"Optional icon token."},"centralObject":{"type":"string","description":"Optional central object name."},"objects":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"Optional object references array."}}}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"upsert_module","arguments":{}}}},{"name":"upsert_object","title":"Upsert Object","description":"Create or update one object schema inside an app, with optional module assignment.","readOnly":false,"api":{"method":"PATCH","path":"/api/app/{id}"},"inputSchema":{"type":"object","required":["appId","object"],"additionalProperties":false,"properties":{"appId":{"type":"integer","description":"Numeric app id."},"moduleKey":{"type":"string","description":"Optional module key to attach the object to."},"object":{"type":"object","additionalProperties":true,"properties":{"name":{"type":"string","description":"Object technical name."},"key":{"type":"string","description":"Optional object key alias."},"label":{"type":"string","description":"Human-readable object label."},"description":{"type":"string","description":"Optional object description."},"semantic":{"type":"string","description":"Object semantic classification."},"topology":{"type":"string","description":"Object topology classification."},"is_agent":{"type":"boolean","description":"Whether the object represents an agent actor."},"agent_metadata":{"type":"object","additionalProperties":true,"description":"Optional agent metadata payload."},"properties":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"Optional full property list."},"relations":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"Optional full relation list."},"actions":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"Optional full action list."}}}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"upsert_object","arguments":{}}}},{"name":"upsert_property","title":"Upsert Property","description":"Create or update one property inside an object schema.","readOnly":false,"api":{"method":"PATCH","path":"/api/app/{id}"},"inputSchema":{"type":"object","required":["appId","objectName","property"],"additionalProperties":false,"properties":{"appId":{"type":"integer","description":"Numeric app id."},"objectName":{"type":"string","description":"Technical object name."},"property":{"type":"object","additionalProperties":true,"properties":{"name":{"type":"string","description":"Property technical name."},"label":{"type":"string","description":"Human-readable property label."},"type":{"type":"string","description":"Property data type."}}}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"upsert_property","arguments":{}}}},{"name":"upsert_relation","title":"Upsert Relation","description":"Create or update one relation inside an object schema.","readOnly":false,"api":{"method":"PATCH","path":"/api/app/{id}"},"inputSchema":{"type":"object","required":["appId","objectName","relation"],"additionalProperties":false,"properties":{"appId":{"type":"integer","description":"Numeric app id."},"objectName":{"type":"string","description":"Source object name."},"relation":{"type":"object","additionalProperties":true,"properties":{"name":{"type":"string","description":"Relation technical name."},"target":{"type":"string","description":"Target object name."},"type":{"type":"string","description":"Relation type."},"foreign_key":{"type":"string","description":"Foreign key field name."},"storage":{"type":"string","description":"Relation storage strategy."}}}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"upsert_relation","arguments":{}}}},{"name":"upsert_view","title":"Upsert View","description":"Create or update one visualization (table/kanban/list/calendar/map/gallery) on an object. Every view type has field requirements: bind the required role to an existing property (e.g. kanban.group_by → a status enum field; calendar.start → a date field; map.location → a location field). Ensure the bound property exists (via upsert_property) before adding the view.","readOnly":false,"api":{"method":"PATCH","path":"/api/app/{id}"},"inputSchema":{"type":"object","required":["appId","objectName","view"],"additionalProperties":false,"properties":{"appId":{"type":"integer","description":"Numeric app id."},"objectName":{"type":"string","description":"Technical object name the view belongs to."},"view":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string","description":"Stable view id (auto-generated from type+label if omitted)."},"type":{"type":"string","description":"View type: 'table' | 'kanban' | 'list' | 'calendar' | 'map' | 'gallery'."},"label":{"type":"string","description":"Human-readable view label."},"icon":{"type":"string","description":"Optional icon token."},"is_default":{"type":"boolean","description":"Whether this view opens by default."},"bindings":{"type":"object","additionalProperties":true,"description":"Maps view roles to property names. Each view type has REQUIRED roles: kanban→group_by (enum/foreign_key field), calendar→start (date field), map→location (location field), gallery→image, list→title.","properties":{"group_by":{"type":"string","description":"Kanban: property used for columns (enum or foreign_key)."},"title":{"type":"string","description":"Primary label property."},"subtitle":{"type":"string","description":"Secondary label property."},"start":{"type":"string","description":"Calendar: start date/datetime property."},"end":{"type":"string","description":"Calendar: end date/datetime property."},"location":{"type":"string","description":"Map: location property."},"color":{"type":"string","description":"Accent color property."},"image":{"type":"string","description":"Gallery/list: image url property."},"columns":{"type":"array","items":{"type":"string"},"description":"Table: explicit column order (property names)."}}},"filters":{"type":"object","additionalProperties":true,"description":"Optional saved filter applied when the view is active."}}}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"upsert_view","arguments":{}}}},{"name":"upsert_action","title":"Upsert Action","description":"Create or update one action inside an object schema.","readOnly":false,"api":{"method":"PATCH","path":"/api/app/{id}"},"inputSchema":{"type":"object","required":["appId","objectName","action"],"additionalProperties":false,"properties":{"appId":{"type":"integer","description":"Numeric app id."},"objectName":{"type":"string","description":"Technical object name."},"action":{"type":"object","additionalProperties":true,"properties":{"name":{"type":"string","description":"Action technical name."},"label":{"type":"string","description":"Human-readable action label."},"method":{"type":"string","description":"HTTP verb used by the action."},"endpoint":{"type":"string","description":"Action endpoint path."}}}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"upsert_action","arguments":{}}}},{"name":"upsert_page","title":"Upsert Page","description":"Create or update one app page.","readOnly":false,"api":{"method":"PATCH","path":"/api/app/{id}"},"inputSchema":{"type":"object","required":["appId","page"],"additionalProperties":false,"properties":{"appId":{"type":"integer","description":"Numeric app id."},"page":{"type":"object","additionalProperties":true,"properties":{"slug":{"type":"string","description":"Page slug."},"name":{"type":"string","description":"Page name."},"label":{"type":"string","description":"Page label."},"type":{"type":"string","description":"Page type, usually cms."},"path":{"type":"string","description":"Optional page path."},"icon":{"type":"string","description":"Optional icon token."},"sections":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"Optional CMS sections array."}}}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"upsert_page","arguments":{}}}},{"name":"list_roles","title":"List Roles","description":"List role records scoped to an app.","readOnly":true,"api":{"method":"GET","path":"/api/v1/data/{app}/role"},"inputSchema":{"type":"object","required":["app"],"additionalProperties":false,"properties":{"app":{"type":"string","description":"App route segment, usually slug or id string."},"query":{"type":"object","additionalProperties":true,"description":"Optional querystring payload forwarded to the underlying Nuxt route."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"list_roles","arguments":{}}}},{"name":"create_role","title":"Create Role","description":"Create a role row scoped to an app. Requires platform/admin access or explicit role-create permission.","readOnly":false,"api":{"method":"POST","path":"/api/v1/data/{app}/role"},"inputSchema":{"type":"object","required":["app","name"],"additionalProperties":false,"properties":{"app":{"type":"string","description":"App route segment, usually slug or id string."},"name":{"type":"string","description":"Role name."},"label":{"type":"string","description":"Human-readable role label."},"data":{"type":"object","additionalProperties":true}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"create_role","arguments":{}}}},{"name":"update_role","title":"Update Role","description":"Update an existing role row.","readOnly":false,"api":{"method":"PATCH","path":"/api/v1/data/{app}/role/{id}"},"inputSchema":{"type":"object","required":["app","id","data"],"additionalProperties":false,"properties":{"app":{"type":"string","description":"App route segment, usually slug or id string."},"id":{"type":"integer","description":"Role record id."},"data":{"type":"object","additionalProperties":true}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"update_role","arguments":{}}}},{"name":"list_permissions","title":"List Permissions","description":"List permission rows scoped to an app.","readOnly":true,"api":{"method":"GET","path":"/api/v1/data/{app}/permission"},"inputSchema":{"type":"object","required":["app"],"additionalProperties":false,"properties":{"app":{"type":"string","description":"App route segment, usually slug or id string."},"query":{"type":"object","additionalProperties":true,"description":"Optional querystring payload forwarded to the underlying Nuxt route."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"list_permissions","arguments":{}}}},{"name":"create_permission","title":"Create Permission","description":"Create a permission row for an app, role, object, and action.","readOnly":false,"api":{"method":"POST","path":"/api/v1/data/{app}/permission"},"inputSchema":{"type":"object","required":["app"],"additionalProperties":false,"properties":{"app":{"type":"string","description":"App route segment, usually slug or id string."},"role":{"type":"string","description":"Role name."},"object":{"type":"string","description":"Target object name."},"targetObject":{"type":"string","description":"Alias for the target object name."},"action":{"type":"string","description":"Permission action."},"name":{"type":"string","description":"Optional explicit permission name."},"data":{"type":"object","additionalProperties":true}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"create_permission","arguments":{}}}},{"name":"list_memberships","title":"List Memberships","description":"List app membership rows from the user_app object.","readOnly":true,"api":{"method":"GET","path":"/api/v1/data/{app}/user_app"},"inputSchema":{"type":"object","required":["app"],"additionalProperties":false,"properties":{"app":{"type":"string","description":"App route segment, usually slug or id string."},"query":{"type":"object","additionalProperties":true,"description":"Optional querystring payload forwarded to the underlying Nuxt route."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"list_memberships","arguments":{}}}},{"name":"assign_membership","title":"Assign Membership","description":"Create one user_app membership row for a user and role.","readOnly":false,"api":{"method":"POST","path":"/api/v1/data/{app}/user_app"},"inputSchema":{"type":"object","required":["app","userId","role"],"additionalProperties":false,"properties":{"app":{"type":"string","description":"App route segment, usually slug or id string."},"userId":{"type":"integer","description":"User id."},"role":{"type":"string","description":"Role name."},"referenceObject":{"type":"string","description":"Optional constrained reference object."},"referenceId":{"type":"integer","description":"Optional constrained reference id."},"data":{"type":"object","additionalProperties":true}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"assign_membership","arguments":{}}}},{"name":"list_apps","title":"List Apps","description":"List all apps visible through the Nuxt app catalog.","readOnly":true,"api":{"method":"GET","path":"/api/app"},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"examples":[],"mcp":{"method":"tools/call","params":{"name":"list_apps","arguments":{}}}},{"name":"get_app","title":"Get App","description":"Load one app by numeric id.","readOnly":true,"api":{"method":"GET","path":"/api/app/{id}"},"inputSchema":{"type":"object","required":["id"],"additionalProperties":false,"properties":{"id":{"type":"integer","description":"Numeric app id."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"get_app","arguments":{}}}},{"name":"ui_navigate","title":"Navigate UI","description":"Trigger a navigation to a specific path in the application (e.g. object list, dashboard, page).","readOnly":true,"api":{"method":"POST","path":"/api/ui/navigate"},"inputSchema":{"type":"object","required":["path"],"additionalProperties":false,"properties":{"path":{"type":"string","description":"Target application path."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"ui_navigate","arguments":{}}}},{"name":"ui_set_wizard_step","title":"Set Wizard Step","description":"Set the active step index for wizard-style forms.","readOnly":false,"api":{"method":"POST","path":"/api/ui/wizard/set-step"},"inputSchema":{"type":"object","required":["step"],"additionalProperties":false,"properties":{"step":{"type":"integer","description":"Zero-based step index to activate."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"ui_set_wizard_step","arguments":{}}}},{"name":"ui_next_wizard_step","title":"Next Wizard Step","description":"Advance the active wizard form to the next step.","readOnly":false,"api":{"method":"POST","path":"/api/ui/wizard/next-step"},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"examples":[],"mcp":{"method":"tools/call","params":{"name":"ui_next_wizard_step","arguments":{}}}}]},{"id":"cs-buddy","name":"CS Buddy","description":"Customer Success Specialist","status":"active","transport":"http","tags":["dynamic","app"],"instructions":"Você é um especialista em Customer Success. Ajude o usuário a gerenciar seus clientes e leads com empatia e precisão.","tools":[{"name":"list_records","title":"List Records","description":"List records from a generic app object using the existing /api/v1/data route.","readOnly":true,"api":{"method":"GET","path":"/api/v1/data/{app}/{object}"},"inputSchema":{"type":"object","required":["app","object"],"additionalProperties":false,"properties":{"app":{"type":"string","description":"App route segment, usually slug or id string."},"object":{"type":"string","description":"Technical object name."},"query":{"type":"object","additionalProperties":true,"description":"Optional querystring payload forwarded to the Nuxt data API."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"list_records","arguments":{}}}},{"name":"ui_update_fields","title":"Update UI Fields","description":"Update the fields of the currently active form in the user interface. Use this to fill forms, change addresses, or update record data live.","readOnly":false,"api":{"method":"POST","path":"/api/ui/update-fields"},"inputSchema":{"type":"object","required":["fields"],"additionalProperties":false,"properties":{"fields":{"type":"object","additionalProperties":true,"description":"KV map of field names and their new values."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"ui_update_fields","arguments":{}}}},{"name":"ui_navigate","title":"Navigate UI","description":"Trigger a navigation to a specific path in the application (e.g. object list, dashboard, page).","readOnly":true,"api":{"method":"POST","path":"/api/ui/navigate"},"inputSchema":{"type":"object","required":["path"],"additionalProperties":false,"properties":{"path":{"type":"string","description":"Target application path."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"ui_navigate","arguments":{}}}},{"name":"ui_apply_filters","title":"Apply UI Filters","description":"Apply generic filters, search, and sorting to the active object list/table UI by updating the frontend query state. Use after list_records when the user is on a frontend data surface and expects the table/list to reflect the same filtered result.","readOnly":true,"api":{"method":"POST","path":"/api/ui/apply-filters"},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"app":{"type":"string","description":"Optional app slug for navigation when the target object is not the active object."},"module":{"type":"string","description":"Optional module slug for navigation."},"object":{"type":"string","description":"Optional target object technical name."},"path":{"type":"string","description":"Optional target path. If omitted, the active route is used."},"mode":{"type":"string","enum":["replace","merge"],"description":"replace clears existing filters/sort; merge keeps existing query keys."},"query":{"type":"object","additionalProperties":true,"description":"Query payload accepted by generic data views, e.g. filters[field][operator], field[operator], field=value, q, or $sort[field]."},"filters":{"type":"array","description":"Structured filters to apply.","items":{"type":"object","required":["field","value"],"additionalProperties":false,"properties":{"field":{"type":"string"},"operator":{"type":"string","description":"Generic operator such as =, $like, contains, in, >, >=, <, <=, between."},"value":{}}}},"sort":{"type":"object","additionalProperties":true,"description":"Sort map, e.g. { sale_at_max: \"desc\" } or { total: -1 }."},"search":{"type":"string","description":"Global search text."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"ui_apply_filters","arguments":{}}}},{"name":"ui_set_wizard_step","title":"Set Wizard Step","description":"Set the active step index for wizard-style forms.","readOnly":false,"api":{"method":"POST","path":"/api/ui/wizard/set-step"},"inputSchema":{"type":"object","required":["step"],"additionalProperties":false,"properties":{"step":{"type":"integer","description":"Zero-based step index to activate."}}},"examples":[],"mcp":{"method":"tools/call","params":{"name":"ui_set_wizard_step","arguments":{}}}},{"name":"ui_next_wizard_step","title":"Next Wizard Step","description":"Advance the active wizard form to the next step.","readOnly":false,"api":{"method":"POST","path":"/api/ui/wizard/next-step"},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"examples":[],"mcp":{"method":"tools/call","params":{"name":"ui_next_wizard_step","arguments":{}}}},{"name":"ui_prev_wizard_step","title":"Previous Wizard Step","description":"Move the active wizard form back to the previous step.","readOnly":false,"api":{"method":"POST","path":"/api/ui/wizard/prev-step"},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"examples":[],"mcp":{"method":"tools/call","params":{"name":"ui_prev_wizard_step","arguments":{}}}}]}],"validation":{"valid":true,"errors":[],"warnings":[]}}