Using Oracle Autonomous Database Serverless
Autonomous Databaseの作成
表示名はSALESADB、データベース名もSALESADBとします。ワークロード・タイプにデータ・ウェアハウスを選択します。データベース構成のAlways Freeをオンにし、データベース・バージョンとして23aiを選択します。
その他、管理者ユーザーADMINのパスワードなどを設定し、Autonomous Databaseを作成します。
作成をクリックすると、データベースのプロビジョニングが開始します。
データベース接続をクリックします。
パスワードを指定し、ダウンロードを実行します。ただし、今回の用途では、ここで指定したパスワードを使用することはありません。
% mkdir oci-iam
% cd oci-iam
oci-iam % mv ~/Downloads/Wallet_SALESADB.zip .
oci-iam % ls
Wallet_SALESADB.zip
oci-iam %
OCI IAMの設定
MCPサーバーを実行するコンテナの作成
コンテナ・イメージに組み込むSQLclをダウンロードします。
curl -OL https://download.oracle.com/otn_software/java/sqldeveloper/sqlcl-latest.zip
oci-iam % curl -OL https://download.oracle.com/otn_software/java/sqldeveloper/sqlcl-latest.zip
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 87.8M 100 87.8M 0 0 9004k 0 0:00:09 0:00:09 --:--:-- 9725k
oci-iam %
コンテナ・イメージを作成します。
podman build -f Dockerfile -t sqlcl-mcp-oci
oci-iam % podman build -f Dockerfile -t sqlcl-mcp-oci
STEP 1/11: FROM oraclelinux:9
STEP 2/11: RUN dnf update -y && dnf install -y sudo passwd unzip ncurses java-21-openjdk-headless && dnf -y install oraclelinux-developer-release-el9 && dnf -y install python39-oci-cli && dnf clean all
Oracle Linux 9 BaseOS Latest (aarch64) 8.0 MB/s | 91 MB 00:11
Oracle Linux 9 Application Stream Packages (aar 9.4 MB/s | 38 MB 00:04
Last metadata expiration check: 0:00:06 ago on Fri Aug 22 06:42:50 2025.
Dependencies resolved.
==========================================================================================
Package Arch Version Repository Size
==========================================================================================
Upgrading:
alternatives aarch64 1.24-2.0.1.el9 ol9_baseos_latest 36 k
audit-libs aarch64 3.1.5-4.0.1.el9 ol9_baseos_latest 125 k
bzip2-libs aarch64 1.0.8-10.el9_5 ol9_baseos_latest 40 k
chkconfig aarch64 1.24-2.0.1.el9 ol9_baseos_latest 233 k
coreutils aarch64 8.32-39.0.1.el9 ol9_baseos_latest 1.2 M
coreutils-common aarch64 8.32-39.0.1.el9 ol9_baseos_latest 2.1 M
crypto-policies noarch 20250128-1.git5269e22.el9 ol9_baseos_latest 178 k
curl aarch64 7.76.1-31.el9_6.1 ol9_baseos_latest 300 k
dnf noarch 4.14.0-25.0.1.el9 ol9_baseos_latest 532 k
dnf-data noarch 4.14.0-25.0.1.el9 ol9_baseos_latest 46 k
dnf-plugins-core noarch 4.3.0-20.0.1.el9 ol9_baseos_latest 55 k
elfutils-default-yama-scope noarch 0.192-6.el9_6 ol9_baseos_latest 8.4 k
elfutils-libelf aarch64 0.192-6.el9_6 ol9_baseos_latest 213 k
elfutils-libs aarch64 0.192-6.el9_6 ol9_baseos_latest 263 k
expat aarch64 2.5.0-5.el9_6 ol9_baseos_latest 116 k
glib2 aarch64 2.68.4-16.el9_6.2 ol9_baseos_latest 2.7 M
glibc aarch64 2.34-168.0.1.el9_6.23 ol9_baseos_latest 1.7 M
glibc-common aarch64 2.34-168.0.1.el9_6.23 ol9_baseos_latest 317 k
glibc-langpack-en aarch64 2.34-168.0.1.el9_6.23 ol9_baseos_latest 965 k
[中略]
inflating: /opt/oracle/sqlcl/lib/dbtools-net.jar
inflating: /opt/oracle/sqlcl/lib/reactive-streams.jar
inflating: /opt/oracle/sqlcl/lib/xdb.jar
inflating: /opt/oracle/sqlcl/lib/oci-java-sdk-common.jar
inflating: /opt/oracle/sqlcl/lib/orajsoda.jar
inflating: /opt/oracle/sqlcl/lib/quartz.jar
inflating: /opt/oracle/sqlcl/lib/javassist.jar
--> 018c9e2e0264
STEP 11/11: CMD ["/opt/oracle/sqlcl/bin/sql","-mcp"]
COMMIT sqlcl-mcp-oci
--> da3c5885c499
Successfully tagged localhost/sqlcl-mcp-oci:latest
da3c5885c49903cf6179b0dc91b9ba98a9c5a27e596b8bfc34b5d98054cf599d
oci-iam %
podman volume create mcp-oci-conf
oci-iam % podman volume create mcp-oci-conf
mcp-oci-conf
oci-iam %
コンテナmcp-ociを作成します。Autonomous DatabaseのSALESADBに接続できるように、カレント・ディレクトリにダウンロード済みのWallet_SALESADB.zipを置いておきます。
ボリュームmcp-oci-confを/home/oracleにマウントすることにより、oci-cliやSQLclの構成をボリュームmcp-oci-confに保存し永続化します。また、カレント・ディレクトリを/opt/oracle/walletsにマウントすることで、Wallet_SALESADB.zipをコンテナの中から参照できるようにします。
podman run --rm --name mcp-oci -v mcp-oci-conf:/home/oracle -v $PWD:/opt/oracle/wallets sqlcl-mcp-oci:latest
oci-iam % podman run --rm --name mcp-oci -v mcp-oci-conf:/home/oracle -v $PWD:/opt/oracle/wallets sqlcl-mcp-oci:latest
OpenJDK 64-Bit Server VM warning: Unable to get SVE vector length on this system. Disabling SVE. Specify -XX:UseSVE=0 to shun this warning.
---------- MCP SERVER STARTUP ----------
MCP Server started successfully on Fri Aug 22 06:52:37 UTC 2025
Press Ctrl+C to stop the server
----------------------------------------
Oracle Databaseの構成
oci-iam % podman exec -it mcp-oci bash
[oracle@c6de9432d2cc ~]$
unzip -d tns_admin /opt/oracle/wallets/Wallet_SALESADB.zip
[oracle@c6de9432d2cc ~]$ cd
[oracle@c6de9432d2cc ~]$ unzip -d tns_admin /opt/oracle/wallets/Wallet_SALESADB.zip
Archive: /opt/oracle/wallets/Wallet_SALESADB.zip
inflating: tns_admin/ewallet.pem
inflating: tns_admin/README
inflating: tns_admin/cwallet.sso
inflating: tns_admin/tnsnames.ora
inflating: tns_admin/truststore.jks
inflating: tns_admin/ojdbc.properties
inflating: tns_admin/sqlnet.ora
inflating: tns_admin/ewallet.p12
inflating: tns_admin/keystore.jks
[oracle@c6de9432d2cc ~]$
SQLclを起動し、Autonomous DatabaseのSALESADBに管理者ユーザーADMINで接続します。
/opt/oracle/sqlcl/bin/sql admin@salesadb_low
[oracle@c6de9432d2cc ~]$ /opt/oracle/sqlcl/bin/sql admin@salesadb_low
OpenJDK 64-Bit Server VM warning: Unable to get SVE vector length on this system. Disabling SVE. Specify -XX:UseSVE=0 to shun this warning.
SQLcl: Release 25.2 Production on Fri Aug 22 06:59:22 2025
Copyright (c) 1982, 2025, Oracle. All rights reserved.
Password? (**********?) **************
Last Successful login time: Fri Aug 22 2025 06:59:28 +00:00
Connected to:
Oracle Database 23ai Enterprise Edition Release 23.0.0.0.0 - for Oracle Cloud and Engineered Systems
Version 23.9.0.25.08
SQL>
BEGIN
DBMS_CLOUD_ADMIN.ENABLE_EXTERNAL_AUTHENTICATION(
type => 'OCI_IAM',
force => TRUE );
END;
/
SQL> BEGIN
2 DBMS_CLOUD_ADMIN.ENABLE_EXTERNAL_AUTHENTICATION(
3 type => 'OCI_IAM',
4 force => TRUE );
5 END;
6* /
PL/SQL procedure successfully completed.
SQL>
SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME='identity_provider_type';
SQL> SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME='identity_provider_type';
NAME VALUE
_________________________ __________
identity_provider_type OCI_IAM
SQL>
IAMグループsales_dbusersをマップしたデータベース・ユーザーとして、MCPUSERを作成します。
alter user mcpuser quota 25m on data;
grant create table, create view, create sequence to mcpuser;
SQL> create user mcpuser identified globally as 'IAM_GROUP_NAME=sales_dbusers';
User MCPUSER created.
SQL> alter user mcpuser quota 25m on data;
User MCPUSER altered.
SQL> grant create session to mcpuser;
Grant succeeded.
SQL> grant create table, create view, create sequence to mcpuser;
Grant succeeded.
SQL> exit
Disconnected from Oracle Database 23ai Enterprise Edition Release 23.0.0.0.0 - for Oracle Cloud and Engineered Systems
Version 23.9.0.25.08
[oracle@c6de9432d2cc ~]$
クライアントの構成
oci iam db-token get
/home/oracle/.oci/configが存在しないので、新たに作成するかどうか聞かれます。Yで継続します。
[oracle@c6de9432d2cc ~]$ oci iam db-token get
ERROR: Could not find config file at /home/oracle/.oci/config
Do you want to create a new config file? [Y/n]: Y
Do you want to create your config file by logging in through a browser? [Y/n]: n
This command provides a walkthrough of creating a valid CLI config file.
The following links explain where to find the information required by this
script:
User API Signing Key, OCID and Tenancy OCID:
https://docs.cloud.oracle.com/Content/API/Concepts/apisigningkey.htm#Other
Region:
https://docs.cloud.oracle.com/Content/General/Concepts/regions.htm
General config documentation:
https://docs.cloud.oracle.com/Content/API/Concepts/sdkconfig.htm
- ユーザーのOCIDを入力します。テスト・ユーザーoracle.taroを作成したときのコピーしたOCIDを入力します。
- テナントのOCIDを入力します。
- リージョン識別子を入力します。以下の例ではca-toronto-1を入力しています。
- APIキーとなるRSAキー・ペアを生成するかどうか聞かれるので、Yを指定してRSAキー・ペアを生成します。
- RSAのキーを保存するファイル名を指定します。デフォルトのoci_api_keyのまま変更しません。テスト・ユーザーoracle.taroのAPIキーとして追加する公開キーは、ファイル/home/oracle/.oci/oci_api_key_public.pemに保存されます。
- 秘密キーの設定するパスフレーズを聞かれます。N/Aを入力します。
- パスフレーズの確認を求められます。同じくN/Aを入力します。
Enter a location for your config [/home/oracle/.oci/config]:
Enter a user OCID: ocid1.user.oc1..aaaaa*******************xoiqqyp3a
Enter a tenancy OCID: ocid1.tenancy.oc1..aa***********************kmentrva
Enter a region by index or name(e.g.
1: af-johannesburg-1, 2: ap-batam-1, 3: ap-chiyoda-1, 4: ap-chuncheon-1, 5: ap-chuncheon-2,
6: ap-dcc-canberra-1, 7: ap-dcc-gazipur-1, 8: ap-delhi-1, 9: ap-hyderabad-1, 10: ap-ibaraki-1,
11: ap-melbourne-1, 12: ap-mumbai-1, 13: ap-osaka-1, 14: ap-seoul-1, 15: ap-seoul-2,
16: ap-singapore-1, 17: ap-singapore-2, 18: ap-suwon-1, 19: ap-sydney-1, 20: ap-tokyo-1,
21: ca-montreal-1, 22: ca-toronto-1, 23: eu-amsterdam-1, 24: eu-budapest-1, 25: eu-crissier-1,
26: eu-dcc-dublin-1, 27: eu-dcc-dublin-2, 28: eu-dcc-milan-1, 29: eu-dcc-milan-2, 30: eu-dcc-rating-1,
31: eu-dcc-rating-2, 32: eu-dcc-zurich-1, 33: eu-frankfurt-1, 34: eu-frankfurt-2, 35: eu-jovanovac-1,
36: eu-madrid-1, 37: eu-madrid-2, 38: eu-marseille-1, 39: eu-milan-1, 40: eu-paris-1,
41: eu-stockholm-1, 42: eu-zurich-1, 43: il-jerusalem-1, 44: me-abudhabi-1, 45: me-abudhabi-2,
46: me-abudhabi-3, 47: me-abudhabi-4, 48: me-alain-1, 49: me-dcc-doha-1, 50: me-dcc-muscat-1,
51: me-dubai-1, 52: me-jeddah-1, 53: me-riyadh-1, 54: mx-monterrey-1, 55: mx-queretaro-1,
56: sa-bogota-1, 57: sa-santiago-1, 58: sa-saopaulo-1, 59: sa-valparaiso-1, 60: sa-vinhedo-1,
61: uk-cardiff-1, 62: uk-gov-cardiff-1, 63: uk-gov-london-1, 64: uk-london-1, 65: us-ashburn-1,
66: us-ashburn-2, 67: us-chicago-1, 68: us-gov-ashburn-1, 69: us-gov-chicago-1, 70: us-gov-phoenix-1,
71: us-langley-1, 72: us-luke-1, 73: us-newark-1, 74: us-phoenix-1, 75: us-saltlake-2,
76: us-sanjose-1, 77: us-somerset-1, 78: us-thames-1): ca-toronto-1
Do you want to generate a new API Signing RSA key pair? (If you decline you will be asked to supply the path to an existing key.) [Y/n]: Y
Enter a directory for your keys to be created [/home/oracle/.oci]:
Enter a name for your key [oci_api_key]:
Public key written to: /home/oracle/.oci/oci_api_key_public.pem
Enter a passphrase for your private key ("N/A" for no passphrase): N/A
Repeat for confirmation: N/A
Private key written to: /home/oracle/.oci/oci_api_key.pem
Fingerprint: 46:ca:89:61:c9:77:bf:85:c5:c1:02:4b:80:71:82:e0
Config written to /home/oracle/.oci/config
If you haven't already uploaded your API Signing public key through the
console, follow the instructions on the page linked below in the section
'How to upload the public key':
https://docs.cloud.oracle.com/Content/API/Concepts/apisigningkey.htm#How2
Successfully created config file with your new CLI user profile
Once your public key is uploaded in the console, you can re-run your command to use your new config file and user profile
[oracle@c6de9432d2cc ~]$
最後のメッセージとして「Once your public key is uploaded in the console, you can re-run your command to use your new config file and user profile」とあります。
[oracle@c6de9432d2cc ~]$ cat .oci/oci_api_key_public.pem
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm5k2CpUiH5QDSFy7jDqS
5ax1Cmlb6T+KEYzt/ZQD6uKHd3NmxPKWPjxai+3v030ByealuEpmComqYn6kA8Y0
7j3zVRQinm01nEZxiH5k/hegRw63VVyK+QqLC/nkrSvEPcZqPAtHP+cMibDmjrrU
0t3M1mdZ6j6JcQkO1t1jpnHgk4VyI4n1DAp5+BGM+G1CuKpAPjnRmH/kuu9pL/rR
rtRiJ7PhcjJTiZ+aU3BjI26oHFI9Aay/tcbL1EkoeyorVe7jUfqeZT3tjZaW4Kqe
+HcKcDZ/ZuAVe2XOQpXQe6OK3k9qS+83neNqElRzFcJ+XHrmArohhRVA84hY1hfR
8wIDAQAB
-----END PUBLIC KEY-----
[oracle@c6de9432d2cc ~]$
oci iam db-token get
今度はトークンが所定のファイルに書き込まれます。有効期間は1時間なので、1時間経過後はトークンの再取得が必要です。
[oracle@c6de9432d2cc ~]$ oci iam db-token get
Private key written at /home/oracle/.oci/db-token/oci_db_key.pem
db-token written at: /home/oracle/.oci/db-token/token
db-token is valid until 2025-08-22 08:41:45
[oracle@c6de9432d2cc ~]$
/opt/oracle/sqlcl/bin/sql /nolog
connect -save salesadb_oci -savepwd /@salesadb_oci
[oracle@c6de9432d2cc ~]$ /opt/oracle/sqlcl/bin/sql /nolog
OpenJDK 64-Bit Server VM warning: Unable to get SVE vector length on this system. Disabling SVE. Specify -XX:UseSVE=0 to shun this warning.
SQLcl: Release 25.2 Production on Fri Aug 22 08:00:59 2025
Copyright (c) 1982, 2025, Oracle. All rights reserved.
SQL> connect -save salesadb_oci -savepwd /@salesadb_oci
Name: salesadb_oci
Connect String: salesadb_oci
User:
Password: not saved
Connected.
SQL>
select sys_context('userenv','authentication_method');
値はTOKEN_GLOBALになっています。
SQL> select sys_context('userenv','authentication_method');
SYS_CONTEXT('USERENV','AUTHENTICATION_METHOD')
_________________________________________________
TOKEN_GLOBAL
SQL>
AUTHENTICATED_IDENTITYの値を確認します。
select sys_context('userenv','authenticated_identity');
SQL> select sys_context('userenv','authenticated_identity');
SYS_CONTEXT('USERENV','AUTHENTICATED_IDENTITY')
__________________________________________________
oracle.taro
SQL>
SESSION_USERとCURRENT_USERはMCPUSERになっています。
select sys_context('userenv','session_user'), sys_context('userenv','current_user');
SQL> select sys_context('userenv','session_user'), sys_context('userenv','current_user');
SYS_CONTEXT('USERENV','SESSION_USER') SYS_CONTEXT('USERENV','CURRENT_USER')
________________________________________ ________________________________________
MCPUSER MCPUSER
SQL>
以上でクライアントの構成は完了です。
oci-iam % podman stop mcp-oci
mcp-oci
oci-iam %
Claude Desktopでの確認
{
"mcpServers": {
"sqlcl": {
"command": "podman",
"args": [
"run",
"-i",
"--rm",
"-v",
"mcp-oci-conf:/home/oracle",
"sqlcl-mcp-oci:latest"
]
}
}
}