はじめに
Dify に MCP を組み合わせることで、人間が行っていた作業をAIエージェントに代行させることができます。
今回は、Dify と crystaldba/postgres-mcp を組み合わせて、自然言語で架空の書店の在庫・売上データを分析し、仕入れ提案を行うエージェントの構築手順を紹介します。
注意事項
- MCP と組み合わせることでAIエージェントにより強い権限を渡すことになります。セキュリティには十分注意してください。
- Dify や MCP へのアクセス管理は適切に行い、外部に公開しないようにしてください。
前提
- Dify バージョン: 1.13.0
- Dify の以下の設定が事前に完了していること
- AIモデルの追加
- Agent Strategies のインストール
アーキテクチャ概要
[Dify エージェント] --SSE--> [postgres-mcp コンテナ] --> [PostgreSQL コンテナ]
Dify のエージェントがツールとして postgres-mcp を呼び出し、MCP がSQL実行などのデータベース操作を代行します。DifyとMCPは同一のDockerネットワーク上に置くことで通信できるようにします。
手順
1. Dify を Docker Compose で起動する
公式手順に従い Dify を起動します。起動後、管理画面にログインできることを確認してください。
2. PostgreSQL と postgres-mcp の docker-compose.yml を作成する
任意のディレクトリに docker-compose.yml を作成します。
services:
postgres:
image: postgres:17
container_name: dummy_bookstore_db
restart: unless-stopped
environment:
POSTGRES_USER: bookstore
POSTGRES_PASSWORD: bookstore_pass
POSTGRES_DB: bookstore_db
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
- ./seed.sql:/docker-entrypoint-initdb.d/seed.sql # データ投入用のSQLファイルをマウント
healthcheck:
test: ["CMD-SHELL", "pg_isready -U bookstore -d bookstore_db"]
interval: 10s
timeout: 5s
retries: 5
mcp:
image: crystaldba/postgres-mcp
environment:
- DATABASE_URI=postgresql://bookstore:bookstore_pass@localhost:5432/bookstore_db
ports:
- "8000:8000"
networks:
- docker_ssrf_proxy_network
- default
# DifyのMCP仕様に対応するため、MCPはSSEモードで起動
command: --transport=sse
volumes:
postgres_data:
networks:
docker_ssrf_proxy_network: # Difyのネットワーク
external: true設定のポイントは2つあります。
docker_ssrf_proxy_networkにmcpサービスを接続する
Dify が起動するネットワークに MCP を参加させることで、Dify コンテナ内からhttp://mcp:8000へアクセスできるようになります。- MCP は SSEモード(
--transport=sse)で起動する
Dify のツール統合は http 接続での使用のみ対応しているため、MCPをSSEモードで起動する必要があります。
3. ダミーデータを seed.sql に記述する
書店の売上・在庫データを模擬した seed.sql を同じディレクトリに作成します。商品テーブルや売上履歴テーブルなど、検証に必要なデータを投入してください。
4. コンテナを起動する
docker compose up -d5. Dify で MCP ツールを追加する

「ツール」タブから MCP ツールを新規追加します。エンドポイントには以下を指定します。
http://mcp:8000/sse
mcpは docker-compose.yml 内のサービス名8000は MCP のポート/sseは SSEモードのエンドポイントパス
6. エージェントアプリを作成する
Dify のスタジオで新規アプリ作成から「エージェント」タイプのアプリを作成し、手順 5 で追加した MCP ツールをエージェントのツールとして有効化します。


7. エージェントにシステムプロンプトを設定する
あなたは書店の仕入れ担当です。
在庫管理システムのデータベースを閲覧し、ユーザーからの質問に回答してください。
データベースを閲覧する際は与えられたツールを使用してください。
動作確認
エージェントに以下の質問を投げてみます。
直近1か月の売り上げ情報を確認し、来月の仕入れ予定を計画してください。
エージェントは MCP ツールを呼び出してSQLを実行し、以下のような回答を返しました(抜粋)。
承知しました。まず直近1か月(過去30日間)の販売実績を確認し、その結果をもとに来月の仕入れ方針(暫定)を提案します。
直近1か月の概要(上位商品)
タイトル 30日販売数 売上 在庫 日平均 1984 9冊 116.91 200 0.30 The Fellowship of the Ring 6冊 101.94 400 0.20 Norwegian Wood 6冊 83.94 200 0.20 Kafka on the Shore 4冊 63.96 180 0.13 The Two Towers 3冊 50.97 380 0.10 Never Let Me Go 0冊 0 90 0 The Remains of the Day 0冊 0 80 0 在庫・販売速度から見たポイント
- 上位商品の多くは現在の在庫が販売スピードに対して十分〜過剰な状態です。
- Never Let Me Go / The Remains of the Day のように売上ゼロのタイトルは在庫過剰の可能性があり、棚替えや販促を検討すべきです。
- 売れ筋の「1984」は安定して売れていますが、在庫200に対して月9冊ペースのため短期的な追加仕入れは不要です。
来月の暫定仕入れ方針
発注点の目安(リードタイム14日 + 安全在庫7日で試算):
- 日平均 = 過去30日の販売数 ÷ 30
- 発注点 ≒ 日平均 × 21日
(例:1984 → 0.30 × 21 ≒ 7冊)現状では全主要商品で在庫が発注点を大きく上回っているため、今月の追加発注は不要です。ただし、各タイトルに発注点を設定してアラートを運用することを推奨します。
自然言語の指示だけでAIエージェントが自律的にSQLを実行し、データを分析して回答できていることがわかります。
まとめ
今回は Dify と Postgres MCP を組み合わせて、自然言語でデータベースを操作するAIエージェントの構築手順を紹介しました。
組み合わせる MCP 次第で今回のようなデータベース連携意外にも様々な仕事をAIエージェントに代行させることができます。
ぜひ色々なツールと組み合わせて試してみてください。


コメント