Engine-free, read-only Oracle Database MCP server with a fail-closed SQL guard (unofficial).
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Inspect callable tools, capabilities, and parameters exposed to AI agents by Oraclemcp.
oracle_list_profilesList configured connection profiles without exposing connect strings, usernames, or credential references.
oracle_connection_infoDescribe the active profile and Oracle connection.
oracle_switch_profileReconnect this MCP server to another configured profile by name.
oracle_set_session_levelPreview or apply a temporary session operating-level elevation within the active profile ceiling, or drop back to READ_ONLY.
oracle_queryRun a read-only SELECT with positional binds; paginated and row/byte capped.
oracle_semantic_searchRun a bounded, fail-closed 23ai vector search through the same policy, semantic-resolution, masking, and audit path as oracle_query.
Governed, least-privilege Oracle Database access for AI agents β in pure Rust.
oraclemcp is a Model Context Protocol server that gives an AI agent governed, least-privilege access to an Oracle database. Every raw statement the agent submits is classified before it can reach Oracle: read tools admit only statements proven read-only, and non-read SQL runs only through an explicit, profile-gated path that rolls DML back by default and requires a preview-derived grant before commit. Session elevation is explicit, temporary, and capped by profile max_level. The core is engine-free and #![forbid(unsafe_code)].
An independent open-source project β not affiliated with Oracle. See how it compares to Oracle's own MCP servers.
oraclemcp connects through its own mature, pure-Rust Oracle driver as the primary path. The official oracledb crate from Oracle β whose crate name we handed to Oracle in a friendly handshake β is currently in beta, and therefore ships purely as a bounded, connect-time fallback for the rare case something goes awry. No Oracle Instant Client, ODPI-C, or C toolchain is required.
Only a failed basic-password connect ever falls back; IAM, wallet, and TCPS/PEM always stay on driver-cx, and a fallback never migrates a live session.
| Tools | 34 governed MCP tools + 25 compatibility aliases, each with a real JSON Schema and MCP safety hints |
| Safety | fail-closed SQL classifier Β· 4-level ladder READ_ONLY β READ_WRITE β DDL β ADMIN Β· DML rollback-by-default Β· signed, hash-chained audit |
| Auth | username/password over TCP Β· IAM / OCI ADB token Β· TLS/TCPS + PEM Β· Oracle wallet (cwallet.sso) |
| Oracle | 18c Β· 21c Β· 23ai β including governed native VECTOR search |
| Code | 9 pure-Rust crates + binary Β· #![forbid(unsafe_code)] Β· ~3,300 tests + a differential fuzzer |
| Transports | stdio (default) + Streamable HTTP with rustls TLS/mTLS and optional OAuth |
One line installs or updates on macOS and Linux (works pasted in a terminal or in a non-interactive agent run):
It verifies a SHA-256 digest (plus cosign signature/provenance when cosign is present) and installs oraclemcp and the short om alias into $HOME/.local. Also available: Windows (install.ps1), Docker (ghcr.io/muhdur/oraclemcp:latest), and cargo binstall oraclemcp. Air-gapped offline install, verification postures, and service install are documented via bash install.sh --help and docs/. No npm/npx channel is offered.
Onboard and connect a client:
Wire it into an MCP client (e.g. Claude Desktop) over stdio:
Or run authenticated HTTP with a shown-once bearer, and open the local dashboard through a secret-free one-time pairing URL:
doctor output is safe to paste into agent sessions β it omits connect strings, usernames, credential references, passwords, wallet paths, IAM tokens, and server DNs while keeping structured failure classes and ORA codes.
SELECT an agent dreams up can never silently become a DELETE. Read tools admit only proven read-only SELECT/WITH and dictionary introspection. Non-read execution is isolated in oracle_execute, bounded by the profile ceiling, rollback-by-default for DML, and explicit-confirm-before-commit. Forbidden constructs (multi-statement batches, string-concat dynamic SQL, an unproven function call inside a SELECT) are rejected before touching Oracle, with a typed envelope and a suggested safe alternative.readOnlyHint, destructiveHint, idempotentHint, openWorldHint). Errors are structured ErrorEnvelopes with machine-stable classes, fuzzy suggestions, and next-step hints β never bare strings. A zero-arg oracle_capabilities tool lets an agent discover the surface.unsafe. Every crate is #![forbid(unsafe_code)]; the fail-closed classifier is a real sqlparser AST classifier and carries a differential cargo-fuzz target.--listen) with fail-closed auth defaults, optional OAuth bearer enforcement, and native rustls TLS/mTLS.Oracle ships an official MCP built into SQLcl; ours is independent. On the axis that decides whether you can safely point an AI agent at a database β the guard between the agent and your data β here is the honest, evidence-backed contrast:
| Oracle SQLcl MCP | oraclemcp | |
|---|---|---|
| Default posture | Not read-only | Read-only, fail-closed |
| Write / DDL control | No in-server gate β relies on DB grants + a non-prod replica | In-server: classifier + READ_ONLYβADMIN ladder + previewβconfirm-token + rollback-by-default |
| Safety boundary | Your grant hygiene β a wrong grant or a clever prompt can write | The server itself β enforced regardless of grants |
| SQL handling | Free-form, tagged /* LLM in use */ | Free-form, but classified before it reaches Oracle |
| Audit | DB-side log table (DBTOOLS$MCP_LOG) | Signed, hash-chained HMAC audit + verdict certificates |
| Runtime | Java β needs the JVM + a SQLcl install | One pure-Rust static binary β no JVM, C toolchain, or Instant Client |
SQLcl-MCP rows reflect Oracle's own documentation (configure a minimum-privilege user, prefer a non-prod replica, audit via DBTOOLS$MCP_LOG); the oraclemcp rows are enforced in this repository. Oracle is the official, supported option, and its managed Autonomous MCP takes a different curated-report approach with per-user identity β strong for locked-down read-only BI.
The core invariant is a fail-closed SQL guard β not "read-only forever." Operating levels form a ladder, READ_ONLY < READ_WRITE < DDL < ADMIN, surfaced through oracle_execute, oracle_compile_object, oracle_create_or_replace, oracle_patch_source, and oracle_set_session_level. Read-only is the default and the cap for unconfigured or protected profiles; a profile's max_level may permit escalation up to ADMIN. Every escalation is guarded:
protected profiles pinned at READ_ONLY with an immutable ceiling, and OAuth scopes that can only lower the effective level,An unparseable or unclassifiable statement fails closed. Statements can emit a verdict certificate bound to the classified bytes and the audit record; the routine-purity law it relies on is specified in proofs/purity-core/PurityCore.lean and pinned to the Rust classifier by a conformance test.
A database session is treated as a governed surface with several independent controls, each with an executable proof script:
Factual signals from GitHub, npm, and our automated checks β not a rating.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/oraclemcp)<a href="https://allmcps.com/mcp/oraclemcp"><img src="https://allmcps.com/api/badge/oraclemcp?style=directory" alt="Oraclemcp on AllMCPs" /></a>