ラベル 構築手順 の投稿を表示しています。 すべての投稿を表示
ラベル 構築手順 の投稿を表示しています。 すべての投稿を表示

2026年4月9日木曜日

環境構築関連資料まとめ

環境構築関連資料まとめ - 2026年4月9日時点

今までに記述した、Oracle Databaseを使用する開発環境の構築手順に関する記事をまとめてみました。

UC Local APEX DevによるOracle APEX環境の作成
コンテナ・イメージを利用したローカル開発環境の作成
ローカル環境はUC Local APEX Devの使用を推奨します。以下の記事ははあくまで参考です。

    ちょっとした設定。UC Local APEX Devにはスクリプトとして含まれているものも多い。

    VirtualBoxを利用したローカルでのOracle APEX環境の作成
    Oracle CloudでのCustomer Managed ORDSの構成
    Oracle AI Database 26ai Free Virtual Appliance
    Autonomous Database Free Container Image
    SQLclのMCPサーバーに関する設定
    ORDS JWT認証 - Oracle APEXアプリケーションとの連携
    Oracle Cloudでのコンテナを利用したOracle APEX環境の作成
    ORDS RESTサービスで実装するリモートMCPサーバー
    リモートMCPサーバーの保護
    OML4Py
    OML4R
    Property Graph
    Spatial
    ロード・バランサ
    アップグレード

    2026年3月4日水曜日

    MCPを話すOracle Databaseを作成する - Autonomous AI Database編

    更新:2026年4月2日 - Autonomous AI Database向けの構築手順を集約

    Oracle DatabaseにリモートMCPサーバーを実装し、Claude DesktopやOpenAI ChatGPTから呼び出せる環境を作成します。Oracle Cloudの無料枠で使用できるAlways FreeのAutonomous AI DatabaseおよびVM.Standard.E2.1.Microのコンピュート・インスタンスを使用します。

    本記事の作業を完了すると、認証なしでアクセスできるリモートMCPサーバーが作成されます。この環境を元に、Entra ID、Okta Integrator、Auth0またはOracle IAMを使ったユーザー認証を構成できます。


    Autonomous AI Databaseの作成


    リモートMCPサーバーは、Oracle REST Data ServicesのRESTモジュールとして作成されます。今回の作業では、サンプルとなるRESTモジュールとしてsampleserverを作成します。このRESTモジュールをホストするデータベースを作成します。

    今回はリモートMCPサーバーをホストするデータベースとして、Autonomous AI Lakehouseの19cを使用します。実装要件は、Oracle APEXおよびOracle REST Data Servicesがインストールされていることだけであり、19cと26ai、オンプレミスとクラウドのどれでもリモートMCPサーバーをホストするデータベースとして使用できます。

    Oracle CloudのコンソールよりAutonomous AI Databaseを開き、Autonomous AI Databaseの作成を開始します。


    表示名とデータベース名はSALESADBとします。ワークロード・タイプはレイクハウスを選択します。データベース構成のAlways Freeはオンにします。データベース・バージョンの選択は19cを選びます。

    リモートMCPサーバーを実装するデータベース・オブジェクトを作成するために、データベースにSQLclで接続します。そのため、ワークロード・タイプには、Oracle Netで接続できるレイクハウスまたはトランザクション処理のどちらかを選択します。データベース・バージョンは19cまたは26aiのどちらも選択できます。どちらを選択しても、以降の作業は同じです。

    以上の設定でデータベースを作成します。


    データベースが作成されたらツール構成より、Oracle APEXのパブリック・アクセスURLをコピーし、ブラウザから開きます。


    APEXへのサインイン・ページが開きます。

    管理者ユーザーADMINでサインインします。パスワードは、Autonomous AI Database作成時に指定しています。


    APEXの管理サービスが開きます。ワークスペースの作成を開始します。

    表示が英語の場合は、最下部にある言語セレクタより日本語に切り替えできます。


    ワークスペースの作成のダイアログが開きます。

    新規のスキーマを選択します。


    今回の作業ではワークスペース名をapexdevとしています。Autonomous Databaseの場合、APEXワークスペース名をapexdevとして作成すると、ワークスペース名に接頭辞WKSP_を付けたデータベース・ユーザー(スキーマ)WKSP_APEXDEVが作成されます。このスキーマがAPEXワークスペースapexdevのデフォルト・パーシング・スキーマになります。

    ワークスペース・ユーザー名もapexdevとしています。Autonomous Databaseの場合、このユーザーもデータベース・ユーザーとして作成されます。ワークスペース・パスワードは、このデータベース・ユーザーapexdevに設定されるパスワードになります。ただし、ここで作成されたデータベース・ユーザーapexdevは、APEXワークスペースへのサインインにのみ使用されます。

    詳細を開き、データベース・パスワードを設定します。このデータベース・パスワードは、APEXワークスペースapexdevのデフォルト・パーシング・スキーマとして作成されるデータベース・ユーザーWKSP_APEXDEVのパスワードになります。SQLclによる接続では、データベース・ユーザーWKSP_APEDEVと、ここで設定するデータベース・パスワードを指定して接続します。

    以上を設定してワークスペースを作成します。


    以上でAPEXワークスペースapexdevと、それに紐づくスキーマWKSP_APEXDEVが作成されました。

    APEXにアクセスしているURLのホスト部分はリバース・プロキシの設定時に参照するため、コピーしておきます。ホスト名は一般的に以下の形式になります。

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


    Oracle Cloudのコンソールに戻り、ローカル環境からSQLclで接続する際に使用するウォレットをダウンロードします。

    データベース接続を開きます。


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


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

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


    以上で、リモートMCPサーバーをホストするAutonomous AI Databaseの作成は完了です。


    リモートMCPサーバー・フレームワークのインストール



    データベースに作成したスキーマWKSP_APEXDEVを対象に、リモートMCPサーバーをホストするために必要なデータベース・オブジェクトを作成します。

    手元のPCでgitとSQLcl(コマンドとしてはsql)を準備しておきます。本記事では手元のPCにMacを使用していますが、gitとSQLcl(Javaアプリ)はWindowsやLinuxでも実行できます。

    作業ディレクトリとしてmcp-salesadbを作成し、先ほどダウンロードしたウォレットWallet_SALESADB.zipを配置します。

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

    sql -cloudconfig Wallet_SALESADB.zip admin@salesadb_low

    mcp-salesadb % sql -cloudconfig Wallet_SALESADB.zip admin@salesadb_low


    SQLcl: 木 4月 02 11:51:19 2026のリリース25.4 Production


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


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

    Last Successful login time: 木 4月  02 2026 11:51:50 +09:00


    接続先:

    Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

    Version 19.31.0.1.0


    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> 


    今回の実装ではログ出力にLoggerを使用します。Loggerを個別のスキーマにインストールする場合、スキーマにCREATE ANY CONTEXT権限が必要です。

    grant create any context to wksp_apexdev;

    SQL> grant create any context to wksp_apexdev;


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


    SQL> 


    この他にリモートMCPサーバー・フレームワークのインストールに必要な、以下の権限を与えます。

    grant execute on cs_session to wksp_apexdev;
    grant select on dba_xs_sessions to wksp_apexdev;
    grant select on v$session to wksp_apexdev;

    SQL> grant execute on cs_session to wksp_apexdev;


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


    SQL> grant select on dba_xs_sessions to wksp_apexdev;


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


    SQL> grant select on v$session 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.31.0.1.0から切断されました

    mcp-salesadb % 


    今回の実装では、ベルギーのUnited Codes社によって開発されているUC_AIを使用しています。

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

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

    mcp-salesadb % git clone  -b main https://github.com/United-Codes/uc_ai.git

    Cloning into 'uc_ai'...

    remote: Enumerating objects: 2923, done.

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

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

    remote: Total 2923 (delta 329), reused 339 (delta 185), pack-reused 2282 (from 1)

    Receiving objects: 100% (2923/2923), 6.37 MiB | 8.21 MiB/s, done.

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

    mcp-salesadb %


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

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


    mcp-salesadb % cd uc_ai

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


    SQLcl: 木 4月 02 12:04:52 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.31.0.1.0


    SQL> 


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

    @install_with_logger.sql

    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> 


    Logger関連のトリガーBIU_LOGGER_PREFSのコンパイルでエラーが発生しているようです。オブジェクトの最終的なステータスを確認します。

    select owner, object_type, object_name, status from all_objects where object_name = 'BIU_LOGGER_PREFS';

    SQL> select owner, object_type, object_name, status from all_objects where object_name = 'BIU_LOGGER_PREFS';


    OWNER           OBJECT_TYPE    OBJECT_NAME         STATUS    

    _______________ ______________ ___________________ _________ 

    WKSP_APEXDEV    TRIGGER        BIU_LOGGER_PREFS    VALID     


    SQL> 


    トリガーBIU_LOGGER_PREFSのステータスがVALIDになっているので、依存している参照が解決されて自動コンパイルがされた模様です。問題ありません。

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

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

    SQL> exit

    Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

    Version 19.31.0.1.0から切断されました

    uc_ai% cd ..

    mcp-salesadb % 


    リモートMCPサーバーの実装を含むリポジトリをクローンします。

    git clone https://github.com/ujnak/mcp-app.git

    mcp-salesadb % git clone https://github.com/ujnak/mcp-app.git

    Cloning into 'mcp-app'...

    remote: Enumerating objects: 515, done.

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

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

    remote: Total 515 (delta 63), reused 67 (delta 33), pack-reused 405 (from 1)

    Receiving objects: 100% (515/515), 213.40 KiB | 6.10 MiB/s, done.

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

    mcp-salesadb % 


    リモートMCPサーバーの実装をインストールします。

    cd mcp-app
    sql -cloudconfig ../Wallet_SALESADB.zip wksp_apexdev@salesadb_low

    mcp-salesadb % cd mcp-app

    mcp-app % sql -cloudconfig ../Wallet_SALESADB.zip wksp_apexdev@salesadb_low

    SQLcl: 木 4月 02 12:14:50 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.31.0.1.0


    SQL> 


    Autonomous AI Database向けのインストール・スクリプトを実行します。

    @install-all-adb

    SQL> @install-all-adb


    Sessionが変更されました。



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



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



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



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



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



    Table OJ_MCP_UI_RESOURCESは作成されました。



    Commentは作成されました。



    Commentは作成されました。



    Commentは作成されました。



    Commentは作成されました。



    Commentは作成されました。



    Commentは作成されました。



    Table OJ_MCP_UI_CSP_DOMAINSは作成されました。



    Commentは作成されました。



    Commentは作成されました。



    Index IX_OJ_MCP_UI_CSP_RESOURCE_IDは作成されました。



    Table OJ_MCP_UI_PERMISSIONSは作成されました。



    Commentは作成されました。



    Commentは作成されました。



    Commentは作成されました。



    Commentは作成されました。



    Commentは作成されました。



    Table OJ_MCP_TOOLS_EXTRASは作成されました。



    Commentは作成されました。



    Commentは作成されました。



    Commentは作成されました。



    Commentは作成されました。



    Commentは作成されました。



    Table OJ_MCP_TOOLS_EXTRASが変更されました。



    Table OJ_MCP_TOOLS_EXTRASが変更されました。



    Table OJ_MCP_TOOLS_ANNOTATIONSは作成されました。



    Commentは作成されました。



    Commentは作成されました。



    Commentは作成されました。



    Commentは作成されました。



    Commentは作成されました。



    Commentは作成されました。



    Commentは作成されました。



    Table OJ_MCP_TOOLS_ANNOTATIONSが変更されました。



    View OJ_MCP_UC_AI_TOOLSは作成されました。



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



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



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



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



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



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



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



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



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



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



    Procedure OJ_MCP_POST_HANDLERがコンパイルされました



    Procedure OJ_MCP_DELETE_HANDLERがコンパイルされました



    Procedure OJ_MCP_RAS_POST_HANDLERがコンパイルされました



    Procedure OJ_MCP_RAS_DELETE_HANDLERがコンパイルされました



    Procedure OJ_MCP_VPD_POST_HANDLERがコンパイルされました



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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


    Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

    Version 19.31.0.1.0から切断されました

    mcp-app % 


    install-all-adb.sqlの実行によりインストールされるサンプルのリモートMCPサーバーsampleserverにReal Application Securityの保護を適用するには、install-ras-for-sampleserver.sqlを追加で実行します。

    リモートMCPサーバー・フレームワークのインストールは以上で完了です。


    サンプルMCPサーバーsampleserverの作成



    先のセクションで実行したinstall-all-adb.sqlは、サンプルとなるリモートMCPサーバーsampleserverをインストールするスクリプトinstall-sampleserver.sqlも実行しています。

    そのため、スキーマWKSP_APEXDEVには、MCPサーバー向けのいくつかのツールが作成されています。また、リモートMCPサーバーのエンドポイントとなるORDSのRESTモジュールsampleserverも作成されています。

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

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

    Oracle APEXのエンドポイントに接続し、ワークスペースapexdevの管理者ユーザーapexdevでサインインします。


    ユーザーapexdevに紐づいているワークスペースAPEXDEVに接続します。


    アプリケーション・ビルダーを開き、インポートを実行します。


    クローンしたリポジトリmcp-app以下のapp/mcp-app-helper.sqlを選択し、次へ進みます。


    アプリケーションのインストールを実行します。


    アプリケーションがインストールされます。

    サンプル・リモートMCPサーバーsampleserverに紐付けられるように、インストールしたアプリケーションのアプリケーション別名をSAMPLESERVERに変更します。

    アプリケーションの編集を開きます。


    アプリケーション定義を開き、アプリケーションの別名をsampleserverに変更します。アプリケーションの名前もSample Serverに変更し、変更の適用を実行します。


    アプリケーションを実行し、リモートMCPサーバーの設定を確認します。


    実行したアプリケーションには、ワークスペースにサインインしたユーザーと同じapexdevでサインインします。

    ナビゲーション・メニューよりHandlersを開き、モジュールとしてsampleserverが作成済みであることを確認します。モジュールsampleserverがシャトル・アイテムの左にあります。この設定では、ユーザー認証による保護はされていません。


    ナビゲーション・メニューよりToolsを開きます。Tagsにsampleserverが含まれているツールは、MCPサーバーsampleserverのList Toolsのレスポンスに含まれます。


    リモートMCPサーバーのエンドポイントURLは、以下になります。

    https://ADBのエンドポイントURL/ords/ORDS別名/sampleserver/mcp

    MCP Inspectorを起動し、この時点での動作確認を行います。

    npx @modelcontextprotocol/inspector

    MCP Inspectorが起動したら、Transport TypeにStreamable HTTP、URLに上記のリモートMCPサーバーのエンドポイントURLを設定します。

    以上でConnectをクリックします。


    MCPサーバーsampleserverに接続されます。


    以上で、サンプルMCPサーバーsampleserverの作成は完了です。


    コンピュート・インスタンスの作成



    Autonomous AI DatabaseのOracle REST Data Services単体だと、リモートMCPサーバーに認証を組み込むことができません。Open ID Connectによる認証をサポートし、OpenAI ChatGPT DesktopやAnthropic Claude Desktopから接続できるようにするため、Autonomous AI Databaseの前段にOpenRestyによるリバース・プロキシを配置します。

    nginxでもリバース・プロキシは構成できますが、OpenRestyでは使用するディレクティブmore_set_headersやmore_clear_headersがあらかじめ組み込まれているため、構成が容易です。

    Oracle CloudでOpenRestyを実行するコンピュート・インスタンスを作成します。

    Oracle Cloudのコンソールよりインスタンスのページを開き、インスタンスの作成を開始します。


    基本情報を設定します。

    名前はproxy-salesadbとしています。

    イメージには、できるだけ軽い(と思われる)Canonical Ubuntu 24.04 Minimalを選択します。

    シェイプにAlways FreeのVM.Standard.E2.1.Microを選択します。実行するのはOpenRestyだけなので、検証用としては使用できるでしょう。

    次に進みます。


    セキュリティはデフォルトのままとします。次へ進みます。


    ネットワーキングを設定します。

    仮想クラウド・ネットワークはすでに作成されていることを前提とします。

    インターネットからHTTP(ポート80)およびHTTPS(ポート443)で接続できるように構成されている仮想クラウド・ネットワークおよびサブネットを選択します。


    SSHキーの追加では、キー・ペアを自動で生成を選択し、秘密キーのダウンロードを実行します。秘密キーはssh-key-YYYY-MM-DD.keyという形式のファイル名でダウンロードされます。

    秘密キーをダウンロード後、次へ進みます。


    ストレージはデフォルトのままとします。次へ進みます。


    以上の設定で、コンピュート・インスタンスを作成します。


    インスタンスが作成されたら、ネットワーキングよりインスタンスに割り当たったパブリックIPv4アドレスを確認します。


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

    以上で、リバース・プロキシの実行させるコンピュート・インスタンスの作成は完了です。


    OpenRestyによるリバース・プロキシの実装



    作成したコンピュート・インスタンスにユーザーubuntuで接続します。接続先ホストとして、DNSに登録したホスト名を使用します。

    ssh -i 秘密キー・ファイル ubuntu@ホスト名

    mcp-salesadb % ssh -i ssh-key-2026-04-02.key ubuntu@************

    The authenticity of host '********** (***.***.***.***)' can't be established.

    ED25519 key fingerprint is: SHA256:mQqH+aeUis/MSCksdArWr/krK22SlQd+mx+zEOsNsY8

    This key is not known by any other names.

    Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

    Warning: Permanently added '************' (ED25519) to the list of known hosts.

    Welcome to Ubuntu 24.04.4 LTS (GNU/Linux 6.17.0-1007-oracle x86_64)


     * Documentation:  https://help.ubuntu.com

     * Management:     https://landscape.canonical.com

     * Support:        https://ubuntu.com/pro


    This system has been minimized by removing packages and content that are

    not required on a system that users do not log into.


    To restore this content, you can run the 'unminimize' command.


    The programs included with the Ubuntu system are free software;

    the exact distribution terms for each program are described in the

    individual files in /usr/share/doc/*/copyright.


    Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by

    applicable law.


    To run a command as administrator (user "root"), use "sudo <command>".

    See "man sudo_root" for details.


    ubuntu@proxy-salesadb:~$ 


    接続した後にスクリプトprepare-ubuntu.shを実行して、OpenRestyによるリバース・プロキシ向けに環境を構成します。スクリプトでは主に、OpenRestyとcertbotのインストールと、リバース・プロキシの構成に使用するファイルのダウンロードを実施しています。これらのファイルは、リポジトリmcp-appのnginx以下に含まれています。

    Autonomous AI Databaseをバックエンドとしたリバース・プロキシ環境を構成するように、 スクリプト実行前に環境変数IS_ADBにtrueを設定します。

    curl -O https://raw.githubusercontent.com/ujnak/mcp-app/refs/heads/main/nginx/prepare-ubuntu.sh
    export IS_ADB=true
    sh prepare-ubuntu.sh


    ubuntu@proxy-salesadb:~$ curl -O https://raw.githubusercontent.com/ujnak/mcp-app/refs/heads/main/nginx/prepare-ubuntu.sh

      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

                                     Dload  Upload   Total   Spent    Left  Speed

    100  5757  100  5757    0     0  37374      0 --:--:-- --:--:-- --:--:-- 37627

    ubuntu@proxy-salesadb:~$ export IS_ADB=true

    ubuntu@proxy-salesadb:~$ sh prepare-ubuntu.sh 

    IS_ADB =  true

    INSTALL_APEX =  false

    55 packages can be upgraded. Run 'apt list --upgradable' to see them.

    The following NEW packages will be installed:

      hwdata libnuma1 libpython3.12t64 libslang2 libtraceevent1

      linux-headers-6.17.0-1009-oracle linux-image-6.17.0-1009-oracle

      linux-modules-6.17.0-1009-oracle linux-modules-extra-6.17.0-1009-oracle

      linux-oracle-6.17-headers-6.17.0-1009 linux-oracle-6.17-tools-6.17.0-1009

      linux-tools-6.17.0-1009-oracle linux-tools-common wireless-regdb

    The following upgrades have been deferred due to phasing:

      fwupd libfwupd2 libnetplan1 netplan-generator netplan.io python3-netplan

    The following packages will be upgraded:

      bsdutils coreutils curl eject fdisk intel-microcode libblkid1

      libcurl3t64-gnutls libcurl4t64 libfdisk1 libfreetype6 libmount1 libnftables1

      libnss3 libpam-systemd libpython3.12-minimal libpython3.12-stdlib

      libsmartcols1 libssh-4 libsystemd-shared libsystemd0 libudev1 libuuid1

      linux-base linux-headers-oracle linux-image-oracle linux-oracle mount

      nftables openssh-client openssh-server openssh-sftp-server pollinate

      python3-cryptography python3-jwt python3.12 python3.12-minimal snapd sudo

      systemd systemd-dev systemd-resolved systemd-sysv systemd-timesyncd tzdata

      ubuntu-drivers-common udev util-linux xxd

    49 upgraded, 14 newly installed, 0 to remove and 6 not upgraded.

    44 standard LTS security updates

    Need to get 278 MB of archives.

    After this operation, 333 MB of additional disk space will be used.

    debconf: delaying package configuration, since apt-utils is not installed

    (Reading database ... 48840 files and directories currently installed.)

    Preparing to unpack .../bsdutils_1%3a2.39.3-9ubuntu6.5_amd64.deb ...

    Unpacking bsdutils (1:2.39.3-9ubuntu6.5) over (1:2.39.3-9ubuntu6.4) ...

    Setting up bsdutils (1:2.39.3-9ubuntu6.5) ...

    (Reading database ... 48840 files and directories currently installed.)

    Preparing to unpack .../coreutils_9.4-3ubuntu6.2_amd64.deb ...

    Unpacking coreutils (9.4-3ubuntu6.2) over (9.4-3ubuntu6.1) ...

    Setting up coreutils (9.4-3ubuntu6.2) ...

    (Reading database ... 48840 files and directories currently installed.)

    Preparing to unpack .../util-linux_2.39.3-9ubuntu6.5_amd64.deb ...

    Unpacking util-linux (2.39.3-9ubuntu6.5) over (2.39.3-9ubuntu6.4) ...

    Setting up util-linux (2.39.3-9ubuntu6.5) ...

    fstrim.service is a disabled or a static unit not running, not starting it.

    (Reading database ... 48840 files and directories currently installed.)

    Preparing to unpack .../0-mount_2.39.3-9ubuntu6.5_amd64.deb ...

    Unpacking mount (2.39.3-9ubuntu6.5) over (2.39.3-9ubuntu6.4) ...

    Preparing to unpack .../1-python3.12_3.12.3-1ubuntu0.12_amd64.deb ...

    Unpacking python3.12 (3.12.3-1ubuntu0.12) over (3.12.3-1ubuntu0.11) ...

    Preparing to unpack .../2-libpython3.12-stdlib_3.12.3-1ubuntu0.12_amd64.deb ...

    Unpacking libpython3.12-stdlib:amd64 (3.12.3-1ubuntu0.12) over (3.12.3-1ubuntu0.11) ...

    Preparing to unpack .../3-python3.12-minimal_3.12.3-1ubuntu0.12_amd64.deb ...

    Unpacking python3.12-minimal (3.12.3-1ubuntu0.12) over (3.12.3-1ubuntu0.11) ...

    Preparing to unpack .../4-libpython3.12-minimal_3.12.3-1ubuntu0.12_amd64.deb ...

    Unpacking libpython3.12-minimal:amd64 (3.12.3-1ubuntu0.12) over (3.12.3-1ubuntu0.11) ...


    [中略]


    Setting up libgdbm6t64:amd64 (1.23-5.1build1) ...

    Setting up libgdbm-compat4t64:amd64 (1.23-5.1build1) ...

    Setting up openresty-zlib (1.3.2-1~noble1) ...

    Setting up perl-modules-5.38 (5.38.2-3.2ubuntu0.2) ...

    Setting up libperl5.38t64:amd64 (5.38.2-3.2ubuntu0.2) ...

    Setting up openresty-pcre2 (10.47-1~noble1) ...

    Setting up openresty-openssl3 (3.5.5-1~noble1) ...

    Setting up openresty (1.29.2.3-1~noble1) ...

    Created symlink /etc/systemd/system/multi-user.target.wants/openresty.service → /usr/lib/systemd/system/openresty.service.

    Setting up perl (5.38.2-3.2ubuntu0.2) ...

    Setting up openresty-resty (1.29.2.3-1~noble1) ...

    Setting up openresty-opm (1.29.2.3-1~noble1) ...

    Processing triggers for libc-bin (2.39-0ubuntu8.7) ...

      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

                                     Dload  Upload   Total   Spent    Left  Speed

    100  1606  100  1606    0     0   7831      0 --:--:-- --:--:-- --:--:--  7834

      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

                                     Dload  Upload   Total   Spent    Left  Speed

    100   774  100   774    0     0   6143      0 --:--:-- --:--:-- --:--:--  6192

      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

                                     Dload  Upload   Total   Spent    Left  Speed

    100    81  100    81    0     0    453      0 --:--:-- --:--:-- --:--:--   455

      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

                                     Dload  Upload   Total   Spent    Left  Speed

    100   202  100   202    0     0    831      0 --:--:-- --:--:-- --:--:--   834

      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

                                     Dload  Upload   Total   Spent    Left  Speed

    100  2518  100  2518    0     0  18229      0 --:--:-- --:--:-- --:--:-- 18246

      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

                                     Dload  Upload   Total   Spent    Left  Speed

    100  1994  100  1994    0     0  12611      0 --:--:-- --:--:-- --:--:-- 12620

    Rules updated

    Rules updated (v6)

    Rules updated

    Rules updated (v6)

    Rules updated

    Rules updated (v6)

    Firewall is active and enabled on system startup

    Firewall reloaded

    ubuntu@proxy-salesadb:~$ 


    システムの更新を反映するため、一旦インスタンスを再起動します。

    sudo shutdown -r now

    ubuntu@proxy-salesadb:~$ sudo shutdown -r now


    Broadcast message from root@proxy-salesadb on pts/1 (Thu 2026-04-02 05:05:21 UTC):


    The system will reboot now!


    ubuntu@proxy-salesadb:~$ Connection to **********.**.** closed by remote host.

    Connection to **********.**.** closed.

    client_loop: send disconnect: Broken pipe

    mcp-salesadb % 


    再度コンピュート・インスタンスにユーザーubuntuで接続し、rootユーザーに切り替えます。

    sudo -s
    cd ~

    ubuntu@proxy-salesadb:~$ sudo -s

    root@proxy-salesadb:/home/ubuntu# cd ~

    root@proxy-salesadb:~# 


    certbotを実行し、Let's Encryptより証明書を取得します。

    以下の実行例ではホスト名にords.example.comを指定していますが、作業の際には割り当てているホスト名に置き換えます。

    certbot certonly --standalone -d ホスト名

    root@proxy-salesadb:~# certbot certonly --standalone -d ords.example.com

    Saving debug log to /var/log/letsencrypt/letsencrypt.log

    Enter email address (used for urgent renewal and security notices)

     (Enter 'c' to cancel): メール・アドレス


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

    Please read the Terms of Service at

    https://letsencrypt.org/documents/LE-SA-v1.6-August-18-2025.pdf. You must agree

    in order to register with the ACME server. Do you agree?

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

    (Y)es/(N)o: Y


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

    Would you be willing, once your first certificate is successfully issued, to

    share your email address with the Electronic Frontier Foundation, a founding

    partner of the Let's Encrypt project and the non-profit organization that

    develops Certbot? We'd like to send you email about our work encrypting the web,

    EFF news, campaigns, and ways to support digital freedom.

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

    (Y)es/(N)o: N

    Account registered.

    Requesting a certificate for ords.example.com


    Successfully received certificate.

    Certificate is saved at: /etc/letsencrypt/live/ords.example.com/fullchain.pem

    Key is saved at:         /etc/letsencrypt/live/ords.example.com/privkey.pem

    This certificate expires on 2026-07-01.

    These files will be updated when the certificate renews.

    Certbot has set up a scheduled task to automatically renew this certificate in the background.


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

    If you like Certbot, please consider supporting our work by:

     * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate

     * Donating to EFF:                    https://eff.org/donate-le

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

    root@proxy-salesadb:~# 


    OpenRestyを使ってリバース・プロキシを構成するためのファイルは、prepare-ubuntu.shの実行時にダウンロードされています。

    /etc/nginx/conf.d/01-server.confのホスト名をリバース・プロキシが動作しているホスト名に変更します。

    sed -i 's/ords.example.com/ホスト名/g' /etc/nginx/conf.d/01-server.conf

    root@proxy-salesadb:~# sed -i 's/ords.example.com/ホスト名/g' /etc/nginx/conf.d/01-server.conf 

    root@proxy-salesadb:~# 


    /etc/nginx/default.d/30-mcp-adb.confの$ords_upstream_hostにバックエンドとなるAutonomous AI Databaseのホスト名を設定します。30-mcp-adb.confについては、以下の1行を加えます。Autonomous AI DatabaseのAPEXやORDSのエンドポイントURLに含まれているホスト名です。

    set $ords_upstream_host "<your-adb-fqdn>.adb.<region>.oraclecloudapps.com";

    OpenRestyの自動起動を有効にしたのち、起動します。

    systemctl enable openresty
    systemctl start openresty


    root@proxy-salesadb:~# systemctl enable openresty

    Synchronizing state of openresty.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.

    Executing: /usr/lib/systemd/systemd-sysv-install enable openresty

    root@proxy-salesadb:~# systemctl start openresty

    root@proxy-salesadb:~# 


    以上でOpenRestyによるリバース・プロキシの構成は完了です。


    リモートMCPサーバーの動作確認



    リバース・プロキシ経由でのリモートMCPサーバーsampleserverの動作確認を行います。

    MCP Inspectorを実行します。

    npx @modelcontextprotocol/inspector

    リモートMCPサーバーのエンドポイントURLは、以下になります。

    https://リバース・プロキシのホスト名/ords/ORDS別名/sampleserver/mcp

    MCP Inspectorが起動したら、Transport TypeにStreamable HTTP、URLに上記のリモートMCPサーバーのエンドポイントURLを設定します。

    以上でConnectをクリックします。


    リモートMCPサーバーsampleserverに接続されます。


    Toolsタブを開き、List Toolsを実行します。

    作成済みのツールとして、get_current_user、run_sql、get_schema、get_authenticated_identityが一覧されます。


    Autonomous Databaseにはデモ用のスキーマとして、SH(Sales History)が含まれています。

    Toolsからget_schemaを選択しschemaにSHを入力した後、Run Toolを実行します。

    スキーマSHに含まれる表および列のデータがTool Resultとして返されます。


    Toolsよりrun_sqlを選択し、sqlとして以下を記述します。

    select * from sh.customers fetch first 10 rows only

    Run Toolを実行します。表SH.CUSTOMERSから10行だけ取得します。


    サンプルMCPサーバーsampleserverには簡単なMCPアプリも含まれています。

    Appsタブを開きMCP Appsのget_current_userを選択します。

    表示されたMCPアプリのボタンGet Current Userをクリックします。


    USERNAMEとしてデフォルト・パーシング・スキーマであるWKSP_APEXDEVが表示されます。