Criei um servidor MCP em Go para conectar IAs a bancos relacionais (Oracle, SQL Server, Postgres e MySQL) com zero dependências de clients locais
Fala pessoal!
Com a popularização do Model Context Protocol (MCP) e o avanço de assistentes como Claude Desktop, Claude Code, Cursor e Codex, um dos casos de uso mais produtivos é dar à IA a capacidade de inspecionar tabelas, entender schemas e rodar consultas pontuais para nos ajudar a debugar ou desenvolver queries complexas.
No entanto, ao testar as soluções existentes na comunidade (a maioria em Python ou Node.js), esbarrei em três gargalos bem incômodos no dia a dia:
- O problema das dependências e drivers locais: Conectar em bancos corporativos como Oracle ou SQL Server costuma exigir instalação de runtimes pesados, Oracle Instant Client, DLLs de OCI ou variáveis de ambiente complexas.
- Risco de segurança real: Entregar uma tool de execução SQL para a IA sem restrições severas pode resultar em desastres (como um
DROP TABLEouDELETEem cascata não planejado), e filtros ingênuos baseados em regex simples são facilmente burlados por quebras de linha ou comentários SQL (/* ... */). - Desperdício absurdo de tokens de contexto: Despejar dezenas de colunas, constraints e schemas inteiros em JSON bruto estala a janela de contexto da LLM e encarece desnecessariamente a chamada.
Para resolver essas dores de forma definitiva, desenvolvi e abri o código do DB Explorer MCP, feito 100% em Go.
💡 O que é o DB Explorer MCP?
É um servidor MCP de alta performance compilado em um único binário estático e autossuficiente, que implementa 8 ferramentas (tools) de inspeção e execução para Oracle, SQL Server, PostgreSQL e MySQL.
Principais Diferenciais Técnicos
1. Drivers 100% Nativos (Zero Client Dependency)
Diferente de soluções em C/Python/Node, o projeto utiliza drivers puros escritos em Go (go-ora/v2, go-mssqldb, pgx/v5 e go-sql-driver/mysql).
- No caso do Oracle: Não precisa de Oracle Instant Client nem de bibliotecas C. Funciona direto do Oracle 10g até o 23c em Windows, Linux e macOS com um único executável.
2. Segurança com Análise Léxica/AST (Não apenas Regex)
O servidor conta com um verificador que remove comentários (--, /* */, #) e literais de texto antes da checagem para evitar bypasses, além de oferecer três modos de conexão configuráveis por banco:
readonly: Permite apenas comandos passivos (SELECT,DESCRIBE). Bloqueia qualquer tentativa de mutação ou encadeamento de comandos.normal(padrão): Ideal para desenvolvimento. PermiteCREATE,ALTER,INSERTeUPDATE, mas bloqueia estritamente comandos destrutivos comoDROP,DELETEeTRUNCATE.teste: Modo irrestrito para ambientes descartáveis.
Além disso, as senhas e strings de conexão são gerenciadas por um CLI separado (db-explorer-manager), ficando totalmente salvas fora do alcance da IA.
3. Economia de Tokens de Contexto
A IA pode escolher o formato de retorno e o nível de detalhamento do schema:
- Níveis de Schema (
detail_level):basic: Apenas colunas essenciais, tipos, nullable e PK (formato super enxuto).standard: Tipos, precisão, valores default e PK/FK/Unique.detailed: Completo com regras deCHECK, validações e expressões.
- Formatos de Saída: Além de
json,xml,mdecsv(com separador configurável), criei suporte ao formatotoon, uma notação densa orientada a tokens que reduz expressivamente o payload de dados tabulares comparado ao JSON formatado. - Paginação Inteligente: Parâmetros
limit,offsete flag explícita de truncamento para evitar que a IA tente ler 50.000 linhas de uma vez.
4. Catálogo Uniforme entre os 4 Bancos
Mapear constraints e rotinas em bancos diferentes costuma ser uma dor de cabeça por causa das diferenças nos catálogos de metadados (sys.all_tables, sys.tables, information_schema, pg_catalog). O MCP padronizou ferramentas para:
list_constraints: Lista PKs, FKs, Unique e Checks com suporte ao parâmetrodirection: "referenced_by"(para descobrir quais tabelas externas apontam para a tabela atual).list_indexes: Mostra unicidade, colunas incluídas (INCLUDE) e filtros parciais.list_routines&get_routine_source: Extrai código-fonte de Procedures, Functions, Triggers e Packages (com aviso claro caso o objeto esteja criptografado ou em wrapped code).
🛠️ Como Instalar e Testar
Opção 1: Binários Prontos via Releases (Recomendado — Sem precisar instalar Go)
Você não precisa de runtime, Node.js, Python ou Go instalados na máquina. Basta baixar o pacote pronto:
- Acesse a Página de Releases do GitHub e baixe o arquivo para seu SO (Windows, Linux ou macOS - x64 e ARM64).
- Descompacte o pacote e execute o configurador interativo incluído:
- No Windows: Abra o PowerShell na pasta e execute:
.\configure.ps1 - No Linux / macOS: Abra o terminal na pasta e execute:
chmod +x configure.sh ./configure.sh
- No Windows: Abra o PowerShell na pasta e execute:
- O script detecta automaticamente e pergunta onde você deseja registrar o servidor:
- Claude Code (CLI): Pergunta se deseja registrar em escopo global (
user) ou local do projeto. - Claude Desktop: Adiciona automaticamente a entrada no
claude_desktop_config.json. - Cursor IDE: Atualiza automaticamente o
mcp.json. - Codex (CLI / Desktop): Registra via comando e atualiza o
config.toml.
- Claude Code (CLI): Pergunta se deseja registrar em escopo global (
Opção 2: Compilando a partir do Código Fonte (Para quem tem Go >= 1.22)
Se preferir compilar por conta própria:
git clone https://github.com/rogick/db-explorer-mcp.git
cd db-explorer-mcp
# Windows:
.\install.ps1
# Linux / macOS:
chmod +x install.sh
./install.sh
Cadastrando suas Conexões
Depois de configurar, cadastre os bancos que a IA poderá enxergar usando o gerenciador interativo (a senha é inserida de forma oculta no terminal):
# Exemplos:
./db-explorer-manager add-postgres
./db-explorer-manager add-oracle
./db-explorer-manager add-sqlserver
./db-explorer-manager add-mysql
# Listar os bancos cadastrados:
./db-explorer-manager list
Ao cadastrar, você escolhe o apelido da conexão e o modo de segurança (readonly, normal ou teste). A partir daí, basta abrir o seu cliente de IA favorito e começar a explorar!
🤝 Repositório e Feedback
O projeto é 100% open source sob a licença MIT:
👉 GitHub: https://github.com/rogick/db-explorer-mcp
Fiz esse projeto para resolver um gargalo real no meu fluxo de trabalho com LLMs em bancos de dados corporativos. Gostaria muito de ouvir a experiência da comunidade:
- Vocês já utilizam MCP conectado a bancos no dia a dia?
- Que outras travas ou formatos de contexto acham essenciais ao dar autonomia de banco para um agente?
Bugs, sugestões e PRs são super bem-vindos!