Dba Master
FreeNot checkedMCP server para introspecção profunda de bancos de dados (Oracle, PostgreSQL, MySQL/MariaDB), voltado a consumo por agentes de IA e LLMs
About
MCP server para introspecção profunda de bancos de dados (Oracle, PostgreSQL, MySQL/MariaDB), voltado a consumo por agentes de IA e LLMs
README
Servidor MCP (Model Context Protocol) que dá a um agente de IA introspecção profunda de banco de dados — estrutura, DDL, relacionamentos, procedures, jobs — em JSON estruturado, para investigar o schema e propor soluções (queries, modelagem, diagnósticos) com assertividade.
Modo thin (default para Oracle) é JS puro e não exige Instant Client. Só defina "thick": true na conexão se precisar de recursos específicos do client nativo.
🔒 A IA não tem acesso às credenciais do banco
Nenhuma tool MCP retorna dados sensíveis de conexão. list_connections devolve só os nomes das conexões — nunca user, password ou connectString. As credenciais são usadas apenas internamente para abrir o pool; o agente jamais as recebe no output das tools.
Para fechar o último vetor — o agente conseguir ler o connections.json em texto plano —, qualquer campo aceita a referência ${NOME_DA_VAR}, resolvida a partir das variáveis de ambiente no boot do server. Assim o segredo fica fora do arquivo que o agente lê, num env var que só o processo do servidor herda:
{
"prod": {
"engine": "oracle",
"user": "${DBA_PROD_USER}",
"password": "${DBA_PROD_PASS}",
"connectString": "${DBA_PROD_CS}"
}
}
O configure/install grava essas referências por padrão e pode persistir as env vars no seu ambiente (com sua permissão): export no ~/.zshrc/~/.bashrc (Linux/macOS) ou setx no registro do usuário (Windows). Editar uma conexão atualiza as vars; excluí-la — ou rodar uninstall — remove-as.
É defesa best-effort contra leitura casual/acidental do agente. Um processo rodando com o mesmo usuário/shell ainda consegue ler o ambiente; para fronteira de segurança dura, use um keychain do SO ou isole o server em outro usuário/container.
Bancos suportados
O engine é escolhido pelo campo engine da conexão. Recursos exclusivos de um banco (packages PL/SQL e jobs agendados, por ex.) são expostos só onde existem — ver Capability flag.
- Oracle (
oracle) — thin/thick, packages, jobs agendados, DDL viaDBMS_METADATA - PostgreSQL (
postgres) — conexão via URL, DDL nativo (pg_get_viewdef/pg_get_functiondef) +CREATE TABLEreconstruído - MySQL / MariaDB (
mysql) — conexão via URL, tabelas, views, dicionário viainformation_schema - SQL Server — planejado
Instalação e Configuração
Não precisa clonar o repositório. Tudo roda como subcomando da bin via npx.
1. Iniciar o setup unificado
npx -y dba-master@latest install
O comando abrirá uma interface interativa onde você poderá:
- Criar, editar, excluir ou usar conexões com bancos de dados.
- Selecionar se deseja instalação com escopo de projeto (na pasta atual) ou global (na home).
- Selecionar quais agentes de IA deseja configurar (Claude, Copilot, Opencode, Antigravity).
As credenciais e conexões configuradas serão salvas no arquivo connections.json (dentro da pasta .dba-master do seu projeto ou globalmente em ~/.dba-master/).
Para desinstalar e limpar os agentes configurados, basta executar:
npx -y dba-master@latest uninstall
Para gerenciar as conexões existentes de forma isolada (criar, editar ou excluir credenciais sem instalar os agentes novamente), use:
npx -y dba-master@latest configure
No Claude Code, alternativamente via CLI (apenas registro do server MCP — as credenciais vêm do connections.json, criado com npx -y dba-master@latest configure):
claude mcp add dba-master -s user -- npx -y dba-master@latest
Outros clientes MCP (manual, via stdio) — sem bloco env, pois as credenciais vivem no connections.json:
{
"command": "npx",
"args": ["-y", "dba-master@latest"]
}
Reabra/recarregue o agente após instalar. O agente vai ganhar as ferramentas MCP e o comando /dba-investigate (workflow que orienta o agente a usar as tools).
2. Gerar as interfaces do schema (opcional)
npx -y dba-master@latest generate # compila todas as tabelas + views em .ts
Popula o cache (.dba-master/types) de uma vez com as interfaces TypeScript de todo o schema — ver
Gerar interfaces do schema para flags e detalhes.
Setup a partir do repositório (dev)
npm install
cp connections.example.json ./.dba-master/connections.json # edite com suas credenciais
npm run build # compila para dist/
Configuração Manual
O dba-master lê as conexões exclusivamente de um arquivo connections.json localizado na pasta .dba-master (./.dba-master/connections.json no projeto — que tem precedência — ou ~/.dba-master/connections.json global). O arquivo é um mapa plano nomeDaConexao → objeto de conexão (ver connections.example.json). Qualquer campo string aceita a referência ${VAR}, resolvida a partir das variáveis de ambiente no boot (ver 🔒 A IA não tem acesso às credenciais do banco) — recomendado para não deixar segredo em texto plano. Exemplo:
{
"prod": {
"engine": "oracle",
"user": "${DBA_PROD_USER}",
"password": "${DBA_PROD_PASS}",
"connectString": "${DBA_PROD_CS}",
"thick": false,
"poolMax": 8,
"readOnly": true,
"schemaFilter": ["APP"]
},
"pg": {
"engine": "postgres",
"connectString": "${DBA_PG_CS}",
"readOnly": true,
"schemaFilter": ["public"]
}
}
Os valores também podem ser gravados em texto plano direto no JSON (menos seguro). Se uma ${VAR} referenciada não existir no ambiente, o server falha no boot nomeando a var. No Postgres, user/password vêm embutidos na URL da connectString (como no exemplo pg acima).
Normalmente o arquivo é gravado pelos prompts interativos de npx -y dba-master@latest configure (ou install). Para ajustar readOnly/schemaFilter/poolMax, edite o JSON manualmente. Campos por conexão:
| Campo | Obrigatório | Descrição |
|---|---|---|
user / password |
sim* | Credenciais. *No Postgres podem vir embutidos na connectString (URL) |
connectString |
sim | Oracle: host:1521/service_name. Postgres: URL postgresql://user:senha@host:5432/db |
engine |
não | Engine de banco: oracle (default) ou postgres |
thick |
não | Só Oracle. false (default) usa modo thin; true exige Instant Client |
clientLibDir |
não | Só Oracle. Libs do client (só thick, caminho não-padrão) |
poolMax |
não | Tamanho máximo do pool (default 8) |
readOnly |
não | true (default) bloqueia escrita no run_sql; leitura sempre liberada |
schemaFilter |
não | Array de schemas; vazio ([], default) = todos os schemas de usuário. Oracle: nomes em MAIÚSCULO (exclui os mantidos pela Oracle); Postgres: nomes como public (exclui pg_* e information_schema) |
tunnel |
não | Túnel/proxy quando o banco só é acessível via bastion. Ver abaixo |
O cacheDir não é configurável: é sempre <pasta do connections.json>/types (ex.: .dba-master/types).
Túnel / proxy (bancos em rede privada)
Bancos acessíveis só via bastion aceitam um bloco tunnel por conexão. O
connectString continua apontando para o host:porta real do banco — a camada
de túnel abre o transporte, aloca uma porta local efêmera e reescreve a conexão
por baixo (o driver disca no túnel, transparente). É lazy: o túnel só sobe
quando a conexão é de fato usada, e conexões sem tunnel discam direto. Os
segredos do túnel (chave/senha SSH, URL de proxy com credencial) usam a mesma
indireção ${VAR} — nada de segredo em texto plano no connections.json.
Configurável pelos prompts de npx -y dba-master@latest configure (create/edit) ou à mão. Três tipos:
SSH (bastion) — via lib ssh2 (puro JS, cross-platform). Host key validado por
~/.ssh/known_hosts por padrão (ou pin hostKey com fingerprint SHA256). Auth:
chave por caminho ou conteúdo PEM (privateKey), passphrase, password, ou
agent: true (usa SSH_AUTH_SOCK).
"via_bastion": {
"engine": "postgres",
"connectString": "${DBA_PROD_CS}",
"tunnel": {
"type": "ssh", "host": "bastion.example.com", "port": 22,
"user": "${SSH_USER}", "privateKey": "${SSH_KEY_PATH}"
}
}
Proxy SOCKS5 / HTTP CONNECT — type: "socks" ou "http", com url (aceita credenciais embutidas):
"tunnel": { "type": "socks", "url": "${PROXY_URL}" } // socks5://user:senha@host:1080
Comando externo — delega o forward a um binário que escuta numa porta local (cloud-sql-proxy, aws ssm, sshuttle...). O dba-master só faz spawn, espera a porta abrir e mata no fim:
"tunnel": {
"type": "command", "command": "cloud-sql-proxy",
"args": ["--port", "5432", "my-project:region:instance"],
"listenHost": "127.0.0.1", "listenPort": 5432
}
Oracle via túnel suporta EZConnect (
host:port/service); TNS descriptor completo está fora de escopo.
Gerar interfaces do schema
Além da geração sob demanda no describe_table/describe_view, dá para compilar tudo de
uma vez — todas as tabelas (e views) viram interface .ts no cache (.dba-master/types).
Mesmo estilo do install, roda via npx:
npx -y dba-master@latest generate # prompt interativo: escolha os schemas (todos marcados por padrão)
npx -y dba-master@latest generate --schema HR # só o schema HR, sem prompt
npx -y dba-master@latest generate --schema HR,SALES # múltiplos schemas, sem prompt
npx -y dba-master@latest generate --no-views # pula views
npx -y dba-master@latest generate --connection prod # conexão nomeada
npx -y dba-master@latest generate --force # ignora o cache e reescreve tudo
Incremental (valida por hash do conteúdo para pular reescrita). Também disponível como tool MCP
generate_interfaces para o agente chamar sob demanda.
Cada .ts gerado é uma base de conhecimento: marca // kind: table ou // kind: view
e, em bloco JSDoc, traz o comentário do objeto, PK, índices UNIQUE, CHECK, os
relacionamentos (FK → de saída e referenciada por ← de entrada) e o comentário de cada
coluna. Use --force na primeira execução após atualizar o dba-master para reescrever os
arquivos antigos (o cache pula objetos inalterados via validação de hash).
Verificação
Com um banco Oracle ou PostgreSQL acessível, valide as tools via MCP Inspector:
npx @modelcontextprotocol/inspector npx -y dba-master@latest
(Se estiver no repositório local, use npx @modelcontextprotocol/inspector node dist/index.js)
Uso e Tools MCP
Depois de instalado, o agente ganha as tools MCP e o comando /dba-investigate. Descreva a
demanda (ex.: "otimize esta query", "modele X") e o agente investiga o schema.
Todas as tools retornam JSON estruturado (em content[].text), pensado para consumo por outro agente de IA — não para leitura humana direta.
O dba-master suporta múltiplas conexões. Utilize a tool list_connections para descobrir os bancos mapeados.
| Tool | O que faz | Parâmetros |
|---|---|---|
list_connections |
Lista as conexões mapeadas configuradas no dba-master | - |
list_tables |
Lista tabelas (owner, nome, num_rows) | connectionName, schema? |
search_tables |
Busca tabelas por substring do nome (case-insensitive) | pattern, schema? |
describe_table |
Colunas (tipo, nullable, default, comentário), PK, FKs de saída, índices, CHECK, comentário da tabela; gera interface .ts |
table, schema? |
list_views |
Lista views (owner, nome) | schema?, pattern? |
describe_view |
Colunas (com comentário) e o SELECT da view; gera interface .ts |
view, schema? |
generate_interfaces |
Compila em lote a interface .ts de todas as tabelas (e views) do schema |
schema?, includeViews?, force? |
get_relationships |
Grafo de FKs: outgoing (FKs da tabela) e incoming (quem a referencia) |
table, schema? |
infer_relationships |
FKs implícitas inferidas por convenção de nome (banco legado), com confiança e evidência | schema? |
get_ddl |
DDL de objetos. Oracle: tabela/view/procedure/package/trigger/sequence/type (via DBMS_METADATA). Postgres: table (reconstruída de colunas/constraints), view/materialized view e function/procedure (nativo) |
name, schema?, objectType? |
list_procedures |
Procedures/functions com assinatura de parâmetros | schema?, pattern? |
list_packages |
Packages e seus subprogramas com assinaturas | schema?, pattern? |
list_schedulers_jobs |
Jobs agendados (ação, agendamento, estado, próxima exec) | schema?, pattern? |
run_sql |
Executa SQL (sujeito ao readOnly da conexão) |
sql, maxRows? |
pg_monitor |
Só Postgres, leitura. Monitoramento: sessões, locks, vacuum, bloat, índices, cache hit, WAL/checkpoints, replicação — via check |
check, limit?, orderBy?, idleMinutes? |
pg_kill_session |
Só Postgres, destrutivo. Cancela/derruba uma sessão pelo pid; exige READ_ONLY=false |
pid, mode? |
ora_monitor |
Só Oracle, leitura. Monitoramento: sessões, locks, top SQL, tablespace, cache, índices, redo, Data Guard — via check |
check, limit?, orderBy?, idleMinutes? |
ora_kill_session |
Só Oracle, destrutivo. Cancela o SQL (cancel, 19c+) ou derruba (kill) uma sessão por sid+serial; exige READ_ONLY=false + ALTER SYSTEM |
sid, serial, mode? |
mysql_monitor |
Só MySQL, leitura. Monitoramento: sessões, locks, transações longas, top queries (performance_schema), engine status — via check |
check |
mysql_kill_session |
Só MySQL, destrutivo. Cancela a query ou derruba a conexão por connectionId; exige READ_ONLY=false |
connectionId, mode? |
Parâmetros comuns:
connectionName(opcional): O nome da conexão mapeada para usar (ex:prod,default). Necessário quando há mais de uma conexão listada porlist_connections.schema(opcional): escopa a um owner específico. Omitido = todos os schemas acessíveis (exclui os mantidos pela Oracle).pattern(opcional nas listagens): substring do nome, case-insensitive.
Capability flag
Recursos que variam por banco (list_packages, list_schedulers_jobs) trazem um campo supported. Se o banco atual não tem o recurso, a resposta é { "supported": false, ... } com lista vazia — sem erro. No Oracle, ambos são true. No PostgreSQL, ambos são false (não há packages PL/SQL nem scheduler nativo). No MySQL, list_packages é false mas list_schedulers_jobs é true (mapeado para MySQL Events).
run_sql e o modo read-only
Com readOnly: true na conexão (default), só SELECT/WITH/EXPLAIN passam; escrita (INSERT/UPDATE/DELETE/MERGE/DDL) é rejeitada com erro. A verificação é pelo primeiro token do statement — é uma guarda, não um parser SQL. Para bloqueio forte, use um usuário Oracle read-only (GRANT SELECT). maxRows limita o retorno (default 200).
Monitoramento Postgres (pg_monitor / pg_kill_session)
Exclusivas do engine Postgres. pg_monitor é somente leitura — cada check é um SELECT
fixo sobre pg_stat_*/pg_catalog (fica sempre dentro do read-only). Escolha a métrica em
check: atividade (active_queries, long_transactions), sessões (connections_usage,
idle_in_transaction), locks (blocking_locks, deadlocks), top_queries (exige extensão
pg_stat_statements; orderBy total/mean/max), vacuum (dead_tuples, wraparound), storage
(table_sizes, cache_hit), índices (unused_indexes, seq_scans), WAL (wal_stats,
checkpoints) e replicação (replication, replication_slots). Colunas divergentes entre
PG16- e PG17+ (top_queries, checkpoints) são resolvidas por detecção automática de versão.
Lista completa dos check em docs/tools.md.
pg_kill_session(pid, mode) é a única ação destrutiva: cancel (reversível) ou terminate
(ROLLBACK). Bloqueada quando a conexão está readOnly (default) — mesma guarda de run_sql.
Para diagnósticos guiados, use o comando /dba-pg-monitor.
Monitoramento Oracle (ora_monitor / ora_kill_session)
Exclusivas do engine Oracle. ora_monitor é somente leitura — cada check é um SELECT
fixo sobre views v$/dba_* (exige SELECT_CATALOG_ROLE). Sem detecção de versão (views
estáveis 12c–23c); colunas voltam em UPPERCASE; consulta só a instância local (v$).
Escolha a métrica em check: atividade (active_queries, long_transactions), sessões
(connections_usage, idle_in_transaction), locks (blocking_locks, deadlocks),
top_queries (orderBy total/mean/io), storage (tablespace_usage, table_sizes,
stale_stats), cache (cache_hit, library_cache), índices (unused_indexes 12.2+,
full_scans), redo (redo_stats, log_switches) e Data Guard (dataguard_stats,
archive_dest). Lista completa em docs/tools.md.
ora_kill_session(sid, serial, mode) é a única ação destrutiva: cancel (só o SQL, 19c+,
reversível) ou kill (derruba a sessão, ROLLBACK). Exige ALTER SYSTEM e é bloqueada quando
a conexão está readOnly (default). Para diagnósticos guiados, use o comando /dba-ora-monitor.
Monitoramento MySQL / MariaDB (mysql_monitor / mysql_kill_session)
Exclusivas do engine MySQL. mysql_monitor é somente leitura — cada check é um SELECT
fixo sobre as tabelas de sistema do information_schema e performance_schema.
Escolha a métrica em check: atividade (active_queries, all_activity, long_transactions), locks (blocking_locks),
top_queries (exige extensão performance_schema ativada), storage (table_sizes), e engine_status.
mysql_kill_session(connectionId, mode) é a única ação destrutiva: query (só o SQL,
reversível) ou connection (derruba a sessão, ROLLBACK). Bloqueada quando
a conexão está readOnly (default). Para diagnósticos guiados, use o comando /dba-mysql-monitor.
Cache de tipos
Em cada describe_table/describe_view, o objeto vira <cache>/<NOME_DA_CONEXAO>/<OWNER>/<NOME>.ts com uma interface TypeScript (o cache é sempre .dba-master/types, ao lado do connections.json). O arquivo marca // kind: table/// kind: view e, em bloco JSDoc, traz comentário do objeto, PK, UNIQUE, CHECK, relacionamentos (FK → de saída, referenciada por ← de entrada) e comentário de cada coluna. Ao compilar em lote (generate_interfaces / generate), o cache também reflete as FKs implícitas inferidas por infer_relationships — anotadas na coluna (FK? → alvo (implícita, confiança)) e no bloco JSDoc (FK implícita (inferida) → alvo [confiança: evidência]). A regeneração é incremental: o builder valida o hash (SHA-256) do conteúdo gerado contra o header do arquivo e só o reescreve se o hash mudar (o que soluciona corretamente o problema de invalidação para alterações nas dependências da tabela). A resposta inclui cacheFile com o caminho gerado. Para popular o diretório inteiro de uma vez, use generate_interfaces (tool) ou npx -y dba-master@latest generate (CLI).
Consumo do cache (fast-path): describe_table/describe_view agora reaproveitam o .ts. Antes do describe completo, uma única query barata calcula um token de frescor do objeto (Oracle: last_ddl_time; MySQL: COALESCE(UPDATE_TIME, CREATE_TIME); Postgres: md5 de uma assinatura do catálogo — colunas, constraints e índices). O token é gravado no header do .ts (// fresh: …). Se o token vivo bate com o do arquivo (cache HIT), a tool pula o describe pesado e retorna enxuto — { "cached": true, "cacheFile", "owner", "tableName"/"viewName", "columnCount" } — cabendo ao agente ler o .ts (mais denso que o JSON) para o schema. Isso economiza tanto tempo (uma query em vez de ~7 no Oracle) quanto tokens. Em cache MISS (token diferente, arquivo ausente, cache legado sem // fresh:, ou engine sem sinal de frescor), o comportamento é o de sempre: describe completo + reescrita do cache + TableSchema inline (com "cached": false). Passe force: true para ignorar o cache e refazer o describe. As respostas das tools agora são JSON compacto (sem indentação) para reduzir tokens.
Nota MySQL (InnoDB):
UPDATE_TIMEreflete DML (não só DDL) e pode virNULL; nesses casos a fast-path simplesmente não valida e cai no describe completo — nunca serve schema stale.
Otimização para LSP: Um tsconfig.json também é gerado automaticamente na raiz da conexão (.dba-master/types/<NOME_DA_CONEXAO>/tsconfig.json). Isso agrupa os arquivos exportados em um projeto único, ativando suporte avançado de autocomplete, Go-to-Definition e resolução de módulos nativamente por editores baseados em LSP (tsserver) e agentes de IA integrados.
Install Dba Master in Claude Desktop, Claude Code & Cursor
unyly install dba-masterInstalls into Claude Desktop, Claude Code, Cursor & VS Code — handles npx, uvx and build-from-source repos for you.
First time? Get the CLI: curl -fsSL https://unyly.org/install | sh
Or configure manually
Run in your terminal:
claude mcp add dba-master -- npx -y dba-masterFAQ
Is Dba Master MCP free?
Yes, Dba Master MCP is free — one-click install via Unyly at no cost.
Does Dba Master need an API key?
No, Dba Master runs without API keys or environment variables.
Is Dba Master hosted or self-hosted?
Self-hosted: the server runs locally on your machine via the install command above.
How do I install Dba Master in Claude Desktop, Claude Code or Cursor?
Open Dba Master on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
wenb1n-dev/SmartDB_MCP
A universal database MCP server supporting simultaneous connections to multiple databases. It provides tools for database operations, health analysis, SQL optim
by wenb1n-devPostgres Server
This server enables interaction with PostgreSQL databases through the Model Context Protocol, optimized for the AWS Bedrock AgentCore Runtime. It provides tools
by madhurprashPostgres
Query your database in natural language
by AnthropicPostgreSQL
Read-only database access with schema inspection.
by modelcontextprotocolCompare Dba Master with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All data MCPs
