1. Conduid
  2. AI
  3. Oraclemcp
MCP server · AI

Oraclemcp

Engine-free, read-only Oracle Database MCP server with a fail-closed SQL guard (unofficial).

Unclaimed last commit 7 months ago data
45Fair

Scored 18 days ago · breakdown

About Oraclemcp

Oraclemcp is an MCP server published by omandotkom in the AI category: engine-free, read-only Oracle Database MCP server with a fail-closed SQL guard (unofficial). It has been installed 0 times through Conduid.

The repository has 1 stars and 0 forks, with the last commit 7 months ago. Six months or more without a commit doesn't mean the server is broken, but check the open issues (0) before depending on it in production.

Install

Install
npx oraclemcp

This server has no ConduID identity, so agent calls to it are not receipted. Pin the version you install and review the source before granting it credentials.

Ask AI

Ask AI about Oraclemcp

Powered by Claude · Grounded in docs

I know everything about Oraclemcp. Ask me about installation, configuration, usage, or troubleshooting.

Security checks

  • ·README presentNot checked yet.
  • ·License declaredNot checked yet.
  • ·Tests presentNot checked yet.
  • ·Dependencies pinnedNot checked yet.
  • ·No dynamic code executionNot checked yet.
  • !Scoped permissionsDoesn't declare a permission scope. Assume it can do anything its process can.

README

Oracle MCP Server (Go)

This is a Model Context Protocol (MCP) server for Oracle databases, written in Go. It allows LLMs (like Claude) to interact with your Oracle database to inspect schemas, view PL/SQL source code, and execute read-only queries.

It uses the standard Stdio transport, meaning it is designed to be run directly by an MCP client (like Claude Desktop or an MCP-enabled IDE extension).

🔒 Security Note

This server is strictly READ-ONLY. It is designed with data safety as the top priority.

✅ What This Server CAN Do:

  • Execute SELECT queries against your data
  • Read Oracle's data dictionary views (ALL_*, DBA_*, V$*)
  • View PL/SQL source code from ALL_SOURCE
  • Retrieve DDL scripts using DBMS_METADATA.GET_DDL
  • Generate execution plans (stores temporary data in PLAN_TABLE, then cleans up)

❌ What This Server CANNOT Do:

  • No INSERT, UPDATE, DELETE — Cannot modify any table data
  • No CREATE, ALTER, DROP — Cannot change database schema
  • No EXECUTE — Cannot run stored procedures or functions
  • No GRANT, REVOKE — Cannot change privileges
  • No TRUNCATE, MERGE — Cannot perform any data manipulation

🛡️ How We Ensure Read-Only Safety:

  1. Query Validation: The sql-select tool explicitly validates that queries start with SELECT or WITH before execution
  2. Dictionary Views Only: All other tools query Oracle's read-only data dictionary views
  3. No DDL Execution: DDL is only retrieved as text, never executed
  4. Temporary Data Cleanup: Any temporary data (like execution plans) is immediately deleted after use

Note: For additional security, you can connect with a database user that only has SELECT privileges on the required dictionary views. This provides defense-in-depth at the database level.

Features

📊 Table & Schema Tools

Tool Description
sql-select Execute arbitrary SELECT or WITH queries (limited to 1000 rows)
list-tables List all accessible tables (excluding system schemas)
get-table-schema Get column definitions for a specific table
list-constraints List all constraints for a table (PK, FK, Unique, Check)
get-constraint-columns Get the columns that make up a constraint

🔧 PL/SQL Objects Tools

Tool Description
list-objects List Oracle objects by type (PROCEDURE, FUNCTION, PACKAGE, TYPE, etc.)
get-object-source Get PL/SQL source code for procedures, functions, packages, types, triggers
describe-object Get comprehensive info about any Oracle object (like SQL*Plus DESCRIBE)

📅 Scheduler Jobs Tools

Tool Description
list-jobs List all Oracle Scheduler jobs
get-job-details Get detailed information about a specific job

🔗 Dependencies Tools

Tool Description
list-dependencies List what objects depend on or are used by a given object

👁️ Views Tools

Tool Description
list-views List all views accessible to the current user
get-view-definition Get the SQL definition of a view

📇 Index Tools

Tool Description
list-indexes List all indexes, optionally filtered by table
get-index-columns Get the columns that make up an index

🔢 Sequence Tools

Tool Description
list-sequences List all sequences accessible to the current user

⚡ Trigger Tools

Tool Description
list-triggers List all triggers, optionally filtered by table

🏷️ Type Tools

Tool Description
list-types List all user-defined types (object types, collection types)
get-type-attributes Get the attributes (fields) of a user-defined type

🔄 Synonym Tools

Tool Description
list-synonyms List all synonyms accessible to the current user

🔍 Search & Analysis Tools

Tool Description
search-source Search for text within PL/SQL source code to find where tables, columns, or variables are used
search-columns Search for column names across all tables (find all tables with a specific column)
get-ddl Get the full SQL CREATE script (DDL) for any object using DBMS_METADATA
explain-plan Get the execution plan for a SQL query to analyze performance
get-table-stats Get optimizer statistics for a table (row count, last analyzed, size)
list-invalid-objects List all database objects with INVALID status that need recompilation

📝 Documentation Tools

Tool Description
get-table-comments Get comments/documentation for a table and its columns
get-table-relationships Get all foreign key relationships for a table (incoming and outgoing)

📊 Monitoring Tools

Tool Description
list-sessions List active database sessions (requires V$SESSION privilege)
get-job-run-history Get execution history of a scheduler job (status, duration, errors)

Prerequisites

  • Go (1.18+): To build the application.
  • Oracle Database: Access to an Oracle instance.
  • No Instant Client Required: Uses go-ora, a pure Go driver.

Configuration

The application requires the following environment variables:

  • ORACLE_USER: Database username.
  • ORACLE_PASSWORD: Database password.
  • ORACLE_CONNECT_STRING: host:port/service_name.

Building

Quick Build

go build -o mcp_oracle.exe .

Build & Release to GitHub

To create a new release with the executable uploaded to GitHub:

# Interactive mode - prompts for version
.\release.ps1

# Specify version directly
.\release.ps1 -Version "v1.2.0"

# Create as draft release
.\release.ps1 -Version "v1.2.0" -Draft

Prerequisites for releasing:

  • GitHub CLI (gh) installed and authenticated
  • Run gh auth login if not already authenticated

Usage with Claude Desktop

To use this with the Claude Desktop app, add the following to your configuration file (typically %APPDATA%\Claude\claude_desktop_config.json on Windows):

{
  "mcpServers": {
    "oracle-db": {
      "command": "c:/path/to/your/mcp_oracle.exe",
      "args": [],
      "env": {
        "ORACLE_USER": "your_user",
        "ORACLE_PASSWORD": "your_password",
        "ORACLE_CONNECT_STRING": "localhost:1521/XEPDB1"
      },
      "disabled": false,
      "autoApprove": [
        "sql-select",
        "list-tables",
        "get-table-schema",
        "list-constraints",
        "get-constraint-columns",
        "list-objects",
        "get-object-source",
        "describe-object",
        "list-jobs",
        "get-job-details",
        "list-dependencies",
        "list-views",
        "get-view-definition",
        "list-indexes",
        "get-index-columns",
        "list-sequences",
        "list-triggers",
        "list-types",
        "get-type-attributes",
        "list-synonyms",
        "search-source",
        "search-columns",
        "get-ddl",
        "explain-plan",
        "get-table-stats",
        "list-invalid-objects",
        "get-table-comments",
        "get-table-relationships",
        "list-sessions",
        "get-job-run-history"
      ]
    }
  }
}

Make sure to replace the paths and credentials with your actual values.

Usage with VS Code (Extension)

If you are developing a VS Code extension that acts as an MCP client:

  1. Spawn the mcp_oracle.exe process.
  2. Set the environment variables in the process options.
  3. Communicate via stdin and stdout using the MCP JSON-RPC protocol.

Tool Examples

Query Data

Tool: sql-select
Arguments: {"query": "SELECT * FROM employees WHERE department_id = 10"}

List All Procedures

Tool: list-objects
Arguments: {"object_type": "PROCEDURE", "owner": "HR"}

Get Source Code

Tool: get-object-source
Arguments: {"object_name": "CALCULATE_SALARY", "object_type": "PROCEDURE", "owner": "HR"}

List Jobs

Tool: list-jobs
Arguments: {"owner": "MYSCHEMA"}

Find Dependencies

Tool: list-dependencies
Arguments: {"object_name": "MY_PACKAGE", "direction": "used_by"}

Get Table Constraints

Tool: list-constraints
Arguments: {"table_name": "EMPLOYEES", "owner": "HR"}

Manual Testing (CLI)

You can verify the server starts by running it, but it will hang waiting for JSON-RPC input on stdin.

$env:ORACLE_USER="user"
$env:ORACLE_PASSWORD="password"
$env:ORACLE_CONNECT_STRING="localhost:1521/xe"
.\mcp_oracle.exe

MCP Protocol

This server implements the Model Context Protocol (MCP) specification:

  • Transport: Stdio (stdin/stdout)
  • Protocol: JSON-RPC 2.0
  • Discovery: Supports tools/list for automatic tool discovery
  • Execution: Supports tools/call for tool execution

When an AI agent connects, it will automatically discover all available tools via the tools/list method.

README mirrored from the source repository 18 days ago. The original is authoritative.

Questions

About Oraclemcp

How do I install Oraclemcp?

Run npx oraclemcp, then add the server to your MCP client's configuration. Conduid has recorded 0 installs, so the command is known to work with current clients.

Is Oraclemcp safe to use with an AI agent?

Its trust score is 45 out of 100 (fair). It passes 0 of 1 static security checks; the failures are listed above. It has no ConduID identity yet, so agent calls to it are not receipted.

Is Oraclemcp still maintained?

The last commit was 7 months ago, with 0 open issues. That's long enough that you should check whether the maintainer is responding to issues before depending on it.