这个项目是一个基于Model Context Protocol (MCP) 的服务器,专门用于与Amazon Redshift数据库交互。它使得大型语言模型(LLM)或AI助手能够以安全、标准化的方式访问和操作Redshift数据,支持自然语言查询、数据库结构理解、监控和诊断等功能。

主要功能点

  • 安全连接Redshift: 通过AWS Redshift Data API连接,利用AWS Secrets Manager管理凭据。
  • 数据库架构发现: 暴露MCP资源,用于列出schema、表和WLM配置。
  • 只读查询执行: 提供工具安全执行任意SELECT查询。
  • 表和Schema操作: 提供工具列出schema、表,获取表定义(DDL)。
  • 数据库诊断和监控: 提供工具进行集群健康检查、分析查询性能、诊断锁争用、监控工作负载。
  • 标准化接口: 遵循MCP规范,可与兼容的MCP客户端(如Claude Desktop, Cursor IDE)集成。

安装步骤

  1. 环境准备: 确保您已安装 Python 3.8+ 以及 'uv'(推荐包管理器)或 'pip'。
  2. 克隆项目: 使用 Git 克隆项目仓库到您的本地机器。
  3. 进入目录: 导航到克隆的项目根目录。
  4. 安装依赖: 运行以下命令安装项目所需的库:
    • 如果使用 'uv': 'uv pip install -r requirements.txt'
    • 如果使用 'pip': 'pip install -r requirements.txt'

服务器配置

本MCP服务器需要配置您的Amazon Redshift连接信息。这些信息通过环境变量提供。您需要在启动服务器的环境中设置这些变量。

重要环境变量 (必须设置):

  • 'REDSHIFT_CLUSTER_ID': 您的 Amazon Redshift 集群标识符。
  • 'REDSHIFT_DATABASE': 要连接的数据库名称。
  • 'REDSHIFT_SECRET_ARN': 存储 Redshift 数据库用户凭据的 AWS Secrets Manager Secret 的 ARN。
  • 'AWS_REGION' 或 'AWS_DEFAULT_REGION': 您的 AWS 区域(Data API 和 Secrets Manager 所在区域)。

可选环境变量:

  • 'AWS_PROFILE': 要使用的 AWS 配置文件名(如果您不使用默认凭据链)。

示例 (非用于MCP客户端配置,仅说明环境变量):

export REDSHIFT_CLUSTER_ID="your-cluster-id"
export REDSHIFT_DATABASE="your_database_name"
export REDSHIFT_SECRET_ARN="arn:aws:secretsmanager:us-east-1:123456789012:secret:your-redshift-secret-XXXXXX"
export AWS_REGION="us-east-1"
# export AWS_PROFILE="my-redshift-profile"

在 MCP 客户端中配置服务器:

MCP 客户端(如 Claude Desktop 或 Cursor IDE)通常通过一个 JSON 文件(例如 'mcp.json')来配置服务器连接。配置 MCP 服务器时,您需要指定启动服务器的命令 ('command') 及其参数 ('args'),并确保上述环境变量在该命令执行时可用。

以下是一个示例 MCP 客户端配置块。请根据您的实际安装路径和MCP客户端的配置方法进行调整切勿将敏感信息(如 ARN、密钥)直接写在此 JSON 文件中。大多数 MCP 客户端提供了更安全的方式来配置环境变量,请查阅您的客户端文档。

{
  "mcpServers": {
    "redshift-utils-mcp": {
      // command 和 args 指向您的 MCP 服务器启动脚本或模块
      // 如果您使用 uv 安装,通常是 uvx <模块名>
      "command": "uvx",
      "args": ["redshift_utils_mcp"],
      // 或者如果您使用 pip 并希望直接运行模块:
      // "command": "python",
      // "args": ["-m", "redshift_utils_mcp"],

      // IMPORTANT: MCP客户端应通过其自身的界面或配置文件安全地管理环境变量
      // DO NOT store secrets directly in this JSON block in production.
      // The 'env' block below is conceptual - consult your client documentation!
      // "env": {
      //   "REDSHIFT_CLUSTER_ID": "your-cluster-id",
      //   "REDSHIFT_DATABASE": "your_database_name",
      //   "REDSHIFT_SECRET_ARN": "arn:aws:secretsmanager:...",
      //   "AWS_REGION": "us-east-1"
      // }
    }
  }
}

确保用于运行服务器的 AWS 凭据(通过环境变量、共享配置文件或 EC2/ECS/EKS IAM 角色)拥有访问 Secrets Manager 秘密 ('secretsmanager:GetSecretValue') 和调用 Redshift Data API ('redshift-data:*') 的权限。存储在 Secrets Manager 中的 Redshift 数据库用户需要执行服务器所需操作(如 'SELECT' 系统视图和目标表)的权限。

基本使用方法

配置并连接 MCP 服务器后,您的 LLM 客户端将能够发现并利用服务器提供的 资源 (Resources)工具 (Tools)

  • 访问资源: 您可以直接通过客户端的界面或交互方式访问服务器暴露的数据,例如查看可用的 schema 列表 ('redshift://schemas') 或特定 schema 下的表列表 ('redshift://schema/public/tables')。
  • 调用工具: LLM 可以根据您的自然语言请求,选择并调用服务器提供的工具来执行具体任务,例如:
    • 提问关于某个表的信息 → LLM 调用 'handle_inspect_table' 工具。
    • 要求执行一个 SQL 查询 → LLM 调用 'handle_execute_ad_hoc_query' 工具。
    • 询问集群的健康状况 → LLM 调用 'handle_check_cluster_health' 工具。
    • 询问是否有锁阻塞 → LLM 调用 'handle_diagnose_locks' 工具。
    • 询问某个查询的性能 → LLM 调用 'handle_diagnose_query_performance' 工具。

服务器将处理这些请求,与 Redshift Data API 交互,并将结果返回给客户端。

信息

分类

数据库与文件