Redshift使用MCP服务器
概述
该项目实现了一个专门用于与Amazon Redshift数据库交互的模型上下文协议(MCP)服务器。
它弥合了大型语言模型(LLM)或人工智能助手(如Claude、Cursor或自定义应用程序中的助手)与Redshift数据仓库之间的差距,实现了安全、标准化的数据访问和交互。这允许用户使用自然语言或人工智能驱动的提示查询数据、理解数据库结构和监控/诊断操作。
此服务器适用于希望以结构化和安全的方式将LLM功能直接与其Amazon Redshift数据环境集成的开发人员、数据分析师或团队。
目录
- 概述 - 目录 - 特性 - 先决条件 - 安装 - 从PyPI安装(推荐) - 从源代码安装 - 配置 - 用法 - 连接克劳德桌面/拟人控制台: - 与Claude Code CLI连接: - 与Cursor IDE连接: - 可用MCP资源 - 可用的MCP工具 - 待办 - 参考文献
特性
- ✨ 安全的Redshift连接(通过Data API): 通过Boto3使用AWS Redshift Data API连接到您的亚马逊Redshift集群,利用AWS Secrets Manager通过环境变量安全管理凭据。
- 🔍 架构发现: 公开MCP资源,以列出指定架构中的架构和表。
- 📊 元数据和统计: 提供工具(
handle_inspect_table)收集详细的表元数据、统计数据(如大小、行数、偏斜、统计数据陈旧性)和维护状态。 - 📝 只读查询执行: 提供安全的MCP工具(
handle_execute_ad_hoc_query)对Redshift数据库执行任意SELECT查询,从而实现基于LLM请求的数据检索。 - 📈 查询性能分析: 包括一个工具(
handle_diagnose_query_performance)检索和分析特定查询ID的执行计划、指标和历史数据。 - 🔍 表检查: 提供工具(
handle_inspect_table)对表格进行全面检查,包括设计、存储、运行状况和使用情况。 - 🩺 群集运行状况检查: 提供工具(
handle_check_cluster_health)使用各种诊断查询对集群进行基本或全面的健康评估。 - 🔒 锁诊断: 提供工具(
handle_diagnose_locks)识别并报告当前的锁争用和阻塞会话。 - 📊 工作量监控: 包括一个工具(
handle_monitor_workload)分析一个时间窗口内的集群工作负载模式,包括WLM、顶级查询和资源使用情况。 - 📝 DDL检索: 提供工具(
handle_get_table_definition)要检索SHOW TABLE指定表的输出(DDL)。 - 🛡️ 输入消毒: 在适用的情况下,通过Boto3 Redshift Data API客户端使用参数化查询来降低SQL注入风险。
- 🧩 标准化MCP接口: 遵守模型上下文协议规范,与兼容客户端(如Claude Desktop、Cursor IDE、自定义应用程序)无缝集成。
先决条件
软件:
- Python 3.10+
uv(推荐的包管理器)或pip
基础设施和通道:
- 访问Amazon Redshift集群。
- 具有使用Redshift Data API权限的AWS帐户(
redshift-data:*)并访问指定的Secrets Manager密钥(secretsmanager:GetSecretValue). - Redshift用户帐户,其凭据存储在AWS Secrets Manager中。该用户需要Redshift内的必要权限来执行该服务器启用的动作(例如。,
CONNECT到数据库,SELECT在目标表上,SELECT关于相关的系统观点,如pg_class,pg_namespace,svv_all_schemas,svv_tables,\svv_table_info\)。强烈建议使用具有最小特权原则的角色。看 安全考虑.
资格证书:
您的Redshift连接详细信息通过AWS Secrets Manager进行管理,服务器使用Redshift Data API进行连接。您需要:
- Redshift群集标识符。
- 群集中的数据库名称。
- AWS Secrets Manager机密的ARN,其中包含数据库凭据(用户名和密码)。
- 集群和机密所在的AWS区域。
- 如果不使用默认凭据/区域,则可以选择AWS配置文件名称。
这些详细信息将通过环境变量进行配置,详见 配置 部分。
安装
从PyPI安装(推荐)
安装Redshift Utils MCP服务器的最简单方法是直接从PyPI安装:
# Using pip
pip install redshift-utils-mcp
# Using uv (recommended)
uv pip install redshift-utils-mcp从源代码安装
或者,您可以从源代码存储库安装:
# Clone the repository
git clone https://github.com/vinodismyname/redshift-utils-mcp.git
cd redshift-utils-mcp
# Install using uv (recommended)
uv sync
# Or install using pip
pip install -e .配置
设置环境变量: 此服务器需要以下环境变量才能通过AWS Data API连接到您的Redshift集群。您可以使用systemd服务文件、Docker环境文件或创建 .env 项目根目录中的文件(如果使用以下工具 uv 或 python-dotenv 支持从以下位置加载 .env).
使用shell导出的示例:
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" # Or AWS_DEFAULT_REGION
# export AWS_PROFILE="your-aws-profile-name" # Optional示例 .env 文件(参见 .env.example):
# .env file for Redshift MCP Server configuration
# Ensure this file is NOT committed to version control if it contains secrets. Add it to .gitignore.
REDSHIFT_CLUSTER_ID="your-cluster-id"
REDSHIFT_DATABASE="your_database_name"
REDSHIFT_SECRET_ARN="arn:aws:secretsmanager:us-east-1:123456789012:secret:your-redshift-secret-XXXXXX"
AWS_REGION="us-east-1" # Or AWS_DEFAULT_REGION
# AWS_PROFILE="your-aws-profile-name" # Optional必需变量表:
| 变量名称 | 必填 | 描述 | 示例值 |
|---|---|---|---|
REDSHIFT_CLUSTER_ID | 是 | 您的Redshift群集标识符。 | my-redshift-cluster |
REDSHIFT_DATABASE | Yes | 要连接的数据库的名称 | mydatabase |
REDSHIFT_SECRET_ARN | 是 | AWS Secrets Manager ARN for Redshift凭据。 | arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret-abcdef |
AWS_REGION | 是 | 数据API和机密管理器的AWS区域。 | us-east-1 |
AWS_DEFAULT_REGION | 否 | 替代 AWS_REGION 用于指定AWS区域。 | us-west-2 |
AWS_PROFILE | 没有 | 要从凭据文件(~/.AWS/…)中使用的AWS配置文件名。 | my-redshift-profile |
*注意:确保Boto3使用的AWS凭据(通过环境、配置文件或IAM角色)有权访问指定的 REDSHIFT_SECRET_ARN 并使用Redshift Data API(redshift-data:*).*
用法
安装后,您可以直接从命令行运行服务器:
# If installed from PyPI
redshift-utils-mcp
# Or using uvx (no installation required)
uvx redshift-utils-mcp连接克劳德桌面/拟人控制台:
将以下配置块添加到您的 mcp.json 文件:
{
"mcpServers": {
"redshift-utils-mcp": {
"command": "uvx",
"args": ["redshift-utils-mcp"],
"env": {
"REDSHIFT_CLUSTER_ID":"your-cluster-id",
"REDSHIFT_DATABASE":"your_database_name",
"REDSHIFT_SECRET_ARN":"arn:aws:secretsmanager:...",
"AWS_REGION": "us-east-1"
}
}
}与Claude Code CLI连接:
使用Claude CLI添加服务器配置:
claude mcp add redshift-utils-mcp \
-e REDSHIFT_CLUSTER_ID="your-cluster-id" \
-e REDSHIFT_DATABASE="your_database_name" \
-e REDSHIFT_SECRET_ARN="arn:aws:secretsmanager:..." \
-e AWS_REGION="us-east-1" \
-- uvx redshift-utils-mcp与Cursor IDE连接:
- 使用中的说明在本地启动MCP服务器 使用/快速启动 部分。
- 在光标中,打开命令选项板(Cmd/Ctrl+Shift+P)。
- 键入“连接到MCP服务器”或导航到MCP设置。
- 添加新的服务器连接。
- 选择
stdio运输类型。 - 输入启动服务器所需的命令和参数(
uvx run redshift_utils_mcp).确保正在运行的命令可以使用任何必要的环境变量。 - Cursor应检测服务器及其可用的工具/资源。
可用MCP资源
| 资源URI模式 | 描述 | 示例URI |
|---|---|---|
/scripts/{script_path} | 从服务器检索SQL脚本文件的原始内容 sql_scripts 目录。 | /scripts/health/disk_usage.sql |
redshift://schemas | 列出连接数据库中所有可访问的用户定义架构。 | redshift://schemas |
redshift://wlm/configuration | 检索当前工作负载管理(WLM)配置详细信息。 | redshift://wlm/configuration |
redshift://schema/{schema_name}/tables | 列出指定范围内所有可访问的表和视图 {schema_name}. | redshift://schema/public/tables |
替换 {script_path} 和 {schema_name} 在发出请求时使用实际值。 模式/表的可访问性取决于通过配置授予Redshift用户的权限 REDSHIFT_SECRET_ARN.
可用的MCP工具
| 工具名称 | 描述 | 关键参数(必填\*) | 调用示例 |
|---|---|---|---|
handle_check_cluster_health | 使用一组诊断SQL脚本对Redshift群集执行运行状况评估。 | level (可选), time_window_days (可选) | use_mcp_tool("redshift-admin", "handle_check_cluster_health", {"level": "full"}) |
handle_diagnose_locks | 标识群集中的活动锁争用和阻塞会话。 | min_wait_seconds (可选) | use_mcp_tool("redshift-admin", "handle_diagnose_locks", {"min_wait_seconds": 10}) |
handle_diagnose_query_performance | 分析特定查询的执行性能,包括计划、指标和历史数据。 | query_id\* | use_mcp_tool("redshift-admin", "handle_diagnose_query_performance", {"query_id": 12345}) |
handle_execute_ad_hoc_query | 执行用户通过Redshift Data API提供的任意SQL查询。设计为逃生舱。 | sql_query\* | use_mcp_tool("redshift-admin", "handle_execute_ad_hoc_query", {"sql_query": "SELECT ..."}) |
handle_get_table_definition | 检索DDL(数据定义语言)语句(SHOW TABLE)对于特定的表格。 | schema_name*, table_name* | use_mcp_tool("redshift-admin", "handle_get_table_definition", {"schema_name": "public", ...}) |
handle_inspect_table | 检索特定Redshift表的详细信息,包括设计、存储、运行状况和使用情况。 | schema_name*, table_name* | use_mcp_tool("redshift-admin", "handle_inspect_table", {"schema_name": "analytics", ...}) |
handle_monitor_workload | 使用各种诊断脚本分析指定时间窗口内的集群工作负载模式。 | time_window_days (可选), top_n_queries (可选) | use_mcp_tool("redshift-admin", "handle_monitor_workload", {"time_window_days": 7}) |
待办
- \[\]改进提示选项
- \[\]添加对更多凭据方法的支持
- \[\]添加对Redshift无服务器的支持
参考文献
- 该项目在很大程度上依赖于 模型上下文协议规范.
- 使用由提供的官方MCP SDK构建 模型上下文协议.
- 使用AWS Python SDK(Boto3)与 亚马逊Redshift数据API.
- 许多诊断SQL脚本都改编自优秀的 awslabs/amazon红移实用程序 存储库。
