Esta es una guía para utilizar sqlcl como MCP de aplicativos de desarrollo que utilizan modelos avanzados de lenguaje como puede ser claude code, opencode, qwencode; O también por agentes de IA como openclaw y hermes. El MCP nos permite trabajar directamente en la base de datos sin tener que copiar y pegar lo que estamos haciendo a un cliente de base de datos  esto brinda mucha potencia y flexbilidad.

Esta guía la he creado con ubuntu y un oracle autonomous database, lo hice así para mostrar que no es necesario estar dentro de un ecosistema oracle para utilizar la base de datos ADB.

Bajar SQLcl del sitio de Oracle a un directorio de trabajo en la máquina.

ubuntu@server01:~/stage$ wget https://download.oracle.com/otn_software/java/sqldeveloper/sqlcl-latest.zip

SQLcl necesita Oracle Java 17 o 21. Se puede usar OpenJDK 21.

ubuntu@server01:~/stage$ sudo apt install openjdk-21-jre-headless

ubuntu@server01:~/stage$ java -version
openjdk version "21.0.10" 2026-01-20
OpenJDK Runtime Environment (build 21.0.10+7-Ubuntu-124.04)
OpenJDK 64-Bit Server VM (build 21.0.10+7-Ubuntu-124.04, mixed mode, sharing)

Descomprimimos SQLcl — se genera un directorio llamado sqlcl. Probamos que funcione.

ubuntu@server01:~$ unzip ./stage/sqlcl-latest.zip

ubuntu@server01:~$ cd sqlcl/bin && ./sql

SQLcl: Release 26.1 Production on Thu Apr 16 17:08:26 2026
Copyright (c) 1982, 2026, Oracle.  All rights reserved.

Username? ('')

Agregamos SQLcl al PATH para no tener que llamarlo con la ruta completa.

export PATH="$HOME/.local/bin:$PATH":/home/ubuntu/sqlcl/bin

Para conectarnos a una ADB necesitamos el wallet de la base de datos. Se descarga desde la consola de OCI en la sección ADB.

descarga del wallet desde OCI

ubuntu@server01:~$ mkdir -p ~/.oracle/wallets/dbdevel
ubuntu@server01:~$ cd .oracle/wallets/dbdevel
ubuntu@server01:~/.oracle/wallets/dbdevel$ unzip /home/ubuntu/stage/Wallet_dbdevel.zip

Archive:  /home/ubuntu/stage/Wallet_dbdevel.zip
  inflating: ewallet.pem
  inflating: README
  inflating: cwallet.sso
  inflating: tnsnames.ora
  inflating: truststore.jks
  inflating: ojdbc.properties
  inflating: sqlnet.ora
  inflating: ewallet.p12
  inflating: keystore.jks

ubuntu@server01:~/.oracle/wallets/dbdevel$ ls -l
total 48
-rw-rw-r-- 1 ubuntu ubuntu 3431 Apr 16 17:21 README
-rw-rw-r-- 1 ubuntu ubuntu 6357 Apr 16 17:21 cwallet.sso
-rw-rw-r-- 1 ubuntu ubuntu 6312 Apr 16 17:21 ewallet.p12
-rw-rw-r-- 1 ubuntu ubuntu 7097 Apr 16 17:21 ewallet.pem
-rw-rw-r-- 1 ubuntu ubuntu 3190 Apr 16 17:21 keystore.jks
-rw-rw-r-- 1 ubuntu ubuntu  691 Apr 16 17:21 ojdbc.properties
-rw-rw-r-- 1 ubuntu ubuntu  113 Apr 16 17:21 sqlnet.ora
-rw-rw-r-- 1 ubuntu ubuntu 2711 Apr 16 17:21 tnsnames.ora
-rw-rw-r-- 1 ubuntu ubuntu 3021 Apr 16 17:21 truststore.jks

Agregamos la variable TNS_ADMIN para que SQLcl encuentre el wallet automáticamente.

export TNS_ADMIN=~/.oracle/wallets/dbdevel
ubuntu@server01:~$ source .bashrc

La información de conexión está dentro del sqlnet.ora que está dentro del wallet. Es necesario verificar que apunte al directorio correcto donde está el wallet.

ubuntu@server01:~/.oracle/wallets/dbdevel$ cat sqlnet.ora

WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="/home/ubuntu/.oracle/wallets/dbdevel")))
SSL_SERVER_DN_MATCH=no

Las conexiones están dentro del tnsnames.ora que está en el wallet. Podemos hacer un cat y ver toda la lista de conexiones disponibles.

ubuntu@server01:~/.oracle/wallets/dbdevel$ cat tnsnames.ora

Creamos un usuario en la base para poder hacer pruebas. Lo podemos crear en la consola de OCI en el ADB en las Database Actions → SQL.

captura de database actions en OCI

-- Usuario de aplicativo para pruebas en ADB

CREATE USER app_test IDENTIFIED BY "PruebasApp#2025";

ALTER USER app_test QUOTA UNLIMITED ON DATA;

GRANT CREATE SESSION       TO app_test;
GRANT CREATE TABLE         TO app_test;
GRANT CREATE VIEW          TO app_test;
GRANT CREATE SEQUENCE      TO app_test;
GRANT CREATE PROCEDURE     TO app_test;
GRANT CREATE TRIGGER       TO app_test;
GRANT CREATE TYPE          TO app_test;
GRANT CREATE SYNONYM       TO app_test;
GRANT CREATE DATABASE LINK TO app_test;
GRANT CREATE JOB           TO app_test;

Nos conectamos a la base de datos con el usuario recién creado.

ubuntu@server01:~$ sql app_test@dbdevel_medium

SQLcl: Release 26.1 Production on Thu Apr 16 17:40:53 2026
Copyright (c) 1982, 2026, Oracle.  All rights reserved.

Password? (**********?) ***************
Connected to:
Oracle AI Database 26ai Enterprise Edition Release 23.26.1.2.0 - Production
Version 23.26.1.2.0

SQL>

Agregamos un conector guardado — esto es importante porque es el que usa el MCP server de SQLcl. Las conexiones quedan almacenadas en ~/.dbtools.

ubuntu@server01:~$ sql /nolog

SQLcl: Release 26.1 Production on Thu Apr 16 17:49:41 2026
Copyright (c) 1982, 2026, Oracle.  All rights reserved.

SQL> conn -save dbdevel_apptest -savepwd app_test/PruebasApp#2025@dbdevel_medium
Name: dbdevel_apptest
Connect String: dbdevel_medium
User: app_test
Password: ******
Connected.

SQL> connmgr list
.
└── dbdevel_apptest

SQL> connmgr show dbdevel_apptest
Name: dbdevel_apptest
Connect String: dbdevel_medium
User: app_test
Password: ******

SQL> exit
Disconnected from Oracle AI Database 26ai Enterprise Edition Release 23.26.1.2.0 - Production

ubuntu@server01:~$ sql -name dbdevel_apptest

SQLcl: Release 26.1 Production on Thu Apr 16 17:50:22 2026
Copyright (c) 1982, 2026, Oracle.  All rights reserved.

Connected to:
Oracle AI Database 26ai Enterprise Edition Release 23.26.1.2.0 - Production
Version 23.26.1.2.0

Probamos que funcione el MCP server iniciando SQLcl en modo MCP.

ubuntu@server01:~$ sql -mcp

---------- MCP SERVER STARTUP ----------
MCP Server started successfully on Thu Apr 16 17:52:11 UTC 2026
Press Ctrl+C to stop the server
----------------------------------------

Instalamos Claude Code, opencode, qwen-code o cualquier herramienta de asistencia de consola para codificación. En este caso usamos Claude Code. Documentación: https://code.claude.com/docs/en/quickstart

ubuntu@server01:~$ curl -fsSL https://claude.ai/install.sh | bash

Setting up Claude Code...

✔ Claude Code successfully installed!

  Version: 2.1.111
  Location: ~/.local/bin/claude

  Next: Run claude --help to get started

✅ Installation complete!

Agregamos el MCP de SQLcl a Claude Code y verificamos que aparezca conectado.

ubuntu@server01:~/claude$ claude mcp add sqlcl 
    --env TNS_ADMIN=/home/ubuntu/.oracle/wallets/dbdevel 
    -- /home/ubuntu/sqlcl/bin/sql -mcp

Added stdio MCP server sqlcl with command: /home/ubuntu/sqlcl/bin/sql -mcp to local config
File modified: /home/ubuntu/.claude.json [project: /home/ubuntu/claude]

ubuntu@server01:~/claude$ claude mcp list
claude.ai Google Drive:    https://drivemcp.googleapis.com/mcp/v1  - ! Needs authentication
claude.ai Gmail:           https://gmail.mcp.claude.com/mcp         - ✓ Connected
claude.ai Google Calendar: https://gcal.mcp.claude.com/mcp          - ! Needs authentication
sqlcl:                     /home/ubuntu/sqlcl/bin/sql -mcp           - ✓ Connected

Lanzamos Claude Code y le pedimos que se conecte con el MCP usando el conector guardado. Cuando nos pida permiso para ejecutar herramientas, le decimos que no nos pida más permiso para esa acción — el MCP tiene un esquema de seguridad que podemos aprobar a nivel global una vez que lo utilizamos.

captura conexion a claude code MCP

❯ conectate con el mcp a dbdevel_apptest

● Voy a cargar el esquema del tool de conexión SQL.

  Called sqlcl (ctrl+o to expand)

● Conectado exitosamente a dbdevel_apptest — Oracle Database 23.26.1.2.0. ¿Qué necesitas hacer?

Ahora a hacer magia directamente en la base. Le pedimos que nos cree un esquema con tablas y datos de prueba. Lo que me tomaría varias horas, Claude lo hace en minutos directamente en la base de datos.

❯ Puedes crear unas tablas de prueba en Oracle con relaciones entre ellas
  de un sistema de ventas de paquetes turísticos. Simula unos 10 empleados
  y unos 100 clientes. Solo mete datos de los últimos 3 meses. Los tours
  que se venden son principalmente a Galápagos y son unos 10 tipos de tours.
  Busca en internet si te falta información para generar datos ficticios.

● Voy a cargar los esquemas de ejecución SQL y construiré el sistema completo de tablas.
● Perfecto. Ejecuto en pasos — empiezo con el DDL, drop y creación de tablas.

  Called sqlcl 2 times

● Tablas creadas. Inserto datos de referencia: destinos, tipos de tour, tours y empleados.
  Called sqlcl
● Insertando 100 clientes...    Called sqlcl 2 times
● Insertando 85 ventas...       Called sqlcl 2 times
● Detalle de ventas y pagos...  Called sqlcl 2 times

● Todo listo. Aquí el resumen:

  Sistema de Ventas Turísticas Galápagos
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  8 tablas:  DESTINOS → TOURS ← TIPOS_TOUR
             EMPLEADOS ↘      ↙ CLIENTES
                        VENTAS
                        ↓    ↓
                DETALLE_VENTAS  PAGOS

  Tabla            Registros
  ─────────────────────────────────────────────────────────────
  DESTINOS         5 islas (Santa Cruz, San Cristóbal, Isabela...)
  TIPOS_TOUR       7 (Crucero, Land-Based, Buceo, Fotografía...)
  TOURS            10 paquetes — $1,200 a $4,500 por persona
  EMPLEADOS        10 (1 Gerente + 9 Asesores, sueldos reales Ecuador)
  CLIENTES         100 (50 ecuatorianos + 50 extranjeros, 15 países)
  VENTAS           85 — ene 16 a abr 10, 2026
  DETALLE_VENTAS   85 (tour + pasajeros por venta)
  PAGOS            120 (completos, depósitos 50%, saldos, reembolsos)
  ─────────────────────────────────────────────────────────────
  41 confirmadas · 25 completadas · 10 en proceso · 6 cotizaciones · 3 canceladas
  Total facturado: $454,125

Realizamos una validación con el tools para ver que las tablas efectivamente tienen datos

resultados sqlcl mcp claude code