Skip to main content
Glama
Oracle Schema Explorer MCP Server

Oracle Schema Explorer MCP Server

Oracle Schema Explorer MCP Server

License: MIT Python 3.10+ MCP

A universal, strictly read-only Model Context Protocol (MCP) server for inspecting and exploring Oracle database schemas, tables, columns, and foreign-key relationships across any Oracle Database version (Oracle 10g, 11g, 12c, 18c, 19c, 21c, and 23ai).

Compatible with any AI agent or IDE: Claude Desktop, Cursor, Google Antigravity, VS Code (Cline / Roo Code), Windsurf, and custom LLM agent frameworks.


Key Features

  • Universal Oracle Compatibility:

    • Thin Mode for Oracle Database 12.1 through 23ai (pure Python, zero C-libraries/Instant Client required).

    • Automatic Fallback to local SQL*Plus execution for legacy Oracle instances (Oracle 10g, 11g) or environments with older Oracle Client libraries (e.g. 12.1), completely eliminating ODPI-C version mismatch errors (DPY-3010, DPI-1050).

    • Standard dictionary views (ALL_TABLES, ALL_TAB_COLUMNS, ALL_CONSTRAINTS, ALL_CONS_COLUMNS) and universal ROWNUM query wrapping.

  • Strictly Read-Only Guarantee:

    • Enforces safety at the protocol layer, allowing only SELECT and WITH statements.

    • Automatically rejects data mutation (INSERT, UPDATE, DELETE, MERGE) and schema modifications (DROP, ALTER, TRUNCATE, CREATE).

  • Deep Relationship Discovery:

    • Explores incoming and outgoing foreign keys.

    • Generates full schema Entity-Relationship diagrams formatted in Mermaid.js.

  • Zero Hardcoded Credentials:

    • Works with a blank default configuration. Connection strings can be passed dynamically in chat or configured via environment variables.


Related MCP server: Database MCP Server

Directory Structure

oracle-mcp-server/
├── server.py                 # Core FastMCP / MCPServer implementation
├── run.bat                   # Universal Windows batch launcher
├── run.ps1                   # Universal PowerShell launcher
├── requirements.txt          # Python package dependencies
├── pyproject.toml            # Python package specifications
├── mcp-config-examples.json  # Configuration snippets for all clients
├── LICENSE                   # MIT License
└── README.md                 # Documentation

Installation & Prerequisites

  1. Python 3.10+: Ensure Python is installed.

  2. Install dependencies:

    pip install -r requirements.txt

    (Or using uv: uv pip install -r requirements.txt)


Configuration

The server ships 100% credential-free. You can supply connection strings in two ways:

Keep ORACLE_CONNECTION_STRING empty. In any AI chat session, simply instruct your agent:

"Connect to Oracle DB: username/password@hostname:1521/service_name"

The server's set_connection tool validates and activates the session on the fly.

Method 2: Pre-configured Environment Variable

Set the ORACLE_CONNECTION_STRING environment variable in your MCP client's configuration file.

Supported Connection Formats:

  • EzConnect: username/password@host:port/service_name

  • URL Syntax: oracle://username:password@host:port/service_name

  • TNS Descriptor: user/password@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=...)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=...)))


Client Integration Examples

Claude Desktop

Add to %APPDATA%\Claude\claude_desktop_config.json (Windows) or ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):

{
  "mcpServers": {
    "oracle-schema-explorer": {
      "command": "C:\\path\\to\\oracle-mcp-server\\run.bat",
      "env": {
        "ORACLE_CONNECTION_STRING": ""
      }
    }
  }
}

Cursor

  1. Go to Settings -> Features -> MCP Servers.

  2. Click Add New MCP Server:

    • Name: oracle-schema-explorer

    • Type: command

    • Command: C:\path\to\oracle-mcp-server\run.bat

VS Code (Cline / Roo Code / Windsurf)

Add to your client's MCP configuration settings:

{
  "mcpServers": {
    "oracle-schema-explorer": {
      "command": "cmd.exe",
      "args": ["/c", "C:\\path\\to\\oracle-mcp-server\\run.bat"]
    }
  }
}

Google Antigravity

Add to ~/.gemini/config/mcp_config.json:

{
  "mcpServers": {
    "oracle-schema-explorer": {
      "command": "cmd.exe",
      "args": ["/c", "C:/path/to/oracle-mcp-server/run.bat"],
      "env": {
        "ORACLE_CONNECTION_STRING": ""
      }
    }
  }
}

Available MCP Tools

Tool

Parameters

Description

set_connection

connection_string: str

Connects or switches database dynamically. Tests connection and returns database banner.

get_connection_info

None

Returns connection status, current schema/user, database name, and version banner.

list_schemas

None

Lists all accessible schemas and their table counts (filters out internal Oracle system accounts).

list_tables

schema: str = ""

Lists all tables and views in the schema with approximate row counts.

describe_table

table_name: str, schema: str = ""

Returns detailed column definitions: data types, precision, scale, nullability, primary key indicators, and comments.

get_table_connections

table_name: str, schema: str = ""

Inspects table topology: lists parent tables referenced (outgoing FKs) and child tables that reference this table (incoming FKs).

get_schema_relationships

schema: str = ""

Generates full Entity-Relationship graph for the schema with a renderable Mermaid ER diagram.

execute_readonly_query

sql_query: str, max_rows: int = 50

Executes read-only queries (SELECT/WITH) safely capped by ROWNUM. Blocks mutation operations.


Security & Safety

  • Read-Only Enforcement: Query sanitization inspects all queries before execution, blocking all DDL and DML operations.

  • Resource Protection: Result sets are constrained with automatic pagination (ROWNUM <= max_rows, capped at 500) to protect database memory and client context windows.

  • System Schema Filtering: Internal accounts (SYS, SYSTEM, DBSNMP, MDSYS, CTXSYS, etc.) are hidden by default to keep context clean and focused on application data.


License

This project is licensed under the MIT License.

Available Tools

8 tools
describe_tableA

Retrieves full column metadata for a table: data types, lengths, nullability, PK status.

Args: table_name: Name of the table. schema: Optional schema/owner name.

NameRequiredDescriptionDefault
schemaNo
table_nameYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full disclosure burden. It makes the read-only nature and the returned metadata fields clear, but says nothing about error behavior for unknown tables, permission requirements, or case-sensitivity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core capability is front-loaded in one sentence and the Args block is tight with zero filler. The Args block mildly duplicates the schema's own parameter names, but it is the only place the schema's meaning is conveyed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation here. For a two-parameter metadata tool with no annotations, however, the description omits the schema-default semantics and failure behavior that an agent would want before invoking it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does: it identifies table_name as the table's name and schema as an optional schema/owner qualifier. The bare 'default: ""' meaning (fall back to the session's current schema) is still left unstated, keeping it short of a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (retrieves) and resource (full column metadata for a table) and enumerates exactly what is returned: data types, lengths, nullability, PK status. That enumeration implicitly separates it from list_tables, but no sibling is named explicitly and the boundary with get_schema_relationships is left for the agent to infer.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent can infer this is the call to make before writing a query against an unfamiliar table. There is no explicit when-to-use, no mention of when to prefer list_tables or get_schema_relationships, and no statement of prerequisites such as the table needing to exist or the connection being set.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

execute_readonly_queryA

Executes a strictly READ-ONLY query (SELECT/WITH) with automatic ROWNUM capping.

Args: sql_query: A SELECT or WITH query to execute. max_rows: Maximum number of rows to return (1-500, default 50).

NameRequiredDescriptionDefault
max_rowsNo
sql_queryYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description carries the full burden and does disclose the two most important behaviors: queries are strictly read-only (SELECT/WITH only) and results are capped via automatic ROWNUM injection, an enforcement detail an agent could not otherwise know. Remaining gaps are secondary — it says nothing about error behavior for invalid SQL, query timeouts, or the SQL dialect (only inferable from 'ROWNUM').

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core constraint is front-loaded in a single sentence, followed by a compact Args block, so there is no wasted framing. The only redundancy is the SELECT/WITH restriction being stated twice, once in the summary and again in the sql_query description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values needn't be documented, and both parameters are given meaning plus a row cap. What is still missing for a query-execution tool is error/edge-case behavior and an explicit dialect note, but nothing essential to invoking it correctly is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does: sql_query is constrained to SELECT/WITH queries, and max_rows is given a 1-500 range that is absent from the schema (which only carries the default of 50). Neither is explained with format examples or behavior when the range is exceeded, so it falls short of a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Executes') and resource ('strictly READ-ONLY query (SELECT/WITH)'), plus the scope constraint of automatic ROWNUM capping. It is immediately distinguishable from sibling tools like list_tables or describe_table, which inspect metadata rather than run queries.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the tool is clearly the way to run arbitrary SELECT/WITH SQL, and the read-only limitation implicitly routes writes elsewhere. However, it never names an alternative or states when to prefer it over schema-inspection siblings, and it doesn't say what happens if a caller submits a DML statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_connection_infoA

Checks current database connection status, Oracle version, and session details.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description must carry the behavioral burden; 'Checks' conveys a non-mutating, zero-argument read, and it discloses the categories of information returned (status, version, session). It does not address permissions/auth requirements, what happens when the connection is down or unconfigured, or any rate limits, so a moderate score is warranted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler, immediately stating the verb, the resource, and the three data points returned. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be documented, and the zero-parameter schema is trivially covered. For a simple read tool the description is nearly complete, missing only failure-mode behavior (e.g., error when no connection is configured) and its relationship to set_connection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there are no parameter semantics to explain; the baseline for a parameterless tool applies. The description correctly avoids inventing or restating arguments.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Checks') and resource (database connection) and enumerates the returned facets: connection status, Oracle version, and session details. An agent can distinguish it from set_connection (which changes state) and get_table_connections (table-scoped), though the description never states those distinctions explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: 'Checks current ... status' suggests a read-only diagnostic call, typically before or after configuring a connection with set_connection. There is no explicit when-to-use, when-not-to-use, or named alternative, so the routing decision is left to inference from the sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_schema_relationshipsB

Generates the complete Entity-Relationship diagram for tables in a schema.

NameRequiredDescriptionDefault
schemaNo

Output Schema

NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It implies a read-only generation task, but does not state permission needs, cost on large schemas, or what 'complete' means. The presence of an output schema removes the need to describe the return shape, which keeps this from scoring lower.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single efficient sentence with the key artifact front-loaded. Nothing is wasted, though the brevity is partly under-specification rather than tight writing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema covers what is returned, so the description does not need to. However, for a diagram-generation tool with an optional, undocumented schema parameter and no annotations, the definition leaves the agent guessing about defaults and scope limits.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the sole parameter has a default of empty string. The description only echoes that a schema is involved and never explains the critical behavior of omitting the parameter (which schema is used?). It fails to compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('Generates') and a specific artifact ('complete Entity-Relationship diagram') scoped to 'tables in a schema'. This is clearly distinct from siblings like describe_table (single table) and get_table_connections, though it never explicitly contrasts itself with the latter.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not-to-use guidance. An agent must infer that this is a schema-wide relationship overview, and it gets no help deciding between this and the overlapping get_table_connections sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_table_connectionsC

Explores how a table is connected to other tables (Outgoing and Incoming Foreign Keys).

Args: table_name: Table name. schema: Optional schema/owner name.

NameRequiredDescriptionDefault
schemaNo
table_nameYes

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, yet it never states that this is a read-only lookup, whether it requires permissions, or what scope of connections is returned (direct only vs. transitive). The only behavioral hint is the parenthetical about FK direction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose is front-loaded in a single sentence and the arg list is compact. Nothing is padded, though the arg list largely duplicates the schema rather than adding value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained. Still, for a tool with zero annotation coverage and 0% schema description coverage, the description should say more about what qualifies as a connection and how schema is resolved when omitted.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, but it mostly restates parameter names: 'table_name: Table name' is tautological. It adds only marginal meaning by noting schema is optional and can be a schema/owner name, without explaining default resolution.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Explores how a table is connected') with a clear resource (a table's foreign keys), and clarifies directionality (outgoing and incoming FKs). An agent can distinguish it from describe_table, though the similar-sounding sibling get_schema_relationships is never mentioned.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or when-not-to-use guidance. The phrase 'explores how a table is connected' implies the intent, but with a sibling named get_schema_relationships, the agent is left to guess which relationship tool to pick.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_schemasA

Lists accessible schemas in the Oracle database with table counts.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. "Lists" implies a non-destructive read and "accessible" implies permission-based filtering of results, which is genuinely useful behavioral context, but nothing is said about how expensive the call is, whether a live connection is required, or how many schemas are typically returned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the resource and the distinguishing detail (table counts) both land in one clause.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return format needn't be explained, and the description cheaply flags one return field anyway. For a zero-parameter listing tool this is close to sufficient; the missing piece is any statement of connection prerequisites in a toolset that includes set_connection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate beyond what the (empty) schema states. Baseline 4 applies; the mention of table counts adds a small amount of meaning about what the listing includes.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Lists accessible schemas") plus a useful qualifier ("in the Oracle database with table counts"). It is clearly distinguishable from list_tables, but it never names that sibling, so differentiation is achieved only by reading the resource noun.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to call this versus list_tables or describe_table, and no mention of a prerequisite connection (set_connection exists as a sibling). The only hint is the word "accessible," which describes filtering, not invocation timing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tablesB

Lists tables and views in a specified schema with row counts.

Args: schema: Name of schema/owner (defaults to current user).

NameRequiredDescriptionDefault
schemaNo

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It does disclose one non-obvious behavior, that results include row counts, but it says nothing about whether those counts are exact or estimated, whether the call is read-only, or whether counting rows is expensive on large schemas.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact lines with the core behavior front-loaded and the parameter note immediately after. Nothing is wasted, and the docstring-style Args block is easy to scan despite being slightly incongruous in a prose description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the single parameter is covered. What is missing is the relational context this tool needs: how it differs from list_schemas and when to follow it with describe_table or get_schema_relationships.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the schema's only parameter is ambiguously typed as a string defaulting to "", so the description has to compensate. It does: it identifies the parameter as schema/owner and resolves the empty default by explaining it means the current user.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Lists tables and views") scoped to a schema and adds the return content ("with row counts"). That scope distinguishes it from list_schemas, but the description never names the sibling it is closest to, so an agent must infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use or when-not-to-use guidance, and no reference to alternatives such as describe_table for column detail or list_schemas for enumerating schemas. Usage is only inferable from the tool name and the word "Lists".

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_connectionB

Sets or switches the active Oracle database connection string dynamically.

Args: connection_string: Oracle connection string (e.g. 'user/password@host:1521/service_name').

NameRequiredDescriptionDefault
connection_stringYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden, which it does not meet. It does not say whether the connection is validated on set, what happens on an invalid string, whether the change persists across calls or sessions, or that it handles credentials in plaintext. Only the format of the argument is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short, front-loaded sentences with no filler; the core behavior comes first and the argument format follows. The Google-style 'Args:' block is slightly redundant for a one-parameter tool but still earns its place as the format example.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and a single-parameter tool is inherently simple. What is still missing is the stateful consequence of the call: whether the switch applies to subsequent execute_readonly_query calls, whether it is per-session, and what failure looks like.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% – the schema only titles the field 'Connection String' with no description. The description compensates by giving a concrete format example ('user/password@host:1521/service_name'), which tells the agent exactly what shape of value to supply, including credentials, host, port and service name.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource: it 'sets or switches the active Oracle database connection string.' The word 'active' and 'dynamically' distinguish it from the read-only introspection siblings, none of which manage connection state. However, it never explicitly contrasts itself with siblings such as get_connection_info, so it falls just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to call this tool, whether it must be called before execute_readonly_query, or how it relates to get_connection_info. The only usage hint is the implicit sense of 'active' (session state changes), with no exclusions, prerequisites, or alternatives named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 8 tool updatesv1.0.0
    • First observeddescribe_table
    • First observedexecute_readonly_query
    • First observedget_connection_info
    • First observedget_schema_relationships
    • First observedget_table_connections
    • First observedlist_schemas
    • First observedlist_tables
    • First observedset_connection

TDQS

A3.7/5.0

Scored across 8 tools

Disambiguation5/5

Each tool targets a distinct resource and action: connection management, schema listing, table listing, column metadata, table-level foreign keys, schema-wide ER relationships, and read-only queries. The closest pair, get_table_connections and get_schema_relationships, is clearly differentiated by table-level vs schema-wide scope.

Naming Consistency5/5

All tool names follow a consistent snake_case verb_noun pattern: set_connection, get_connection_info, list_schemas, list_tables, describe_table, get_table_connections, get_schema_relationships, execute_readonly_query. Verb choices are varied but conventional and predictable.

Tool Count5/5

Eight tools is well-scoped for a schema exploration server, with no redundant or filler operations. Each tool covers a meaningful step in the exploration workflow.

Completeness4/5

The surface covers connection setup/status, schema and table discovery, column metadata, foreign-key relationships, ER diagrams, and ad-hoc read-only querying, which supports core exploration workflows. Minor gaps include object search/filtering and index or non-PK constraint inspection, though these can be partially worked around via execute_readonly_query.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • 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
    D
    maintenance
    Enables AI assistants to interact with relational databases such as MySQL, PostgreSQL, SQLite, SQL Server, and Oracle. Provides tools for querying, data inspection, and schema analysis with optional read-only mode.
    10 npm
    1
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables read-only exploration of Oracle databases through natural language, providing schema inspection and safe bounded SQL query execution.
    -
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to connect to Oracle databases for schema exploration, PL/SQL source inspection, and read-only SQL queries, with optional write operations when explicitly enabled.
    -