# SurrealDB com Lovable, Replit e MCP: vibe coding sem expor seus dados
> Conecte agentes ao schema real do SurrealDB por MCP, com ambientes separados, permissões mínimas, limites e prompts que evitam improviso no back-end.
**Autores:** Mauro Mequelussi
**Publicado:** 2026-07-14T12:00:00.000Z
**Atualizado:** 2026-07-20T15:00:48.106345658Z
**Tags:** lovable, agentes-de-ia, mcp, surrealdb, vibe-coding, replit
---
Lovable, Replit Agent, Cursor e outros agentes conseguem criar interfaces e integrações em velocidade impressionante. O risco aparece quando a IA inventa o modelo de dados, recebe acesso amplo demais ou altera produção sem que ninguém saiba exatamente o que aconteceu.

Desde a linha 3.1, o **SurrealDB pode expor um servidor MCP próprio**. Isso permite que uma ferramenta compatível leia o schema, consulte registros e execute operações por meio de ferramentas tipadas. Para o público de vibe coding, MCP é a ponte entre “a IA imagina como o banco funciona” e “a IA trabalha sobre um contrato que realmente existe”.

## O que é MCP no SurrealDB?

MCP, ou Model Context Protocol, é um padrão para conectar agentes a ferramentas e fontes de contexto. No SurrealDB, o servidor MCP apresenta operações como listar tabelas, inspecionar schema, consultar, criar, atualizar, relacionar e excluir registros.

O ganho central é contexto verificável. Em vez de deduzir campos a partir de um print ou de cinco linhas de exemplo, o agente pode ler tipos, tabelas e relações publicados pela própria instância.

::callout{type="info" title="MCP não é uma permissão mágica"}
O protocolo descreve ferramentas. Quem limita o que elas podem fazer é a autenticação, o usuário conectado, as permissões do banco e os controles da plataforma que executa o agente.
::

## Como SurrealDB, MCP e a ferramenta de IA se conectam

O fluxo tem quatro partes:

1. seu banco mantém schema e dados;
2. o endpoint MCP expõe ferramentas e recursos de schema;
3. Lovable, Replit ou outro cliente autentica nessa conexão;
4. o agente chama apenas as ferramentas necessárias para cumprir a tarefa.

Os tutoriais oficiais mostram esse modelo tanto com [Lovable](https://surrealdb.com/blog/build-apps-on-your-data-with-surrealdb-and-lovable) quanto com [Replit Agent](https://surrealdb.com/blog/bring-surrealdb-to-your-replit-agent). A adaptação responsável para um produto brasileiro começa antes do botão “conectar”: começa criando um banco de desenvolvimento e um usuário dedicado.

## O caminho seguro em três ambientes

| Ambiente | Dados | Acesso do agente | Objetivo |
| --- | --- | --- | --- |
| desenvolvimento | fictícios ou anonimizados | leitura e escrita limitadas | construir e testar |
| staging | estrutura próxima da produção | operações aprovadas e auditáveis | validar migração e integração |
| produção | dados reais | preferencialmente leitura; escrita excepcional | diagnóstico controlado |

Conectar um agente diretamente à produção com usuário root mistura três riscos: acesso a dados pessoais, alteração irreversível e falta de separação entre experimento e operação.

Para um MVP, use SurrealDB Cloud ou uma instância local exposta temporariamente por túnel apenas com dados descartáveis. Um túnel é útil para teste, não é uma estratégia permanente de segurança.

::read-more{slug="surrealdb-mcp-lovable-replit" label="Continuar: como conectar agentes sem entregar o banco" placement="mid_content"}
## Prepare o schema antes de chamar o agente

Agentes funcionam melhor quando o schema é explícito. O exemplo abaixo representa leads capturados por uma página de venda brasileira.

::code-demo{language="surql" filename="database/lead.surql"}
```surql
DEFINE TABLE lead SCHEMAFULL;
DEFINE FIELD nome ON lead TYPE string;
DEFINE FIELD email ON lead TYPE string
  ASSERT string::is_email($value);
DEFINE FIELD telefone_e164 ON lead TYPE option<string>;
DEFINE FIELD origem ON lead TYPE string
  ASSERT $value IN ['organico', 'anuncio', 'indicacao'];
DEFINE FIELD consentimento_em ON lead TYPE option<datetime>;
DEFINE FIELD criado_em ON lead TYPE datetime DEFAULT time::now();

DEFINE INDEX lead_email ON lead FIELDS email UNIQUE;
```
::

Agora a IA não precisa inventar `phone`, `whatsapp`, `celular` e `numero` em telas diferentes. Existe um campo definido, com intenção e tipo.

O campo de consentimento, sozinho, não prova conformidade com a LGPD. Ele apenas registra um fato que o fluxo de coleta precisa produzir corretamente. Texto de consentimento, finalidade, retenção e exclusão continuam sendo decisões do produto.

## Dê ao agente o menor acesso possível

Uma conexão MCP deve usar credencial exclusiva. Não reutilize a senha administrativa do banco nem um token usado pela API da aplicação.

Organize o acesso por tarefa:

- exploração: listar e inspecionar schema;
- criação de interface: ler amostras fictícias;
- importação: inserir apenas nas tabelas previstas;
- manutenção: executar uma função revisada, não uma query arbitrária;
- diagnóstico: leitura limitada, com resultados pequenos e sem dados sensíveis.

As ferramentas de leitura, como listagem e inspeção, são naturalmente menos arriscadas que `delete`, `update` ou uma query arbitrária. Ainda assim, até uma leitura pode vazar informações. Menor privilégio também vale para `SELECT`.

::callout{type="warning" title="Dados brasileiros pedem cuidado explícito"}
CPF, endereço, telefone, informações financeiras, saúde e histórico de compra não devem entrar no contexto de um modelo externo apenas porque a integração permite. Use dados sintéticos e reduza campos em qualquer ferramenta de desenvolvimento.
::

## Limites protegem o banco e o seu orçamento

O endpoint MCP do SurrealDB possui limites configuráveis de corpo, tempo de consulta, tamanho de resultado e quantidade de argumentos. Eles evitam que um agente insistente faça consultas longas ou despeje uma tabela inteira no contexto.

::code-demo{language="bash" filename=".env.development"}
```bash
SURREAL_MCP_QUERY_TIMEOUT_SECS=20
SURREAL_MCP_MAX_RESULT_BYTES=262144
SURREAL_HTTP_MAX_MCP_BODY_SIZE=4194304
```
::

Esses valores são exemplos, não uma configuração universal. Ajuste ao volume de dados e monitore recusas. Um resultado limitado pode exigir paginação; aumentar o teto indiscriminadamente só transfere o problema para memória, latência e custo de tokens.

## Primeiro peça leitura, depois construção

O melhor fluxo de prompt separa descoberta, proposta e alteração.

::prompt-snippet{title="Descobrir o schema antes de construir" model="Lovable ou Replit Agent"}
Use a conexão SurrealDB apenas em modo de leitura.

1. Liste as tabelas disponíveis no namespace e banco selecionados.
2. Inspecione o schema da tabela lead.
3. Explique os tipos, campos opcionais e restrições encontradas.
4. Proponha uma tela de listagem com busca e filtros.
5. Não crie, atualize ou exclua registros nesta etapa.

Se algum campo necessário não existir, sinalize a lacuna. Não invente o campo na interface.
::

Depois de revisar o entendimento, peça a implementação visual. Só libere escrita quando houver um caso claro, como testar a criação de um lead fictício.

## Um prompt para construir sem improvisar o back-end

::prompt-snippet{title="Criar painel sobre dados existentes" model="Agente de vibe coding"}
Construa um painel responsivo para os leads existentes no SurrealDB.

Contrato confirmado:
- nome: string;
- email: string único;
- telefone_e164: string opcional;
- origem: organico | anuncio | indicacao;
- consentimento_em: datetime opcional;
- criado_em: datetime.

Requisitos:
- buscar dados pela conexão SurrealDB;
- filtros por origem e período;
- estado vazio, carregamento e erro;
- telefone exibido no formato brasileiro, sem alterar o valor armazenado;
- nenhuma credencial no código do navegador;
- nenhuma alteração de schema;
- não criar dados fictícios em produção.

Antes de escrever código, apresente o plano e identifique onde a conexão será executada.
::

O prompt deixa claro o contrato, a experiência e as restrições. Isso diminui o espaço para a ferramenta resolver um problema criando outro.

## Funções são melhores que poder irrestrito

Para regras sensíveis, prefira uma função definida, testada e autorizada a permitir query arbitrária. Por exemplo, aceitar um convite, encerrar uma assinatura ou anonimizar uma conta envolve múltiplas validações. O agente pode invocar a operação; a regra permanece perto dos dados e sob revisão.

Essa separação também ajuda na auditoria. “O agente executou `fn::aceitar_convite` com estes parâmetros” é mais compreensível do que uma sequência variável de comandos gerados na hora.

## O que revisar em todo diff gerado

- o cliente conecta ao banco no servidor ou expõe credenciais no navegador?
- queries usam parâmetros ou concatenam entrada do usuário?
- o agente criou campos que não existem?
- filtros e paginação acontecem no banco ou depois de baixar tudo?
- estados de erro e acesso negado estão visíveis?
- uma mutação pode ser repetida sem duplicar dados?
- logs registram tokens ou dados pessoais?
- o código diferencia desenvolvimento, staging e produção?

Vibe coding acelera a escrita. Revisão continua sendo o mecanismo que transforma escrita em engenharia.

## Quando usar Lovable, Replit ou um IDE local?

| Situação | Opção útil |
| --- | --- |
| criar uma interface visual rapidamente | Lovable |
| gerar e executar uma aplicação completa hospedada | Replit Agent |
| trabalhar no repositório existente com mais controle | IDE/agente local |
| explorar o banco visualmente | Surrealist |

A escolha da interface não muda o princípio: schema real como contexto, usuário dedicado, ambiente separado e confirmação para operações destrutivas.

## Perguntas frequentes sobre SurrealDB MCP

### Preciso expor meu banco na internet?

Clientes em nuvem precisam alcançar o endpoint MCP por HTTPS. Uma instância gerenciada já oferece endpoint público; no desenvolvimento, um túnel temporário pode servir. IDEs locais podem usar uma integração local sem publicar a instância da mesma forma.

### MCP torna qualquer operação segura?

Não. MCP torna a ferramenta descritível e interoperável. Segurança depende de autenticação, permissões, limites, aprovação humana, isolamento de ambiente e tratamento dos dados retornados.

### Posso conectar a IA ao banco que já existe?

Sim, e esse é um dos casos mais úteis: o agente lê o schema existente e constrói sobre sua fonte de verdade. Comece somente com leitura e uma base sem dados sensíveis.

### Isso substitui a API da aplicação?

Não necessariamente. MCP é excelente para agentes e ferramentas de desenvolvimento. A API continua útil para regras de negócio, integrações públicas, estabilidade de contrato, observabilidade e defesa em profundidade.

## Do agente que adivinha ao agente que verifica

O salto de qualidade não acontece porque o agente ganhou acesso ao banco. Acontece porque ele ganhou contexto estruturado e limites claros.

Se você ainda está começando, leia primeiro [SurrealDB para vibe coding: do primeiro schema a um produto real](/blog/surrealdb-para-vibe-coding). Depois, conecte uma base de desenvolvimento, peça apenas a inspeção do schema e observe se a ferramenta entendeu o domínio antes de permitir qualquer escrita.

**Do vibe ao produto. Com método.**
::