Skip to main content
Glama
VasquezNodier

MCP-Oracle

MCP-Oracle

Español | English

MCP(Model Context Protocol)サーバーで、AIエージェントをOracleデータベースに接続します。

スキーマの探索、PL/SQLソースの読み取り、SQLの実行を行うツールを公開します。読み取り専用モードで起動し、書き込みとストアドプロシージャの呼び出しはORACLE_ALLOW_WRITE=trueで有効になります。

公式Python SDK(mcp)とpython-oracledbを使用します。Instant Client(またはORACLE_HOMEのlib/ディレクトリ)が見つかった場合はthickモードを有効にし、それ以外の場合はthinモードを使用します。thickモードは、thinモードでサポートされていないパスワードベリファイアを使用する古いインスタンス(10g/11g)で必要です。

このプロジェクトは、Oracle公式のMCPスイート(oracle/mcp)ではありません。そのリポジトリはOracle Cloudやその他のOracle製品を対象としています。このサーバーはお使いのデータベースリスナーに直接接続します。

ツール

ツール

説明

書き込み

list_tables

表示可能なテーブルを一覧表示します。任意のschema。

いいえ

describe_table

列、型、NULL許容性、コメント、PK。

いいえ

list_constraints

テーブルのPK、FK、一意制約。

いいえ

get_object_source

PACKAGE、PROCEDURE、FUNCTION、TRIGGER、VIEWのソース。

いいえ

run_query

SELECT / WITHを実行します。DML/DDLを拒否します。ORACLE_MAX_ROWSに切り詰めます。

いいえ

execute_dml

INSERT / UPDATE / DELETE / MERGE + コミット。

はい

call_procedure

ストアドPL/SQLプロシージャを呼び出し+コミット。

はい

run_queryとexecute_dmlはバインド変数(:name)を受け付けるため、SQLに値を連結する必要はありません。

Related MCP server: Oracle DB MCP Server

要件

  • Python 3.9以上

  • Oracleインスタンスへのアクセス(ユーザー、パスワード、ホスト、ポート、service_name)

  • Oracle 10g/11g(またはthinモードが失敗する場合):Oracle Instant ClientまたはORACLE_HOMEのlib/ディレクトリ

ローカル使用と本番環境

このREADMEはローカル使用を対象としています。CursorまたはClaude Desktopがお使いのマシンでstdio経由でserver.pyを起動します(HTTPポートは開きません)。

MCPをサーバー上で実行し続け、クライアントがネットワーク経由で接続する場合:

インストール

python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

環境テンプレートをコピーして、値を入力してください:

cp .env.example .env

サーバーは.envを自動的に読み込みません。これらの変数はMCPクライアント設定(Cursor、Claude Desktopなど)で渡す必要があります。.envファイルはローカル参照用です。コミットしないでください。

環境変数

変数

必須

デフォルト

説明

ORACLE_USER

はい

—

データベースユーザー

ORACLE_PASSWORD

はい

—

パスワード

ORACLE_HOST

ORACLE_DSNが未設定の場合

127.0.0.1またはlocalhost

リスナーホスト

ORACLE_PORT

ORACLE_DSNが未設定の場合

1521

リスナーポート

ORACLE_SERVICE_NAME

ORACLE_DSNが未設定の場合

—

サービス名(例:ORCLPDB1)

ORACLE_DSN

いいえ

—

設定すると、host/port/service_nameを置き換えます。TNSエイリアスやEasy Connect Plusに便利です

ORACLE_ALLOW_WRITE

いいえ

false

trueでexecute_dmlとcall_procedureを有効にします

ORACLE_MAX_ROWS

いいえ

200

run_queryが返す最大行数

ORACLE_CLIENT_LIB_DIR

いいえ

~/oracle/instantclient

Instant ClientフォルダまたはORACLE_HOMEのlib/。ディレクトリが存在する場合、thickモードが有効になります

thickモードとthinモード

起動時にサーバーはORACLE_CLIENT_LIB_DIR(または~/oracle/instantclient)をチェックします。そのフォルダが存在する場合、oracledb.init_oracle_client()を呼び出してthickモードを使用します。

例:

# Instant Client (zip / RPM)
ORACLE_CLIENT_LIB_DIR=/Users/your_user/oracle/instantclient

# ORACLE_HOME 19c
ORACLE_CLIENT_LIB_DIR=/apps/oracle/product/19c/lib

ネイティブクライアントがない場合は、thinモードで実行されます(ほとんどの場合Oracle 12.1以上)。

Cursorでの使用

Cursorで、サーバーをMCP設定に追加します(例:~/.cursor/mcp.jsonまたはプロジェクト設定):

{
  "mcpServers": {
    "oracle-mcp": {
      "command": "/Users/your_user/Development/oracle-mcp/.venv/bin/python",
      "args": ["/Users/your_user/Development/oracle-mcp/server.py"],
      "env": {
        "ORACLE_USER": "my_user",
        "ORACLE_PASSWORD": "my_password",
        "ORACLE_HOST": "127.0.0.1",
        "ORACLE_PORT": "1521",
        "ORACLE_SERVICE_NAME": "ORCLPDB1",
        "ORACLE_ALLOW_WRITE": "false",
        "ORACLE_MAX_ROWS": "200"
      }
    }
  }
}

.venvのPythonへの絶対パスを使用して、クライアントがmcpとoracledbを見つけられるようにします。

Cursorを再起動(またはMCPサーバーをリロード)して、oracle-mcpがツールリストに表示されることを確認します。

Claude Desktopでの使用

claude_desktop_config.json内:

{
  "mcpServers": {
    "oracle-mcp": {
      "command": "/Users/your_user/Development/oracle-mcp/.venv/bin/python",
      "args": ["/Users/your_user/Development/oracle-mcp/server.py"],
      "env": {
        "ORACLE_USER": "my_user",
        "ORACLE_PASSWORD": "my_password",
        "ORACLE_HOST": "127.0.0.1",
        "ORACLE_PORT": "1521",
        "ORACLE_SERVICE_NAME": "ORCLPDB1",
        "ORACLE_ALLOW_WRITE": "false",
        "ORACLE_MAX_ROWS": "200"
      }
    }
  }
}

手動での実行

ローカルでは、サーバーはstdio経由でMCPを話します(HTTPポートは開きません)。本番サーバーではトランスポートはHTTPです。ローカル使用と本番環境を参照してください。

source .venv/bin/activate
export ORACLE_USER=my_user
export ORACLE_PASSWORD=my_password
export ORACLE_HOST=127.0.0.1
export ORACLE_PORT=1521
export ORACLE_SERVICE_NAME=ORCLPDB1
python server.py

stdin/stdoutにMCPクライアントが接続されていない場合、対話型プロンプトは表示されません。これは想定どおりです。

セキュリティ

  • デフォルトではORACLE_ALLOW_WRITE=false:execute_dmlとcall_procedureはPermissionErrorで失敗します。

  • run_queryはINSERT、UPDATE、DELETE、MERGE、DROP、ALTER、TRUNCATE、CREATE、GRANT、REVOKEで始まるステートメントを拒否します。

  • execute_dmlはINSERT、UPDATE、DELETE、MERGEのみを受け付けます。

  • SQLに値を補間する代わりに、バインド変数(:id)を使用してください。

  • スキーマの探索のみが必要な場合は、最小権限のユーザーで接続してください。

  • バージョン管理されたmcp.jsonに.envや資格情報をコミットしないでください。

依存関係

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Provides flexible access to Oracle databases for AI assistants like Claude, supporting SQL queries across multiple schemas with comprehensive database introspection capabilities.
    6
    57 npm
    11
    MIT
  • 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
    B
    maintenance
    Enables Claude Code to execute read-only queries and DML operations on Oracle and PostgreSQL databases, and to list or describe database tables.
    16 npm
    1
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables read-only exploration of Oracle databases through natural language, providing schema inspection and safe bounded SQL query execution.
    -