2025年8月8日金曜日

LM Studioでgpt-oss:120bを実行しSQLclのMCPサーバーを呼び出してデータベースに問い合わせる

人気のあるローカルLLMランタイムにOllamaLM Studioがあります。どちらもOpenAIが最近リリースしたオープンウェイトモデルgpt-oss:120bgpt-oss:20bに対応しています。

LM StudioではフロントエンドのアプリケーションにMCPサーバーを追加することができます。本記事ではLM StudioにMCPサーバーとしてSQLclを追加し、ローカルLLMとしてgpt-oss:120bを実行して、データベースに自然言語で問い合わせを行ってみます。

作業環境はApple Macbook Pro(M4 128GB)です。LLMを動かすだけで70GB程度のメモリを使用します。gpt-oss:20bは20GB程度のメモリを使用します。双方ともMXFP4で量子化されたモデルが対象です。作業環境となるコンピュータにはあらかじめ、LM Studioとpodmanをインストールしておきます。

データベースについては、こちらの記事「Ollamaでgpt-oss:20bを実行しOpen WebUIからSQLclのMCPサーバーを呼び出す」のデータベースの準備で作成したコンテナsales-dbを使用します。Oracle Database 23ai Freeにsales_history(スキーマSH)のサンプル・データをインストールしています。また、サンプル・データにたいして読み込み権限しか持たないデータベース・ユーザーmcpuserが作成されています。

コンテナsales-dbを実行します。

podman start sales-db

% podman start sales-db

sales-db

% 


ローカルにインストールしているSQLclを使用してMCPサーバーを実行すると、VS Codeなどで使用しているデータベース接続もMCPサーバーから利用可能になります。

今回はMCPサーバー専用のSQLclをコンテナで実行します。Oracle Container RegistryよりSQLclのコンテナ・イメージを取得します。

podman pull container-registry.oracle.com/database/sqlcl:latest

% podman pull container-registry.oracle.com/database/sqlcl:latest                    

Trying to pull container-registry.oracle.com/database/sqlcl:latest...

Getting image source signatures

Copying blob sha256:868d7396c28bb01216fb0529ee04fa61b3f2d0abf397ccdb0a39acfb5ff45458

Copying blob sha256:698aee9470ef0d32633e2423dc3b5e16af1fbd10e5245a13145ece9984c96f26

Copying blob sha256:4bc021afff70ffc5b463d429bba763fc99220db548ac2cb8fba8d4df8c84a3c9

Copying blob sha256:806ed6d6ab84d056e19068db243c0cffdb0d9eae1c6f097e990f304ac1e7b55e

Copying blob sha256:22a33186b552e320dd6d69ee1c32b7cc24a0fb1fb0ca752b7a3af1f5c8af660f

Copying config sha256:e2b0fb8809c1033d352e2e6b484547e1766d7a59329b64a945cdaa112cf02feb

Writing manifest to image destination

e2b0fb8809c1033d352e2e6b484547e1766d7a59329b64a945cdaa112cf02feb

% 


SQLclを実行するコンテナとしてoracle-mcpを作成し実行します。

podman run -it --name oracle-mcp container-registry.oracle.com/database/sqlcl:latest

SQLclのプロンプトが返されます。

% podman run -it --name oracle-mcp container-registry.oracle.com/database/sqlcl:latest



SQLcl: Release 25.2 Production on Fri Aug 08 02:14:54 2025


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


SQL> 


コンテナsales-dbで実行されているデータベースへの接続を保存します。接続名はmydbとします。

conn -save mydb -savepwd mcpuser/mcpuser@host.containers.internal/freepdb1
exit


exitするとSQLclが終了するため、コンテナoracle-mcpも終了します。

SQL> conn -save mydb -savepwd mcpuser/mcpuser@host.containers.internal/freepdb1

Name: mydb

Connect String: host.containers.internal/freepdb1

User: mcpuser

Password: ******

Connected.

SQL> exit

Disconnected from Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free

Version 23.8.0.25.04

% 


作成したコンテナoracle-mcpを実行します。

podman start oracle-mcp

% podman start oracle-mcp

oracle-mcp

% podman ps

CONTAINER ID  IMAGE                                                COMMAND               CREATED        STATUS                    PORTS                   NAMES

bcb0a1128f1c  container-registry.oracle.com/database/free:latest   /bin/bash -c $ORA...  19 hours ago   Up 47 minutes (starting)  0.0.0.0:1521->1521/tcp  sales-db

ef2d41ef5fd0  container-registry.oracle.com/database/sqlcl:latest  /nolog                4 minutes ago  Up 3 seconds (starting)                           oracle-mcp

% 


コンテナoracle-mcpを使ってMCPサーバーを実行します。

podman exec -i oracle-mcp sql -mcp

% podman exec -i oracle-mcp sql -mcp

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

MCP Server started successfully on Fri Aug 08 02:33:02 UTC 2025

Press Ctrl+C to stop the server

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

^C

% 


MCPサーバーの起動を確認した後、CTRL+Cを入力してMCPサーバーを停止します。

LM Studioを起動し、Model SearchからOpenAI's gpt-oss 120BまたはOpenAI's gpt-oss 20Bをダウンロードします。


モデルのダウンドードが完了したらロードします。Context lengthはできるだけ大きい値にします。


チャットの入力フィールドの下にアイコンがプラグのボタンがあります。これをクリックしてツールの構成画面を開きます。


Installをクリックし、Edit mcp.jsonを実行します。


「MCPサーバーは便利だけど危険だよ、信頼できるMCPサーバーだけを追加してね」といった警告が表示されます。Got itをクリックします。


mcp.jsonとして以下を記述します。他のMCPサーバーが登録済みの場合は、sqlclの部分を追加します。
{
  "mcpServers": {
    "sqlcl": {
      "command": "podman",
      "args": [
        "exec",
        "-i",
        "oracle-mcp",
        "sql",
        "-mcp"
      ]
    }
  }
}
ボタンSaveをクリックし、mcp.jsonを保存します。右側のパネルにSQLclのMCPサーバーが提供しているツールが一覧されます。


以上でLM StudioにOracle DatabaseのMCPサーバーが組み込まれました。

この後はLM Studioで新規にチャットを開始して、自由に質問します。

接続できるデータベースや接続できるユーザーは制限されています。データベースに対して可能な操作も、ほとんどSELECTのみになっています。また、ユーザーMCPUSERは表領域USERSに対してクオータを10Mバイトしか割り当てていないため、大量のデータをアップロードする、といったこともできません。

今回は適用していませんが、Oracle Databaseが持つResource Managerの機能を使うとCPUリソースなども制限できます。


保存した接続mydbでデータベースに接続して、sales_historyのサンプル・データに問い合わせを行いました。ツール呼び出しでできることを制限しているので、確認せずに実行しています。


原因は分かりませんが、同一のチャット・セッションで複数のMCPサーバーを起動することがあるようです。psで確認すると"podman exec -i oracle-mcp sql -mcp"というコマンドが複数実行されていることが確認できます。

その場合、MCPサーバーを実行しているコンテナoracle-mcpを再起動すると状況が改善しました。

podman restart oracle-mcp

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