2026年4月17日金曜日

OpenAI CodexからリモートMCPサーバー経由でOracle Databaseに問い合わせる

以下の手順で作成したリモートMCPサーバーsampleserverにOpenAI Codexから接続し、プラグインを作成してみます。Microsoft Entra IDによるユーザー認証を行なうように構成します。
最初にCodexにMCPサーバーを作成します。~/.codex/config.tomlを直接編集します。アプリから設定する場合は、設定MCPサーバーから作成します。


config.tomlに以下の記述を追加します。MCPサーバーはconnector_for_oracle_datababaseと命名します。
[mcp_servers.connector_for_oracle_database]
url = "https://OpenRestyが動作しているホスト名/ords/apexdev/sampleserver/mcp"
bearer_token_env_var = "ORACLE_MCP_TOKEN"
CodexではMCPサーバーを以下のように設定すると、OAuthによるユーザー認証ができるようです。(mcp_oauth_callback_urlをEntra IDのアプリにリダイレクトURIとして設定する必要あり)
[mcp_servers.connector_for_oracle_database]
url = "https://OpenRestyが動作しているホスト名/ords/apexdev/sampleserver/mcp"

# --- OAuth callback ---
mcp_oauth_callback_port = 8787
mcp_oauth_callback_url = "http://localhost:8787/callback"
MCPサーバーconnector_for_oracle_databaseをユーザー認証するため、codexコマンドを実行します。

codex mcp login connector_for_oracle_database

~ % codex mcp login connector_for_oracle_database

Error: Registration failed: Dynamic registration failed: Registration failed: Dynamic client registration not supported

~ % 


config.toml内でOAuthのクライアントIDを設定する方法がドキュメントから見つからないため、エラー・メッセージにあるようにDynamic Client Registrationが必須と思われます。Microsoft Entra IDはDCRに対応していないため、CodexとEntra IDの組み合わせでOAuth2によるユーザー認証はできないようです。

諦めてbearer_token_env_varを使うように設定します。環境変数ORACLE_MCP_TOKENにEntra IDが発行したアクセス・トークンを設定します。

az loginコマンドを実行し、Entra IDにサインインします。

az login --tenant "テナントID" --scope "アプリORDS MCPで公開しているスコープ"

ブラウザが立ち上がり、Entra IDに登録されているユーザーによるユーザー認証が求められます。


ブラウザでのユーザー認証が完了すると、Select a subscription and tenant (Type a number or Enter for no changes):と聞かれます。そのままEnterを入力し、az loginコマンドを完了します。

~ % az login --tenant "********-****-****-****-************" --scope "api://********-****-****-****-************/mcp:connect"

A web browser has been opened at https://login.microsoftonline.com/********-****-****-****-************/oauth2/v2.0/authorize. Please continue the login in the web browser. If no web browser is available or if the web browser fails to open, use device code flow with `az login --use-device-code`.


Retrieving subscriptions for the selection...


[Tenant and subscription selection]


No     Subscription name     Subscription ID                       Tenant

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

[1] *  Azure subscription 1  ********-****-****-****-************  ********-****-****-****-************


The default is marked with an *; the default tenant is '********-****-****-****-************' and subscription is 'Azure subscription 1' (********-****-****-****-************).


Select a subscription and tenant (Type a number or Enter for no changes): 


Tenant: ********-****-****-****-************

Subscription: Azure subscription 1 (********-****-****-****-************)


[Announcements]

With the new Azure CLI login experience, you can select the subscription you want to use more easily. Learn more about it and its configuration at https://go.microsoft.com/fwlink/?linkid=2271236


If you encounter any problem, please open an issue at https://aka.ms/azclibug


[Warning] The login output has been updated. Please be aware that it no longer displays the full list of available subscriptions by default.


ynakakoshi@Ns-Macbook ~ % 


Entra IDへのサインインが完了したので、アクセス・トークンを取得し環境変数ORACLE_MCP_TOKENに設定します。

export ORACLE_MCP_TOKEN=$(az account get-access-token \
--scope "
アプリORDS MCPで公開しているスコープ" \
--query accessToken -o tsv)

~ % export ORACLE_MCP_TOKEN=$(az account get-access-token \

--scope "api://*********-****-****-****-********/mcp:connect" \

--query accessToken -o tsv)

~ % echo $ORACLE_MCP_TOKEN

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlUxc1g4W

[中略]

7jbOqbhJSQ1Dk-CoHPF_yJPJGO2OPJEUjhIBehPC-abRHHVPXeiRC

ZuDTRAvZzVrSAW97jSQ0PFmMQ

~ % 


以上でアクセス・トークンが環境変数ORACLE_MCP_TOKENに設定されました。アクセス・トークンの有効期間は通常1時間程度なので、az account get-access-tokenコマンドは定期的に発行する必要があります。

コマンドラインから(デスクトップ・アプリの)Codexを起動します。以下はmacOSでの作業です。

open -a Codex

Codexが起動します。

作成されたMCPサーバーを確認します。

サイド・メニューよりプラグインを選択し、管理するを開きます。


MCPを選択するとConnector For Oracle Databaseが作成されていることが確認できます。


新しいプロジェクトを追加して、作業を進めます。


販売分析というプロジェクトを作成し、作業を進めます。


Connector for Oracle Databaseに繋げられるかを確認します。

 「Connector for Oracle Databaseに接続して、接続ユーザーを確認して。」

ツールget_current_userが呼び出され、アクセス・トークンのsubの値が表示されます。MCPサーバーに接続できていることが確認できます。


Connector For Oracle Databaseを使用したプラグインを作成します。

サイド・メニューよりプラグインを開き、作成からプラグインを作成を実行します。


Plugin Createrにたいして、以下の文言を与えて実行します。

「SHスキーマに保存されている販売履歴より、典型的な分析ができるプラグインを作成してください。」


CodexがMCPサーバーのツールを呼び出し、プラグインを作成していきます。


たまにツール実行の許可やファイル操作の許可を求められます。


プラグインの作成が完了したら、プラグインをインストールします。

「作成されたプラグインをインストールして」


サイド・メニューよりプラグインを開きます。


Local Analytics Plugins(またはLocal Plugins)を選択し、プラグインSH Sales Analyticsをインストールします。


プラグインSH Sales Analystをインストールします。


プラグインがインストールされます。

プロジェクトのチャット画面に移り、インストールされたプラグインを呼び出します。


プラグインを使って、分析してもらいます。

「SHスキーマの月次売上推移と成長率を分析して」


色々とツールを呼び出して、最終的な回答まで進みます。


Microsoft Entra IDとの連携は残念な感じですが、プラグインやスキル次第で、Codexをコーディング以外の作業で使用することもできそうです。