返回市场
用于床岩集成与数据库的MCP服务器样本

用于床岩集成与数据库的MCP服务器样本

作者:aws-samples8 星标更新:2025-04-04

项目介绍

Amazon Bedrock Converse API 和数据库 MCP 服务器集成

此示例演示了如何通过 模型上下文协议(MCP) 服务器架构将 AWS Bedrock 的对话式 AI 能力与关系型数据库进行集成。该示例利用 Bedrock 的 Converse API 实现仅查询模式下的数据库自然语言交互,而 MCP 服务器则处理数据库操作的复杂性和安全协议。

架构图

该架构作为参考实现,供希望在其数据库应用程序中集成生成式 AI 能力的开发者参考。虽然示例主要关注 RDS PostgreSQL 和 SQLite,但该模式可以轻松适应其他支持 MCP 服务器集成的数据库系统。

此示例展示了:

  • 使用模型上下文协议(MCP)将 RDS PostgreSQL 和 SQLite 与 AWS Bedrock 的基础模型进行集成。
  • 将 Bedrock Converse API 与 MCP 服务器进行集成。
  • 使用 Bedrock 基础模型对数据库进行自然语言查询(只读)。
  • 通过 MCP 服务器实现安全高效的数据库操作。
  • 向现有应用程序添加生成式 AI 能力。
  • 跨数据库生成式 AI 解决方案的基础。

AWS 组件

列出在此示例中使用的 AWS 资源

  • Bedrock Converse API:通过管理多个与基础模型(FMs)交互中的上下文、记忆和状态,提供实时对话体验。链接
  • Bedrock 模型:Anthropic Claude Sonnet 3.5 或 Bedrock 中可用的其他大语言模型(LLMs)。链接
  • Bedrock 安全护栏:根据您的应用程序需求和负责任的 AI 政策实施定制的安全措施。链接
  • RDS PostgreSQL:用于查询数据库。链接

先决条件

  • 具有 AWS 身份和访问管理(IAM)权限以创建 RDS PostgreSQL 数据库的 AWS 账户。
  • 访问 Bedrock LLMs。
  • 具有 只读 权限的 RDS PostgreSQL 用户。
  • 已安装 Python 和 Boto3 库。
  • 如 Visual Studio Code 之类的 IDE。
  • 本地系统的 SQLite 数据库。
  • 这里 下载 AWS RDS 根证书。
  • 可选设置 Bedrock 安全护栏,以在 LLM 层级阻止 DDL 查询。这确保即使数据库用户允许 DDL 操作,也不会在数据库中执行 DDL 操作。

克隆仓库

git clone https://github.com/aws-samples/sample-for-bedrock-integration-with-database-mcp-server

第一步

使用如 Visual Studio 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 端点

第二步:RDS PostgreSQL 设置和访问

创建并设置 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 文件的位置

第三步:运行应用程序并使用自然语言查询配置的数据库

使用适当的数据库类型选项运行。如果没有提供数据库类型,聊天会话将默认使用 SQLite 并在 src/data 文件夹中创建名为 mymcpdb.db 的数据库。您可以通过修改 此文件 指向现有的 SQLite 数据库。

cd src

python3 chat.py --db-type [sqlite / postgres]

提问如下:(数据库用户必须具有执行这些操作的权限)

  • 列出 products 表中所有可用的产品
  • 列出价格高于 50.00 的产品

运行此示例的成本

以下服务将根据使用情况和运行时间产生费用。请在需要时删除或禁用对此资源的访问。

额外信息

用于测试的样本 RDS PostgreSQL 表和数据。这只是快速测试。

配置的数据库用户必须有足够的权限执行这些操作。由于此示例仅适用于只读指令,因此这些操作必须使用数据库工具在示例外部执行。

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', 'john.doe@example.com'),
    ('Jane Smith', 'jane.smith@example.com'),
    ('Bob Wilson', 'bob.wilson@example.com'),
    ('Alice Johnson', 'alice.j@example.com'),
    ('Tom Brown', 'tom.brown@example.com');

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);