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.

call_procedure

Llama a un procedimiento PL/SQL almacenado + commit.

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

Usuario de la base de datos

ORACLE_PASSWORD

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

F
license - not found
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Provides flexible access to Oracle databases for AI assistants like Claude, supporting SQL queries across multiple schemas with comprehensive database introspection capabilities.
    6
    95
    10
    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.
    15
    1
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Provides AI assistants with secure, structured access to Oracle Database through MCP, enabling SQL execution, metadata exploration, and stored procedure execution.

View all related MCP servers

Related MCP Connectors

  • Read-only bank access for your AI agent. Connects Claude, ChatGPT, Cursor, Gemini, Codex.

  • Run SOQL queries to explore and retrieve Salesforce data. Access accounts, contacts, opportunities…

  • Runtime permission, approval, and audit layer for AI agent tool execution.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/VasquezNodier/mcp-oracle'

If you have feedback or need assistance with the MCP directory API, please join our Discord server