Oracle MCP Server
Provides flexible access to Oracle databases for AI assistants like Claude, supporting SQL queries across multiple schemas with comprehensive database introspection capabilities.
README Documentation
Oracle MCP Server
A Model Context Protocol (MCP) server for Oracle with two layers:
- generic Oracle query/introspection tools
- a backend-owned Lab control-plane mirror that reproduces the Notion Lab dispatch/return loop on Oracle tables
Features
- Execute SQL queries with parameter binding
- List tables across multiple schemas or filter by specific schema
- Describe table structures with multi-schema support
- View indexes and constraints across schemas
- Check Lab control-plane gates and build dispatch packets from backend state
- Stamp dispatch consumption, ingest execution returns, and create writers-room scene items
- Bootstrap the same Lab mirror on Oracle or PostgreSQL using the included DDL
- Multiple Oracle authentication methods
- Automatic parameter conversion (PostgreSQL style to Oracle)
- SQL injection prevention via bind variables
- Audit logging for security monitoring
Installation
npm install
Configuration
Environment Variables
Create a .env file with your Oracle connection details. Choose one of these methods:
Method 1: Easy Connect String
ORACLE_CONNECTION_STRING=hostname:1521/service_name
ORACLE_USER=your_username
ORACLE_PASSWORD=your_password
Method 2: TNS Name
ORACLE_TNS_NAME=ORCL
ORACLE_USER=your_username
ORACLE_PASSWORD=your_password
Method 3: Individual Components
ORACLE_HOST=localhost
ORACLE_PORT=1521
ORACLE_SERVICE_NAME=ORCL # or ORACLE_SID=ORCL
ORACLE_USER=your_username
ORACLE_PASSWORD=your_password
Optional settings:
ORACLE_DEFAULT_SCHEMA=HR # Default schema if different from user
Usage with Claude Desktop
Add to your Claude Desktop configuration file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"oracle": {
"command": "node",
"args": ["/path/to/oracle-mcp/src/index.js"],
"env": {
"ORACLE_CONNECTION_STRING": "hostname:1521/service_name",
"ORACLE_USER": "your_username",
"ORACLE_PASSWORD": "your_password"
}
}
}
}
Alternatively, use npx if you publish the package:
{
"mcpServers": {
"oracle": {
"command": "npx",
"args": ["-y", "oracle-mcp-server"],
"env": {
"ORACLE_CONNECTION_STRING": "hostname:1521/service_name",
"ORACLE_USER": "your_username",
"ORACLE_PASSWORD": "your_password"
}
}
}
}
Usage with Claude Code
For Claude Code, add to ~/.claude.json:
{
"mcpServers": {
"oracle": {
"type": "stdio",
"command": "node",
"args": ["/path/to/oracle-mcp/src/index.js"],
"env": {
"ORACLE_CONNECTION_STRING": "hostname:1521/service_name",
"ORACLE_USER": "your_username",
"ORACLE_PASSWORD": "your_password"
}
}
}
}
After updating the configuration, restart Claude Desktop or Claude Code.
Available Tools
-
execute_query - Execute any SQL query
- Supports parameter binding
- Auto-converts PostgreSQL-style parameters ($1) to Oracle (:1)
- Returns rows, rowCount, and metadata
-
list_tables - List database tables
- Filter by specific schema or show all accessible schemas
- Filter by pattern (with % wildcards)
- Shows schema name, table name, row count, and last analyzed date
-
describe_table - Get table structure
- Column names, types, sizes
- Nullable constraints
- Default values
- Works across all accessible schemas or filter by specific schema
-
get_table_indexes - View table indexes
- Index types and uniqueness
- Indexed columns
- Status information
- Shows schema name for each index
-
get_table_constraints - View table constraints
- Primary keys, foreign keys
- Unique and check constraints
- Referenced tables
- Shows schema name for each constraint
-
list_schemas - List all accessible schemas
-
check_gates - Read
lab_control+lab_work_itemsand enforce Pre-Flight / cascade-depth gates -
get_dispatchable_items - List backend-owned Lab work items ready for dispatch
-
build_dispatch_packet - Validate a work item and produce an execution packet
-
stamp_dispatch_consumed - Accept ownership of a dispatch run
-
fail_dispatch_preflight - Revert a failed preflight and restore a dispatch-ready state
-
handle_final_return - Ingest a structured execution result into backend state
-
dispatch_scene - Create a writers-room scene item and fire its entry signal
Lab Mirror Bootstrap
Oracle DDL:
sqlplus user/password@db @sql/oracle/lab_control_plane.sql
PostgreSQL DDL:
psql "$DATABASE_URL" -f sql/postgres/lab_control_plane.sql
The mirror includes:
lab_projectslab_work_itemslab_controllab_agent_registrylab_scene_itemslab_domain_eventslab_outbox_eventsnotion_projection_statelab_audit_loglab_telemetrylab_evidence_dossier
See docs/lab-backend-mirror.md for the backend ownership model and event flow.
Security
- All queries use bind variables to prevent SQL injection
- Connections are created per-query (no persistent pools)
- Comprehensive audit logging with timestamps and duration
- Environment variables keep credentials secure
- Supports both read-only and read-write operations
Requirements
- Node.js 18+
- Oracle Database (any version)
- Network access to Oracle database
License
MIT