2025年7月9日水曜日

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

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

Claude DesktopにSQLclをMCPサーバーとして登録し、実際にデータベースに問い合わせを行ってみました。以下はその作業の記録です。

最初に最新版の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 Wed Jul 09 09:56:59 JST 2025

Press Ctrl+C to stop the server

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



MCPサーバーの正常な起動を確認したら、Ctrl-Cを入力して終了します。

Claude Desktopの設定を開きます。


設定ダイアログの左のメニューより開発者を選び、構成を編集をクリックします。


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


claude_desktop_config.jsonに以下のエントリを追記します。PATHの部分も含めて、先ほどインストールしたSQLclの実行ファイルsqlの絶対パスを入力します。
{
  "mcpServers": {
    "sqlcl": {
      "command": "PATH/bin/sql",
      "args": ["-mcp"]
    }
  }
}


SQLclのドキュメントにはClaude Desktop以外に、Clineへの設定方法も記載されています。


3.4 Preparing Your Environmentに、SQLclのMCPサーバーに認識させるデータベースの設定方法が紹介されています。connコマンドによる方法が紹介されていますが、Noteにあるように、データベースへの接続はSQL Developer Extension for VS Codeと共有されています。

そのため、データベース接続の作成や削除には、SQL Developer Extension for VS Codeを使用した方が楽かなと思います。


以上で準備は完了です。

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

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

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


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


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


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


色々考えてデータベースに問い合わせを行った後に、最終的に以下のSQLを実行されました。
SELECT 
    c.cust_first_name || ' ' || c.cust_last_name as customer_name,
    c.cust_city,
    c.cust_street_address,
    c.cust_postal_code,
    COUNT(*) as total_orders,
    TO_CHAR(SUM(s.amount_sold), '999,999.99') as total_amount,
    TO_CHAR(MAX(s.time_id), 'YYYY-MM-DD') as last_order_date
FROM sh.customers c
JOIN sh.sales s ON c.cust_id = s.cust_id
WHERE c.cust_state_province = 'CA'
  AND s.time_id >= DATE '2001-01-01'  -- 2001年の受注
GROUP BY c.cust_id, c.cust_first_name, c.cust_last_name, c.cust_city, c.cust_street_address, c.cust_postal_code
ORDER BY SUM(s.amount_sold) DESC
FETCH FIRST 15 ROWS ONLY
その検索結果を受けて、以下の回答が生成されています。


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


巷では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_CLIENTはつねにsqlclになるはずです。MODELにはMCPホストが呼び出しているLLMのモデル名が記録されます。END_POINT_TYPEは概ねtoolEND_POINT_NAMEはSQLclが提供しているツール(list-connections, connect, disconnect, run-sql, run-sqlclのどれか)、LOG_MESSAGEに実行されたSQLが記録されています。

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

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

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


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