MCP Oracle Database Server

Um servidor para integração completa com o Oracle Database. Requer as bibliotecas Oracle Instant Client.

Documentação

MCP Oracle Database Server

Servidor MCP (Model Context Protocol) para integração completa com Oracle Database. Permite executar consultas SQL, comandos DDL/DML, gerenciar transações e explorar a estrutura do banco de dados diretamente de aplicações MCP.

🚀 Características

  • Consultas SQL: Executa SELECT com formatação inteligente de resultados
  • Comandos DML/DDL: INSERT, UPDATE, DELETE, CREATE, ALTER, DROP, etc.
  • Gerenciamento de Transações: Suporte para transações manuais e automáticas
  • Exploração de BD: Lista tabelas, descreve estruturas, explora esquemas
  • Pool de Conexões: Gerenciamento eficiente de conexões com Oracle
  • Compatibilidade: Suporte para versões antigas do Oracle (pré-12c)
  • Monitoramento: Health checks e estatísticas de conexão

📋 Ferramentas Disponíveis

oracle_health_check

Verifica o estado de saúde da conexão Oracle DB.

oracle_query

Executa consultas SQL SELECT com formato de tabela ou JSON.

  • Parâmetros: sql, maxRows, formatAsTable, showMetadata

oracle_execute

Executa comandos SQL (INSERT, UPDATE, DELETE, CREATE, etc.).

  • Parâmetros: sql, autoCommit, showDetails

oracle_list_tables

Lista todas as tabelas do esquema especificado.

  • Parâmetros: owner, showDetails

oracle_describe_table

Mostra a estrutura completa de uma tabela.

  • Parâmetros: tableName, owner, showDetails

oracle_transaction

Executa múltiplos comandos SQL em uma transação.

  • Parâmetros: commands, rollbackOnError

oracle_info

Mostra informações de configuração da conexão.

🛠️ Instalação

⚠️ IMPORTANTE: Para Oracle 9g e versões antigas

Se você está usando Oracle 9g ou versões anteriores, deve realizar estes passos adicionais:

  1. Configurar modo de compatibilidade:
ORACLE_OLD_CRYPTO=true
  1. Baixar Oracle Instant Client 19.26 (obrigatório para Oracle 9g):
ORACLE_CLIENT_LIB_DIR=C:\oracle\instantclient_19_26
  1. Configuração MCP para Oracle 9g:
{
  "mcpServers": {
    "oracle-db": {
      "command": "npx",
      "args": ["@grec0/mcp-oracle-db"],
      "env": {
        "ORACLE_HOST": "tu-host-oracle",
        "ORACLE_PORT": "1521",
        "ORACLE_SERVICE_NAME": "tu-servicio",
        "ORACLE_USERNAME": "usuario",
        "ORACLE_PASSWORD": "contraseña",
        "ORACLE_OLD_CRYPTO": "true",
        "ORACLE_CLIENT_LIB_DIR": "C:\\oracle\\instantclient_19_26"
      }
    }
  }
}

Instalação Geral MCP EM LOCAL (NÃO RECOMENDADO)

  1. Instalar dependências:
npm install
  1. Configurar variáveis de ambiente:
cp config.example.env .env
# Editar .env con la configuración de su base de datos
  1. Compilar:
npm run build

⚙️ Configuração

Variáveis de Ambiente

VariávelDescriçãoPadrão
ORACLE_HOSTHost do servidor Oraclelocalhost
ORACLE_PORTPorta do Oracle1521
ORACLE_SERVICE_NAMENome do serviço OracleXE
ORACLE_USERNAMEUsuário do banco de dadoshr
ORACLE_PASSWORDSenha do banco de dadoshr
ORACLE_CONNECTION_STRINGConnection string completo (alternativo)-
ORACLE_OLD_CRYPTOOBRIGATÓRIO para Oracle 9g - Usar modo Thickfalse
ORACLE_CLIENT_LIB_DIROBRIGATÓRIO para Oracle 9g - Caminho para Instant Client 19.26-
ORACLE_POOL_MINConexões mínimas do pool1
ORACLE_POOL_MAXConexões máximas do pool10
ORACLE_POOL_TIMEOUTTimeout do pool em segundos60
ORACLE_FETCH_SIZELinhas a buscar por lote100
ORACLE_STMT_CACHE_SIZETamanho do cache de statements30

Configuração MCP em Aplicações USANDO NPX (RECOMENDADO)

Localização do arquivo de configuração

Claude Desktop:

  • Windows: %APPDATA%\Claude\claude_desktop_config.json
  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Linux: ~/.config/claude/claude_desktop_config.json

Para Claude Desktop (config.json)

Configuração para Oracle 9g (com Instant Client 19.26):

{
  "mcpServers": {
    "oracle-db": {
      "command": "npx",
      "args": ["@grec0/mcp-oracle-db"],
      "env": {
        "ORACLE_HOST": "tu-host-oracle",
        "ORACLE_PORT": "1521",
        "ORACLE_SERVICE_NAME": "tu-servicio",
        "ORACLE_USERNAME": "usuario",
        "ORACLE_PASSWORD": "contraseña",
        "ORACLE_OLD_CRYPTO": "true",
        "ORACLE_CLIENT_LIB_DIR": "C:\\oracle\\instantclient_19_26"
      }
    }
  }
}

Configuração para Oracle 12c ou superior:

{
  "mcpServers": {
    "oracle-db": {
      "command": "npx",
      "args": ["@grec0/mcp-oracle-db"],
      "env": {
        "ORACLE_HOST": "host",
        "ORACLE_PORT": "port",
        "ORACLE_SERVICE_NAME": "service",
        "ORACLE_USERNAME": "user",
        "ORACLE_PASSWORD": "password"
      }
    }
  }
}

Para instalação local

{
  "mcpServers": {
    "oracle-db": {
      "command": "node",
      "args": ["C:/workspaces/mcps/mcp-oracle-db/dist/index.js"],
      "env": {
        "ORACLE_HOST": "host",
        "ORACLE_PORT": "post",
        "ORACLE_SERVICE_NAME": "service",
        "ORACLE_USERNAME": "user",
        "ORACLE_PASSWORD": "pass",
        "ORACLE_OLD_CRYPTO": "true"
      }
    }
  }
}

Para ambiente de desenvolvimento

{
  "mcpServers": {
    "oracle-db": {
      "command": "npm",
      "args": ["run", "dev"],
      "cwd": "C:/workspaces/mcps/mcp-oracle-db",
      "env": {
        "ORACLE_HOST": "localhost",
        "ORACLE_PORT": "1521", 
        "ORACLE_SERVICE_NAME": "XE",
        "ORACLE_USERNAME": "hr",
        "ORACLE_PASSWORD": "hr"
      }
    }
  }
}

Verificar configuração MCP

Depois de configurar o MCP, você pode verificar se funciona corretamente:

  1. Reiniciar a aplicação (Claude Desktop, etc.)
  2. Usar ferramenta de diagnóstico:
    oracle_health_check()
    
  3. Testar consulta básica:
    oracle_query("SELECT 1 FROM DUAL")
    

Variáveis de Ambiente Principais

# Configuración básica
ORACLE_HOST=localhost
ORACLE_PORT=1521
ORACLE_SERVICE_NAME=XE
ORACLE_USERNAME=hr
ORACLE_PASSWORD=hr

# O usar connection string completo
ORACLE_CONNECTION_STRING="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XE)))"

# Para versiones antiguas de Oracle (pre-11g)
ORACLE_OLD_CRYPTO=true
ORACLE_CLIENT_LIB_DIR=/path/to/instantclient

Configuração Baseada em Java Existente

Baseado na configuração Java fornecida:

ORACLE_HOST=host
ORACLE_PORT=port
ORACLE_SERVICE_NAME=service
ORACLE_USERNAME=user
ORACLE_PASSWORD=password
ORACLE_OLD_CRYPTO=true
ORACLE_FETCH_SIZE=100  # Basado en DataSourceCrmConfig.java

Pool de Conexões

ORACLE_POOL_MIN=2
ORACLE_POOL_MAX=10
ORACLE_POOL_INCREMENT=1
ORACLE_POOL_TIMEOUT=60
ORACLE_STMT_CACHE_SIZE=30

🚀 Uso

Iniciar o servidor

npm run start

Modo desenvolvimento

npm run dev

Com inspector MCP

npm run inspector

📚 Exemplos de Uso

Consulta Simples

SELECT * FROM employees WHERE department_id = 10

Criar Tabela

CREATE TABLE test_table (
    id NUMBER PRIMARY KEY,
    name VARCHAR2(100) NOT NULL,
    created_date DATE DEFAULT SYSDATE
)

Inserir Dados

INSERT INTO test_table (id, name) VALUES (1, 'Test Record')

Transação Complexa

-- Comando 1
INSERT INTO customers (id, name) VALUES (1, 'Cliente Test');
-- Comando 2  
UPDATE orders SET customer_id = 1 WHERE id = 100;
-- Comando 3
DELETE FROM temp_data WHERE processed = 'Y';

🔧 Solução de Problemas

⚠️ Erro Oracle 9g: Password Verifier Not Supported

Se você obtiver o erro "password verifier type 0x939 is not supported by node-oracledb in Thin mode" com Oracle 9g:

Solução OBRIGATÓRIA para Oracle 9g:

📦 Passo 1: Baixar Oracle Instant Client 19.26

# Descargar desde:
# https://download.oracle.com/otn_software/nt/instantclient/1926000/instantclient-basic-windows.x64-19.26.0.0.0dbru.zip

# Extraer a:
C:\oracle\instantclient_19_26

⚙️ Passo 2: Configurar variáveis obrigatórias

ORACLE_OLD_CRYPTO=true
ORACLE_CLIENT_LIB_DIR=C:\oracle\instantclient_19_26

🚀 Para versões Oracle 10g-11g: Testar sem Instant Client primeiro

ORACLE_OLD_CRYPTO=true

📦 Se falhar com 10g-11g, instalar Oracle Instant Client

  1. Baixar Oracle Instant Client:

  2. Configurar o caminho:

ORACLE_CLIENT_LIB_DIR=/path/to/instantclient

📋 Exemplos de configuração:

Configuração básica (testar primeiro):

ORACLE_HOST=your-oracle-host
ORACLE_PORT=1521
ORACLE_SERVICE_NAME=your-service
ORACLE_USERNAME=username
ORACLE_PASSWORD=password
ORACLE_OLD_CRYPTO=true

Configuração com Instant Client (se necessário):

ORACLE_HOST=your-oracle-host
ORACLE_PORT=1521
ORACLE_SERVICE_NAME=your-service
ORACLE_USERNAME=username
ORACLE_PASSWORD=password
ORACLE_OLD_CRYPTO=true
ORACLE_CLIENT_LIB_DIR=/opt/oracle/instantclient_19_8

❓ O que é Oracle Instant Client?

Oracle Instant Client são bibliotecas nativas que permitem conexões Thick (mais compatíveis com Oracle antigo).

Quando é necessário?

  • ✅ NÃO necessário: Se seu Oracle for 12c ou superior
  • ⚠️ Pode ser necessário: Para Oracle 10g/11g com crypto antigo
  • ❌ Obrigatório: Para funções avançadas (LDAP, conexões wallet, etc.)

Como saber se preciso?

  1. Teste primeiro apenas com ORACLE_OLD_CRYPTO=true
  2. Se obtiver erros, então instale Oracle Instant Client

📦 Instalação do Oracle Instant Client (Somente se necessário)

Windows:

  1. Baixar "Basic Package" de Oracle Downloads
  2. Extrair para C:\oracle\instantclient_XX_Y
  3. Configurar: ORACLE_CLIENT_LIB_DIR=C:\oracle\instantclient_XX_Y

Linux:

# Ubuntu/Debian
wget https://download.oracle.com/otn_software/linux/instantclient/XXX/instantclient-basic-linux.x64-XX.Y.Z.zip
unzip instantclient-basic-linux.x64-XX.Y.Z.zip
export ORACLE_CLIENT_LIB_DIR=/opt/oracle/instantclient_XX_Y

macOS:

# Descargar desde Oracle y extraer
export ORACLE_CLIENT_LIB_DIR=/opt/oracle/instantclient_XX_Y

Erro de Conexão TNS

Verificar:

  1. Host e porta corretos
  2. Serviço/SID configurado
  3. Firewall/conectividade de rede
  4. Listener do Oracle em execução

Problemas de Pool

# Ajustar configuración del pool
ORACLE_POOL_MIN=1
ORACLE_POOL_MAX=5
ORACLE_POOL_TIMEOUT=30

🧪 Testes

npm test

📖 Compatibilidade

  • Oracle Database: 11g, 12c, 18c, 19c, 21c
  • Node.js: >=18.0.0
  • Sistemas: Windows, Linux, macOS

🔐 Segurança

  • Validação de SQL para prevenir injeções básicas
  • Gerenciamento seguro de credenciais via variáveis de ambiente
  • Suporte para conexões SSL/TLS do Oracle
  • Separação de permissões entre consultas e comandos

🤝 Contribuição

  1. Fork o projeto
  2. Criar branch para feature (git checkout -b feature/nueva-funcionalidad)
  3. Commit das alterações (git commit -am 'Agregar nueva funcionalidad')
  4. Push para o branch (git push origin feature/nueva-funcionalidad)
  5. Criar Pull Request

📄 Licença

MIT License - veja LICENSE para mais detalhes.

🆘 Suporte

Para reportar problemas ou solicitar recursos:

📚 Recursos Adicionais