Skip to main content
Glama
VasquezNodier

MCP-Oracle

MCP-Oracle

Español | Inglés

Servidor MCP (Model Context Protocol) que conecta un agente de IA a una base de datos Oracle.

Expone herramientas para explorar el esquema, leer el código fuente de PL/SQL y ejecutar SQL. Se inicia en modo solo lectura; las escrituras y las llamadas a procedimientos almacenados se habilitan con ORACLE_ALLOW_WRITE=true.

Utiliza el SDK oficial de Python (mcp) y python-oracledb. Si encuentra un Instant Client (o el directorio lib/ de un ORACLE_HOME), habilita el modo thick; de lo contrario, usa el modo thin. El modo thick es necesario para instancias antiguas (10g/11g) cuyo verificador de contraseña no es compatible con el modo thin.

Este proyecto no es el conjunto oficial de MCP de Oracle (oracle/mcp). Ese repositorio está dirigido a Oracle Cloud y otros productos de Oracle. Este servidor se comunica directamente con el listener de tu base de datos.

Herramientas

Herramienta

Descripción

Escritura

list_tables

Lista las tablas visibles. schema opcional.

No

describe_table

Columnas, tipos, nulabilidad, comentarios y clave primaria.

No

list_constraints

Restricciones PK, FK y únicas para una tabla.

No

get_object_source

Código fuente de un PACKAGE, PROCEDURE, FUNCTION, TRIGGER o VIEW.

No

run_query

Ejecuta SELECT / WITH. Rechaza DML/DDL. Trunca a ORACLE_MAX_ROWS.

No

execute_dml

INSERT / UPDATE / DELETE / MERGE + commit.

Sí

call_procedure

Llama a un procedimiento PL/SQL almacenado + commit.

Sí

run_query y execute_dml aceptan variables de enlace (:name) para que no concatenes valores en el SQL.

Related MCP server: Oracle DB MCP Server

Requisitos

  • Python 3.9+

  • Acceso a una instancia de Oracle (usuario, contraseña, host, puerto y service_name)

  • Para Oracle 10g/11g (o cuando el modo thin falla): Oracle Instant Client o el directorio lib/ de un ORACLE_HOME

Uso local vs producción

Este README cubre el uso local: Cursor o Claude Desktop inician server.py en tu máquina a través de stdio (no abre un puerto HTTP).

Si el MCP debe seguir ejecutándose en un servidor y los clientes se conectan a través de la red:

Instalación

python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

Copia la plantilla de entorno y completa tus valores:

cp .env.example .env

El servidor no carga .env automáticamente. Esas variables deben pasarse en la configuración del cliente MCP (Cursor, Claude Desktop, etc.). El archivo .env es una referencia local; no lo confirmes en el repositorio.

Variables de entorno

Variable

Requerido

Por defecto

Descripción

ORACLE_USER

Sí

—

Usuario de la base de datos

ORACLE_PASSWORD

Sí

—

Contraseña

ORACLE_HOST

Si ORACLE_DSN no está definido

127.0.0.1 o localhost

Host del listener

ORACLE_PORT

Si ORACLE_DSN no está definido

1521

Puerto del listener

ORACLE_SERVICE_NAME

Si ORACLE_DSN no está definido

—

Nombre del servicio (p. ej. ORCLPDB1)

ORACLE_DSN

No

—

Si se define, reemplaza host/puerto/service_name. Útil para un alias TNS o Easy Connect Plus

ORACLE_ALLOW_WRITE

No

false

true habilita execute_dml y call_procedure

ORACLE_MAX_ROWS

No

200

Número máximo de filas devueltas por run_query

ORACLE_CLIENT_LIB_DIR

No

~/oracle/instantclient

Carpeta de Instant Client o lib/ de un ORACLE_HOME. Si el directorio existe, el modo thick está habilitado

Modo thick vs thin

Al iniciar, el servidor comprueba ORACLE_CLIENT_LIB_DIR (o ~/oracle/instantclient). Si esa carpeta existe, llama a oracledb.init_oracle_client() y usa el modo thick.

Ejemplos:

# Instant Client (zip / RPM)
ORACLE_CLIENT_LIB_DIR=/Users/your_user/oracle/instantclient

# ORACLE_HOME 19c
ORACLE_CLIENT_LIB_DIR=/apps/oracle/product/19c/lib

Si no hay un cliente nativo, se ejecuta en modo thin (Oracle 12.1+ en la mayoría de los casos).

Uso con Cursor

En Cursor, añade el servidor a la configuración de MCP (por ejemplo ~/.cursor/mcp.json o la configuración del proyecto):

{
  "mcpServers": {
    "oracle-mcp": {
      "command": "/Users/your_user/Development/oracle-mcp/.venv/bin/python",
      "args": ["/Users/your_user/Development/oracle-mcp/server.py"],
      "env": {
        "ORACLE_USER": "my_user",
        "ORACLE_PASSWORD": "my_password",
        "ORACLE_HOST": "127.0.0.1",
        "ORACLE_PORT": "1521",
        "ORACLE_SERVICE_NAME": "ORCLPDB1",
        "ORACLE_ALLOW_WRITE": "false",
        "ORACLE_MAX_ROWS": "200"
      }
    }
  }
}

Usa la ruta absoluta al Python de .venv para que el cliente encuentre mcp y oracledb.

Reinicia Cursor (o recarga los servidores MCP) y confirma que oracle-mcp aparece en la lista de herramientas.

Uso con Claude Desktop

En claude_desktop_config.json:

{
  "mcpServers": {
    "oracle-mcp": {
      "command": "/Users/your_user/Development/oracle-mcp/.venv/bin/python",
      "args": ["/Users/your_user/Development/oracle-mcp/server.py"],
      "env": {
        "ORACLE_USER": "my_user",
        "ORACLE_PASSWORD": "my_password",
        "ORACLE_HOST": "127.0.0.1",
        "ORACLE_PORT": "1521",
        "ORACLE_SERVICE_NAME": "ORCLPDB1",
        "ORACLE_ALLOW_WRITE": "false",
        "ORACLE_MAX_ROWS": "200"
      }
    }
  }
}

Ejecución manual

Localmente, el servidor habla MCP a través de stdio (no abre un puerto HTTP). En un servidor de producción, el transporte es HTTP; consulta Uso local vs producción.

source .venv/bin/activate
export ORACLE_USER=my_user
export ORACLE_PASSWORD=my_password
export ORACLE_HOST=127.0.0.1
export ORACLE_PORT=1521
export ORACLE_SERVICE_NAME=ORCLPDB1
python server.py

Sin un cliente MCP conectado a stdin/stdout no verás un prompt interactivo; eso es lo esperado.

Seguridad

  • Por defecto ORACLE_ALLOW_WRITE=false: execute_dml y call_procedure fallan con PermissionError.

  • run_query rechaza sentencias que comiencen con INSERT, UPDATE, DELETE, MERGE, DROP, ALTER, TRUNCATE, CREATE, GRANT o REVOKE.

  • execute_dml solo acepta INSERT, UPDATE, DELETE o MERGE.

  • Prefiere variables de enlace (:id) en lugar de interpolar valores en el SQL.

  • Conéctate con un usuario de privilegios mínimos cuando solo necesites explorar el esquema.

  • No confirmes .env ni credenciales en un mcp.json versionado.

Dependencias

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Provides flexible access to Oracle databases for AI assistants like Claude, supporting SQL queries across multiple schemas with comprehensive database introspection capabilities.
    6
    57 npm
    11
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables AI tools to interact with Oracle databases through query execution, schema browsing, stored procedure calls, and transaction management. Supports multiple database connections with safety features like read-only mode and dangerous query detection.
    16
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables Claude Code to execute read-only queries and DML operations on Oracle and PostgreSQL databases, and to list or describe database tables.
    16 npm
    1
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables read-only exploration of Oracle databases through natural language, providing schema inspection and safe bounded SQL query execution.
    -