Oracle DatabaseのMCPサーバーを組み込んで、問合せを行なっています。
ChainlitのアプリケーションにOracle Databaseに問い合わせるMCPサーバーを登録します。
Claude DesktopのときはMCPのcommandとしてnodeを指定しましたが、Chainlitのサンプル・アプリケーションで許可されているコマンドはnpxまたはuvxです。そのため、NameをOracle Databaseとして、Commandに以下を指定します。index.jsへのパスやURLに含まれるAPEXワークスペース名(以下ではapexdev)、スキーマ名(wksp_apexdev)は環境に合わせて変更します。
npx node /Users/username/Documents/oracle-server/build/index.js http://localhost:8181/ords/apexdev/_/sql wksp_apexdev [パスワード]
確認をクリックして、MCPサーバーを追加します。
MCPサーバーとしてOracle Databaseが追加されます。
MCPサーバーが追加されたので、これからチャットを始めます。
(gpt-4o-miniは今ひとつだったので、環境変数OPENAI_MODELにgpt-4oを設定しています。)
「Oracle Databaseから参照できる表を一覧してください。」
ビューUSER_TABLESを検索し、接続先のスキーマにある表が一覧されます。
「EBAで始まる表の列情報を参照してください。」
ビューUSER_TAB_COLUMNSを検索して、それぞれの表の列を一覧します。
「これらの情報より、アジアで一番人口の少ない国を調べてください。」
生成されたSQLは以下です。
SELECT c.NAME, c.POPULATION FROM EBA_COUNTRIES c JOIN EBA_COUNTRY_REGIONS r ON c.REGION_ID = r.ID WHERE r.NAME = 'Asia' ORDER BY c.POPULATION ASC FETCH FIRST 1 ROW ONLY;
SELECT c.NAME, c.POPULATION FROM EBA_COUNTRIES c JOIN EBA_COUNTRY_REGIONS r ON c.REGION_ID = r.ID WHERE r.NAME = 'Asia' ORDER BY c.POPULATION DESC;
Claude DesktopにOracle DatabaseのMCPサーバーを組み込んだときは、Claudeが勝手にスキーマのメタデータやデータそのものを読み出して推論に使っていましたが、このサンプル・アプリケーションはそのようには動かず、チャットの最初に表や列情報を取り出しておく必要がありました。そのようにすれば、その情報を使ってSELECT文が生成されます。
とりあえず、OpenAIとOracle DatabaseのMCPサーバーの組み合わせで動作することが確認できました。
完