Aula 07 - Integração do MCP com Banco de Dados 💾
Objetivo
Objetivo: Aprender a conectar servidores MCP a bancos de dados relacionais de forma segura, expondo esquemas, permitindo consultas filtradas e garantindo a integridade dos dados.
1. O Papel do MCP no Acesso a Dados 🗄️
Conectar uma IA a um banco de dados é um dos casos de uso mais poderosos do MCP. No entanto, nunca devemos dar acesso total e irrestrito.
- Resources: Ideais para expor tabelas de referência ou relatórios estáticos.
- Tools: Ideais para buscas parametrizadas, inserções e atualizações controladas.
2. Segurança: Evitando SQL Injection 🛡️
Quando uma IA gera uma query, existe o risco de manipulação maliciosa. A regra de ouro é: Sempre use Prepared Statements.
// Exemplo RUIM (Vulnerável)
const query = `SELECT * FROM users WHERE id = ${args.id}`;
// Exemplo BOM (Seguro)
const query = "SELECT * FROM users WHERE id = $1";
const result = await db.query(query, [args.id]);
3. Expondo o Esquema (Introspecção) 🔍
Para que a IA saiba como perguntar, ela precisa conhecer as colunas e tipos de dados.
Dica de Contexto
Sempre forneça comentários no seu esquema de banco de dados. "A coluna status_id reflete o estado do pedido" é muito mais útil para a IA do que apenas status_id: int.
Diagrama de Fluxo (Mermaid)
graph LR
A[LLM] -- "Chamada Tool: buscar_vendas" --> B[MCP Server]
B -- "Busca Segura (SQL)" --> C[(PostgreSQL)]
C -- "Result Set" --> B
B -- "JSON formatado" --> A
4. Ferramentas de CRUD Controlado 🛠️
Em vez de uma tool executar_sql_livre, prefira ferramentas específicas:
list_recent_orders(limit: number)get_customer_by_email(email: string)update_inventory_stock(product_id: string, amount: number)
5. Prática: Consultando SQLite com MCP 💻
Vamos simular a implementação de uma ferramenta de busca em SQLite.
@mcp.tool()
def consultar_estoque(produto: str) -> str:
"""Busca a quantidade em estoque de um produto específico."""
# Simulação de query segura
cursor.execute("SELECT qtd FROM estoque WHERE nome = ?", (produto,))
row = cursor.fetchone()
return f"Estoque de {produto}: {row[0] if row else 'Não encontrado'}"
6. Mini-Projeto: Dashboard MCP 🧪
- Escolha uma tabela (ex: Clientes).
- Crie um Resource que retorna a contagem total de clientes por cidade.
- Crie uma Tool que permite buscar um cliente pelo CPF.
- Implemente logs de auditoria simples ("Quem consultou o quê").
7. Exercícios de Fixação 📝
- Por que é perigoso deixar a IA escrever SQL livre no seu servidor MCP?
- Diferencie o uso de um Resource e uma Tool para exibição de dados de um banco.
- O que é parametrização de queries e por que ela é obrigatória?
Cuidado
A exposição de dados sensíveis (PII) via MCP deve seguir rigorosamente as leis de proteção de dados (LGPD). Nunca exponha senhas ou dados criptografados para o modelo de IA.
Próxima Aula: Segurança no MCP 🔐