Skip to main content
Glama

MCP Databases Server

USAGE_GUIDE.md8.71 kB
# 🛠️ Guia de Uso das Ferramentas Seguras - MCP Databases ## 📋 Visão Geral O MCP Databases agora oferece ferramentas específicas para operações DDL e DML com **proteção total contra SQL injection**. Cada ferramenta implementa validações rigorosas e usa parâmetros seguros. ## 🏗️ Operações DDL (Data Definition Language) ### ✅ Criar Tabela (`create_table`) ```python # Exemplo básico create_table({ "db_type": "postgres", "conn_params": {}, # Busca do .env automaticamente "table_name": "usuarios", "columns": [ { "name": "id", "type": "INT", "constraints": ["PRIMARY KEY", "AUTO_INCREMENT"] }, { "name": "nome", "type": "VARCHAR(255)", "constraints": ["NOT NULL"] }, { "name": "email", "type": "VARCHAR(255)", "constraints": ["UNIQUE", "NOT NULL"] }, { "name": "data_criacao", "type": "TIMESTAMP", "constraints": ["DEFAULT CURRENT_TIMESTAMP"] } ], "options": { "if_not_exists": True, "engine": "InnoDB", # MySQL específico "charset": "utf8mb4" # MySQL específico } }) ``` **Resultado esperado:** ```json { "success": true, "message": "Tabela 'usuarios' criada com sucesso", "table_name": "usuarios", "sql_executed": "CREATE TABLE IF NOT EXISTS `usuarios` (...)", "columns_created": 4 } ``` ### ✏️ Alterar Tabela (`alter_table`) ```python # Adicionar coluna alter_table({ "db_type": "postgres", "conn_params": {}, "table_name": "usuarios", "operation": "ADD_COLUMN", "column_spec": { "name": "telefone", "type": "VARCHAR(20)", "constraints": ["NULL"], "position": "AFTER email" # MySQL específico } }) # Modificar coluna alter_table({ "db_type": "postgres", "conn_params": {}, "table_name": "usuarios", "operation": "MODIFY_COLUMN", "column_spec": { "name": "nome", "type": "VARCHAR(500)" } }) # Remover coluna alter_table({ "db_type": "postgres", "conn_params": {}, "table_name": "usuarios", "operation": "DROP_COLUMN", "column_spec": { "name": "telefone" } }) ``` ### 🗑️ Remover Tabela (`drop_table`) - **CUIDADO!** ```python # Confirmação dupla obrigatória drop_table({ "db_type": "postgres", "conn_params": {}, "table_name": "tabela_temporaria", "confirmation": "DELETE_TABLE_tabela_temporaria", # Exato! "if_exists": True }) ``` ## 📝 Operações DML (Data Manipulation Language) ### 🔄 Atualizar Registros (`update_records`) ```python # Atualização segura com parâmetros update_records({ "db_type": "postgres", "conn_params": {}, "table_name": "usuarios", "set_values": { "nome": "João Silva Santos", "email": "joao.santos@empresa.com", "data_atualizacao": "2025-10-28 10:30:00" }, "where_conditions": { "id": 123, "status": "ativo" }, "safety_limit": 1 # Máximo de registros afetados }) ``` **Proteções implementadas:** - ✅ Parâmetros seguros (previne SQL injection) - ✅ Validação de nomes de colunas - ✅ Detecção de padrões maliciosos - ✅ Limite de segurança (quantos registros podem ser afetados) - ✅ Verificação prévia da quantidade de registros ### 🗑️ Excluir Registros (`delete_records`) - **CUIDADO!** ```python # Exclusão com confirmação dupla delete_records({ "db_type": "postgres", "conn_params": {}, "table_name": "usuarios", "where_conditions": { "id": 456, "status": "inativo" }, "confirmation": "DELETE_FROM_usuarios_WHERE_id_456", "safety_limit": 5 # Máximo de registros que podem ser excluídos }) ``` ### 📦 Inserção em Lote (`bulk_insert`) ```python # Inserção eficiente de múltiplos registros bulk_insert({ "db_type": "postgres", "conn_params": {}, "table_name": "usuarios", "records": [ { "nome": "Maria Silva", "email": "maria@empresa.com", "departamento": "TI" }, { "nome": "Pedro Santos", "email": "pedro@empresa.com", "departamento": "RH" }, { "nome": "Ana Costa", "email": "ana@empresa.com", "departamento": "Financeiro" } ], "batch_size": 100 # Tamanho do lote }) ``` **Proteções implementadas:** - ✅ Todos os registros têm a mesma estrutura - ✅ Validação contra SQL injection em todos os valores - ✅ Limite máximo de 10.000 registros por operação - ✅ Processamento em lotes para eficiência ## 🔍 Ferramentas de Segurança ### 🛡️ Verificar Segurança (`security_check`) ```python # Analisa uma query sem executá-la security_check({ "query": "SELECT * FROM usuarios WHERE nome = 'João'" }) ``` **Resultado:** ```json { "is_safe": true, "message": "Query validada com sucesso - segura para execução", "first_command": "SELECT", "dangerous_commands": [], "dangerous_patterns": [], "modification_commands": [], "cleaned_query": "SELECT * FROM usuarios WHERE nome = 'João'", "original_query": "SELECT * FROM usuarios WHERE nome = 'João'" } ``` ### ⚙️ Configuração de Segurança (`get_security_config`) ```python get_security_config({}) ``` **Resultado:** ```json { "dangerous_commands_blocked": ["DELETE", "DROP", "EXEC", "..."], "allowed_commands": ["SELECT", "WITH"], "total_dangerous_patterns": 15, "security_level": "MÁXIMO", "modifications_allowed": false, "multilayer_protection": { "tool_level": true, "database_level": true, "prompt_level": true } } ``` ## ❌ Tentativas Bloqueadas (Exemplos) ### 🚫 SQL Injection Bloqueado: ```python # ❌ ISSO SERÁ BLOQUEADO update_records({ "table_name": "usuarios", "set_values": { "nome": "'; DROP TABLE usuarios; --" # SQL injection }, "where_conditions": {"id": 1} }) # Erro: "Valor suspeito detectado: possível SQL injection" ``` ### 🚫 Nome Malicioso Bloqueado: ```python # ❌ ISSO SERÁ BLOQUEADO create_table({ "table_name": "usuarios; DROP TABLE admin; --", # Nome malicioso "columns": [...] }) # Erro: "Nome da tabela deve começar com letra e conter apenas letras, números e underscore" ``` ### 🚫 Operação Sem Confirmação Bloqueada: ```python # ❌ ISSO SERÁ BLOQUEADO delete_records({ "table_name": "usuarios", "where_conditions": {"status": "inativo"}, "confirmation": "confirmo" # Confirmação incorreta }) # Erro: "Confirmação de segurança incorreta" ``` ## 🎯 Melhores Práticas ### ✅ DO (Faça): - Use sempre nomes válidos (letras, números, underscore) - Forneça confirmações exatas para operações destrutivas - Configure limites de segurança apropriados - Teste com `security_check` antes de executar - Use parâmetros em vez de concatenar strings ### ❌ DON'T (Não faça): - Nunca tente contornar as validações de segurança - Não use caracteres especiais em nomes de tabelas/colunas - Não coloque SQL dinâmico nos valores - Não ignore os avisos de segurança - Não use confirmações genéricas para operações destrutivas ## 🔧 Configuração de Limites ```python # Aumente limites apenas se necessário update_records({ # ... outros parâmetros ... "safety_limit": 5000 # Máximo de registros afetados }) delete_records({ # ... outros parâmetros ... "safety_limit": 100 # Limite conservador para DELETE }) bulk_insert({ # ... outros parâmetros ... "batch_size": 500 # Tamanho do lote }) ``` ## 🚨 Mensagens de Erro Comuns | Erro | Significado | Solução | |------|-------------|---------| | `Valor suspeito detectado: possível SQL injection` | Valor contém padrões de SQL injection | Use valores limpos, sem comandos SQL | | `Nome da tabela deve começar com letra` | Nome de tabela inválido | Use apenas letras, números e underscore | | `Confirmação de segurança incorreta` | Confirmação para DELETE/DROP incorreta | Use a confirmação exata solicitada | | `Operação cancelada: X registros seriam afetados` | Muitos registros afetados | Aumente safety_limit ou refine WHERE | | `Tipo de coluna não permitido` | Tipo de dados não está na whitelist | Use tipos padrão (INT, VARCHAR, etc.) | --- 🛡️ **Lembre-se**: Todas essas ferramentas implementam **proteção automática contra SQL injection** e **não podem ser contornadas**. A segurança é garantida em múltiplas camadas!

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