# MCP Oracle Custom Servidor MCP local para Oracle com foco em estabilidade: - pool de conexoes reutilizavel - timeout por chamada - limite padrao e limite rigido de linhas - execucao apenas de consultas de leitura - fallback automatico para SQLcl quando o driver Thin do node-oracledb nao suporta o verificador de senha da conta ## Arquivos - `server.mjs`: servidor MCP via stdio - `cli.mjs`: entrypoint Node executavel e cross-platform - `run-mcp.sh`: bootstrap local que encontra `node`, instala dependencias quando necessario e sobe o servidor - `.env.example`: exemplo de configuracao das conexoes ## Configuracao 1. Copie `.env.example` para `.env` 2. Preencha usuario, senha e connect string 3. Ajuste limites e timeout se necessario Alternativas para configuracao: - voce pode passar um arquivo externo com `--env-file /caminho/para/.env` - voce pode definir as variaveis diretamente no ambiente do processo MCP - na ausencia de `--env-file`, o servidor procura `.env` no diretorio atual, em diretorios pais, em `mcp-oracle-custom/.env` a partir do diretorio atual e, por fim, na pasta do pacote Variaveis opcionais de backend: - `ORACLE_BACKEND=auto`: tenta `node-oracledb` primeiro e cai para SQLcl quando necessario - `ORACLE_BACKEND=oracledb`: forca uso apenas do driver Node - `ORACLE_BACKEND=sqlcl`: forca uso apenas do SQLcl - `ORACLE_SQLCL_PATH`: caminho explicito para o executavel `sql` - `ORACLE_SQLCL_TIMEOUT_MS`: timeout do fallback SQLcl Se `ORACLE_SQLCL_PATH` nao for informado, o servidor tenta localizar o SQLcl automaticamente em instalacoes comuns do VS Code sob o diretorio do usuario e em caminhos padrao do sistema. ## Ferramentas expostas - `list_connections`: lista as conexoes configuradas - `test_connection`: testa a conexao com o banco - `run_query`: executa `SELECT` ou `WITH` com binds opcionais em JSON - `reset_pools`: fecha todos os pools mantidos pelo servidor ## Observacoes - Este MCP bloqueia DDL e DML por seguranca - O servidor pode carregar o `.env` da pasta atual, da propria pasta do pacote ou de um arquivo informado em `--env-file` - O retorno da consulta vem em JSON com colunas, linhas, truncamento e conexao usada - Quando o fallback SQLcl estiver ativo, `bindsJson` nao e suportado - O parser do fallback SQLcl normaliza numeros retornados com virgula decimal para manter o JSON valido - Se quiser ampliar para metadata, DDL gerado ou chamadas especificas, da para adicionar novas ferramentas depois ## Uso no workspace O arquivo `.vscode/mcp.json` deste workspace pode apontar diretamente para `./mcp-oracle-custom/run-mcp.sh` via `bash`. Depois de preencher o `.env`, recarregue o VS Code ou o catalogo de MCPs para o servidor aparecer. Esse bootstrap local faz o seguinte: - procura um `node` no PATH e, se nao encontrar, tenta usar o Node embutido do VS Code neste ambiente Linux - evita depender de caminhos fixos de um usuario especifico para localizar o Node embutido do VS Code - verifica se as dependencias do pacote estao presentes - executa `npm install` automaticamente quando as dependencias estiverem ausentes ou desatualizadas - exibe mensagens claras quando `node` ou `npm` nao existirem no ambiente ## Instalacao cross-platform Para usar no Windows e no Linux sem depender do `run-mcp.sh`, instale o pacote com npm para gerar o comando executavel `mcp-oracle-custom`: ```bash npm install -g . ``` Depois disso, o comando abaixo fica disponivel no sistema: ```bash mcp-oracle-custom --help ``` No Windows, o npm cria automaticamente o shim executavel correspondente. No Linux, o comando e exposto como executavel com shebang Node. Quando o comando for executado a partir do workspace do repositorio, o servidor encontra automaticamente `mcp-oracle-custom/.env`. No bootstrap local via `run-mcp.sh`, nao e necessario instalar o pacote globalmente. O requisito e ter `node` disponivel para executar o servidor e `npm` disponivel quando for necessario instalar dependencias. ## Exemplo de configuracao em clientes MCP Exemplo generico para VS Code, Copilot ou Claude Desktop usando o executavel do pacote: ```json { "mcpServers": { "oracle-davinti": { "command": "mcp-oracle-custom" } } } ``` Se preferir, ainda e possivel informar `--env-file` explicitamente. O `cli.mjs` foi adicionado para permitir distribuicao e instalacao sem depender de shell Bash. ## Exemplo de bootstrap local no workspace Exemplo para VS Code no Linux usando o launcher do repositorio: ```json { "servers": { "oracle-davinti": { "type": "stdio", "command": "bash", "args": [ "./mcp-oracle-custom/run-mcp.sh" ] } } } ``` Se `node` nao existir, o bootstrap encerra informando isso explicitamente. Se as dependencias ainda nao estiverem instaladas e `npm` nao existir, o bootstrap tambem encerra com mensagem clara explicando o que falta.