🧀

MCP Toolbox for Databases によるDBの読み書き

に公開

AIエージェントの実用性が高まる中、データベースとの連携はビジネスアプリケーションにとって重要な機能となっています。本記事では、下記codelabsのチュートリアルを参考にPostgreSQLデータベースを読み書きするエージェントを構築しました。
チュートリアルでは検索(SELECT)のみであったため、新規データの登録(INSERT)機能を実装できるか試すことで、AIエージェントの可能性について考えてみようと思います。

https://codelabs.developers.google.com/travel-agent-mcp-toolbox-adk?hl=ja#0

使用技術

  • Google ADK: AIエージェント開発キット
  • MCP Toolbox for Databases: Googleが提供するAIモデルと外部ツール連携のためのフレームワーク
  • Cloud SQL (PostgreSQL): クラウド上のリレーショナルデータベース
  • Gemini 2.0: Googleの大規模言語モデル

データベースの準備

今回の実装では、ホテル情報を保存するためのテーブルを作成しました。
チュートリアルのテーブル定義を参考に簡素化しています。

CREATE TABLE hotels(
 id            INTEGER NOT NULL PRIMARY KEY,
 name          VARCHAR NOT NULL,
 location      VARCHAR NOT NULL,
 price_tier    VARCHAR NOT NULL
);

MCP Toolbox for Databases の設定

エージェントとデータベースの連携のために、tools.yamlファイルを作成します。このファイルには、データソースの定義とツール(データベース操作)の定義が含まれています。

sources:
 my-cloud-sql-source:
   kind: cloud-sql-postgres
   project: <YOUR_PROJECT_ID>
   region: us-central1
   instance: hoteldb-instance
   database: postgres
   user: postgres
   password: postgres

tools:
 search-hotels-by-name:
   kind: postgres-sql
   source: my-cloud-sql-source
   description: Search for hotels based on name.
   parameters:
     - name: name
       type: string
       description: The name of the hotel.
   statement: SELECT * FROM hotels WHERE name ILIKE '%' || $1 || '%';
 search-hotels-by-location:
   kind: postgres-sql
   source: my-cloud-sql-source
   description: Search for hotels based on location.
   parameters:
     - name: location
       type: string
       description: The location of the hotel.
   statement: SELECT * FROM hotels WHERE location ILIKE '%' || $1 || '%';
 add-hotel:
   kind: postgres-sql
   source: my-cloud-sql-source
   description: Add a new hotel to the database.
   parameters:
     - name: name
       type: string
       description: The name of the hotel.
     - name: location
       type: string
       description: The location of the hotel (e.g., "Tokyo, Japan").
     - name: price_tier
       type: string
       description: The price tier of the hotel (e.g., "Midscale", "Upscale", "Upper Upscale", "Luxury").
   statement: INSERT INTO hotels (id, name, location, price_tier) VALUES ((SELECT COALESCE(MAX(id), 0) + 1 FROM hotels), $1, $2, $3) RETURNING *;

toolsets:
   my_first_toolset:
     - search-hotels-by-name
     - search-hotels-by-location
     - add-hotel

実行結果

ツールを接続したエージェントを起動して会話してみます。会話の中で必要な情報を集めて登録までを行うことができます。

$ adk run hotel-agent-app
Log setup complete: /tmp/agents_log/agent.20250502_071508.log
To access latest log: tail -F /tmp/agents_log/agent.latest.log
Running agent hotel_agent, type exit to exit.
user: can you add hotel?
[hotel_agent]: What is the name, location, and price tier of the hotel you want to add?

user: I would like to add hotel, Shinagawa Prince.
[hotel_agent]: What is the location and price tier of the Shinagawa Prince hotel?

user: located in Tokyo, price tier is Upscale.
[hotel_agent]: OK. I have added the Shinagawa Prince hotel to the database.

まとめ

Google ADK と MCP Toolbox for Databases を活用することで、AIエージェントとデータベースを簡単に連携させることができました。今回の実装を通じて、データの検索だけでなく登録操作も可能になり、より実用性や拡張性のあるAIエージェント構築の可能性を感じます。

参考リソース

Discussion