2025年7月9日水曜日

Claude DesktopにSQLclのMCPサーバーを組み込む

更新: 2026年2月10日

SQLcl 25.2より、自然言語による問い合わせより生成したSQLをOracle Databaseで実行するMCPサーバーの機能が提供されています。

SQLcl 25.4から、いくつか重要な新機能が追加されています。それらの機能について、Oracle Databaseの開発ツールのプロダクト・マネージャーのJeff Smithさんが技術記事を公開されています。

Did you know? Summarizing latest & greatest MCP updates.
Dealing with TNS database connections with Oracle MCP (SQLcl)

Claude DesktopにSQLclをMCPサーバーとして登録し、実際にデータベースに問い合わせを行ってみました。25.4から使用できる-homeオプションと-Rオプション、それと環境変数TNS_ADMINを設定します。

以下はその作業の記録です。

最初に最新版のSQLclをダウンロードします。



SQLclの実行にはJavaが必要です。Javaもダウンロードしてインストールしておきます。



SQLclはsqlcl-latest.zipというファイル名でダウンロードされます。これを展開すると、展開先のディレクトリの下にsqlclというフォルダが作成されます。その中にディレクトリbinがあり、そこにSQLclを起動するファイルsql(Windows向けはsql.exe)が含まれます。

このsqlまたはsql.exeの位置を覚えておきます。

SQLclのMCPサーバーを実行してみます。SQLclをMCPサーバーとして実行するには、-mcpオプションを付加します。以下の例は、ホーム・ディレクトリ直下でsqlcl-latest.zipを解凍しています。

$HOME/sqlcl/bin/sql -mcp

~ % $HOME/sqlcl/bin/sql -mcp

---------- MCP SERVER STARTUP ----------

MCP Server started successfully on Mon Feb 09 18:47:54 JST 2026

Press Ctrl+C to stop the server

----------------------------------------



MCPサーバーの正常な起動を確認したら、Ctrl-D(End Of File)を入力して終了します。

~ % $HOME/sqlcl/bin/sql -mcp

---------- MCP SERVER STARTUP ----------

MCP Server started successfully on Mon Feb 09 18:47:54 JST 2026

Press Ctrl+C to stop the server

----------------------------------------

Server shutting down...

~ % 


SQLclのMCPサーバーは、SQLclに保存した接続を参照します。接続情報はデフォルトで~/.dbtools以下に保存されます。

sql /nolog
connmgr list
exit

デフォルトの位置に保存される接続情報は、SQLclの他にもOracle SQL Developer Extension for VSCodeなども参照します。

 ~ % sql /nolog


SQLcl: 月 2月 09 18:52:09 2026のリリース25.4 Production


Copyright (c) 1982, 2026, Oracle.  All rights reserved.


SQL> connmgr list

.

├── local-26ai-apexdev

└── local-26ai-sys

SQL> exit

~ % 


上記の例ではlocal-26ai-apexdev、local-26ai-sysという接続が保存されています。

SQLclをMCPサーバーとして起動する際に、開発者が使用している接続でデータベースに接続されると権限が強すぎて危険です。そのため、SQLclの-homeオプションを指定して、MCPサーバーが参照する接続情報を分離します。

ディレクトリとして~/Document/sqlcl-mcpを作成し、そこにデータベースの接続情報を保存します。また、このディレクトリをTNS接続文字列の定義およびウォレットを保存するディレクトリとします。

Autonomous AI Databaseへの接続に使用するウォレットをダウンロードします。ダウンロードしたウォレットは、このディレクトリにすべて解凍するか、ウォレットに含まれているtnsnames.oraを取り出して配置します。

またはウォレットを解凍せず、Autonomous AI Databaseへの接続文字列をコピーし、tnsnames.oraに書き込みます。


接続文字列にいわゆるEasy Connect構文を使用する場合は、必ずしも環境変数TNS_ADMINの設定およびファイルtnsnames.oraは必要ありません。

ウォレットがWallet_APEXDEV.zipとしてダウンロードされている場合、以下のコマンドでウォレットからTNS名が設定されているファイルtnsnames.oraを取り出します。

unzip -d ~/Documents/sqlcl-mcp Wallet_APEXDEV.zip tnsnames.ora

ただし、2026年2月10日時点ではなぜか、tnsnames.oraだけでは「ORA-12506: TNS: リスナーはサービスACLフィルタリングに基づいて接続を拒否しました」が発生しました。このエラーを回避するには、ウォレット全体を解凍する必要があります。

unzip -d ~/Documents/sqlcl-mcp Wallet_APEXDEV.zip

% unzip -d ~/Documents/sqlcl-mcp Wallet_APEXDEV.zip tnsnames.ora

Archive:  Wallet_APEXDEV.zip

  inflating: /Users/_________/Documents/sqlcl-mcp/tnsnames.ora  

%


環境変数TNS_ADMINを設定します。

export TNS_ADMIN=~/Documents/sqlcl-mcp

~ % export TNS_ADMIN=~/Documents/sqlcl-mcp

~ % 


接続情報を保存するために、SQLclを接続なしで起動します。SQLclの接続情報は、$TNS_ADMIN以下に保存するように、-homeオプションを指定します。

sql -home $TNS_ADMIN /nolog

~ % sql -home $TNS_ADMIN /nolog


SQLcl: 月 2月 09 19:03:43 2026のリリース25.4 Production


Copyright (c) 1982, 2026, Oracle.  All rights reserved.


SQL> 


データベースに接続し、接続を保存します。保存する接続名はadb-26ai-apexdevとし、-savepwdを付加して、パスワードも保存します。

conn -save adb-26ai-apexdev -savepwd wksp_apexdev@apexdev_low

SQL> conn -save adb-26ai-apexdev -savepwd wksp_apexdev@apexdev_low 

パスワード (**********?) **************

名前: adb-26ai-apexdev

接続文字列: apexdev_low

ユーザー: wksp_apexdev

パスワード: ******

接続しました.

SQL> 


保存された接続を一覧します。

connmgr list

SQL> connmgr list

.

└── adb-26ai-apexdev

SQL> 


ここで一覧された接続をClaude Desktopで使用します。

connmgrを引数なしで実行すると、コマンドの説明が表示されます。

SQLclを終了します。

exit

SQL> exit

Oracle AI Database 26ai Enterprise Edition Release 23.26.1.1.0 - for Oracle Cloud and Engineered Systems

Version 23.26.1.1.0から切断されました

~ % 


Claude DesktopにSQLcl MCPサーバーを組み込みます。

Claude Desktopの設定を開きます。


設定ダイアログの左のメニューより開発者を選び、設定を編集をクリックします。(以下のスクリーンショットはツールsqlclが登録済みです。)


編集するファイルclaude_desktop_config.jsonが選択されます。構成ファイルの位置を覚えている場合は、直接ファイルを編集してもよいでしょう。


claude_desktop_config.jsonに以下のエントリを追記します。PATHの部分も含めて、先ほどインストールしたSQLclの実行ファイルsqlの絶対パスを入力します。-Rオプションで0を指定し、実行するコマンドに制限をかけていません。
{
  "mcpServers": {
    "sqlcl": {
      "command": "/Users/ユーザー名/sqlcl/bin/sql",
      "args": [
        "-home",
        "/Users/ユーザー名/Documents/sqlcl-mcp",
        "-R",
        "0",
        "-mcp"
      ],
      "env": {
        "TNS_ADMIN": "/Users/ユーザー名/Documents/sqlcl-mcp"
      }
    }
  },
  "preferences": {
    "coworkScheduledTasksEnabled": false,
    "sidebarMode": "chat"
  }
}
以上で準備は完了です。

Claude Desktopの設定ファイルを更新したのち再起動します。

ドキュメントの3.6 Example Use Cases and Promptsに記載されているプロンプトを試してみます。

sqlclで使える接続を一覧して。


Autonomous Databaseの開発ワークスペースに接続して。



これからはSHスキーマに含まれる表やビューを対象にします。


最近の受注と、カリフォルニアに在住の発注先を教えて。


地域および製品カテゴリ別の売上を階層的に分類し、前年比成長率も示してください。


巷ではClaudeのLLMのコード生成能力の高さが評価されていますが、SQLの生成についても能力が高いと感じます。

3.7 Monitoring the SQLcl MCP Serverについて確認します。

Autonomous DatabaseではユーザーADMIN、オンプレミスではSYSまたはSYSTEMでデータベースに接続します。

 ツール呼び出しの履歴は、接続したスキーマに作成された表DBTOOLS$MCP_LOGに記録されます。

今回は接続スキーマ名はWKSP_APEXDEVなので、以下のSELECT文を実行します。

SELECT * FROM WKSP_APEXDEV.DBTOOLS$MCP_LOG order by created_on desc


MCP_CLIENTclaude-aiになっています。MODELにはMCPホストが呼び出しているLLMのモデル名が記録されます。END_POINT_TYPEは概ねtoolEND_POINT_NAMEはSQLclが提供しているツール、LOG_MESSAGEに実行されたSQLが記録されています。

V$SESSIONよりMCPサーバーが接続しているセッションを確認します。

select module, action from v$session where username = 'WKSP_APEXDEV'

列MODULEにLLMのモデル名、列ACTIONに呼び出されたツール名が設定されています。



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