先日の
記事にて、Claude CodeおよびOpenAI CodexからMCPサーバーを通してOracle Databaseにアクセスしてみました。同じ作業を
OpenCodeから実施してみます。
最初にOpenCodeをインストールします。
https://opencode.aiを開くと、ページの先頭にOpenCodeをインストールするコマンドが書かれています。私の環境はmacOSなので、brewでインストールしました。

データベースやMCPサーバーの構成手順はClaude CodeやCodexのときと同じです。Microsoft Entra IDの設定も含めて、それらはそのまま流用します。
OpenCodeが使用するLLMはLM Studioで実行します。私の環境はメモリに余裕があるので、GPT-OSS 120Bを使うことにしました。ツール呼び出しに強いモデルを選ぶと良いでしょう。
API Model Identifierはmlx-community/gpt-oss-120b、The local server is reachable at: はhttp://127.0.0.1:1234となっています。これらの値は、後でOpenCodeの設定ファイルopencode.jsoncに記述します。
以前に作成したスキルを流用するため、GitHubのリポジトリsh-sales-analysisをクローンします。
git clone https://github.com/ujnak/sh-sales-analysis.git
cd sh-sales-analysis% git clone https://github.com/ujnak/sh-sales-analysis.git
Cloning into 'sh-sales-analysis'...
remote: Enumerating objects: 19, done.
remote: Counting objects: 100% (19/19), done.
remote: Compressing objects: 100% (14/14), done.
remote: Total 19 (delta 0), reused 19 (delta 0), pack-reused 0 (from 0)
Receiving objects: 100% (19/19), 9.78 KiB | 9.78 MiB/s, done.
% cd sh-sales-analysis
sh-sales-analysis %
リポジトリに含まれる販売分析のスキルを、OpenCode向けにインストールします。MCPサーバーはOpenCode向けにインストールされないため、対象から除外します。
apm install --only apm --target opencode
sh-sales-analysis % apm install --only apm --target opencode
[>] Installing dependencies from apm.yml...
[+] <project root> (local)
|-- 4 skill(s) integrated -> .opencode/skills/
[*] Installed 1 APM dependency.
sh-sales-analysis %
プロジェクト・ディレクトリ直下にファイルopencode.jsoncを作成し、以下の内容を記述します。最初は、SQLclのMCPサーバーを使用してOracle Databaseに接続します。
選択するLLMのモデルや、SQLclのパスであるmcp.oracle-sh.commandの設定、環境変数TNS_ADMINが指すディレクトリmcp.oracle-sh.environment.TNS_ADMINの設定は、それぞれの構成に応じて変更します。
SQLclのMCPサーバーでは更新処理ができないように設定(オプション-R 4を付加)しているため、ツール呼び出しは無条件で許可しています。
環境の準備が整ったらOpenCodeを実行します。
opencode
OpenCodeが起動します。
/mcpsまたは/statusコマンドを実行し、MCPサーバーoracle-shがconnectedであることを確認します。
以下のプロンプトを入力します。
「スキーマSHの情報より、販売分析を実施してください。」
LLMのThinkingの出力として、スキルsales-analysisに従って作業すること、データベースの接続としてsalesadb-azを選択してスキーマSHの情報を参照すること、などが出力されています。データベースの接続は、初回はlist-connectionsの結果が一覧され、どの接続を使うか入力を求められました。以降は、ユーザーに問い合わせることなく、前回選択したsalesadb-azに接続しています(そのようにThinkingに出力されている)。
データベースの接続としてsalesadb-azが選択されると、これは接続文字列のTOKEN_AUTHにAZURE_INTERACTIVEが設定されているため、ブラウザが起動しMicrosoft Entra IDへのサインインが求められます。正しくサインインするには、URLに含まれるorganizationsをテナントIDに置き換える必要があります。
最終的に、スキルsales-analysisにそった出力が生成されます。
続いて、リモートMCPサーバーsampleserverを呼び出して、同じプロンプトを実行してみます。
opencode.jsoncを以下に置き換えます。mcpの設定が変更されています。
IdPがMicrosoft Entra IDの場合、clientId、clientSecret、scopeの指定が必要です。他のIdPであれば、おそらく、これらの設定は不要でしょう(必要だったとしてもclientIdのみ)。
クライアントIDとクライアント・シークレットは、OpenCodeを起動する前に環境変数ORDS_MCP_CLIENT_IDおよびORDS_MCP_CLIENT_SECRETとして設定します。
urlのホスト名はOpenRestyがリバース・プロキシとして動作しているホスト名に置き換えます。またoauth.scopeはEntra IDに登録されているアプリORDS MCPに設定されたスコープに置き換えます。
リモートMCPサーバーの認証を実施します。
export ORDS_MCP_CLIENT_ID=[OAuthクライアントID]
export ORDS_MCP_CLIENT_SECRET=[OAuthクライアント・シークレット]
opencode mcp auth ords-sampleserver
sh-sales-analysis % export ORDS_MCP_CLIENT_ID=[クライアントID]
sh-sales-analysis % export ORDS_MCP_CLIENT_SECRET=[クライアント・シークレット]
sh-sales-analysis % opencode mcp auth ords-sampleserver
┌ MCP OAuth Authentication
│
▲ ords-sampleserver has expired credentials. Re-authenticating...
│
◐ Starting OAuth flow.
Entra IDのアプリにリダイレクトURIを設定していないため、以下のエラーが発生します。
リダイレクトURIとして設定するURLは以下です。おそらく、ポート番号は固定ではないでしょう。
http://127.0.0.1:19876/mcp/oauth/callback
ポート番号が固定、もしくはOpenCodeで固定する方法があるという前提で、上記のコールバックURLをMicrosoft Entra IDに登録します。
Entra IDに作成したクライアントに対応するアプリ(
元記事の手順に従うとORDS MCP Clientとして作成したアプリ)の
リダイレクトURIの追加を実行します。
プラットフォームとして
Webを選択します。
Microsoft Entra IDでは、http://127.0.0.1で始まるURLはリダイレクトURIとして設定できないようです。
"HTTPS" または "http://localhost" で始める必要がありますChatGPTに聞いたところ、マニフェストを直接編集すれば追加できるとのことなので、マニュフェストを編集します。
マニフェストに以下のようにweb.redirectUrisの属性がある場合は、その属性にリダイレクトURIを追加します。
"web": {
"homePageUrl": null,
"logoutUrl": null,
"redirectUris": [
"http://localhost:8789/callback",
"https://chatgpt.com/connector/oauth/br-kYl0HI26f",
"https://claude.ai/api/mcp/auth_callback",
"http://127.0.0.1:19876/mcp/oauth/callback"
],
新しいバージョンの書式であれば、replyUrlsWithTypeの配列に追加します。
"replyUrlsWithType": [
{
"url": "http://127.0.0.1:19876/mcp/oauth/callback",
"type": "Web"
},
{
"url": "http://localhost:8789/callback",
"type": "Web"
},
リダイレクトURIを追加して保存します。
再度、リモートMCPサーバーを認証します。今度は認証に成功します。
opencode mcp auth ords-sampleserversh-sales-analysis % opencode mcp auth ords-sampleserver
┌ MCP OAuth Authentication
│
▲ ords-sampleserver has expired credentials. Re-authenticating...
│
◇ Authentication successful!
│
└ Done
sh-sales-analysis %
OpenCodeを実行します。
opencode
SQLclのMCPサーバーと同じプロンプトを入力します。
「スキーマSHの情報より、販売分析を実施してください。」
例えば日本語や特定の業務に特化したLLMがあり、Oracle Databaseに保管されたデータを使った分析を行いたい、そして分析手順をスキル(Agent Skills)にしたいといった場合、その作業はコーディングではありませんがOpenCodeを使うこともできるのではと思います。
今回の記事は以上になります。
完