# oraclemcp (oci · ghcr.io/muhdur/oraclemcp:0.10.0)

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

- Trust score: 43/100 (low)
- Change this week: +32
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- oci · `ghcr.io/muhdur/oraclemcp:0.10.0`: 43/100 (this document), [markdown](https://verifymcp.io/servers/muhdur-oraclemcp/ghcr-io-muhdur-oraclemcp-0-10-0.md), [page](https://verifymcp.io/servers/muhdur-oraclemcp/ghcr-io-muhdur-oraclemcp-0-10-0)

## Channel facts

- Registry: `oci`
- Package: `ghcr.io/muhdur/oraclemcp:0.10.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 0/100
  - Malware scan not yet available for this package.
  - CVE data not yet available for this package.
  - Install-script risk not yet assessed.
  - Dependency-health data not yet available.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (Apache-2.0 OR MIT).
  - Actively maintained (last published 7 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 76/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 6858 tokens (~152/item across 45 items; 43 tools + 2 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 23/100
  - Stability observed for 7 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (9% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### Claude

```bash
claude mcp add muhdur-oraclemcp -- docker run --rm -i ghcr.io/muhdur/oraclemcp:0.10.0
```

### Codex

```bash
codex mcp add muhdur-oraclemcp -- docker run --rm -i ghcr.io/muhdur/oraclemcp:0.10.0
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "muhdur-oraclemcp": {
      "type": "local",
      "command": [
        "docker",
        "run",
        "--rm",
        "-i",
        "ghcr.io/muhdur/oraclemcp:0.10.0"
      ],
      "enabled": true
    }
  }
}
```

### Hermes

```yaml
mcp_servers:
  muhdur-oraclemcp:
    command: "docker"
    args: ["run", "--rm", "-i", "ghcr.io/muhdur/oraclemcp:0.10.0"]
```

### Other

```json
{
  "mcpServers": {
    "muhdur-oraclemcp": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "ghcr.io/muhdur/oraclemcp:0.10.0"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 43, +4)

- [functional improvement] Stability: unverified → 0.23

### 2026-07-31 (score 39, −6)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-28 (score 45, +34)

- [functional improvement] Tool coverage: unverified → 100
- [functional improvement] Schema quality: unverified → 100
- [functional] First check of Schema quality: fail
- [functional] First check of Schema quality: fail
- [functional] First check of Tool coverage: 9
- [functional] First check of Tool coverage: 100
- [functional] First check of Schema quality: good

### 2026-07-27 (score 11)

First indexed and scored.

## MCP tools (43)

### `oracle_capabilities` (~68 tokens)

Oracle Capabilities

Compact discovery entry point: tools, operating level + gates, connection/standby status, feature tiers, version. Pass detail_level=full for the complete descriptor report.

Input parameters:

- `detail_level` (string): compact (default) omits tool summaries and schemas; full returns the complete descriptor report.

### `oracle_list_profiles` (~24 tokens)

Oracle List Profiles

List configured connection profiles without exposing connect strings, usernames, or credential references.

### `oracle_connection_info` (~36 tokens)

Oracle Connection Info

Describe the active profile and Oracle connection. When live connection metadata is unavailable, returns connected=false with a structured connection_error and next_actions.

### `oracle_switch_profile` (~54 tokens)

Oracle Switch Profile

Reconnect this MCP server to another configured profile by name.

Input parameters:

- `db` (string): Alias for profile for compatibility with older clients. Prefer profile.
- `profile` (string): Configured profile name from oracle_list_profiles.

### `oracle_set_session_level` (~186 tokens)

Oracle Set Session Level

Preview or apply a temporary session operating-level elevation within the active profile ceiling, or drop back to READ_ONLY.

Input parameters:

- `action` (string): Optional action: preview, apply, drop, or status. Omit for preview/apply based on execute.
- `confirm` (string): Confirmation token returned by preview. Required when execute=true raises the level.
- `confirmation_token` (string): Alias for confirm.
- `execute` (boolean): Default false previews the level change and returns a confirmation token. Set true with confirm to apply elevation.
- `level` (string): Target level: READ_WRITE, DDL, or ADMIN. READ_ONLY drops any active elevation.
- `target_level` (string): Alias for level.
- `token` (string): Alias for confirm.
- `ttl_seconds` (integer): Temporary elevation window in seconds (default 900, hard cap 3600).

### `oracle_query` (~854 tokens)

Oracle Query

Run a read-only SELECT with positional binds; paginated and row/byte capped.

Input parameters:

- `allow_plan_table_write` (boolean): Default false. Must be true, with the active session at READ_WRITE, before max_query_cost may run EXPLAIN PLAN and write PLAN_TABLE for pre-execution cost estimation.
- `as_of` (object): Flashback / AS-OF read: run this SELECT against a PAST committed snapshot. Pass a NORMAL SELECT (never hand-written AS OF SQL); the base query is proven read-only first, then bounded in a DBMS_FLASHB…
- `binds` (array): Positional bind values (string | number | bool | null) for :1, :2 …
- `cursor` (string): Opaque pagination cursor from a prior truncated page (incremental fetch). Resuming with it yields the next page byte-identically.
- `deep_decode` (boolean): Opt into larger capped ARRAY/JSON/VECTOR structured decode limits. Default false keeps safe caps.
- `format` (string): Inline result format. json (default) returns rows; arrow returns base64 Arrow IPC in arrow_ipc_b64 after the identical masking and audit path. Arrow and export/streaming are mutually exclusive.
- `limit` (integer): Alias for max_rows for compatibility with older clients. Prefer max_rows.
- `max_blob_bytes` (integer): Maximum BLOB bytes to inline per cell as base64 (default 1048576).
- `max_col_width` (integer): Compatibility text cap for ordinary text/raw columns. Truncated values are returned as { value, truncated, char_length }.
- `max_lob_chars` (integer): Maximum CLOB characters to inline per cell (default 32768).
- `max_query_cost` (integer): Optional per-call optimizer-cost ceiling for this oracle_query call. It can only lower the active profile's max_query_cost. When an effective ceiling exists, oracle_query first runs an EXPLAIN PLAN d…
- `max_result_bytes` (integer): Maximum compact JSON bytes across row objects in this page (default 10485760, hard cap 26214400; excludes columns, pagination metadata, and the outer MCP envelope).
- `max_rows` (integer): Maximum rows in this page / streamed chunk (default 200, hard cap 5000).
- `max_structured_bytes` (integer): Maximum compact JSON bytes decoded from one structured node. Values above the safe default require deep_decode=true.
- `max_structured_cells` (integer): Maximum structured value nodes decoded from one structured cell. Values above the safe default require deep_decode=true.
- `max_structured_depth` (integer): Maximum ARRAY/JSON recursion depth decoded inside one structured cell. Values above the safe default require deep_decode=true.
- `max_structured_rows` (integer): Maximum direct entries decoded from one structured ARRAY/JSON node. Values above the safe default require deep_decode=true.
- `numbers_as_float` (boolean): Emit numeric values as JSON numbers where possible. Default false preserves Oracle NUMBER losslessly as strings.
- `read_only_standby` (boolean): If true, refuse the max_query_cost estimation path because EXPLAIN PLAN writes PLAN_TABLE. Only meaningful when an effective max_query_cost is set. Defaults false.
- `sql` (string, required): A single read-only SELECT. Use :1, :2 … for binds.
- `streaming` (boolean): Deliver the result incrementally instead of one inline page. Over HTTP/SSE, scalar/self-contained rowsets emit one `event: row` frame per row; LOB, BFILE, and REF CURSOR values fall back to ordered c…
- `timeout_seconds` (integer): Tightens the profile's total request deadline and each Oracle round-trip cap for this tool call. It cannot widen the profile ceiling.

Output parameters:

- `arrow_cell_encoding` (string): Arrow cell encoding used by arrow_ipc_b64. Decode each UTF-8 value as a JSON literal to recover the same value as JSON mode.
- `arrow_ipc_b64` (string): Base64 Apache Arrow IPC stream for the already-masked, audit-bound result page. Each UTF-8 cell is a JSON literal; see arrow_cell_encoding.
- `columns` (array): Column names in select-list order.
- `export` (object): Present when export=true: metadata for the materialized oracle-export://{id} resource, readable only by the originating principal under the exact scope grant.
- `format` (string): Present as arrow when oracle_query was requested with format=arrow. In that form rows is omitted and the governed page is carried in arrow_ipc_b64.
- `inlined` (boolean): False when the result was materialized as an export resource (export=true) rather than inlined.
- `mask_certificate` (object): Present when result masking transformed the page: proof-carrying per-column mask decisions plus the audit entry hash binding those decisions into the audit chain.
- `next_cursor` (string|null)
- `next_step` (string)
- `resource_link` (object): Present when export=true: an MCP resource_link to the export, to fetch via resources/read.
- `row_count` (integer)
- `rows` (array): Serialized rows keyed by column name. NUMBER cells are strings unless numbers_as_float=true.
- `total_bytes` (integer)
- `truncated` (boolean)

### `oracle_semantic_search` (~258 tokens)

Oracle Semantic Search

Run a bounded, fail-closed 23ai vector search through the same policy, semantic-resolution, masking, and audit path as oracle_query.

Input parameters:

- `filter` (object): Optional governed hybrid predicate. Only equality is supported: the server validates column as a simple identifier and binds value; raw SQL, OR/IN fragments, and caller-provided operators are refused.
- `k` (integer): Top-k result count (default 10, hard cap 1000).
- `metric` (string): VECTOR_DISTANCE metric (default COSINE).
- `over` (object, required): The local table and VECTOR column to search. Identifiers must be simple unquoted names and are live-resolved before execution.
- `query_text` (string): Embedded only by exactly one visible local ONNX model after COMPATIBLE >= 23.4 is proven. Otherwise returns typed requires_23ai or no_in_db_model; it never falls back to client embedding.
- `query_vector` (array): Numeric query vector. Exactly one of query_vector or query_text is required in this tool generation.
- `timeout_seconds` (integer): Tightens the profile's total request deadline and each Oracle round-trip cap for this tool call. It cannot widen the profile ceiling.

Output parameters:

- `arrow_cell_encoding` (string): Arrow cell encoding used by arrow_ipc_b64. Decode each UTF-8 value as a JSON literal to recover the same value as JSON mode.
- `arrow_ipc_b64` (string): Base64 Apache Arrow IPC stream for the already-masked, audit-bound result page. Each UTF-8 cell is a JSON literal; see arrow_cell_encoding.
- `columns` (array): Column names in select-list order.
- `export` (object): Present when export=true: metadata for the materialized oracle-export://{id} resource, readable only by the originating principal under the exact scope grant.
- `format` (string): Present as arrow when oracle_query was requested with format=arrow. In that form rows is omitted and the governed page is carried in arrow_ipc_b64.
- `inlined` (boolean): False when the result was materialized as an export resource (export=true) rather than inlined.
- `k` (integer)
- `mask_certificate` (object): Present when result masking transformed the page: proof-carrying per-column mask decisions plus the audit entry hash binding those decisions into the audit chain.
- `metric` (string)
- `next_cursor` (string|null)
- `next_step` (string)
- `resource_link` (object): Present when export=true: an MCP resource_link to the export, to fetch via resources/read.
- `row_count` (integer)
- `rows` (array): Serialized rows keyed by column name. NUMBER cells are strings unless numbers_as_float=true.
- `total_bytes` (integer)
- `truncated` (boolean)
- `used_index` (boolean|null): Null when this bounded read did not inspect an execution plan; never inferred from a requested index.

### `oracle_diff` (~531 tokens)

Oracle Diff

Diff one proven read-only SELECT across two Oracle SCNs, or across two databases.

Input parameters:

- `binds` (array): Positional bind values (string | number | bool | null) for :1, :2 …
- `db_a` (string): Alias for profile_a.
- `db_b` (string): Alias for profile_b.
- `key` (array): Optional result-column names used to align rows and report changed[]. If omitted, oracle_diff infers a primary key only for a single resolved local table; otherwise it falls back to keyless add/remov…
- `key_columns` (array): Alias for key.
- `keys` (array): Alias for key.
- `max_blob_bytes` (integer): Maximum BLOB bytes to inline per cell as base64 (default 1048576).
- `max_col_width` (integer): Compatibility text cap for ordinary text/raw columns. Truncated values are returned as { value, truncated, char_length }.
- `max_lob_chars` (integer): Maximum CLOB characters to inline per cell (default 32768).
- `max_result_bytes` (integer): Maximum compact JSON bytes per compared side (default 10485760, hard cap 26214400).
- `max_rows` (integer): Maximum rows compared from each side (default 200, hard cap 5000).
- `numbers_as_float` (boolean): Emit numeric values as JSON numbers where possible. Default false preserves Oracle NUMBER losslessly as strings.
- `profile_a` (string): Connection profile for side A. Supplying profile_a and profile_b selects cross-database mode: the same proven read runs against two databases (e.g. prod vs staging), each classified against its own c…
- `profile_b` (string): Connection profile for side B. See profile_a.
- `scn_a` (integer): System change number for side A. Required with scn_b when comparing one database at two points in time; optional in cross-database mode, where it pins side A to a flashback read instead of the curren…
- `scn_b` (integer): System change number for side B. See scn_a.
- `sql` (string, required): A single read-only SELECT/WITH. The same proven SQL is run on both compared sides; it is classified as a read against each database it runs on.
- `timeout_seconds` (integer): Tightens the profile's total request deadline and each Oracle round-trip cap for this tool call. It cannot widen the profile ceiling.

Output parameters:

- `added` (array): Rows present on side B but not on side A.
- `changed` (array): Key-aligned row changes; empty for keyless diffs.
- `columns` (array): Column names in the compared query shape.
- `key_columns` (array): Key columns used for row alignment. Empty means keyless multiset diff.
- `keyed` (boolean): True when rows were aligned by explicit/inferred key columns and changed[] is meaningful.
- `mask_certificates` (object): Present when result masking transformed either flashback page: before/after mask-decision certificates with audit entry hashes.
- `removed` (array): Rows present on side A but not on side B.
- `row_count_a` (integer)
- `row_count_b` (integer)
- `source_a` (object): Where side A was read from.
- `source_b` (object): Where side B was read from.
- `truncated` (boolean): True when either compared page hit a row/byte cap before all rows were compared.

### `oracle_preview_sql` (~45 tokens)

Oracle Preview SQL

Classify a SQL statement and report whether it would pass the active profile/session gate without executing it.

Input parameters:

- `sql` (string, required): SQL statement to classify. It is never executed.

### `oracle_list_schemas` (~91 tokens)

Oracle List Schemas

List schemas that own objects visible to this session, optionally filtered by name.

Input parameters:

- `limit` (integer): Alias for max_rows for compatibility with older clients. Prefer max_rows.
- `max_rows` (integer): Maximum schemas to return (default 200, hard cap 5000).
- `name_like` (string): Optional SQL LIKE pattern for schema names (case-insensitive), e.g. APP%.

### `oracle_schema_inspect` (~141 tokens)

Oracle Schema Inspect

List objects in the current schema, one owner, or all accessible schemas, with optional type/name filters.

Input parameters:

- `limit` (integer): Alias for max_rows for compatibility with older clients. Prefer max_rows.
- `max_rows` (integer): Maximum objects to return (default 500, hard cap 5000).
- `name_like` (string): Optional SQL LIKE pattern for object_name, e.g. EMP%.
- `object_type` (string): Optional object type filter, e.g. TABLE, VIEW, PACKAGE.
- `owner` (string): Optional schema owner (case-insensitive). Omit for current schema; use * for all accessible schemas.

### `oracle_search_objects` (~362 tokens)

Oracle Search Objects

Unified read-only object search/inspection with a detail_level. names=identifiers only; summary=+column count, comments, and the optimizer ALL_TABLES.NUM_ROWS row-count ESTIMATE (gathered statistics, never COUNT(*) — may be stale, reported via stats_stale/last_analyzed); standard (default)=+columns; full=+indexes. fleet=true searches the names-only index across MCP-visible profiles, applying each source profile's egress policy before merge and returning no profile roster or profile counts. Returns {count, results, truncated}. Owner/type/name filters are bound; quoted/case-sensitive identifiers are matched verbatim.

Input parameters:

- `detail` (string): Alias for detail_level.
- `detail_level` (string): Enrichment level. names=identifiers only; summary=+column count + comments + the optimizer ALL_TABLES.NUM_ROWS estimate (NOT COUNT(*)); standard (default)=+columns; full=+indexes.
- `fleet` (boolean): Search the egress-safe unified fleet catalog. Fleet mode requires detail_level=names, applies each profile's own result-masking policy before aggregation, and intentionally returns no profile roster…
- `limit` (integer): Alias for max_rows for compatibility with older clients. Prefer max_rows.
- `max_rows` (integer): Maximum objects to return (default 100, hard cap 5000).
- `name_like` (string): Optional SQL LIKE pattern for object_name, e.g. EMP%.
- `object_type` (string): Optional object type filter, e.g. TABLE, VIEW, PACKAGE.
- `owner` (string): Optional schema owner (case-insensitive for ordinary identifiers; quoted identifiers match verbatim). Omit or use * for all accessible schemas.

### `oracle_orient` (~273 tokens)

Oracle Orient

Return bounded orientation evidence: by default one cacheable snapshot for the active profile; fleet=true maps every MCP-visible profile independently with schema, version, freshness, drift, and typed UNREACHABLE/FAIL_CLOSED lane status. Dictionary reads are parameterized and read-only; include selects schema, fks, hot, freshness, and/or ddl (all by default). Every selected row list is capped and the response makes truncation explicit.

Input parameters:

- `cursor` (string): Opaque continuation cursor returned by a truncated orient response. It is bound to this owner, include selection, fleet flag, and profile.
- `fleet` (boolean): When true, orient every MCP-visible configured profile independently. Each profile is returned with REACHABLE, UNREACHABLE, or FAIL_CLOSED status; one unavailable lane never omits or fails the other…
- `include` (array): Optional sections to return. Defaults to every section; ddl selects the recent_ddl field.
- `limit` (integer): Alias for max_rows.
- `max_rows` (integer): Maximum rows for each selected orientation list (default 100). The response sets truncated=true and returns next_cursor when another bounded page may exist.
- `owner` (string): Optional schema owner (case-insensitive). Omit or use * for all visible schemas.

### `oracle_describe` (~135 tokens)

Oracle Describe

Describe a table/view's columns and constraint metadata.

Input parameters:

- `limit` (integer): Alias for max_rows. Prefer max_rows.
- `max_rows` (integer): Maximum constraint rows to return (default 200, hard cap 5000).
- `name` (string): Alias for table. Prefer table.
- `owner` (string): Optional schema owner (case-insensitive). Defaults to current schema when available.
- `table` (string): Table or view name. May be OWNER.TABLE. Required unless table_name or name is supplied.
- `table_name` (string): Alias for table for compatibility with older clients. Prefer table.

### `oracle_describe_index` (~84 tokens)

Oracle Describe Index

Describe one index's metadata, indexed columns, and function-based expressions.

Input parameters:

- `index_name` (string): Alias for name for compatibility with older clients. Prefer name.
- `name` (string): Index name (case-insensitive). Required unless index_name is supplied.
- `owner` (string): Optional schema owner (case-insensitive). Defaults to current schema when available.

### `oracle_describe_trigger` (~86 tokens)

Oracle Describe Trigger

Describe one trigger's timing, event, target table, status, and body.

Input parameters:

- `name` (string): Trigger name (case-insensitive). Required unless trigger_name is supplied.
- `owner` (string): Optional schema owner (case-insensitive). Defaults to current schema when available.
- `trigger_name` (string): Alias for name for compatibility with older clients. Prefer name.

### `oracle_describe_view` (~79 tokens)

Oracle Describe View

Describe one view's definition metadata and columns.

Input parameters:

- `name` (string): View name (case-insensitive). Required unless view_name is supplied.
- `owner` (string): Optional schema owner (case-insensitive). Defaults to current schema when available.
- `view_name` (string): Alias for name for compatibility with older clients. Prefer name.

### `oracle_get_ddl` (~157 tokens)

Oracle Get DDL

Fetch an object's DDL via DBMS_METADATA.GET_DDL (allowlisted object types). Responses include full and returned character counts plus an explicit truncated flag; a long DDL prefix is never presented as a complete document.

Input parameters:

- `name` (string): Object name. May be OWNER.NAME. Required unless object_name is supplied.
- `object_name` (string): Alias for name for compatibility with older clients. Prefer name.
- `object_type` (string, required): Allowlisted type, e.g. TABLE, VIEW, PACKAGE, PACKAGE_BODY, PROCEDURE, FUNCTION, TRIGGER, TYPE, SEQUENCE, INDEX, SYNONYM.
- `owner` (string): Optional schema owner (case-insensitive). Defaults to current schema when available.

### `oracle_get_source` (~216 tokens)

Oracle Get Source

Fetch an object's full source text or inclusive line range from ALL_SOURCE with a character cap. Omit object_type to return every visible source variant for the object name.

Input parameters:

- `from_line` (integer): Optional first ALL_SOURCE line to return, inclusive. Pair with oracle_search_source's LINE result.
- `max_chars` (integer): Maximum source characters to return (default 1000000).
- `name` (string): Object name. May be OWNER.NAME. Required unless object_name is supplied.
- `object_name` (string): Alias for name for compatibility with older clients. Prefer name.
- `object_type` (string): Optional supported source type: PACKAGE, PACKAGE_BODY, PROCEDURE, FUNCTION, TRIGGER, TYPE, TYPE_BODY. When omitted, all visible source types for this name are returned.
- `owner` (string): Optional schema owner (case-insensitive). Defaults to current schema when available.
- `to_line` (integer): Optional last ALL_SOURCE line to return, inclusive. Must not be lower than from_line.

### `oracle_sample_rows` (~129 tokens)

Oracle Sample Rows

Read the first rows of a table or view with a hard row cap.

Input parameters:

- `limit` (integer): Alias for max_rows for compatibility with older clients. Prefer max_rows.
- `max_rows` (integer): Maximum rows to return (default 50, hard cap 1000).
- `owner` (string): Optional schema owner (case-insensitive). Defaults to current schema when available.
- `table` (string): Table or view name. May be OWNER.TABLE. Required unless table_name is supplied.
- `table_name` (string): Alias for table for compatibility with older clients. Prefer table.

### `oracle_read_clob` (~230 tokens)

Oracle Read CLOB

Read one CLOB/NCLOB/text value by key with a character cap.

Input parameters:

- `clob_col` (string): Alias for clob_column. Prefer clob_column.
- `clob_column` (string): CLOB/NCLOB/text column name (case-insensitive). Required unless clob_col is supplied.
- `max_chars` (integer): Maximum characters to return (default 1000000).
- `owner` (string): Optional schema owner (case-insensitive). Defaults to current schema when available.
- `pk_col` (string): Alias for pk_column. Prefer pk_column.
- `pk_column` (string): Key column name (case-insensitive). Required unless pk_col is supplied.
- `pk_val` (string): Alias for pk_value. Prefer pk_value.
- `pk_value` (string): Key value bound as :1. Required unless pk_val is supplied.
- `table` (string): Table or view name. May be OWNER.TABLE. Required unless table_name is supplied.
- `table_name` (string): Alias for table for compatibility with older clients. Prefer table.

### `oracle_compile_errors` (~133 tokens)

Oracle Compile Errors

Retrieve compile errors for the current schema, an owner, or one object (ALL_ERRORS).

Input parameters:

- `limit` (integer): Alias for max_rows. Prefer max_rows.
- `max_rows` (integer): Maximum compile errors to return (default 200, hard cap 5000).
- `name` (string): Optional object name. May be OWNER.NAME. Omit to list all compile errors for the owner/current schema.
- `object_name` (string): Alias for name for compatibility with older clients. Prefer name.
- `owner` (string): Optional schema owner (case-insensitive). Defaults to current schema when available.

### `oracle_search_source` (~209 tokens)

Oracle Search Source

Full-text search across ALL_SOURCE for a needle (row- and line-capped).

Input parameters:

- `limit` (integer): Alias for max_rows for compatibility with older clients. Prefer max_rows.
- `max_line_chars` (integer): Maximum characters retained from each matching source line (default 500). Longer lines end with an explicit truncation marker; use oracle_get_source with from_line/to_line for the exact source range.
- `max_rows` (integer): Maximum matching source lines to return (default 200, hard cap 5000).
- `name_like` (string): Optional SQL LIKE pattern for source object names, e.g. EMP%.
- `needle` (string, required): Case-insensitive substring to find in source text.
- `object_type` (string): Optional source type filter: PACKAGE, PACKAGE_BODY, PROCEDURE, FUNCTION, TRIGGER, TYPE, TYPE_BODY.
- `owner` (string): Optional schema owner (case-insensitive). Defaults to current schema; use * for all visible source.

### `oracle_plscope_inspect` (~136 tokens)

Oracle PL/Scope Inspect

Inspect PL/Scope identifier and SQL statement metadata for one PL/SQL object when ALL_IDENTIFIERS/ALL_STATEMENTS are populated.

Input parameters:

- `limit` (integer): Alias for max_rows. Prefer max_rows.
- `max_rows` (integer): Maximum identifiers and SQL statements per array (default 200, hard cap 5000).
- `name` (string): Object name. May be OWNER.NAME. Required unless object_name is supplied.
- `object_name` (string): Alias for name for compatibility. Prefer name.
- `owner` (string): Optional schema owner (case-insensitive). Defaults to current schema when available.

### `oracle_top_queries` (~220 tokens)

Oracle Top Queries

Read-only top-SQL ranked by elapsed/CPU/buffer-gets/disk-reads over the free live cursor cache (V$SQLSTATS). Opt into historical AWR only when a Diagnostics Pack is licensed, else Statspack, else a structured-unavailable error — never invokes a paid pack unlicensed.

Input parameters:

- `historical` (boolean): If true, use historical AWR (requires a licensed Diagnostics Pack) or Statspack instead of the live cursor cache. Defaults false (the free live source).
- `metric` (string): Ranking metric. Defaults to elapsed.
- `min_pct_of_total` (integer): Live source only: keep only statements consuming at least this percent of the total selected metric (e.g. 5 for the 5%-of-total view).
- `timeout_seconds` (integer): Tightens the profile's total request deadline and each Oracle round-trip cap for this tool call. It cannot widen the profile ceiling.
- `top_n` (integer): How many statements to return (1-100, default 20).

### `oracle_plan_timeline` (~133 tokens)

Oracle Plan Timeline

Read-only historical optimizer plan and relative-cost timeline from AWR snapshots for one SQL ID. Requires a licensed Oracle Diagnostics Pack; when the license probe cannot prove DIAGNOSTIC access it returns a typed refusal before touching DBA_HIST_*.

Input parameters:

- `max_points` (integer): Maximum AWR snapshot observations to return (default 100, capped at 1000).
- `sql_id` (string, required): The 13-character Oracle SQL ID to inspect.
- `timeout_seconds` (integer): Tightens the profile's total request deadline and each Oracle round-trip cap for this tool call. It cannot widen the profile ceiling.

### `oracle_db_health` (~180 tokens)

Oracle Db Health

Read-only DBA health-check suite. health_type='all' (default) or a comma list of subchecks (invalid_objects, unusable_indexes, tablespace_undo, sequence_ceiling, disabled_constraints, buffer_cache_hit_ratio). Pure V$/DBA_*/ALL_* reads; each subcheck degrades DBA_*->ALL_* and yields a structured skip on insufficient privilege rather than failing the suite.

Input parameters:

- `health_type` (string): Either 'all' (default) or a comma-separated list of subcheck names: invalid_objects, unusable_indexes, tablespace_undo, sequence_ceiling, disabled_constraints, buffer_cache_hit_ratio. Unknown names a…
- `timeout_seconds` (integer): Tightens the profile's total request deadline and each Oracle round-trip cap for this tool call. It cannot widen the profile ceiling.

### `current_database` (~28 tokens)

Current Database

Compatibility alias for oracle_connection_info; returns connected=false with recovery hints when live connection metadata is unavailable.

### `switch_database` (~55 tokens)

Switch Database

Compatibility alias for oracle_switch_profile; pass a configured profile name as db or profile.

Input parameters:

- `db` (string): Configured profile name. Alias for profile.
- `profile` (string): Configured profile name from oracle_list_profiles.

### `query` (~542 tokens)

Query

Compatibility alias for oracle_query.

Input parameters:

- `binds` (array): Positional bind values for :1, :2 ...
- `cursor` (string): Opaque pagination cursor from a prior truncated page (incremental fetch).
- `deep_decode` (boolean): Opt into larger capped ARRAY/JSON/VECTOR structured decode limits. Default false keeps safe caps.
- `export` (boolean): When true, materialize the bounded full result as an oracle-export://{id} resource and return a resource_link instead of inlining rows. The resource is bound to the originating principal and exact sc…
- `export_format` (string): Export serialization when export=true: csv (default) or json.
- `limit` (integer): Alias for max_rows for compatibility with older clients. Prefer max_rows.
- `max_blob_bytes` (integer): Maximum BLOB bytes to inline per cell as base64.
- `max_col_width` (integer): Compatibility text cap for ordinary text/raw columns.
- `max_lob_chars` (integer): Maximum CLOB characters to inline per cell.
- `max_result_bytes` (integer): Maximum compact JSON bytes across row objects in this page; excludes columns, pagination metadata, and the outer MCP envelope.
- `max_rows` (integer): Maximum rows in this page (default 200, hard cap 5000).
- `max_structured_bytes` (integer): Maximum compact JSON bytes decoded from one structured node. Values above the safe default require deep_decode=true.
- `max_structured_cells` (integer): Maximum structured value nodes decoded from one structured cell. Values above the safe default require deep_decode=true.
- `max_structured_depth` (integer): Maximum ARRAY/JSON recursion depth decoded inside one structured cell. Values above the safe default require deep_decode=true.
- `max_structured_rows` (integer): Maximum direct entries decoded from one structured ARRAY/JSON node. Values above the safe default require deep_decode=true.
- `numbers_as_float` (boolean): Emit numeric values as JSON numbers where possible.
- `sql` (string, required): A single read-only SELECT. Use :1, :2 ... for binds.
- `streaming` (boolean): Deliver the result incrementally instead of one inline page. Over HTTP/SSE, scalar/self-contained rowsets emit one `event: row` frame per row; LOB, BFILE, and REF CURSOR values fall back to ordered c…
- `timeout_seconds` (integer): Tightens the profile's total request deadline and each Oracle round-trip cap for this tool call. It cannot widen the profile ceiling.

Output parameters:

- `arrow_cell_encoding` (string): Arrow cell encoding used by arrow_ipc_b64. Decode each UTF-8 value as a JSON literal to recover the same value as JSON mode.
- `arrow_ipc_b64` (string): Base64 Apache Arrow IPC stream for the already-masked, audit-bound result page. Each UTF-8 cell is a JSON literal; see arrow_cell_encoding.
- `columns` (array): Column names in select-list order.
- `export` (object): Present when export=true: metadata for the materialized oracle-export://{id} resource, readable only by the originating principal under the exact scope grant.
- `format` (string): Present as arrow when oracle_query was requested with format=arrow. In that form rows is omitted and the governed page is carried in arrow_ipc_b64.
- `inlined` (boolean): False when the result was materialized as an export resource (export=true) rather than inlined.
- `mask_certificate` (object): Present when result masking transformed the page: proof-carrying per-column mask decisions plus the audit entry hash binding those decisions into the audit chain.
- `next_cursor` (string|null)
- `next_step` (string)
- `resource_link` (object): Present when export=true: an MCP resource_link to the export, to fetch via resources/read.
- `row_count` (integer)
- `rows` (array): Serialized rows keyed by column name. NUMBER cells are strings unless numbers_as_float=true.
- `total_bytes` (integer)
- `truncated` (boolean)

### `preview_sql` (~31 tokens)

Preview SQL

Compatibility alias for oracle_preview_sql.

Input parameters:

- `sql` (string, required): SQL statement to classify. It is never executed.

### `read_patch_preview` (~91 tokens)

Read Patch Preview

Compatibility helper for reading the last in-memory source patch preview returned by oracle_patch_source, patch_package, or patch_view.

Input parameters:

- `max_chars` (integer): Maximum DDL preview characters to return for one object (default 100000).
- `name` (string): Optional object name to inspect. If omitted, lists remembered patch previews for the active profile.
- `object_name` (string): Alias for name.

### `list_objects` (~88 tokens)

List Objects

Compatibility alias for oracle_schema_inspect.

Input parameters:

- `limit` (integer): Maximum objects to return.
- `max_rows` (integer): Alias for limit.
- `name_like` (string): Optional SQL LIKE pattern for object_name.
- `object_type` (string): Optional object type filter.
- `owner` (string): Optional schema owner; omit for current schema, or use * for all accessible schemas.

### `list_schemas` (~55 tokens)

List Schemas

Compatibility alias for oracle_list_schemas.

Input parameters:

- `limit` (integer): Alias for max_rows.
- `max_rows` (integer): Maximum schemas to return.
- `name_like` (string): Optional SQL LIKE pattern for schema names.

### `get_schema` (~151 tokens)

Get Schema

Compact schema orientation alias. With no object_type it lists TABLE, VIEW, and PACKAGE objects only; a bounded truncated page carries an opaque cursor.

Input parameters:

- `cursor` (string): Opaque continuation cursor returned by a truncated get_schema page.
- `limit` (integer): Maximum objects to return (default 100, hard cap 250).
- `max_rows` (integer): Alias for limit.
- `name_like` (string): Optional SQL LIKE pattern for object_name.
- `object_type` (string): Optional object type filter. Supplying it overrides the compact TABLE/VIEW/PACKAGE default projection.
- `owner` (string): Optional schema owner; omit for current schema, or use * for all accessible schemas.

### `describe_table` (~98 tokens)

Describe Table

Compatibility alias for oracle_describe; returns columns and constraints.

Input parameters:

- `limit` (integer): Alias for max_rows.
- `max_rows` (integer): Maximum columns and constraints returned.
- `name` (string): Alias for table_name.
- `owner` (string): Optional schema owner; defaults to current schema.
- `table` (string): Alias for table_name.
- `table_name` (string): Table or view name. May be OWNER.TABLE.

### `describe_index` (~59 tokens)

Describe Index

Compatibility alias for oracle_describe_index.

Input parameters:

- `index_name` (string): Index name. May be OWNER.INDEX_NAME.
- `name` (string): Alias for index_name.
- `owner` (string): Optional schema owner; defaults to current schema.

### `describe_trigger` (~59 tokens)

Describe Trigger

Compatibility alias for oracle_describe_trigger.

Input parameters:

- `name` (string): Alias for trigger_name.
- `owner` (string): Optional schema owner; defaults to current schema.
- `trigger_name` (string): Trigger name. May be OWNER.TRIGGER_NAME.

### `describe_view` (~59 tokens)

Describe View

Compatibility alias for oracle_describe_view.

Input parameters:

- `name` (string): Alias for view_name.
- `owner` (string): Optional schema owner; defaults to current schema.
- `view_name` (string): View name. May be OWNER.VIEW_NAME.

### `get_ddl` (~82 tokens)

Get DDL

Compatibility alias for oracle_get_ddl; long DDL is explicitly marked partial rather than silently truncated.

Input parameters:

- `name` (string): Alias for object_name.
- `object_name` (string): Object name. May be OWNER.NAME.
- `object_type` (string, required): Allowlisted object type.
- `owner` (string): Optional schema owner; defaults to current schema.

### `get_object_source` (~128 tokens)

Get Object Source

Compatibility alias for oracle_get_source. Omit object_type to return every visible source variant for the object name.

Input parameters:

- `max_chars` (integer): Maximum source characters to return.
- `name` (string): Alias for object_name.
- `object_name` (string): Object name. May be OWNER.NAME.
- `object_type` (string): Optional source type: PACKAGE, PACKAGE_BODY, PROCEDURE, FUNCTION, TRIGGER, TYPE, or TYPE_BODY. When omitted, all visible source types for this name are returned.
- `owner` (string): Optional schema owner; defaults to current schema.

### `get_errors` (~80 tokens)

Get Errors

Compatibility alias for oracle_compile_errors.

Input parameters:

- `limit` (integer): Alias for max_rows.
- `max_rows` (integer): Maximum compiler diagnostics returned.
- `name` (string): Alias for object_name.
- `object_name` (string): Optional object name. May be OWNER.NAME.
- `owner` (string): Optional schema owner; defaults to current schema.

### `get_clob` (~151 tokens)

Get CLOB

Compatibility alias for oracle_read_clob.

Input parameters:

- `clob_col` (string): CLOB/NCLOB/text column name.
- `clob_column` (string): Alias for clob_col.
- `max_chars` (integer): Maximum characters to return.
- `owner` (string): Optional schema owner; defaults to current schema.
- `pk_col` (string): Key column name.
- `pk_column` (string): Alias for pk_col.
- `pk_val` (string): Key value bound as :1.
- `pk_value` (string): Alias for pk_val.
- `table` (string): Table or view name. May be OWNER.TABLE.
- `table_name` (string): Alias for table.

## Diagnostics

Captured diagnostic sections: Provenance. The full working is on the page: https://verifymcp.io/servers/muhdur-oraclemcp/ghcr-io-muhdur-oraclemcp-0-10-0#diagnostics

## Score history

- 2026-08-03: 43
- 2026-08-02: 39
- 2026-08-01: 39
- 2026-07-31: 39
- 2026-07-30: 45
- 2026-07-29: 45
- 2026-07-28: 45
- 2026-07-27: 11

## Links

- Repository: https://github.com/MuhDur/oraclemcp
- Changelog RSS feed: https://verifymcp.io/servers/muhdur-oraclemcp/ghcr-io-muhdur-oraclemcp-0-10-0/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/muhdur-oraclemcp/ghcr-io-muhdur-oraclemcp-0-10-0/changelog.json
- HTML version of this page: https://verifymcp.io/servers/muhdur-oraclemcp/ghcr-io-muhdur-oraclemcp-0-10-0
