2026年7月9日木曜日

ORDS 26.2のMCPサーバーを構成する - Oracle IAM編

先日の記事「ORDS 26.2のMCPサーバーを構成する - Auth0編」では、MCPサーバーの認証/認可にAuth0を使用しました。今回の記事では、IdMとしてOracle IAMを使用します。

ORDS MCPサーバーから接続するデータベースおよびORDSのコンテナの準備は、記事「ORDS 26.2のMCPサーバーを構成する - Auth0編」と同じです。ORDS MCPサーバーが動作するコンテナを実行しAuth0の構成を始める直前まで、Auth0の記事にそって作業を進めます。

カスタム・クレームroles2の追加


今回の作業では、ロールによってORDS MCPサーバーのアクセスを制御します。そのため、Oracle IAMにカスタム・クレームとしてroles2を作成します。

Oracle IAMにカスタム・クレームを追加する手順は、以前に記事「Oracle IAMの統合アプリにカスタム・クレームを追加しRole based JWT profileによる保護を確認する」で紹介しています。

本作業ではオーディエンスとしてhttps://localhost:8585/mcp、スコープとしてurn:oracle:dbtools:ords:mcpserver:allが設定されます。これを固定の条件として、ユーザーが所属しているグループの配列を値として持つ、カスタム・クレームroles2を作成するスクリプトを書きました。

Oracle IAMに、このスクリプトの呼び出しに使用する統合アプリケーションを作成し、そのアプリケーションのドメインURLクライアントIDおよびクライアント・シークレットをそれぞれ、DOMAIN_URLUSERNAMEおよびPASSWORDに設定します。

以下より、統合アプリケーションとしてManage Custom Claimを作成します。作成するドメインはルート・コンパートメントにあるDefaultを想定しています。

Oracle Cloudのコンソールにサインインします。

アイデンティティとセキュリティドメインを開き、統合アプリケーションの作成先であるドメインDefaultを開きます。

このページに記載されているドメインURLを、スクリプト中のDOMAIN_URLに設定します。そのため、値をコピーして保存しておきます。

統合アプリケーションのタブを開きます。


アプリケーションの追加をクリックします。


機密アプリケーションを選択し、ワークフローの起動をクリックします。


名前Manage Custom Claimとします。名前だけを設定し、送信をクリックします。


アプリケーションが作成されたらOAuth構成タブを開き、OAuth構成の編集をクリックします。


クライアント構成の「このアプリケーションをクライアントとして今すぐ構成します」を選択します。選択すると、クライアントとしての設定項目が表示されます。

認可許可される権限付与タイプに含まれるクライアント資格証明チェックします。OAuth2.0のClient Credentials Flowによるアクセス・トークンの発行ができます。


一番下までスクロールします。

アプリケーション・ロールの追加オンにし、アプリケーション・ロールの追加をクリックします。


アプリケーション・ロールIdentity Domain Administratorチェックします。

このアプリケーション・ロールを割り当てることにより、統合アプリケーションManage Custom Claimによってカスタム・クレームを追加できるようになります。

追加をクリックします。


以上でOAuth構成の編集は完了です。送信をクリックします。


OAuth構成のタブに戻ります。

一般情報クライアントIDはスクリプト中のUSERNAMEに設定します。シークレットの表示にある値はPASSWORDに設定します。

それぞれの値をコピーして保存します。


右上のアクション・メニューを開き、アクティブ化を実行します。


前掲のスクリプトmanage-custom-claim.shをダウンロードし、DOMAIN_URL、USERNAME、PASSWORDの値を更新します。

更新したスクリプトを実行し、カスタム・クレームroles2を作成します。

sh manage-custom-claim.sh

ords-mcp2 % sh manage-custom-claim.sh

[省略]


"roles2","https://idcs-***************************.identity.oraclecloud.com:443/admin/v1/CustomClaims/c17f3193372444a2a9d79ad42e530fce"

ords-mcp2 % 


作成されたカスタム・クレームを一覧します。一覧にroles2が含まれていることを確認します。

sh manage-custom-claim.sh list

ords-mcp2 % sh manage-custom-claim.sh list

"roles2","https://idcs-***************************.identity.oraclecloud.com:443/admin/v1/CustomClaims/c17f3193372444a2a9d79ad42e530fce"

ords-mcp2 % 


カスタム・クレームのdisplayNameとmeta.locationが一覧されます。mata.locationに対してHTTPのDELETEを呼び出すことにより、作成したカスタム・クレームを削除できます。


Oracle IAMのアプリケーション構成



作業の多くは記事「Oracle IAMのOIDC認証にてAPEXアプリとそれから呼び出すORDSのREST APIを認証する」と重なりますが、省略せずに紹介します。

Defaultドメインのユーザー管理を開き、ORDSでロールとして扱うグループとしてORDS_MCP_HRを作成します。

グループの作成をクリックします。


作成するグループの名前ORDS_MCP_HR説明は「Role for HR Schema」と記述します。

グループに含めるユーザーチェックし、作成を実行します。


グループORDS_MCP_HRが作成されます。


Defaultドメインの統合アプリケーションを開き、 アプリケーションの追加をクリックします。


機密アプリケーションを選択し、ワークフローの起動をクリックします。


追加する機密アプリケーションの名前ORDS MCP2とします。説明に「ORDS MCP Server」と記述します。

画面下部にある、認証と認可権限付与を認可として実施オンにします。このアプリケーションに割り当てられたユーザーおよびグループのみがサインインできるようになります。

以上で送信をクリックします。


アプリケーションORDS MCP2が作成されます。

OAuth構成タブを開き、OAuth構成の編集をクリックします。


リソース・サーバー構成の「このアプリケーションをリソース・サーバーとして今すぐ構成します」を選択します。選択すると、リソース・サーバーとしての設定項目が表示されます。

トークン・リフレッシュの許可オンにします。

プライマリ・オーディエンスとしてORDS MCPサーバーのエンドポイントURLであるhttp://localhost:8585/mcpを設定します。この値は、ORDSのグローバル・プロパティmcp.security.jwt.profile.audienceに設定します。

mcp.security.jwt.profile.audience = http://localhost:8585/mcp

スコープの追加オンにし、スコープの追加をクリックします。


スコープとして、ORDS MCPサーバーのデフォルトのスコープurn:oracle:dbtools:ords:mcpserver:allを設定します。

表示名Access to ORDS MCP Server説明Access to ORDS MCP Serverと記述し、ユーザー承認が必要オンにします。

以上でスコープを追加します。


スコープが追加されました。以上でリソース・サーバーは構成できました。

追加したスコープをクライアント構成で使用できるようにするため、ここで一旦送信します。


再度、アプリケーションORDS MCP2OAuth構成の編集を開きます。

クライアント構成の「このアプリケーションをクライアントとして今すぐ構成します」を選択します。選択すると、クライアントとしての設定項目が表示されます。

認可許可される権限付与タイプに含まれるリフレッシュ・トークン認可コードチェックします。

接続確認にはMCP Inspectorを使用する予定です。MCP InspectorのリダイレクトURLはhttp://で始まるため、HTTPS以外のURLを許可オンにします。

その上で、リダイレクトURLとして以下を設定します。

http://localhost:6274/oauth/callback
http://localhost:6274/oauth/callback/debug


下の方にスクロールします。

リソースの追加オンにし、スコープの追加をクリックします。


ORDS MCP2を開き、範囲の選択(スコープの選択のこと)よりhttp://localhost:8585/mcpurn:oracle:dbtools:ords:mcpserver:all(オーディエンスであるhttp://localhost:8585/mcpとスコープurn:oracle:dbtools:ords:mcpserver:allを繋げた値)をチェックします。

選択したスコープを追加します。


以上で、クライアント構成は構成できました。送信します。


アプリケーションORDS MCP2をアクティブにします。

アクション・メニューのアクティブ化を実行します。


アプリケーションORDS MCP2が利用可能になりました。

このアプリケーションにグループを割り当てます。グループ・タブを開きます。


グループの割当てをクリックします。


グループORDS_MCP_HRをチェックし、アプリケーションに割当てます。


アプリケーションORDS MCP2にグループORDS_MCP_HRが割り当てられました。


アプリケーションORDS MCP2の作成は、以上で完了です。

ORDS MCPサーバーを構成する際に必要な値を確認します。

最初にグローバル・プロパティmcp.security.jwt.profile.authorization.server.urlの値を確認します。

DefaultドメインのドメインURLが、グローバル・プロパティmcp.security.jwt.profile.authorization.server.urlの値になります。


値をコピーして保存しておきます。

mcp.security.jwt.profile.authorization.server.url = https://idcs-xxxxxxxxxxxxxxxxxxxxxxxxx.identity.oraclecloud.com:443

グローバル・プロパティmcp.security.jwt.profile.jwk.urlの値を確認します。

ドメインURLに/.well-known/oauth-authorization-serverを繋げて、認可サーバーのメタデータを取得します。

https://idcs-xxxxxxxxxxxxxxxxxxxxxxxxx.identity.oraclecloud.com:443/.well-known/oauth-authorization-server


取得したメタデータに含まれる属性jwks_uriの値が、グローバル・プロパティmcp.security.jwt.profile.jwk.urlの値になります。通常はドメインURLに/admin/v1/SigningCert/jwkが追加されたURLになります。

mcp.security.jwt.profile.jwk.url = https://idcs-xxxxxxxxxxxxxxxxxxxxxxxxx.identity.oraclecloud.com:443/admin/v1/SigningCert/jwk

属性issuerの値が、グローバル・プロパティmcp.security.jwt.profile.issuerの値になります。デフォルトではhttps://identity.oraclecloud.com/です。

mcp.security.jwt.profile.issuer = https://identity.oraclecloud.com/

以上で、ORDS MCPサーバーの構成に必要なデータが集まりました。

Oracle IAMでは、属性jwks_uriのURLにアクセスする際に、認証を要求されることがあります。認証の解除は、ドメインの設定から行います。


クライアント・アクセスの構成無効のときは、ドメイン設定の編集を開いて有効に切り替えます。


クライアント・アクセスの構成オンに切り替え、変更の保存を実行します。


イシュワーのデフォルトはhttps://identity.oraclecloud.com/ですが、セキュリティ・タブより変更できます。

下にスクロールし、Oauth設定 - デフォルトのトークン発行ポリシーに移動します。

現時点では発行者は未設定です。発行者を変更する場合は、Oauth設定の編集を開きます。


以上でOracle IAMの設定は完了です。


ORDS MCPサーバーの構成



ORDSの構成に移ります。

コンテナに接続して、ORDSの構成コマンドを実行します。

docker exec -it ords-mcp bash

ords-mcp2 % docker exec -it ords-mcp bash

[oracle@aeba9d22c0f9 ~]$ 


ORDSのグローバル・プロパティを設定します。https://idcs-XXXXXXXXXXXXXXXXX.identity.oraclecloud.com:443の部分は、ドメインURLに置き換えます。

ロールによるアクセス制御を行うため、mcp.security.jwt.profile.role.claim.name/roles2を設定しています。
ords --config /etc/ords/config config set --global feature.mcp true
ords --config /etc/ords/config config set --global mcp.security.jwt.profile.issuer https://identity.oraclecloud.com/
ords --config /etc/ords/config config set --global mcp.security.jwt.profile.audience http://localhost:8585/mcp
ords --config /etc/ords/config config set --global mcp.security.jwt.profile.jwk.url https://idcs-XXXXXXXXXXXXXXXXX.identity.oraclecloud.com:443/admin/v1/SigningCert/jwk
ords --config /etc/ords/config config set --global mcp.security.jwt.profile.authorization.server.url https://idcs-XXXXXXXXXXXXXXXXX.identity.oraclecloud.com:443
ords --config /etc/ords/config config set --global mcp.security.jwt.profile.role.claim.name /roles2
続いて、スキーマHRに接続するコネクション・プールとしてmcp-hrを構成します。ORDS MCPサーバーはコンテナ内で実行されているため、コンテナ外にあるデータベースの接続先としてhost.docker.internalを設定しています。

ロールによるアクセス制御を行うため、mcp.roleORDS_MCP_HRを設定しています。
ords --config /etc/ords/config config --db-pool mcp-hr set db.connectionType basic
ords --config /etc/ords/config config --db-pool mcp-hr set db.hostname host.docker.internal
ords --config /etc/ords/config config --db-pool mcp-hr set db.port 1521
ords --config /etc/ords/config config --db-pool mcp-hr set db.servicename freepdb1
ords --config /etc/ords/config config --db-pool mcp-hr set db.username HR
ords --config /etc/ords/config config --db-pool mcp-hr set db.description "Sample Schema Human Resources"
ords --config /etc/ords/config config --db-pool mcp-hr set mcp.role ORDS_MCP_HR
コネクション・プールmcp-hrがデータベースに接続する際に使用するパスワードを設定します。スキーマHRに設定したパスワードです。

ords --config /etc/ords/config config --db-pool mcp-hr secret db.password

[oracle@aeba9d22c0f9 ~]$ ords --config /etc/ords/config config --db-pool mcp-hr secret db.password


ORDS: Release 26.2 Production on Wed Jul 08 06:44:35 2026


Copyright (c) 2010, 2026, Oracle.


Configuration:

  /etc/ords/config


Enter the database password: ********

Confirm password: ********

[oracle@aeba9d22c0f9 ~]$ 


コンテナから抜けて再起動します。

exit
docker restart ords-mcp


[oracle@aeba9d22c0f9 ~]$ exit

exit

ords-mcp2 % docker restart ords-mcp

ords-mcp

ords-mcp2 % 




MCP Inspectorによる接続確認



MCP Inspectorを起動し、MCPサーバーに接続します。

npx @modelcontextprotocol/inspector

ORDS MCPサーバーに接続するにあたって、以下を設定します。

Transport Type: Streamable HTTP
URL; http://localhost:8585/mcp
Connection Type: Via Proxy
OAuth2 2.0 Flow Client ID: アプリケーションORDS MCP2のクライアントID
OAuth2 2.0 Flow Client Secret: アプリケーションORDS MCP2のクライアント・シークレット
Scope: http://localhost:8585/mcpurn:oracle:dbtools:ords:mcpserver:all

OAuth2 2.0 Flow Client IDおよびClient Secretに設定する値は、アプリケーションORDS MCP2OAuth構成一般情報から取得します。


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


Oracle IAMへサインインすると、アプリケーションへのアクセス許可を求められます。

許可をクリックします。


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

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

呼び出し可能なツールとしてdatabase_listschema_informationsql_runがリストされます。


以降はORDS MCPサーバーの使い方になります。

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