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