Guia
Conectar sistemas
Três formas de dar à IA acesso aos seus sistemas, que podem ser combinadas. Credenciais e drivers ficam sempre no seu servidor.
| Forma | Melhor para | Esforço |
|---|
| Banco de dados (somente leitura) | Consultas, análises, cruzamentos | Minutos, sem escrever funções |
| Servidores MCP | Ferramentas de terceiros (Gmail, Slack, GitHub, Notion…) | Uma linha por ferramenta |
| Funções do seu sistema | Alterações que precisam seguir regras de negócio | 1 a 3 dias para as principais ações |
1. Banco de dados (somente leitura)
Você passa uma função query feita com o seu driver. O Vardy lê a estrutura (tabelas e colunas, nunca dados) e cria <nome>_query, usada pela IA para consultar e agregar direto no banco.
// PostgreSQL (pg) com transação somente leitura
await vardy.connectDatabase({
name: 'erp', dialect: 'postgres',
query: async (sql, params) => {
const c = await pool.connect()
try {
await c.query('BEGIN READ ONLY'); await c.query("SET LOCAL statement_timeout = '15s'")
const r = await c.query(sql, params); await c.query('ROLLBACK'); return r.rows
} finally { c.release() }
},
tables: ['clientes', 'pedidos', 'chamados'], // opcional: só estas
hiddenColumns: ['cpf', 'senha_hash'], // somem da estrutura e dos resultados
descriptions: { 'pedidos.sit': 'A=aberto, P=pago, C=cancelado' },
notes: 'Valores em BRL. Datas em horário de Brasília.',
})
// MySQL (mysql2): query: async (sql, p) => (await pool.query(sql, p))[0]
// SQL Server (mssql): parâmetros @p1, @p2…
// SQLite: query: async (sql, p) => db.prepare(sql).all(...p)
Use um usuário do banco que só tenha permissão de leitura. Essa é a garantia real. O Vardy ainda bloqueia qualquer comando que não seja SELECT, limita linhas (1.000) e tempo (15 s), e só permite as tabelas liberadas. hiddenColumns é uma conveniência: para proteger de verdade, use um usuário ou uma view sem acesso a essas colunas.
2. Servidores MCP
Qualquer servidor MCP vira um conjunto de funções <nome>_<ferramenta>. A IA continua trabalhando do jeito Vardy (um programa, resumos, regras). O MCP é só a tomada.
npm install @modelcontextprotocol/sdk
// servidor local (processo)
await vardy.connectMcp({ name: 'github', command: 'npx', args: ['-y', '@modelcontextprotocol/server-github'], env: { GITHUB_TOKEN } })
// servidor remoto
await vardy.connectMcp({ name: 'crm', url: 'https://mcp.crm.com/mcp', headers: { Authorization: `Bearer ${token}` } })
Ferramentas marcadas como somente leitura viram read. As demais viram write: entram no plano e, se forem destrutivas ou não estiverem marcadas, pedem aprovação. Ajuste com include, exclude, kinds, approval e policies.
3. Funções do seu sistema
Para alterações, cadastre as funções que seu sistema já tem. O handler roda no seu processo, com as suas regras de acesso.
vardy.register({
name: 'cancelarPedido',
kind: 'write',
description: 'Cancela um pedido. Informe o id e o valor.',
parameters: { type: 'object', required: ['id', 'total'], properties: { id: { type: 'string' }, total: { type: 'number' } } },
policy: { max_value: { field: 'total', limit: 500 } },
onViolation: 'escalate', // acima do limite → aprovação
handler: ({ id }, { user, idempotencyKey }) => pedidos.cancelar(id, user, idempotencyKey),
})
Escritas devem passar por funções do sistema (ou pela sua API), nunca direto no banco: assim estoque, nota fiscal, e-mails e demais regras de negócio continuam valendo.