Amazon Bedrock Converse API and Database MCP Server Integration

Amazon Bedrock Converse API and Database MCP Server Integration

aws-samples

研究与数据
访问服务器

README

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 服务器实现安全高效的数据库操作
  • 向现有应用程序添加 GenAI 功能
  • 跨数据库 GenAI 解决方案的基础

AWS 组件

本示例中使用的 AWS 资源列表

  • Bedrock Converse API: 通过管理与基础模型 (FM) 的多次交互中的上下文、记忆和状态,实现实时的会话体验。链接
  • Bedrock 模型: Anthropic Claude Sonnet 3.5 或 Bedrock 中提供的其他 LLM。链接
  • Bedrock Guardrails: 实施根据您的应用程序需求和负责任的 AI 策略定制的保护措施。链接
  • RDS Postgres: 用于查询数据库。链接

前提条件

  • 具有 AWS Identity and Access Management (IAM) 权限以创建 RDS PostgreSQL 数据库的 AWS 账户
  • 访问 Bedrock LLM
  • 具有对 RDS Postgress 的只读访问权限的用户
  • 安装了 Boto3 库的 Python
  • 像 Visual Studio Code 这样的 IDE
  • 本地系统上的 SQLite 数据库
  • 此处下载 AWS RDS 根证书
  • (可选)设置 Bedrock Guardrails 以在 LLM 级别阻止 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 中设置的
  • 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 表和数据。这仅用于快速测试。

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

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

推荐服务器

Crypto Price & Market Analysis MCP Server

Crypto Price & Market Analysis MCP Server

一个模型上下文协议 (MCP) 服务器,它使用 CoinCap API 提供全面的加密货币分析。该服务器通过一个易于使用的界面提供实时价格数据、市场分析和历史趋势。 (Alternative, slightly more formal and technical translation): 一个模型上下文协议 (MCP) 服务器,利用 CoinCap API 提供全面的加密货币分析服务。该服务器通过用户友好的界面,提供实时价格数据、市场分析以及历史趋势数据。

精选
TypeScript
MCP PubMed Search

MCP PubMed Search

用于搜索 PubMed 的服务器(PubMed 是一个免费的在线数据库,用户可以在其中搜索生物医学和生命科学文献)。 我是在 MCP 发布当天创建的,但当时正在度假。 我看到有人在您的数据库中发布了类似的服务器,但还是决定发布我的服务器。

精选
Python
mixpanel

mixpanel

连接到您的 Mixpanel 数据。 从 Mixpanel 分析查询事件、留存和漏斗数据。

精选
TypeScript
Sequential Thinking MCP Server

Sequential Thinking MCP Server

这个服务器通过将复杂问题分解为顺序步骤来促进结构化的问题解决,支持修订,并通过完整的 MCP 集成来实现多条解决方案路径。

精选
Python
Nefino MCP Server

Nefino MCP Server

为大型语言模型提供访问德国可再生能源项目新闻和信息的能力,允许按地点、主题(太阳能、风能、氢能)和日期范围进行筛选。

官方
Python
Vectorize

Vectorize

将 MCP 服务器向量化以实现高级检索、私有深度研究、Anything-to-Markdown 文件提取和文本分块。

官方
JavaScript
Mathematica Documentation MCP server

Mathematica Documentation MCP server

一个服务器,通过 FastMCP 提供对 Mathematica 文档的访问,使用户能够从 Wolfram Mathematica 检索函数文档和列出软件包符号。

本地
Python
kb-mcp-server

kb-mcp-server

一个 MCP 服务器,旨在实现便携性、本地化、简易性和便利性,以支持对 txtai “all in one” 嵌入数据库进行基于语义/图的检索。任何 tar.gz 格式的 txtai 嵌入数据库都可以被加载。

本地
Python
Research MCP Server

Research MCP Server

这个服务器用作 MCP 服务器,与 Notion 交互以检索和创建调查数据,并与 Claude Desktop Client 集成以进行和审查调查。

本地
Python
Cryo MCP Server

Cryo MCP Server

一个API服务器,实现了模型补全协议(MCP),用于Cryo区块链数据提取,允许用户通过任何兼容MCP的客户端查询以太坊区块链数据。

本地
Python