2026年3月4日水曜日

MCPを話すOracle Databaseを作成する

Oracle DatabaseにリモートMCPサーバーを実装し、Claude DesktopやOpenAI ChatGPTから呼び出せる環境を無料で作成します。今までに記事をいくつか公開していますが、その時点で動作が確認できた手順を逐次公開しているので、どの記事をどの順番で参照して作業すればよいのかわかりにくくなっています。

記事の検証も兼ねて、1からOracle DatabaseにリモートMCPサーバーを実装した手順を紹介します。

作業を行なうにあたって、以下の順番で記事を参照します。

  1. Autonomous AI Database向けNGINXリバース・プロキシの作成
  2. UC_AIで定義したツールをリモートMCPサーバーのツールとして使用する
上記の2つの記事の作業を終えると、認証なしでアクセスできるリモートMCPサーバーが作成されます。この環境を元に、Entra IDOkta IntegratorAuth0またはOracle IAMを使ったユーザー認証を構成できます。


NGINXのリバース・プロキシとAutonomous AI LakehouseのインスタンスSALESADBの作成



最初に記事「Autonomous AI Database向けNGINXリバース・プロキシの作成」の手順を実施し、Oracle Cloudに以下の2つのインスタンスを作成します。

コンパートメントや仮想クラウドネットワークは構成済みとします。
  1. nginxを実行するAlways FreeのVM.Standard.E2.1.Microのインスタンスを1つ作成します。
  2. Oracle Database 19cのAlways FreeのAutonomous AI Lakehouseを作成します。
nginxのリバース・プロキシの設定にAutonomous AI Databaseの接続先を設定する必要があるため、コンピュート・インスタンスの作成の前に「テスト用のRESTサービスの作成」のセクションに記載されているデータベースの作成を実施します。

インスタンスの作成までを実施し、接続先となるエンドポイントの情報を取得します。

作成したデータベースのツール構成より、Webアクセス(ORDS)パブリック・アクセスURLホスト部分をリバース・プロキシの設定に使用します。

エンドポイントの名前は一般的に以下の形式になります。

[テナント識別子]-[データベース名].adb.[リージョン].oraclecloudapps.com

インスタンスの作成までを実施し、後続のAPEXワークスペースの作成はnginxのリバース・プロキシを構成した後に続けることにします。


記事にあるセクション「コンピュート・インスタンスの準備」に記載されている作業を実施します。

コンピュート・インスタンスを作成した後に、インスタンスに割り当てられたパブリックIPをホスト名で解決できるよう、どこかのDNSにホスト名とIPアドレスを登録しておきます。


ホスト名を登録したのち「リバース・プロキシの構成」に記載されている作業を実施します。

30-mcp-adb.confに含まれる$ords_upstream_hostに、先に作成したAutonomous AI Databaseの接続先ホスト名を設定します。ホスト名は英子文字で設定します。

nginxの起動まで実施します。

この時点で、ブラウザからコンピュート・インスタンスに設定したホスト名でアクセスすると、以下のページが開きます。

https://[コンピュート・インスタンスに割り当てたホスト名]/


セクション「テスト用のRESTサービスの作成」の記載されている、Oracle APEXのワークスペースの作成を実施します。

Oracle APEXのパブリック・アクセスURLに接続し、作業を継続します。

ワークスペース名apexdevワークスペース・ユーザー名apexdevとして作成します。

ワークスペースが作成されたら、リモートMCPサーバーの実装に移ります。


UC_AIで定義したツールをリモートMCPサーバーのツールとして使用する



記事「UC_AIで定義したツールをリモートMCPサーバーのツールとして使用する」にそって作業を実施し、リモートMCPサーバーとして振る舞うORDS RESTサービスsampleserverを作成します。

手元のPCよりSQLclを使って、データベースに接続します。

作成したデータベースのデータベース接続を開き、データベースへの接続情報を含んだウォレットをダウンロードします。SQLclを使用するためウォレットが必要です。TNS名だけでは接続できません。


ウォレット・タイプとしてインスタンス・ウォレットを選択し、ウォレットのダウンロードを実行します。


ウォレットにパスワードを設定し、ダウンロードを実行します。ここで設定したパスワードは、今回の作業では使用しません。

データベース名をsalesadbとしているため、ウォレットはWallet_salesadb.zipとしてダウンロードされます。


APEXのワークスペースとしてapexdevを作成したときに、ワークスペース・スキーマとしてWKSP_APEXDEVが作成されています。このスキーマにUC_AIをインストールします。

データベースsalesadbに管理者ユーザーADMINで接続し、スキーマWKSP_APEXDEVへ必要な設定を行います。

sql -cloudconfig Wallet_salesadb.zip admin@salesadb_low

ordsmcp-adb % sql -cloudconfig Wallet_salesadb.zip admin@salesadb_low


SQLcl: 水 3月 04 14:10:21 2026のリリース25.4 Production


Copyright (c) 1982, 2026, Oracle.  All rights reserved.


パスワード (**********?) **************

Last Successful login time: 水 3月  04 2026 14:10:27 +09:00


接続先:

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

Version 19.30.0.1.0


SQL> 


SQLclでユーザーWKSP_APEXDEVに接続できるようにパスワードを設定します。

alter user wksp_apexdev identified by [パスワード];

SQL> alter user wksp_apexdev identified by ********;


User WKSP_APEXDEVが変更されました。


SQL> 


スキーマWKSP_APEXDEVをREST有効に切り替えます。p_url_mapping_patternは(スキーマ名ではなく)作成したワークスペース名を英語文字で指定します。今回の作業例ではapexdevです。
begin
    ords_admin.enable_schema(
        p_schema => 'WKSP_APEXDEV',
        p_url_mapping_pattern => 'apexdev'
    );
    commit;
end;
/

SQL> begin

  2      ords_admin.enable_schema(

  3          p_schema => 'WKSP_APEXDEV',

  4          p_url_mapping_pattern => 'apexdev'

  5      );

  6      commit;

  7  end;

  8* /


PL/SQLプロシージャが正常に完了しました。


SQL> 


UC_AIのパッケージのインストールにLoggerを含めます。Loggerを個別にインストールする場合、スキーマにCREATE ANY CONTEXT権限が必要です。

grant create any context to wksp_apexdev;

SQL> grant create any context to wksp_apexdev;


Grantが正常に実行されました。


SQL> 


以上でスキーマWKSP_APEXDEVの準備は完了です。SQLclから抜けます。

exit

SQL> exit

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

Version 19.30.0.1.0から切断されました

ordsmcp-adb % 


UC_AIのインストール方法はいくつかありますが、今回はGitHubのリポジトリをクローンしてインストールします。

git clone https://github.com/United-Codes/uc_ai.git

ordsmcp-adb % git clone https://github.com/United-Codes/uc_ai.git

Cloning into 'uc_ai'...

remote: Enumerating objects: 2703, done.

remote: Counting objects: 100% (421/421), done.

remote: Compressing objects: 100% (288/288), done.

remote: Total 2703 (delta 177), reused 212 (delta 120), pack-reused 2282 (from 1)

Receiving objects: 100% (2703/2703), 6.26 MiB | 21.38 MiB/s, done.

Resolving deltas: 100% (1770/1770), done.

ordsmcp-adb % 


作成されたディレクトリuc_aiに移動し、スキーマWKSP_APEXDEVに接続します。

cd uc_ai
sql -cloudconfig ../Wallet_salesadb.zip wksp_apexdev@salesadb_low


ordsmcp-adb % cd uc_ai

uc_ai % ls

CLAUDE.md install_with_logger.sql src

docs LICENSE test

examples readme.md uninstall.sql

install_uc_ai.sql scripts

uc_ai % sql -cloudconfig ../Wallet_salesadb.zip wksp_apexdev@salesadb_low


SQLcl: 水 3月 04 14:23:51 2026のリリース25.4 Production


Copyright (c) 1982, 2026, Oracle.  All rights reserved.


パスワード (**********?) **************

接続先:

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

Version 19.30.0.1.0


SQL> 


UC_AIのインストールスクリプトinstall_with_logger.sqlを実行します。

@install_with_logger.sql

Logger関連のトリガーBIU_LOGGER_PREFSのコンパイルでエラーが発生しているようですが、今回の用途に影響はないのでそのままにしておきます。

SQL> @install_with_logger.sql

Installing UC AI with logger

_____________________________________________________________________________

User has all required privileges, installation will continue.

_____________________________________________________________________________



PL/SQLプロシージャが正常に完了しました。


tables/logger_logs.sql


PL/SQLプロシージャが正常に完了しました。



PL/SQLプロシージャが正常に完了しました。


tables/logger_prefs.sql


PL/SQLプロシージャが正常に完了しました。



Trigger BIU_LOGGER_PREFSがコンパイルされました



TRIGGER BIU_LOGGER_PREFSでエラーが発生しました:


LINE/COL ERROR

-------- ------------------------------------------------------

6/5      PLS-00049: バインド変数NEW.PREF_TYPEが正しくありません。

6/29     PLS-00049: バインド変数NEW.PREF_TYPEが正しくありません。

9/11     PLS-00049: バインド変数NEW.PREF_TYPEが正しくありません。

19/13    PLS-00049: バインド変数NEW.PREF_TYPEが正しくありません。

30/13    PLS-00049: バインド変数NEW.PREF_TYPEが正しくありません。

40/13    PLS-00049: バインド変数NEW.PREF_TYPEが正しくありません。


Trigger BIU_LOGGER_PREFSが変更されました。



PL/SQLプロシージャが正常に完了しました。



PL/SQLプロシージャが正常に完了しました。



[中略]


Package Body UC_AIがコンパイルされました


Running post-installation scripts...

Logger package detected. Setting USE_LOGGER flag to TRUE.

Successfully compiled uc_ai_logger package with USE_LOGGER flag.



PL/SQLプロシージャが正常に完了しました。


===================================================

UC AI installation complete!

Refer to the documentation for usage instructions: https://www.united-codes.com/products/uc-ai/docs/

===================================================

Installation Complete!

SQL> 


Installation Complete!を確認してSQLclを終了します。

ひとつ上のディレクトリへ戻ります。

SQL> exit

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

Version 19.30.0.1.0から切断されました

uc_ai % cd ..

ordsmcp-adb % 


GitHubよりスクリプトsetup-sample-mcp-server.sqlをダウンロードします。

リモートMCPサーバーの実装でAPEXセッションを使用します。そのため、ワークスペースに仮のAPEXアプリケーションが必要です。

先ほど作成したAPEXワークスペースapexdevにサインインし、APEXアプリケーションを作成します。

アプリケーション・ビルダーを開き、アプリケーションを新規作成します。


アプリケーションの名前は任意です。以下ではMCP Sessionとしました。IDに表示されている数値を覚えておきます。この数値をスクリプトsetup-sample-mcp-server.sqlAPEX_APP_IDに指定します。


アプリケーションが作成されれば、スクリプトを実行する準備は完了です。


スクリプトsetup-sample-mcp-server.sql内のAPEX_APP_IDには、先ほど作成したAPEXアプリケーションのIDを指定します。ORDS_PATH_PREFIXには、APEXワークスペース名を英子文字で指定します。

スキーマWKSP_APEXDEVでデータベースに接続し、setup-sample-mcp-server.sqlを実行します。

sql -cloudconfig Wallet_salesadb.zip wksp_apexdev@salesadb_low
@setup-sample-mcp-server.sql

エラーが発生しなければ、リモートMCPサーバーを実装したRESTサービスsampleserverが作成されています。

ordsmcp-adb % sql -cloudconfig Wallet_salesadb.zip wksp_apexdev@salesadb_low


SQLcl: 水 3月 04 14:34:10 2026のリリース25.4 Production


Copyright (c) 1982, 2026, Oracle.  All rights reserved.


パスワード (**********?) **************

接続先:

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

Version 19.30.0.1.0


SQL> @setup-sample-mcp-server.sql


Function GET_SCHEMAがコンパイルされました



Function RUN_SQLがコンパイルされました



PL/SQLプロシージャが正常に完了しました。



PL/SQLプロシージャが正常に完了しました。



PL/SQLプロシージャが正常に完了しました。



PL/SQLプロシージャが正常に完了しました。



Package MCP_HTTP_SERVER_PKGがコンパイルされました



Package Body MCP_HTTP_SERVER_PKGがコンパイルされました



Package MCP_SAMPLEがコンパイルされました



Package Body MCP_SAMPLEがコンパイルされました



PL/SQLプロシージャが正常に完了しました。



PL/SQLプロシージャが正常に完了しました。


Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

Version 19.30.0.1.0から切断されました

ynakakoshi@Ns-Macbook ordsmcp-adb % 


SQLワークショップRESTfulサービスより、モジュールsampleserverとそのテンプレートとしてmcpが作成されていることが確認できます。


この時点で、完全なURLをMCP InspectorのURLに指定して、MCPサーバーに実装されたツールget_schemaおよびrun_sqlを呼び出すことができます。

npx @modelcontextprotocol/inspector


リバース・プロキシの機能するため、上記の完全なURLのホスト部分をnginxのリバース・プロキシが動作しているホストに変更しても、MCPサーバーのツールを同じ様に呼び出せます。


今回の記事は以上になります。