はじめに
生成AIの分野でトレンドになっているMCP(Model Context Protocol)を理解するために、家計簿のデータが入ったPostgreSQLにMCPを使って接続してみました。
これまでは、欲しい情報をデータベースから取得するには、自分でSQLを調べたり、生成AIに詳しい状況を伝えてSQL文を生成してもらう必要がありました。しかしMCPを使えば、 SQLを一切書かずに、自然言語だけでデータベースを分析することができる ようになります。
本記事では、その実際の手順と動作例をご紹介します。
実現したい構成
-
データソース:PostgreSQL
- 家計簿データが保存されたリレーショナルデータベース
-
MCPクライアント:Gemini CLI
- 質問を入力し、生成AIと対話するためのインターフェース
-
MCPサーバー:MCP Toolbox for Databases
- 生成AIからのリクエストを受けてDBに問い合わせる中継サーバ
-
生成AIモデル:Gemini(クラウド上のAI)
- 質問を解釈し、必要に応じてデータベースに問い合わせて回答
図にすると、以下のような感じです。
事前準備
以下は、今回必要になるコンポーネントの説明です。
環境を構築したOSは Ubuntu 22.04.5 LTS です。
データソース: PostgreSQL(家計簿DB)
自宅のPC上で稼働しているPostgreSQLを使います。
家計簿のテーブル kakeibo
が以下のように作成されています。
$ psql -U [username] -d [db_name]
パスワード: (パスワード入力)
postgres=# \dt kakeibo
リレーション一覧
スキーマ | 名前 | 型 | 所有者
----------+---------+----------+----------
public | kakeibo | テーブル | postgres
(1 行)
カラムはだいぶイケていないので非公開ですが、各レコードには以下のようなデータが記録されています。
- 日付
- 金額
- 収入か支出か?
- 費目(食費、交通費、光熱費、など)
- メモ(買ったお店、製品などの情報)
MCPクライアント: Gemini CLI
以下のREADME.mdを参考に、Gemini CLI をインストールします。
今回は Quickstart -> With Node にしたがって、Node.js の npm
コマンドでインストールしました。(Mac OS の場合、 Homebrewでインストールできるはずです)
npm install -g @google/gemini-cli
インストール後、 npx gemini
を実行すると、以下のように認証方法を求められます。
このまま "Login with Google" を選択し、WebブラウザでGoogleアカウントの認証画面に行って使うことも可能です。ただ私はGeminiのAPIキーを持っていたので、 Ctrl+Dを2回続けて押して一旦Gemini CLIを終了し、次のように環境変数を設定しました。
export GEMINI_API_KEY="YOUR_API_KEY"
再度 npx gemini
を実行すると、以下のように Gemini CLI が使える状態になりました。
まだ Gemini CLI は使わないので、再度Ctrl+Dを2回続けて押して終了します。
MCPサーバ: MCP Toolbox for Databases
PostgreSQLに接続するMCPサーバは、Googleが提供する以下のツール「MCP Toolbox for Databases」を使います。
Linuxの場合、以下のコマンドで簡単にインストールできます。2025/07/27時点の最新バージョンは 0.10.0
です。
export VERSION=0.10.0
curl -O https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox
chmod +x toolbox
この toolbox
は、BigQuery や CloudSQL などの様々なデータベースに対応しており、データベース別に設定のページが用意されています。PostgreSQL の設定方法は、以下のページに記載されています。
2025/07/27時点で、Gemini CLI の設定例は書かれていませんが、Claude Code の設定例と同じ要領で、 ~/.gemini/settings.json
に以下のように記載すればOKです。
{
...
"mcpServers": {
"postgresLocal": {
"command": "/path/to/toolbox",
"args": [
"--prebuilt",
"postgres",
"--stdio"
],
"env": {
"POSTGRES_HOST": "localhost",
"POSTGRES_PORT": "[port-num]",
"POSTGRES_DATABASE": "[db-name]",
"POSTGRES_USER": "[username]",
"POSTGRES_PASSWORD": "[password]"
}
}
}
...
}
この後にできることの便利さを考えると、設定はとても簡単です!
私は最初、postgres_mcp の存在を知らずに、GitHubのREADME.mdのConfiguration を参考に設定してGemini CLIとつなごうとしてて、全然うまく行きませんでした...
Gemini CLI でMCPサーバーを認識できるかの確認
再度 npx gemini
を実行して、プロンプトで /mcp list
と入力すると、以下のように PostgreSQL の MCP が認識されていることを確認できます。
これで準備は完了です。
Gemini CLIに自然言語を入力して、家計簿を分析してみる
それでは、家計簿を分析してみましょう。
とりあえず、毎月高くて困っている電気料金について訊いてみます。我が家の毎月の料金はあまりお見せしたくないので、「1kWhあたりの単価」で出してみましょう。
【質問】
2021年1月から今までの各月の電気料金の1kWhあたりの単価を、行を月、列を年にして表で出力してください。
すると、次のように出力されました。おおすごい!
単価は2023年1,2月が高かったのですね。確かにこの月の我が家の電気料金は、Nintendo Switch が買えるのではないかぐらいの料金になっててすごくショックを受けた記憶があります。そこから2024年5月くらいまでは下がっていきましたが、その後はまた上昇傾向ですね。
続いて、私はよく西友に買い物に行くので、一回の買い物でどれくらい使ったかをヒストグラムで出してみます。
【質問】
西友に買い物に行った際に、一回の買い物でどれくらい使ったかを、階級の幅1000円でヒストグラムで出してください。
memoのカラムには、「セイユウ」または「西友」のどちらかで記録されているので、両方とも対象にしてください。
一日に複数記録されている場合は、価格を合算したものを1サンプルとしてください。
期間は2020年1月から今までの期間で集計してください。
以下が結果です。
一人で買い物行くことが多いのですが、その時は1,000〜5,000円の買い物をよくやっていると推測しています。それより多い場合は買って持って帰るものも多くなるので、二人以上で行く場合かなと推測。13,000円以上の買い物が一回記録されてますが、何買ったんだっけな...
こんな感じで、SQLを作ることに頭を悩まされずに自然言語だけで分析できます!
ちなみに、上の結果を生成する際に使われたSQL文も教えてくれました。
おわりに
今回は、生成AI(Gemini CLI)を使って、自宅のPostgreSQLに保存された家計簿データをMCP経由で分析してみました。初めてMCPを使いましたが、その便利さを実感できました。すごい時代だ...