Claude Media
ClaudeからOracle MCPサーバーを使う — DBとOCIの選び方

ClaudeからOracle MCPサーバーを使う — DBとOCIの選び方

Oracleのoracle/mcpリポジトリには、Oracle DatabaseやOCI向けなど複数のMCPサーバーがあります。両者の違い、Claude Codeへの登録コマンド、認証と権限の注意点をまとめます。

Oracleが公開しているGitHubリポジトリoracle/mcpには、Oracle製品を操作するMCPサーバーの参照実装がまとまっています。src/配下の1ディレクトリが1サーバーで、Oracle Database向け、OCI(Oracle Cloud Infrastructure)向け、ドキュメント検索向けに分かれます。

どれをClaudeにつなぐかは、触りたい対象で決まります。表のデータを扱うならOracle Database向け、クラウドのリソースならOCI向けです。

どのサーバーを選ぶか

リポジトリは、OCIを使うならoci-cloud-mcp-serverから始めるよう案内しています。OCI CLI経由で動かしたいときだけoci-api-mcp-serverを選びます。

Oracle Databaseに直接SQLを投げたい場合の入口は別です。次の表が、この記事で扱うサーバーの対応です。

やりたいことサーバー言語・起動認証の拠り所
OCIのリソース全般を操作サーバーoci-cloud-mcp-server言語・起動Python / uvx認証の拠り所OCI CLIのプロファイル
SQL実行・テーブル管理・実行計画サーバーoracle-db-mcp-java-toolkit言語・起動Java / jar認証の拠り所JDBC接続情報
Autonomous DBやObject Storageを横断サーバーdbtools-mcp-server言語・起動Python認証の拠り所OCI設定ファイル
Oracle Databaseのドキュメント検索サーバーoracle-db-doc-mcp-server言語・起動Python認証の拠り所不要(ローカル索引)

oracle-db-mcp-java-toolkitのREADMEは、Oracle SQLcl MCP Serverが「Oracle Database向けのMCP機能を持つ、正式にサポートされる製品」だと明記しています。リポジトリ側は参照実装です。本番に近い用途ではSQLcl側を先に検討する流れになります。

OCIをClaude Codeから操作する

まずoci-cloud-mcp-serverを登録します。このサーバーはOCI Python SDKを直接呼ぶ薄いラッパーで、OCI CLIのサブプロセスは使いません。

事前準備

必要なものは3つです。

  • uv(READMEのQuick Startはuv python install 3.13でPython 3.13を入れる手順)
  • OCI CLIのインストールと、プロファイルの作成
  • セッション認証を使う場合はoci session authenticateの実行

セッション認証の例は次のとおりです。

oci session authenticate \
  --region=us-phoenix-1 \
  --tenancy-name=<tenancy_name>

セッションには有効期限があります。切れたらoci session authenticate --profile-name <profile_name> --region <region> --auth security_tokenで更新します。トークン認証だけでは動かないサーバーもあり、その場合はAPIキー方式の設定が必要です。

claude mcp addで登録する

READMEのJSON設定(commandがuvx、argsがoracle.oci-cloud-mcp-server@latest、envがOCI_CONFIG_PROFILEとFASTMCP_LOG_LEVEL)を、Claude Codeのコマンドに置き換えると次の形になります。

claude mcp add --transport stdio \
  --env OCI_CONFIG_PROFILE=DEFAULT \
  --env FASTMCP_LOG_LEVEL=ERROR \
  oracle-oci-cloud \
  -- uvx oracle.oci-cloud-mcp-server@latest

--より前がClaude Codeのオプション、後ろがサーバーを起動するコマンドです。--envは複数指定できますが、サーバー名が--envの直後に来ると名前もKEY=valueとして読まれて拒否されます。上の例では--transport stdioを挟んで避けています。認証のやり直しや登録済みサーバーの扱いはclaude mcp login/logoutの記事にまとまっています。

このサーバーが公開するツール

ツールは5つで、OCIのサービスごとに別ツールがあるわけではありません。SDKのクライアントクラスとメソッド名を指定して呼ぶ設計です。

ツール役割
list_oci_clients役割使えるSDKクライアントの一覧
find_oci_api役割短いキーワードでメソッドを検索
describe_oci_operation役割メソッドの必須パラメータなどを確認
invoke_oci_api役割client_fqnとoperationを指定して実行
list_client_operations役割指定クライアントの操作一覧

READMEは、トークンを節約する使い方として、クライアントとメソッドが分かっていればdescribe_oci_operationかinvoke_oci_apiを直接呼ぶ手順を勧めています。find_oci_apiは検索の逃げ道で、「list regions」「create vcn」のような短い語で使います。文章をそのまま渡す想定ではありません。

Claudeへの頼み方は、対象のクライアントまで書くと迷いが減ります。たとえば「oci.core.ComputeClientのlist_instancesで、このコンパートメントのインスタンスをIDと状態だけ一覧にして」のように指示します。invoke_oci_apiにはfieldsで返す項目を絞る引数があるため、表示したい列を先に伝えると応答が軽くなります。

Oracle Databaseにつなぐ

SQLを書かせる用途ではoracle-db-mcp-java-toolkitを使います。JDK 17以上とMaven 3.9以上が前提で、自分でjarをビルドします。

mvn clean package
# 生成物: target/oracle-db-mcp-toolkit-1.0.0.jar

組み込みツールセット

-Dtoolsで有効にするツールセットを選びます。省略すると、保護されていないツールがすべて有効になります。

ツールセット含まれるツール
database-operator含まれるツールread-query、write-query、table、transaction、db-ping、db-metrics-range、explain-plan
log-analyzer含まれるツールjdbc-analyzer、rdbms-analyzer(DB接続は不要)
rag含まれるツールvector-model、vector-store、embed、task、oci-storage、similarity-search
mcp-admin含まれるツールedit-tools、list-credentials(明示的に指定したときだけ有効)

read-queryはSELECT専用、write-queryはINSERT・UPDATE・DELETE・CREATEなどを自動コミットで実行します。実行する前に確認したい場合は、write-queryを含むdatabase-operatorをそのまま有効にせず、用途に合わせて個別のツール名で絞る選択肢があります。READMEによると-Dtoolsには個別のツール名も渡せます。

Claude Codeに登録する

READMEのClaude Desktop向けJSON(commandがjava、argsに-Dのシステムプロパティとjarのパス)と同じ引数を、claude mcp addに移します。

claude mcp add --transport stdio oracle-db \
  -- java \
  -Ddb.url=jdbc:oracle:thin:@your-host:1521/your-service \
  -Ddb.user=your_user \
  -Ddb.password=your_password \
  -Dtools=database-operator \
  -jar /path/to/oracle-db-mcp-toolkit-1.0.0.jar

最初は-Dtools=log-analyzerだけで試す手もあります。DBに接続しないので、JDBCのログやSQLNetのトレースファイルをClaudeに読ませて、エラーや実行時間を拾わせる用途に向きます。

接続情報をYAMLに分ける

パスワードをコマンドラインに直接書きたくない場合は、設定ファイルで接続とカスタムツールを定義できます。READMEの例を元にすると、次のような形です(READMEの例に沿った書き方で、実行結果ではありません)。

dataSources:
  prod-db:
    url: jdbc:oracle:thin:@prod-host:1521/ORCLPDB1
    user: ${user}
    password: ${password}
 
tools:
  hotels-by-name:
    dataSource: prod-db
    description: ホテル名から詳細を返す
    parameters:
      - name: name
        type: string
        description: 検索するホテル名
        required: false
    statement: SELECT * FROM hotels WHERE name LIKE '%' || :name || '%'

起動時に-DconfigFile=/path/to/config.yamlを付けます。SQLを固定したtoolsだけを公開すれば、Claudeに任意のSQLを書かせずに済みます。カスタムツールは-Dtoolsに列挙しなくても既定で有効なので、不要なものにはenabled: falseを付けます。読み取り専用の設計を複数製品で比べた内容はデータベースMCPサーバーの読み取り専用設定の比較にあります。

HTTPで公開するときの認証

stdioではClaude Codeがプロセスを起動するので、認証の話は出ません。サーバーを別ホストで動かすHTTP(streamable HTTP)モードでは、認証が必須になります。

  • -Dauth.enabled=trueで認証を有効にし、OAuth2を設定するか、開発用の生成トークンを使う
  • 認証なしで起動できるのは-Dhttp.allowUnauthenticatedForDevelopment=trueを明示した場合だけで、警告が出る
  • HTTPSはPKCS12形式のキーストアを-DcertificatePathと-DcertificatePasswordで渡す

Claude Desktopからは、READMEの例だとnpx -y mcp-remote https://localhost:45450/mcpを経由してつなぎます。ClineはstreamableHttpで直接つなげます。OCI側のHTTPサーバーも同様に、OCI IAMの機密アプリケーション(IDCS_CLIENT_IDなど)を用意し、${ORACLE_MCP_BASE_URL}/auth/callbackをリダイレクトURIに登録する必要があります。READMEは、コンテナ起動時にポート公開を-p 127.0.0.1:8888:8888のまま保つよう注意しています。-p 8888:8888にするとローカルホスト外に公開されます。

補助的な2つのサーバー

dbtools-mcp-server

OCIのDatabase Toolsの接続を経由して、Autonomous Databaseなどに対してSQLを実行します。コンパートメント一覧、データベース一覧、レポート定義の作成と実行、HeatWaveのRAG、Object Storageのバケット一覧といったツールが23個あります。READMEによると、新規のMySQL HeatWaveやMySQL AIの利用者にはmysql-mcp-serverの利用が勧められており、MySQL AIはこのサーバーと互換性がありません。

TENANCY_ID_OVERRIDEやPROFILE_NAMEといった環境変数で、使うテナンシーとプロファイルを切り替えます。

oracle-db-doc-mcp-server

Oracle Databaseのドキュメントをキーワード検索するサーバーです。ドキュメント本体はリポジトリに含まれないため、公開されているzipファイルを自分でダウンロードして索引を作ります。

python3 oracle-db-doc-mcp-server.py idx -path ~/Downloads/oracle-database_26.zip
python3 oracle-db-doc-mcp-server.py mcp

索引の作成には数分かかり、クライアントによってはタイムアウトするため、idxとmcpは別々に実行する作りです。提供されるツールはsearch_oracle_database_documentationの1つです。SQLの構文やエラーの意味を、Claudeが手元の索引から引ける点が使いどころになります。

権限とデータの扱い

Oracleのドキュメントは、LLMにデータベースへのアクセスを与えると、意図しないテーブルや機微な情報を渡すリスクがあると警告しています。同じ警告が挙げる対策は次の3点です。

  • LLMが使うDBユーザーに必要最小限の権限だけを与える
  • 本番DBを直接つながず、匿名化した読み取り専用のレプリカかデータの一部を使う
  • LLMが実行したクエリを定期的に監査する

SQLcl MCP Serverには、V$SESSION.MODULEにMCPクライアント名を入れる機能、実行履歴をDBTOOLS$MCP_LOGテーブルに記録する機能、生成クエリに/* LLM in use ... */コメントを付ける機能があります。参照実装のJavaツールキットにこれらがあるとはREADMEに書かれていないため、監査の仕組みが要る環境では、SQLcl側のほうが材料がそろっています。

OCI側のstdioサーバーは、設定したOCI CLIプロファイルの権限で動きます。READMEも最小権限のIAM設定を勧めているので、Claudeに渡すプロファイルは専用に作り、操作できるコンパートメントを絞っておくのが安全です。他のデータベース系MCPサーバーでの権限の分け方はDatabricks MCPサーバーの記事やRedis MCPサーバーの記事も参考になります。クラウド側の操作を任せる構成はAzure MCPサーバーの記事と同じ考え方です。

つまずきやすい点

症状確認すること
OCIサーバーが認証エラーになる確認することセッションの有効期限切れ。oci session authenticateで更新する
トークン認証で動かないサーバーがある確認することAPIキー方式の設定に切り替える
Javaツールキットが起動しない確認することJDK 17以上か、jarのパスが絶対パスか
HTTPモードで起動を拒否される確認すること-Dauth.enabled=trueか開発用フラグが必要
ドキュメント検索サーバーがすぐ終了する確認すること先にidxで索引を作ったか
-Dtoolsに書いたのに足りない確認することmcp-adminは*でも有効にならない。明示する

まとめ

Oracle製品をClaudeにつなぐ入口は、対象で3つに分かれます。OCIはoci-cloud-mcp-server、データベース内のSQLはoracle-db-mcp-java-toolkit、ドキュメントの参照はoracle-db-doc-mcp-serverです。いずれも参照実装なので、業務DBは検証環境で動作を見てから、専用ユーザーと最小権限を前提に広げます。

先に試すなら、DB接続のいらないlog-analyzerか、ドキュメント検索が低リスクです。次にread-queryだけで読み取りを試し、write-queryは必要になった時点で加えます。

この記事を共有:XはてブLinkedIn
MCP をもっと見る →