Amazon Bedrock Converse API and Database MCP Server Integration について
Amazon BedrockのConverse APIとリレーショナルデータベースを組み合わせ、自然言語でデータを照会するサンプルです。RDS PostgreSQLとSQLiteの読み取り専用方式を示し、他のMCP対応データベース連携の参考になります。
主な機能
- 01自然言語によるデータベース照会
- 02読み取り専用モード
- 03RDS PostgreSQLとSQLiteに対応
- 04Bedrock Converse APIとの連携
- 05Bedrock Guardrailsの任意利用
活用シーン
- 01データベースのレコードについて質問
- 02対話型データベースアクセスの試作
- 03MCPデータベース連携の実装例として参照
MCP 対応
MCPサーバーがデータベース操作とセキュリティを担い、BedrockのConverse APIをPostgreSQLおよびSQLiteのデータに接続します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Amazon Bedrock Converse API とデータベース MCP サーバーの統合
このサンプルでは、Model Context Protocol(MCP) サーバーアーキテクチャを通じて、AWS Bedrock の会話型 AI 機能とリレーショナルデータベースを統合する方法を紹介します。Bedrock の Converse API を活用して、クエリ専用モードでデータベースと自然言語でやり取りできるようにし、MCP サーバーがデータベース操作とセキュリティプロトコルの複雑さを処理します。

このアーキテクチャは、データベースアプリケーションに生成 AI 機能を組み込む開発者向けのリファレンス実装です。このサンプルでは RDS PostgreSQL と SQLite に焦点を当てていますが、このパターンは MCP サーバーとの統合をサポートする他のデータベースシステムにも容易に応用できます。
このサンプルでは、次の内容を紹介します。
- Model Context Protocol(MCP)を使用した、RDS PostgreSQL および SQLite と AWS Bedrock の基盤モデルとの統合
- Bedrock Converse API と MCP サーバーの統合
- Bedrock の基盤モデルを使用したデータベースへの自然言語クエリ(読み取り専用)
- MCP サーバーを介した、安全で効率的なデータベース操作
- 既存のアプリケーションへの GenAI 機能の追加
- 複数のデータベースに対応する GenAI ソリューションの基盤
AWS コンポーネント
このサンプルで使用する AWS リソースの一覧
- Bedrock Converse API:基盤モデル(FM)との複数回のやり取りにわたり、コンテキスト、メモリ、状態を管理することで、リアルタイムの会話型エクスペリエンスを実現します。リンク
- Bedrock Model:Anthropic Claude Sonnet 3.5、または Bedrock で利用できるその他の LLM。リンク
- Bedrock Guardrails:アプリケーションの要件と責任ある AI ポリシーに合わせてカスタマイズした安全対策を実装します。リンク
- RDS Postgres:データベースのクエリに使用します。リンク
前提条件
- RDS PostgreSQL データベースを作成する権限を持つ AWS Identity and Access Management(IAM)権限がある AWS アカウント
- Bedrock LLM へのアクセス
- RDS Postgress への読み取り専用アクセス権を持つユーザー
- Boto3 ライブラリをインストールした Python
- Visual Studio Code などの IDE
- ローカルシステム上の SQLite データベース
- AWS RDS ルート証明書をこちらからダウンロード
- 必要に応じて、LLM レベルで DDL クエリを停止するために Bedrock Guardrails を設定します。データベースユーザーに DDL 操作が許可されている場合でも、データベースで DDL 操作が実行されないようにできます。
リポジトリをクローンする
git clone https://github.com/aws-samples/sample-for-bedrock-integration-with-database-mcp-server
ステップ 1
たとえば VS Code IDE を使用して開発環境をセットアップします。
Node.js(v10.13.0 以降)がインストールされていることを確認してください。
AWS CDK をインストールします。
npm install -g aws-cdk
AWS CLI を認証情報で設定し、Bedrock が利用可能なリージョンを使用します。
aws configure
MacOS および Linux で仮想環境を手動で作成します。
python3 -m venv .venv
仮想環境を有効にします。
source .venv/bin/activate
仮想環境を有効にしたら、必要な依存関係をインストールできます。
pip install -r requirements.txt
npm を使用して PostgreSQL MCP サーバーをインストールします。
npm install -g @modelcontextprotocol/server-postgres
pip install mcp psycopg2-binary
Bedrock へのアクセス
ユーザーは、このサンプルで使用する Bedrock モデルにアクセスできる必要があります。このサンプルでは、次の設定を想定しています。
- リージョン:agent.py で AWS セッションから設定します。
- LLM:us.anthropic.claude-3-5-sonnet-20240620-v1:0 #mcpmain.py でクロスリージョン推論を使用します。クロスリージョン推論が不要な場合は、代わりに LLM エンドポイントを使用してください。
ステップ 2:RDS Postgres のセットアップとアクセス
RDS の作成とセットアップ
dbconfig.ini ファイルを以下の情報で変更します。
- db_user = "xxx"
- db_password = "xxx" //セキュリティ上の理由により、この設定はファイルから削除されています。忘れずに追加してください
- db_host = "xxx.us-east-1.rds.amazonaws.com"
- db_port = "5432"
- db_name = "xxx"
- ssl_cert_path = "/xxx/global-bundle.pem" //.pem ファイルの場所
ステップ 3:アプリケーションを実行し、自然言語で設定したデータベースにクエリを実行する
適切なデータベースタイプのオプションを指定して実行します。データベースタイプが指定されていない場合、チャットセッションではデフォルトとして SQLite が使用され、src/data フォルダー内に mymcpdb.db という名前のデータベースが作成されます。このファイルを変更すると、既存の SQLite データベースを指定できます。
cd src
python3 chat.py --db-type [sqlite / postgres]
次のような質問をします(データベースユーザーには、データベースでこれらの操作を実行する権限が必要です)。
- products テーブルで利用可能な商品をすべて一覧表示する
- 価格が 50.00 を超える商品の一覧
このサンプルの実行コスト
以下のサービスでは、使用量と稼働時間に応じて費用が発生します。必要に応じて、終了時にこれらのリソースへのアクセスを削除または無効にしてください。
- RDS Postgres データベース(https://aws.amazon.com/rds/postgresql/pricing/)
- Bedrok Claude Model invoke API
- Bedrock Guardrail
追加情報
テスト用の RDS Postgres テーブルとデータのサンプル。簡単なテスト用です。
設定するデータベースユーザーには、これらの操作を実行するための十分な権限が必要です。このサンプルは読み取り専用の指示でのみ動作するため、これらの操作はデータベースツールを使用して、このサンプルの外部で実行する必要があります。
CREATE TABLE users ( id SERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, email VARCHAR(255) UNIQUE NOT NULL, created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP );
INSERT INTO users (name, email) VALUES ('John Doe', '[email protected]'), ('Jane Smith', '[email protected]'), ('Bob Wilson', '[email protected]'), ('Alice Johnson', '[email protected]'), ('Tom Brown', '[email protected]');
CREATE TABLE products ( product_id SERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, price DECIMAL(10,2) NOT NULL );
INSERT INTO products (name, price) VALUES ('Amazon Echo Dot (5th Gen)', 49.99), ('Kindle Paperwhite 8GB', 139.99), ('Fire TV Stick 4K', 49.99), ('Ring Video Doorbell', 99.99), ('Amazon Smart Plug', 24.99);
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。