Como usar o Codex com a Fabapp AI
O que você precisa
Node 20 ou mais novo, uma conta da Fabapp no plano Builder ou superior, e um projeto (ou nem isso: dá para criar pelo terminal). Nada mais: a linha de comando da Fabapp não tem dependência nenhuma, de propósito, porque ela guarda uma credencial e conversa com a sua conta.
npx @fabappai/cli login
O login abre o navegador uma vez, mostra um código e espera você aprovar. A credencial vai para o chaveiro do sistema, não para um arquivo de configuração e não para o histórico do shell.
Ligando o Codex na sua conta
O Codex declara servidores MCP no próprio arquivo de configuração, em TOML, e não em JSON como a maioria:
[mcp_servers.fabapp]
command = "npx"
args = ["-y", "@fabappai/cli", "mcp"]
O comando é o mesmo de qualquer outro cliente. O que muda é só a notação. Se a sua versão do Codex organizar isso
de outro jeito, a documentação dele é que vale: a parte que é nossa, e que não muda, é npx -y @fabappai/cli mcp.
O ciclo
npx @fabappai/cli create "Minha loja"
npx @fabappai/cli dev
Com o app rodando na sua máquina, peça ao Codex o que você faria à mão: ler a definição do projeto, criar as entidades, escrever as páginas. Ele tem as mesmas ferramentas que qualquer outro assistente conectado, porque quem decide o que existe é a permissão da credencial, não o cliente.
npx @fabappai/cli deploy
O que o sandbox do Codex muda
Esta é a diferença que mais aparece na prática. O Codex roda comandos num ambiente controlado, e isso é bom, mas significa que duas coisas precisam estar ao alcance dele: o Node, para o servidor MCP subir, e a rede, para o servidor falar com a sua conta.
Se o servidor não aparecer, é quase sempre um dos dois. Rodar npx -y @fabappai/cli mcp à mão no mesmo ambiente
mostra na hora qual dos dois é: ou o comando não existe, ou ele sobe e fica esperando, que é o comportamento certo
de um servidor que conversa por stdio.
O que pedir a ele
"Leia a documentação da plataforma antes de escrever o schema." Os tipos de campo são uma lista fechada, e qualquer outro é recusado. As regras de acesso são a única coisa entre os dados de um app e o público.
"Leia a definição atual antes de mudar." É a diferença entre uma alteração e uma reescrita.
"Escreva a função no servidor, não no navegador." Quando a tarefa envolve algo que o cliente não pode fazer, como chamar uma API de terceiro ou gravar um campo que o usuário não poderia editar, isso é uma backend function. Ela roda isolada no servidor e é chamada pelo app.