1. はじめに
AI エージェントからデータベースを使う「MCP でつなぐ」やり方をいくつか試してきました。その切り口の延長で、今回は Google が公開している MCP Toolbox for Databases(以下 MCP Toolbox)を Oracle Autonomous Database(以下 ADB)に向けて 使ってみます。
MCP Toolbox とは、AI エージェントとデータベースの間に立って「SQL をツール化して MCP / HTTP で公開する」サーバです(詳しくは 2 章)。
公式ドキュメントには Oracle 用の接続設定も載っているのですが、サンプルやチュートリアルは Cloud SQL / BigQuery / Looker が中心で、ADB/Oracle への接続自体はあまり話題になってませんでした。本記事は、その接続手順とつまずいた点を 次に自分が同じことをやるときのための記録 としてまとめたものです。
本記事は 「Google の MCP Toolbox から Oracle に接続する」 話です。Oracle 自身が提供する MCP のうち、ADB 組み込み MCP のように DB 側がサーバになる ものとは立ち位置が違います。一方で SQLcl MCP のように「手元のプロセスが DB につなぎに行く」タイプは MCP Toolbox と構造が近く、両者の違いはむしろ ベンダーや、SQL を定義する主体 にあります。詳しくは 2.4 で対比します。
1.1. 今回のゴール
| # | 確認したいこと | OK の条件 |
|---|---|---|
| 1 | 手元の MCP Toolbox から ADB 26ai に wallet(mTLS)接続できる | ADB への接続が成立する |
| 2 | Oracle Instant Client なし(純 Go ドライバ)で接続が成立する |
useOCI:false + walletLocation + connectionString で接続できる |
| 3 | 定義した SQL ツールが API 経由で正しい結果を返す | 「重い SQL 上位」「1 実行あたり上位」「sql_id 詳細」の3ツールが、SQLcl 直実行と同じ SQL_ID・並びを返す |
1.2. 結論(先出し)
- MCP Toolbox は Oracle Instant Client なし でも ADB に wallet 接続できる。純 Go ドライバ(go-ora)を使う
useOCI: false+walletLocationの構成にすればよい - 接続記述子の指定でつまずいた。go-ora は
tnsAlias(tnsnames.ora のエイリアス)を解決しない ので、host:port/service_name形式のconnectionStringを直接渡す必要がある -
tnsAdminを使う wallet 接続はuseOCI: true(OCI ドライバ)専用 で、こちらは Oracle Instant Client のインストールが要る。Instant Client を入れたくないなら go-ora 一択 - 起動コマンドの
--configは ルートのフラグ。toolbox serve --config ...ではなくtoolbox --config ...で起動する
2. MCP Toolbox for Databases とは
2.1. 立ち位置
MCP Toolbox for Databases は、Google が OSS で公開しているデータベース向けの ツールサーバ です(旧名 genai-toolbox。リポジトリは googleapis/mcp-toolbox)。ざっくり言うと、「この SQL をこの名前のツールとして公開する」 という定義を YAML に書いておくと、それを MCP(Model Context Protocol)や HTTP API 経由でエージェントから呼べるようにしてくれます。
エージェントから見ると「DB に直接つなぐ」のではなく「Toolbox が公開しているツールを叩く」形になります。SQL は Toolbox 側の YAML に閉じ込められ、エージェントには パラメータだけ を渡させる(バインド変数で受ける)ので、自由な SQL を投げさせずに済むのが利点です。
MCP(Model Context Protocol)は、AI エージェントに外部ツールやデータソースを接続するための共通プロトコルです。MCP Toolbox は「DB をツールとして MCP に生やす」役割を担います。
2.2. なぜ「DB の前に1枚かませる」のか
-
SQL を YAML に集約できる: ツールの中身(SQL)は人間がレビュー・管理し、エージェントには
categoryなどのパラメータだけ渡させる - 接続情報を1か所に閉じ込められる: wallet パスや接続記述子・認証情報は Toolbox の設定(+環境変数)に集約。エージェント側は DB クレデンシャルを持たない
-
複数 DB を横断できる: 1 つの Toolbox に Cloud SQL も BigQuery も Oracle も
sourcesとして並べられる。今回はその「Oracle」を試す
「手元でサーバを 1 つ立てて、その後ろの DB につなぐ」という構造自体は、Oracle の SQLcl MCP(sql -mcp)とよく似ています。MCP Toolbox ならではの強みは、その後ろに Cloud SQL / BigQuery / Oracle などを同じ枠組みで並べられる(マルチ DB)点です。
2.3. Oracle 対応と「想定される使いどころ」
MCP Toolbox の Oracle ソースは、接続方法として 2 系統のドライバ を持っています(公式: Oracle source)。
| 観点 | 純 Go ドライバ(go-ora) | OCI ドライバ(godror) |
|---|---|---|
| 設定 |
useOCI: false(既定)+ walletLocation
|
useOCI: true + tnsAdmin
|
| Oracle Instant Client | 不要 | 必須(別途インストール) |
| 接続記述子 |
connectionString(host:port/service) |
tnsAlias(tnsnames.ora のエイリアス) |
| 今回の選択 | ✅ こちらを採用 | — |
なぜ純 Go ドライバを選んだか
useOCI: true で使う OCI ドライバ(godror)は、Oracle 公式の C クライアントライブラリ= Oracle Instant Client を別途インストールして、そこを参照する必要があります。一方 go-ora は純 Go 実装なので Instant Client が要りません。両者のメリット・デメリットを整理すると次のとおりです。
純 Go ドライバ(go-ora/useOCI:false) |
OCI ドライバ(godror/useOCI:true) |
|
|---|---|---|
| メリット | ・Instant Client 不要で Toolbox バイナリ単体で完結 ・OS 依存の C ライブラリが不要で、コンテナ / CI に載せやすい ・クロスプラットフォームで取り回しが楽 |
・Oracle 公式の C クライアント経由で 互換性・機能網羅性が高い ・ tnsnames.ora / tnsAlias をそのまま使える・高度な接続オプションやエンタープライズ機能に強い |
| デメリット | ・サードパーティ実装で、一部の型対応や高度な接続オプションは OCI 系に劣ることがある ・ tnsnames.ora を読まない(後述の 6.1 のハマりどころ) |
・Instant Client のインストールとバージョン管理が必要 ・OS / アーキ依存で、コンテナ・CI のセットアップが重くなる |
今回は 「手元やコンテナでサッと立てて Oracle につなぐ」 ことを優先し、セットアップの軽い go-ora を選びました。逆に、既存の tnsnames.ora 資産をそのまま流用したい・公式ドライバの互換性を重視する、といった本番寄りの要件なら OCI ドライバ(+Instant Client)も選択肢になります。
なお、この go-ora + wallet の構成は手元の ADB 接続に限らず、Oracle Database@Google Cloud のように Oracle に wallet で接続したい場面 でも同じ考え方が使えると考えられます(接続記述子と wallet を対象のものに差し替えるだけ)。
go-ora は sijms/go-ora という純 Go 実装の Oracle ドライバです。C ライブラリ(Instant Client)に依存せず、バイナリ1つで完結するのが利点です。
2.4. Oracle 自身が立てる MCP との違い(過去記事との対比)
私はこれまで、Oracle ADB に対して「いま重い SQL を教えて」を聞くための Oracle 公式の MCP 経路 をいくつか検証してきました(4 経路の横ぐし比較)。今回の MCP Toolbox と混同しないよう、立ち位置を整理しておきます。
まず構造で分けると、MCP Toolbox と SQLcl MCP は近い仲間 です。どちらも「自分でプロセスを立て、その後ろの DB につなぎ、LLM クライアントには MCP として見せる」形だからです。一方 OCI DB Tools MCP(OCI マネージドサービス)や ADB 組み込み MCP(DB 自身がサーバ)は、サーバ実体が Oracle / OCI 側にあり、そこに接続しに行く 形で、立ち位置が違います。
そのうえで MCP Toolbox と SQLcl MCP の違いは、主に ベンダー・対象 DB・SQL を定義する主体 に出ます。
| 観点 | MCP Toolbox(本記事) | SQLcl MCP | OCI DB Tools MCP | ADB 26ai 組み込み MCP |
|---|---|---|---|---|
| ベンダー | Google(OSS) | Oracle(SQLcl 同梱) | Oracle(OCI マネージド) | Oracle(ADB 内蔵) |
| サーバ実体(誰が立てるか) | 自分で立てる汎用サーバ | 自分で立てる sql -mcp(SQLcl が動くホストならどこでも) |
OCI Database Tools サービス | ADB 自身の MCP エンドポイント |
| 対象 DB | マルチ DB(Cloud SQL / BigQuery / Oracle 等。Oracle は1ソース) | SQLcl が繋げる Oracle DB 全般 | OCI DB Tools 対応 DB | ADB-S |
| SQL を定義するのは | 利用者が YAML で定義(既定 read-only) | LLM が生 SQL を書く | DBA が定義した SQL / レポート | 外部 LLM が SQL を書く(PL/SQL Function 経由) |
| LLM 自由度 | 低(承認済みツールのみ実行) | 最高(任意の生 SQL) | 低〜中(事前承認の SQL/レポート) | 低(固定 Function に引数) |
| 認証・認可 | DB ユーザー+wallet(mTLS) | SQLcl 接続プロファイル | IAM+Application Role+PAT | OAuth |
設計思想として見ると、MCP Toolbox は 「あらかじめ SQL を定義してツール化し、LLM には承認済みのものだけ叩かせる」 点で、SQLcl MCP(LLM が生 SQL を書く)よりむしろ OCI DB Tools MCP の Custom SQL Tool に近い です(3タイプの権限分離記事)。違いは、MCP Toolbox が Oracle 専用ではなく・OSS で・自分で立てられる こと。Oracle に閉じた経路ではなく「複数 DB を同じ枠組みで扱いたい」ときの選択肢になります。
3. 準備
3.1. 検証環境
| 項目 | 内容 |
|---|---|
| MCP Toolbox | v1.4.0(windows/amd64、純 Go ドライバ go-ora、Instant Client 不要) |
| DB | OCI Autonomous Database adbtest02(26ai / 23.26.2.2.0) |
| 接続ユーザー |
dba_copilot(V$SQL を参照できる権限を持つユーザー) |
| 接続 |
connectionString(host:1522/service・TCPS)+ walletLocation(mTLS) |
バージョンは v1.4.0 時点のものです。MCP Toolbox は更新が速く、フラグ名やプリビルトツールの種別などが将来変わる可能性があります。再現する際は最新版のドキュメントとの差分に注意してください。
3.2. Toolbox バイナリの入手
GitHub のリリースページ から、自分の OS 向けのバイナリ(今回は windows/amd64・v1.4.0)をダウンロードします。
3.3. ADB の wallet 接続準備
ADB のコンソールから wallet(Instance Wallet / Regional Wallet)をダウンロードして展開しておきます(公式: ウォレットのダウンロード)。go-ora が使うのは主に以下です。
-
cwallet.sso… 自動ログイン wallet(パスワード不要で TLS 鍵を読める) -
ewallet.pem… TLS/mTLS 用の鍵・証明書 -
tnsnames.ora… 接続記述子。ここから host / port / service_name を取り出す(後述)
接続には ADB 上のユーザーとそのパスワードを使います。今回は「いま重い SQL を教えて」を題材にするため、V$SQL を参照できるユーザー(dba_copilot)を使います。秘匿値は YAML に直書きせず、環境変数経由で渡します(4 章)。
4. tools.yaml と接続設定
4.1. ソース定義(go-ora + wallet)
MCP Toolbox の設定は tools.yaml 1 ファイルに sources(接続先)/tools(公開する SQL)/toolsets(ツールの束)を書きます(公式: Configuration)。Oracle ソースは次のようにしました。
sources:
oracle-adb:
kind: oracle
# 純 Go ドライバ(go-ora)は tnsAlias を解決しないため、
# host:port/service_name 形式の接続文字列を環境変数で渡す。
# 例: adb.<region>.oraclecloud.com:1522/<service>_high.adb.oraclecloud.com
connectionString: ${ORACLE_CONNECT_STRING}
# 純 Go ドライバ用の wallet ディレクトリ(cwallet.sso / ewallet.pem を含む)
walletLocation: ${ORACLE_WALLET_DIR}
user: ${ORACLE_USER}
password: ${ORACLE_PASSWORD}
ポイントは 2 つです。
-
kind: oracleのままuseOCIを書かない(既定のfalse= go-ora)。walletLocationを指定すると、go-ora が内部でssl=true&wallet=<dir>を生成して mTLS 接続してくれます -
connectionStringにはhost:port/service_nameを渡す(tnsAliasではない。理由は 6 章)。tenancy 固有情報を含むのでファイルに直書きせず${ORACLE_CONNECT_STRING}で環境変数化します
接続記述子は wallet 内の tnsnames.ora から取り出します。ADB は protocol が tcps・port が 1522 です。たとえば adbtest02_high のエントリの (host=...)(port=1522) と (service_name=...) を組み立てて、次の形にします(host / service は環境固有なのでマスク)。
adb.<region>.oraclecloud.com:1522/****_adbtest02_high.adb.oraclecloud.com
4.2. 秘匿値の環境変数
${...} 参照する値は、Toolbox 起動前にシェルの環境変数で与えます。
# Windows / PowerShell の例(値はマスク)
$env:ORACLE_CONNECT_STRING = "adb.<region>.oraclecloud.com:1522/****_adbtest02_high.adb.oraclecloud.com"
$env:ORACLE_WALLET_DIR = "C:\Users\<you>\wallet\Wallet_adbtest02"
$env:ORACLE_USER = "dba_copilot"
$env:ORACLE_PASSWORD = "********"
接続記述子・wallet パス・パスワードは tools.yaml に残さないでください。${ENV} 参照にして、値はシェル側で与えます。
MCP Toolbox の Oracle ソースは DB ユーザー名/パスワードでの接続が必須で、OCI / ADB のマネージド MCP のように OAuth でパスワードレス接続することはできません(本記事執筆時の v1.4.0)。
4.3. 公開するツール(oracle-sql)
題材は、私がこれまでシリーズで扱ってきた 「いま重い SQL を教えて」(4 経路の横ぐし比較)と同じ DBA 向けユースケースにしました。V$SQL を読む SQL を 3 本ツール化します。oracle-sql 種別のツールは 既定で read-only です。
tools:
# 総経過時間が長い SQL 上位 N 件
top_sql_by_elapsed:
kind: oracle-sql
source: oracle-adb
statement: |
SELECT sql_id,
ROUND(elapsed_time/1e6, 2) AS elapsed_sec,
executions AS execs,
ROUND(elapsed_time/GREATEST(executions,1)/1000,2) AS ms_per_exec,
SUBSTR(sql_text, 1, 80) AS sql_text
FROM v$sql
WHERE elapsed_time > 0
ORDER BY elapsed_time DESC
FETCH FIRST :1 ROWS ONLY
description: |
総経過時間が長い SQL を上位 N 件返す。
parameters:
- name: top_n
type: integer
description: "返す件数(例: 5)"
# 1 実行あたりが重い SQL 上位5件
top_sql_by_avg_elapsed:
kind: oracle-sql
source: oracle-adb
statement: |
SELECT sql_id,
executions AS execs,
ROUND(elapsed_time/executions/1000,2) AS ms_per_exec,
ROUND(elapsed_time/1e6, 2) AS elapsed_sec,
SUBSTR(sql_text, 1, 80) AS sql_text
FROM v$sql
WHERE executions >= :1
ORDER BY elapsed_time/executions DESC
FETCH FIRST 5 ROWS ONLY
description: |
指定回数以上実行された SQL のうち、1 実行あたりの経過時間が長いものを上位5件返す。
parameters:
- name: min_exec
type: integer
description: "対象とする最小実行回数(例: 5)"
# 指定 sql_id の詳細(child / 実行計画ハッシュ / I-O)
sql_detail_by_id:
kind: oracle-sql
source: oracle-adb
statement: |
SELECT sql_id, child_number AS child, plan_hash_value AS plan_hash,
executions AS execs, ROUND(elapsed_time/1e6, 2) AS elapsed_sec,
buffer_gets, disk_reads
FROM v$sql
WHERE sql_id = :1
ORDER BY child_number
description: |
指定した sql_id の子カーソルごとの実行計画ハッシュ・実行回数・I/O を返す。
parameters:
- name: sql_id
type: string
description: "対象の SQL_ID"
toolsets:
dba_copilot:
- top_sql_by_elapsed
- top_sql_by_avg_elapsed
- sql_detail_by_id
top_sql_by_elapsed の FETCH FIRST :1 ROWS ONLY のように、件数指定にもバインド変数が使えます(go-ora でも問題なく解決されました)。パラメータの type は integer / string を使い分けます。
5. 接続して動かす
5.1. 起動
--enable-api を付けて HTTP API も有効化して起動します。--config の位置に注意(6 章)。
.\toolbox.exe --config tools.yaml --enable-api --log-level DEBUG
起動ログ(抜粋)です。go-ora がどの接続文字列を組み立てたかが DEBUG に出ます(host / service はマスク)。
INFO "Starting MCP Toolbox for Databases version 1.4.0+binary.windows.amd64..."
DEBUG "Using go-ora driver (pure-Go) with wallet and serverString:
adb.<region>.oraclecloud.com:1522/****_adbtest02_high.adb.oraclecloud.com"
INFO "Initialized 1 sources: oracle-adb"
INFO "Initialized 3 tools: top_sql_by_elapsed, top_sql_by_avg_elapsed, sql_detail_by_id"
INFO "Initialized 2 toolsets: dba_copilot, default"
DEBUG "server listening on 127.0.0.1:5000"
INFO "Server ready to serve!"
Initialized 1 sources: oracle-adb と Server ready to serve! が出れば、ADB への wallet 接続が成立しています(ゴール1・2 達成)。
5.2. toolset 一覧
curl http://127.0.0.1:5000/api/toolset/dba_copilot
定義した 3 ツールが返ります。
- top_sql_by_elapsed
- top_sql_by_avg_elapsed
- sql_detail_by_id
5.3. ツールを invoke して DB 直実行と突き合わせ
/api/tool/<name>/invoke に JSON でパラメータを渡します。
# 総経過時間が長い SQL 上位5件
curl -X POST http://127.0.0.1:5000/api/tool/top_sql_by_elapsed/invoke `
-H "Content-Type: application/json" -d '{\"top_n\":5}'
# 5回以上実行された SQL のうち1実行あたりが重いもの
curl -X POST http://127.0.0.1:5000/api/tool/top_sql_by_avg_elapsed/invoke `
-H "Content-Type: application/json" -d '{\"min_exec\":5}'
# 指定 sql_id の詳細
curl -X POST http://127.0.0.1:5000/api/tool/sql_detail_by_id/invoke `
-H "Content-Type: application/json" -d '{\"sql_id\":\"b39m8n96gxk7c\"}'
返ってきた結果です。検証中の ADB では、自動メンテナンス系(dbms_autotask / auto index / dbms_stats)が上位を占めていました。これは負荷をかけていない Autonomous Database でも普通に見られる、ありのままの姿です。
top_sql_by_elapsed({"top_n":5}・総経過時間 降順)
| sql_id | elapsed_sec | execs | ms_per_exec | sql_text(先頭) |
|---|---|---|---|---|
| b39m8n96gxk7c | 425.92 | 149 | 2858.50 | call dbms_autotask_prvt.run_autotask ( :0,:1 ) |
| ampw9ddqufjd3 | 231.24 | 34 | 6801.14 | begin /*KAPI:capture*/ dbms_auto_index_internal.capture_sts; end; |
| avzy19hxu6gg4 | 224.76 | 34 | 6610.51 | SELECT VALUE(P) FROM TABLE(DBMS_SQLTUNE.SELECT_CURSOR_CACHE(... |
| 998uh4b7wk3u1 | 203.25 | 4 | 50812.79 | /* SQL Analyze(13860,3) */ SELECT /*+PARALLEL(1)... |
| 93w8sdhx08qwf | 186.36 | 34 | 5481.22 | begin /* KAPS */ dbms_stats.gather_st_job_continuous_proc; end; |
top_sql_by_avg_elapsed({"min_exec":5}・1 実行あたり 降順・上位5)
| sql_id | execs | ms_per_exec | elapsed_sec | sql_text(先頭) |
|---|---|---|---|---|
| ampw9ddqufjd3 | 34 | 6801.14 | 231.24 | begin /*KAPI:capture*/ dbms_auto_index_internal.capture_sts; end; |
| afcz0dh295hzp | 20 | 6740.06 | 134.80 | SELECT /*+ first_rows(1) */ sql_id, force_matching_signature... |
| avzy19hxu6gg4 | 34 | 6610.51 | 224.76 | SELECT VALUE(P) FROM TABLE(DBMS_SQLTUNE.SELECT_CURSOR_CACHE(... |
| 61znfd8fvgha6 | 27 | 6594.68 | 178.06 | SELECT new.sql_seq, old.plan_hash_value, sqlset_row(... |
| 93w8sdhx08qwf | 34 | 5481.22 | 186.36 | begin /* KAPS */ dbms_stats.gather_st_job_continuous_proc; end; |
sql_detail_by_id({"sql_id":"b39m8n96gxk7c"}・子カーソル詳細)
| sql_id | child | plan_hash | execs | elapsed_sec | buffer_gets | disk_reads |
|---|---|---|---|---|---|---|
| b39m8n96gxk7c | 3 | 0 | 149 | 425.92 | 9730506 | 231004 |
top_sql_by_elapsed と同じ SELECT を SQLcl で直接実行した結果も、同じ SQL_ID・同じ並び・同じ値 でした(ゴール3 達成)。Toolbox 経由でも素の SQL でも同じものが返る=接続とバインド変数が正しく機能している、ということです。
V$SQL は累積カウンタの動的ビューなので、elapsed_time などの絶対値は取得時刻が離れると少しずつ増えます。今回は invoke と SQLcl 直実行を続けて取得したため値まで一致しましたが、厳密に比べる場合は「SQL_ID と並びが一致するか」で見るのが確実です。
6. ハマりどころ
接続までにつまずいた点を、自分の備忘として残します。
6.1. go-ora は tnsAlias を解決しない → connectionString を使う
公式の Oracle ソースの例には tnsAlias(tnsnames.ora のエイリアス)を使う書き方があります。これをそのまま tnsAlias: adbtest02_high + walletLocation で書いたところ、起動時に次のエラーで落ちました。
address adbtest02_high: missing port in address
【原因】 純 Go ドライバ(go-ora)は tnsnames.ora を読まず、接続先のホスト部に host:port/service を直接要求します。tnsAlias に書いた adbtest02_high を「ホスト名」として解釈し、ポートが無いと言って落ちていました。
【対処法】 tnsnames.ora から host:1522/service_name(ADB は protocol=tcps・port 1522)を取り出し、connectionString で渡します。wallet は walletLocation のままで mTLS が成立します(go-ora が内部で ssl=true&wallet=<dir> を生成)。
# NG(go-ora では解決されない)
# tnsAlias: adbtest02_high
# OK(host:port/service を直接渡す)
connectionString: ${ORACLE_CONNECT_STRING} # adb.<region>...:1522/****_adbtest02_high...
walletLocation: ${ORACLE_WALLET_DIR}
6.2. tnsAdmin は useOCI:true(OCI ドライバ)専用=Instant Client が要る
「tnsAdmin に wallet フォルダを指定すれば tnsAlias も解決されるのでは?」と考えましたが、tnsAdmin が効くのは useOCI: true(godror=OCI ドライバ) のときだけです。そしてその OCI ドライバは Oracle Instant Client のインストールが前提 になります。
つまり選択肢は次のとおりです。
| やりたいこと | 設定 | Instant Client |
|---|---|---|
| Instant Client を入れたくない |
useOCI:false(go-ora)+ walletLocation + connectionString
|
不要 |
| tnsnames.ora のエイリアスで繋ぎたい |
useOCI:true(godror)+ tnsAdmin + tnsAlias
|
必須 |
今回は Instant Client を入れたくなかったので、前者(go-ora + connectionString)で通しました。
6.3. --config はルートのフラグ(serve サブコマンドには無い)
最初 toolbox serve --config tools.yaml で起動しようとして弾かれました。
Error: unknown flag: --config
【原因】 --config は serve サブコマンドのフラグではなく、ルートの toolbox [flags] 側のフラグです(toolbox serve --help を見ると serve には --config が無い)。ルートの toolbox が直接サーバを起動します。
【対処法】 serve を付けずに起動します。HTTP API(/api)を使うには --enable-api も必要です。
.\toolbox.exe --config tools.yaml --enable-api
7. まとめ
Google の MCP Toolbox for Databases から Oracle Autonomous Database に、Oracle Instant Client なし(純 Go ドライバ go-ora)で wallet 接続し、定義した SQL ツールが API 経由で正しく動くところまで確認できました。
| ポイント | 結論 |
|---|---|
| Instant Client | go-ora(useOCI:false)+ walletLocation なら 不要
|
| 接続記述子 | go-ora は tnsAlias を解決しない → host:port/service を connectionString で渡す
|
| tnsAdmin / tnsAlias を使う道 |
useOCI:true(OCI ドライバ)専用で Instant Client 必須
|
| 起動コマンド |
--config は ルートのフラグ(toolbox --config ...)。API は --enable-api
|
| 秘匿値 | 接続記述子・wallet パス・パスワードは ${ENV} で外出し |
公式ドキュメントには Oracle ソースの設定項目は揃っているものの、「ADB + go-ora + wallet」の組み合わせで実際にどこが効くか(とくに tnsAlias が解決されない件)は、動かしてみて初めて分かりました。同じ構成で繋ぐ人の手間が少しでも減れば幸いです。
参考
- MCP Toolbox — Oracle source(Oracle ソースの全フィールド。go-ora=walletLocation / godror=tnsAdmin の 2 系統)
-
MCP Toolbox — Configuration(tools.yaml の sources/tools/toolsets と
${ENV}置換) -
MCP Toolbox — oracle-sql tool(バインド変数
:1, :2・既定 read-only) - GitHub: googleapis/mcp-toolbox(本体・リリースバイナリ)
- sijms/go-ora(純 Go の Oracle ドライバ。Instant Client 不要)
- godror(OCI ドライバ。Instant Client 必須)
- Oracle ADB: ウォレットのダウンロード(日本語)