Skip to main content
Glama

MCP Databases Server

EXAMPLE_USAGE.md8.7 kB
# 🚀 Exemplo Prático - Sistema de Usuários ## 📋 Cenário Vamos criar um sistema completo de usuários usando as ferramentas seguras do MCP Databases. ## 🏗️ 1. Criando a Tabela Principal ```python # Criar tabela de usuários create_table({ "db_type": "postgres", "conn_params": {}, # Busca automaticamente do .env "table_name": "usuarios", "columns": [ { "name": "id", "type": "SERIAL", "constraints": ["PRIMARY KEY"] }, { "name": "nome", "type": "VARCHAR(255)", "constraints": ["NOT NULL"] }, { "name": "email", "type": "VARCHAR(255)", "constraints": ["UNIQUE", "NOT NULL"] }, { "name": "departamento", "type": "VARCHAR(100)" }, { "name": "status", "type": "VARCHAR(20)", "constraints": ["DEFAULT 'ativo'"] }, { "name": "data_criacao", "type": "TIMESTAMP", "constraints": ["DEFAULT CURRENT_TIMESTAMP"] }, { "name": "salario", "type": "DECIMAL(10,2)" } ], "options": { "if_not_exists": True } }) ``` **Resposta esperada:** ```json { "success": true, "message": "Tabela 'usuarios' criada com sucesso", "table_name": "usuarios", "sql_executed": "CREATE TABLE IF NOT EXISTS usuarios (...)", "columns_created": 7 } ``` ## 📝 2. Adicionando Dados de Teste ```python # Inserir múltiplos usuários de uma vez bulk_insert({ "db_type": "postgres", "conn_params": {}, "table_name": "usuarios", "records": [ { "nome": "Maria Silva", "email": "maria.silva@empresa.com", "departamento": "TI", "status": "ativo", "salario": 5500.00 }, { "nome": "João Santos", "email": "joao.santos@empresa.com", "departamento": "RH", "status": "ativo", "salario": 4800.00 }, { "nome": "Ana Costa", "email": "ana.costa@empresa.com", "departamento": "Financeiro", "status": "ativo", "salario": 6200.00 }, { "nome": "Pedro Lima", "email": "pedro.lima@empresa.com", "departamento": "TI", "status": "inativo", "salario": 5200.00 } ], "batch_size": 100 }) ``` **Resposta esperada:** ```json { "success": true, "message": "4 registros inseridos com sucesso na tabela 'usuarios'", "records_inserted": 4, "table_name": "usuarios", "batch_size": 100, "total_batches": 1 } ``` ## 🔄 3. Atualizações Seguras ### Promoção de Salário ```python # Aumentar salário do João update_records({ "db_type": "postgres", "conn_params": {}, "table_name": "usuarios", "set_values": { "salario": 5300.00 }, "where_conditions": { "email": "joao.santos@empresa.com" }, "safety_limit": 1 }) ``` ### Mudança de Departamento ```python # Transferir Ana para TI update_records({ "db_type": "postgres", "conn_params": {}, "table_name": "usuarios", "set_values": { "departamento": "TI" }, "where_conditions": { "email": "ana.costa@empresa.com" }, "safety_limit": 1 }) ``` ### Reativar Usuário ```python # Reativar Pedro update_records({ "db_type": "postgres", "conn_params": {}, "table_name": "usuarios", "set_values": { "status": "ativo" }, "where_conditions": { "email": "pedro.lima@empresa.com", "status": "inativo" }, "safety_limit": 1 }) ``` ## 🏗️ 4. Modificando a Estrutura ### Adicionar Nova Coluna ```python # Adicionar campo telefone alter_table({ "db_type": "postgres", "conn_params": {}, "table_name": "usuarios", "operation": "ADD_COLUMN", "column_spec": { "name": "telefone", "type": "VARCHAR(20)" } }) ``` ### Atualizar com Telefones ```python # Adicionar telefones usando bulk update (simulação) update_records({ "db_type": "postgres", "conn_params": {}, "table_name": "usuarios", "set_values": { "telefone": "(11) 99999-1111" }, "where_conditions": { "email": "maria.silva@empresa.com" }, "safety_limit": 1 }) update_records({ "db_type": "postgres", "conn_params": {}, "table_name": "usuarios", "set_values": { "telefone": "(11) 99999-2222" }, "where_conditions": { "email": "joao.santos@empresa.com" }, "safety_limit": 1 }) ``` ## 🗑️ 5. Limpeza de Dados ### Remover Usuário Específico ```python # Remover usuário inativo (com confirmação dupla) delete_records({ "db_type": "postgres", "conn_params": {}, "table_name": "usuarios", "where_conditions": { "email": "usuario.antigo@empresa.com", "status": "inativo" }, "confirmation": "DELETE_FROM_usuarios_WHERE_email_usuario.antigo@empresa.com", "safety_limit": 1 }) ``` ## 🔍 6. Verificações de Segurança ### Testar Query Antes de Executar ```python # Verificar se uma query é segura security_check({ "query": "SELECT nome, email, departamento FROM usuarios WHERE status = 'ativo'" }) ``` **Resposta:** ```json { "is_safe": true, "message": "Query validada com sucesso - segura para execução", "first_command": "SELECT", "dangerous_commands": [], "dangerous_patterns": [], "modification_commands": [] } ``` ### Verificar Configuração de Segurança ```python # Ver configurações ativas de segurança get_security_config({}) ``` ## ⚠️ 7. Exemplos de Tentativas Bloqueadas ### ❌ Tentativa de SQL Injection ```python # ISSO SERÁ BLOQUEADO! update_records({ "db_type": "postgres", "conn_params": {}, "table_name": "usuarios", "set_values": { "nome": "Hacker'; DROP TABLE usuarios; --" # SQL injection }, "where_conditions": { "id": 1 } }) ``` **Erro esperado:** ``` ❌ OPERAÇÃO BLOQUEADA: Valor suspeito detectado: possível SQL injection Padrão perigoso encontrado: DROP ``` ### ❌ Tentativa de Bypass ```python # ISSO SERÁ BLOQUEADO! create_table({ "db_type": "postgres", "conn_params": {}, "table_name": "temp; DROP TABLE usuarios; --", # Nome malicioso "columns": [{"name": "id", "type": "INT"}] }) ``` **Erro esperado:** ``` ❌ OPERAÇÃO BLOQUEADA: Nome da tabela deve começar com letra e conter apenas letras, números e underscore ``` ## 📊 8. Consultas de Dados ```python # Listar todos os usuários ativos execute_query({ "db_type": "postgres", "conn_params": {}, "query": "SELECT id, nome, email, departamento, salario FROM usuarios WHERE status = 'ativo' ORDER BY nome" }) # Estatísticas por departamento execute_query({ "db_type": "postgres", "conn_params": {}, "query": "SELECT departamento, COUNT(*) as total_usuarios, AVG(salario) as salario_medio FROM usuarios WHERE status = 'ativo' GROUP BY departamento ORDER BY total_usuarios DESC" }) # Usuários com salário acima da média execute_query({ "db_type": "postgres", "conn_params": {}, "query": "SELECT nome, email, salario FROM usuarios WHERE salario > (SELECT AVG(salario) FROM usuarios WHERE status = 'ativo') AND status = 'ativo' ORDER BY salario DESC" }) ``` ## 🎯 Resultados Esperados Após executar todos esses comandos, você terá: 1. ✅ **Tabela criada** com estrutura completa 2. ✅ **4 usuários inseridos** com dados de teste 3. ✅ **Atualizações seguras** de salários e departamentos 4. ✅ **Estrutura modificada** com nova coluna telefone 5. ✅ **Dados limpos** de usuários inativos 6. ✅ **Proteção total** contra SQL injection 7. ✅ **Validações rigorosas** em todas as operações ## 🛡️ Proteções Ativadas Durante todo o processo, as seguintes proteções estão ativas: - 🔒 **Validação de nomes** (tabelas, colunas) - 🔒 **Detecção de SQL injection** em todos os valores - 🔒 **Parâmetros obrigatórios** para conexão - 🔒 **Confirmações duplas** para operações destrutivas - 🔒 **Limites de segurança** para atualizações/exclusões - 🔒 **Análise de padrões perigosos** em tempo real - 🔒 **Proteção multicamada** (tool + database + prompt) --- 🎉 **Parabéns!** Você agora tem um sistema completamente seguro contra SQL injection e outras vulnerabilidades, mantendo todas as funcionalidades necessárias para operações legítimas!

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/fean-developer/mcp-databases'

If you have feedback or need assistance with the MCP directory API, please join our Discord server