🚀 Redshift Utils MCP Server
本项目实现了一个专门用于与亚马逊Redshift数据库进行交互的模型上下文协议(MCP)服务器。它架起了大语言模型(LLMs)或AI助手(如Claude、Cursor中的助手或自定义应用程序)与Redshift数据仓库之间的桥梁,实现了安全、标准化的数据访问和交互。用户可以使用自然语言或AI驱动的提示来查询数据、了解数据库结构以及执行监控/诊断操作。该服务器适用于希望以结构化和安全的方式将LLM功能直接集成到其亚马逊Redshift数据环境中的开发者、数据分析师或团队。
🚀 快速开始
本服务器主要用于连接大语言模型或AI助手与亚马逊Redshift数据库,实现数据交互。你可以按照以下步骤进行配置和使用:
- 确保满足先决条件。
- 完成配置,设置必要的环境变量。
- 根据不同的使用场景,参考使用方法进行连接和操作。
✨ 主要特性
- ✨ 安全的Redshift连接(通过数据API):使用Boto3通过AWS Redshift数据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数据API客户端使用参数化查询,以降低SQL注入风险。
- 🧩 标准化MCP接口:遵循模型上下文协议规范,可与兼容的客户端(如Claude Desktop、Cursor IDE、自定义应用程序)无缝集成。
📦 安装指南
先决条件
软件
- Python 3.8+
uv
(推荐的包管理器)
- Git(用于克隆仓库)
基础设施与访问权限
- 访问亚马逊Redshift集群。
- 具有使用Redshift数据API(
redshift-data:*
)和访问指定Secrets Manager机密(secretsmanager:GetSecretValue
)权限的AWS账户。
- 一个Redshift用户账户,其凭证存储在AWS Secrets Manager中。该用户需要在Redshift中具有执行此服务器启用的操作所需的权限(例如,
CONNECT
到数据库、在目标表上执行SELECT
操作、在相关系统视图(如pg_class
、pg_namespace
、svv_all_schemas
、svv_tables
、svv_table_info
)上执行SELECT
操作)。强烈建议使用具有最小权限原则的角色。请参阅安全注意事项。
凭证
你的Redshift连接详细信息通过AWS Secrets Manager进行管理,服务器使用Redshift数据API进行连接。你需要:
- Redshift集群标识符。
- 集群内的数据库名称。
- 包含数据库凭证(用户名和密码)的AWS Secrets Manager机密的ARN。
- 集群和机密所在的AWS区域。
- 可选的AWS配置文件名称(如果不使用默认凭证/区域)。
这些详细信息将通过环境变量进行配置,具体请参阅配置部分。
配置
设置环境变量:
本服务器需要以下环境变量才能通过AWS数据API连接到你的Redshift集群。你可以直接在shell中设置这些变量,使用systemd服务文件、Docker环境文件,或者在项目根目录中创建一个.env
文件(如果使用支持从.env
文件加载的工具,如uv
或python-dotenv
)。
使用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"
.env
文件示例(请参阅.env.example
)
# Redshift MCP服务器配置的.env文件
# 如果该文件包含机密信息,请确保不要将其提交到版本控制。将其添加到.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" # 或 AWS_DEFAULT_REGION
# AWS_PROFILE="your-aws-profile-name" # 可选
必需变量表
变量名 |
是否必需 |
描述 |
示例值 |
REDSHIFT_CLUSTER_ID |
是 |
你的Redshift集群标识符。 |
my-redshift-cluster |
REDSHIFT_DATABASE |
是 |
要连接的数据库名称。 |
mydatabase |
REDSHIFT_SECRET_ARN |
是 |
Redshift凭证的AWS Secrets Manager ARN。 |
arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret-abcdef |
AWS_REGION |
是 |
数据API和Secrets Manager的AWS区域。 |
us-east-1 |
AWS_DEFAULT_REGION |
否 |
用于指定AWS区域的AWS_REGION 的替代方案。 |
us-west-2 |
AWS_PROFILE |
否 |
要从你的凭证文件(~/.aws/...)中使用的AWS配置文件名称。 |
my-redshift-profile |
注意:确保Boto3使用的AWS凭证(通过环境、配置文件或IAM角色)具有访问指定REDSHIFT_SECRET_ARN
和使用Redshift数据API(redshift-data:*
)的权限。
💻 使用示例
与Claude Desktop / Anthropic Console连接
在你的mcp.json
文件中添加以下配置块。根据你的安装方法和设置调整command
、args
、env
和workingDirectory
。
{
"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服务器。
- 在Cursor中,打开命令面板(Cmd/Ctrl + Shift + P)。
- 输入“Connect to MCP Server”或导航到MCP设置。
- 添加一个新的服务器连接。
- 选择
stdio
传输类型。
- 输入启动服务器所需的命令和参数(
uvx run redshift_utils_mcp
)。确保运行命令时所需的任何环境变量都可用。
- Cursor应该会检测到服务器及其可用的工具/资源。
可用的MCP资源
资源URI模式 |
描述 |
示例URI |
/scripts/{script_path} |
从服务器的sql_scripts 目录中检索SQL脚本文件的原始内容。 |
/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_SECRET_ARN
配置的Redshift用户的权限。
可用的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数据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 Serverless的支持
贡献
欢迎贡献代码!请遵循以下指南。
- 查找/报告问题:查看GitHub问题页面,了解现有的错误或功能请求。如有需要,随时打开一个新问题。
安全考虑
通过MCP服务器提供数据库访问时,安全至关重要。请考虑以下几点:
🔒 凭证管理:此服务器通过Redshift数据API使用AWS Secrets Manager,这比直接在环境变量或配置文件中存储凭证更安全。确保Boto3使用的AWS凭证(通过环境、配置文件或IAM角色)得到安全管理,并具有最低必要权限。切勿将你的AWS凭证或包含机密信息的.env
文件提交到版本控制。
🛡️ 最小权限原则:配置其凭证存储在AWS Secrets Manager中的Redshift用户时,应为服务器的预期功能分配最低必要权限。例如,如果只需要读取访问权限,则仅授予在必要模式/表上的CONNECT
和SELECT
权限,以及在所需系统视图上的SELECT
权限。避免使用具有高权限的用户,如admin
或集群超级用户。
有关创建受限Redshift用户和管理权限的指导,请参阅官方文档(https://docs.aws.amazon.com/redshift/latest/mgmt/security.html)。
📄 许可证
本项目采用MIT许可证。有关详细信息,请参阅(LICENSE)文件。
📚 参考文献