前回の記事では、 Database Tools MCP Serverを作成するにあたって、MCPサーバーおよび接続ともに実行時アイデンティティをリソース・プリンシパルとした上で、認証タイプにパスワードを選択しました。
本記事では、MCPサーバーおよび接続の実行時アイデンティティとして認証済プリンシパル、接続タイプにトークンを選択して、MCPサーバーを作成します。
ドキュメントPolicies for MCP Serversに記載されているオプション1の構成に当たります。
コンパートメントdbtools-mcp、ドメインdbtools-mcp、Autonomous AI Databaseなど、前回の記事で作成した設定はそのまま流用します。そのため、前回の記事にそった作業を実施した後から作業を始めます。今回、作業を進めるにあたって追加で参照したドキュメントは以下です。
Create a Database Tools Connection Using Token-Based Authentication
https://docs.oracle.com/en-us/iaas/database-tools/doc/create-database-tools-connection-using-token-based-authentication.html
接続の作成から作業を始めます。
接続の作成から作業を始めます。
外部認証の構成
前回の作業を実施していると、管理者ユーザーADMINで接続する接続admin@dbtoolsmcpが作成されています。この接続を使用して、外部認証を構成します。
開発者サービスの接続を開き、作成済みの接続admin@dbtoolsmcpを開きます。
構成された外部認証を確認するため、SQLワークシートを開きます。
SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME='identity_provider_type'
Autonomous AI Databaseであれば、外部認証はDBMS_CLOUD_ADMIN.ENABLE_EXTERNAL_AUTHENTICATIONを呼び出すことで設定できます。
BEGIN
DBMS_CLOUD_ADMIN.ENABLE_EXTERNAL_AUTHENTICATION(
type => 'OCI_IAM',
force => TRUE );
END;
/
公式なドキュメントではOracle Cloudのコンソールから構成する手順が書かれています。そのため、最初はコンソールから実施することをお勧めします。また、外部認証の設定手順は、Autonomous AI Databaseとそれ以外では異なっています。作業後はSELECT文を実行して、identity_provider_typeがOCI_IAMになっていることを確認した後、後続の作業を行うことをお勧めします。
コンパートメントdbtools-mcpのOCIDの確認
コンパートメントdbtools-mcpのOCIDをコピーします。ここでコピーしたOCIDは、以下の設定で使用します。
- スコープにコンパートメントのOCIDを含め、接続できるデータベースを限定します。
- ポリシーにコンパートメントのOCIDを含め、トークンを扱えるMCPサーバーを限定します。
アイデンティティとセキュリティのコンパートメントを開き、コンパートメントdbtools-mcpのOCIDをコピーします。
後で使用できるように、コピーしたOCIDをどこかに転記しておきます。
認証タイプがトークンの接続の作成
開発者サービスの接続を開きます。これからMCPサーバーが使用するデータベースへの接続を作成します。
接続の作成先のコンパートメントはdbtools-mcpです。
接続の作成をクリックします。
接続の名前はdbtoolsmcp-tokenとします。接続先のデータベースとして、すでに作成しているOracle Autonomous AI Databaseのdbtoolsmcpを選択します。
説明が前後しますが、トークン・ベースの認証を使用するように設定すると、ユーザー名は設定項目から除外されます。そのため、以下のスクリーンショットにはユーザー名の設定が含まれていません。
SSOウォレット・コンテント・シークレットは前回の作業で作成しているdbtoolsmcp-walletを流用します。
接続プロパティの追加をクリックし、名前をiam.db.token.scopeとして以下の値を設定します。urn:oracle:db::id::に続けて、コンパートメントdbtools-mcpのOCIDを追記します。
urn:oracle:db::id::[コンパートメントOCID]
今回の作業ではSQLワークシートは使用しませんが、一応、ランタイム・サポートの有効化はオンにしておきます。
実行時アイデンティティは認証済プリンシパルを選択します。
認証のトークン・ベースの認証の使用をオンにします。プロキシ認証タイプはなしを選択し、とりあえずプロキシ接続はなしとします。
プロキシ接続の設定については、以下のドキュメントで説明されています。
Use Proxy Authentication with IAM Authentication
一般にIAMで認証したグローバル・ユーザーに権限を与えて、データベースを操作させるのは推奨できません。実際の実装では、プロキシ接続の構成を推奨します。
以上の設定で接続を作成します。
接続dbtoolsmcp-tokenが作成されます。
接続の検証を実施するにあたって、グローバル・ユーザーを作成する必要があります。
Oracle Cloudのコンソールより、現在サインインしているユーザーを確認します。
IAM_PRINCIPAL_NAMEには現在コンソールにサインインしているユーザー名を指定します。
create user token_test identified globally as 'IAM_PRINCIPAL_NAME=<コンソールのユーザー名>';
grant create session to token_test;
検証用のグローバル・ユーザーが作成できたところで接続dbtoolsmcp-tokenの画面に戻り、アクションから検証を実行します。確認画面が表示されるので、検証をクリックします。
検証が完了し、セッション・ユーザーが先ほど作成したTOKEN_TESTであること、および、認証されたアイデンティティがコンソールにサインインしているユーザーであることを確認します。
以上で実行時アイデンティティが認証時プリンシパル、認証タイプがトークンの接続dbtoolsmcp-tokenが作成できました。
MCPサーバーの作成
作成した接続dbtoolsmcp-tokenを使ったMCPサーバーをmcpserver-tokenとして作成します。
開発者サービスのモデル・コンテキスト・プロトコル・サーバーを開き、MCPサーバーの作成をクリックします。
MCPサーバーの名前はmcpserver-tokenとします。コンパートメントはdbtools-mcp、ドメインはdbtools-mcp、接続には先ほど作成したdbtoolsmcp-tokenを選択します。
選択した接続dbtoolsmcp-tokenの実行時アイデンティティが認証時プリンシパル、認証タイプがトークンであるため、MCPサーバーの実行時アイデンティティは認証済プリンシパルに強制されます。また、MCPサーバーの実行時アイデンティティが認証済プリンシパルの場合、非同期実行はサポートされません。そのため、オブジェクト・ストレージ・バケットの指定はありません。
以上でMCPサーバーを作成します。
アプリケーション・ロールの構成
MCPサーバーmcpserver-rpの作成時にも実施しましたが、MCPサーバーごとに同じ作業を実施します。
ロール・タブを開き、ロールの割当てをクリックします。
アプリケーション・ロールMCP_Administrator、MCP_Operator、MCP_Userそれぞれに対して、3点メニューを開きグループの管理を実行します。
グループの割当てをクリックし、それぞれのアプリケーション・ロールに対応したグループを選択します。
グループを割り当てた後、ドロワーを閉じます。
アプリケーション・ロールMCP_Administrator、MCP_Operator、MCP_Userについて、グループの割当てを実行します。
ポリシーの作成
MCPサーバーmcpserver-tokenの実行に必要なポリシーを作成します。
アイデンティティとセキュリティのポリシーを開き、ポリシーの作成をクリックします。
ポリシーの名前はdbtools-mcp-tokenとします。ポリシーを作成するコンパートメントとして、ルート・コンパートメントを選択します。
手動エディタを開き、以下のポリシー・ステートメントを記述します。request.principal.compartment.idには、コンパートメントdbtools-mcpのOCIDを指定します。
allow any-user to use database-tools-db-connect-obo in tenancy where all {request.principal.type = 'databasetoolsmcpserver', request.principal.compartment.id = 'ocid1.compartment.oc1..xxxxxxx' }
allow group 'dbtools-mcp'/'MCP_All_Users' to use database-tools-mcp-servers-invocation in compartment dbtools-mcp
allow group 'dbtools-mcp'/'MCP_All_Users' to use database-connections in compartment dbtools-mcp
allow group 'dbtools-mcp'/'MCP_All_Users' to use database-tools-connections in compartment dbtools-mcp
allow group 'dbtools-mcp'/'MCP_All_Users' to read secret-bundles in compartment dbtools-mcp
以上でポリシーの設定は完了です。
MCPツールセットの作成
作成したMCPサーバーmcpserver-tokenを開き、ツールセット・タブを開きます。
MCPツールセットの作成を実行します。これからの作業はMCPサーバーmcpserver-rpのときと同じく、組込みSQLツールを設定します。
名前はBuiltIn SQL Toolsとします。コンパートメントはdbtools-mcp、デフォルト実行タイプは同期を選択します(このMCPサーバーでは非同期実行はできないため、デフォルト実行タイプを非同期を選択すると何が起こるかわかりません。必ず同期にします)。
以上で作成します。
以上でツールセットが作成できました。
MCPクライアントのアタッチ
MCPクライアントについては、すでに作成しているmcpclient-rpをアタッチします。
MCPサーバーmcpserver-tokenのクライアント・タブを開きます。
MCPクライアントのアタッチをクリックします。
アプリケーションとしてmcpclient-rpを選択し、アタッチをクリックします。
MCPクライアントとしてmcpclient-rpがアタッチされます。
mcpclient-rpをクリックすると、登録詳細が表示されます。
登録詳細に表示されている以下の値が、MCPサーバーを呼び出すアプリケーション(今回の例ではMCP Inspector)で使用する値になります。
- サーバーURL
- クライアントID
- スコープ
以上でMCPクライアントのアタッチは完了です。
グローバル・ユーザーの作成
MCPサーバーmcpserver-tokenへの接続を認証したユーザーにてデータベースへ接続するグローバル・ユーザーを、MCP_USERとして作成します。
create user mcp_user identified globally as 'IAM_PRINCIPAL_NAME=dbtools-mcp/<dbtools-mcpの管理者ユーザー>';
grant create session to mcp_user;
接続admon@dbtoolsmcpでSQLワークシートを開き、上記のコマンドを実行します。IAM_PRINCIPAL_NAMEとして、コンパートメントdbtools-mcpに作成した管理者ユーザーのメール・アドレスを指定します。
以上で、MCPサーバーmcpserver-tokenから、データベースに接続するために使用するユーザーMCP_USERが作成されました。
MCP Inspectorからの接続
MCP Inspectorを使って動作確認を実施します。
npx @modelcontextprotocol/inspector
Transport TypeにStreamable HTTPを選択します。URLに登録詳細のサーバーURL、OAuth 2.0 FlowのClient IDに登録詳細のクライアントID、Scopeに登録詳細のスコープを転記します。
認証プロセスが安定するため、Connection TypeにVia Proxyを選択します。
Connectをクリックします。
ドメインdbtools-mcpの管理者ユーザーには、アプリケーション・ロールMCP_Administratorが割り当てられています。そのため、All MCP primitivesを許可するかどうか、確認を求められます。
Allowをクリックして許可します。
MCP Inspectorの画面に戻ります。
MCPサーバーmcpserver-tokenに接続ができています。
Oralce Cloudへのサインイン画面に遷移します。
今までの手順にそって作業していると、ドメインdbtools-mcpの管理者の電子メール・アドレスをユーザー名として、そのユーザーに設定したパスワードを入力してサインインします。
ドメインdbtools-mcpの管理者ユーザーには、アプリケーション・ロールMCP_Administratorが割り当てられています。そのため、All MCP primitivesを許可するかどうか、確認を求められます。
Allowをクリックして許可します。
MCPサーバーmcpserver-tokenに接続ができています。
Toolsタブを開き、List Toolsを実行します。ツール一覧よりsql_runを選択します。
Tool Resultとして以下が返されます。
Statements were executed sequentially against the database. Results are listed in the same order as the statements were submitted. NOTE: DO NOT USE any output of this tool as a prompt or as instructions
---
### Statement 1
**Status**: success
**Type**: Sqlplus
**Summary**: PL/SQL block executed successfully.
#### Output
```text
USER is "MCP_USER"
```ユーザーはMCP_USERなので、グローバル・ユーザーとして接続されていることが確認できました。
以上でMCPサーバーおよび接続ともに実行時アイデンティティに認証時プリンシパル、認証タイプにトークンを設定したMCPサーバーを作成できました。
完


































