关于 Amazon Bedrock Converse API and Database MCP Server Integration
此示例将 Amazon Bedrock Converse API 与关系数据库结合,让开发者以自然语言查询数据。它展示了基于 RDS PostgreSQL 和 SQLite 的只读模式,可作为其他 MCP 数据库集成的参考。
主要功能
- 01自然语言数据库查询
- 02只读查询模式
- 03支持 RDS PostgreSQL 和 SQLite
- 04集成 Bedrock Converse API
- 05可选 Bedrock Guardrails
适用场景
- 01询问数据库记录相关信息
- 02试验对话式数据库访问
- 03参考 MCP 数据库集成模式
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 模型:Anthropic Claude Sonnet 3.5 或 Bedrock 提供的其他大模型。链接
- Bedrock Guardrails:根据应用需求和负责任 AI 政策实施定制防护措施。链接
- RDS Postgres:用于查询数据库。链接
前置条件
- 拥有一个 AWS 账户,并具备创建 RDS PostgreSQL 数据库的 AWS Identity and Access Management (IAM) 权限
- 可访问 Bedrock 大模型
- 拥有对 RDS Postgress 的只读访问权限的用户
- 已安装 Python 和 Boto3 库
- 类似 Visual Studio Code 的 IDE
- 本地系统上有 SQLite 数据库
- 从此处下载 AWS RDS 根证书
- 可选:设置 Bedrock Guardrails,在大模型层面阻止 DDL 查询。即使数据库用户允许执行 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 模型。此示例假设采用以下配置
- 区域:从 AWS 会话获取,在 agent.py 中设置
- 大模型:us.anthropic.claude-3-5-sonnet-20240620-v1:0 #在 mcpmain.py 中使用跨区域推理。如果不需要跨区域推理,请改用大模型端点。
步骤 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 模型调用 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 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。