本项目实现了一个专门用于与亚马逊Redshift数据库进行交互的模型上下文协议(MCP)服务器。它架起了大语言模型(LLMs)或AI助手(如Claude、Cursor中的助手或自定义应用程序)与Redshift数据仓库之间的桥梁,实现了安全、标准化的数据访问和交互。用户可以使用自然语言或AI驱动的提示来查询数据、了解数据库结构以及执行监控/诊断操作。该服务器适用于希望以结构化和安全的方式将LLM功能直接集成到其亚马逊Redshift数据环境中的开发者、数据分析师或团队。
本服务器主要用于连接大语言模型或AI助手与亚马逊Redshift数据库,实现数据交互。你可以按照以下步骤进行配置和使用:
handle_inspect_table)来收集详细的表元数据、统计信息(如大小、行数、倾斜度、统计信息陈旧度)和维护状态。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、顶级查询和资源使用情况。handle_get_table_definition),用于检索指定表的SHOW TABLE输出(DDL)。uv(推荐的包管理器)redshift-data:*)和访问指定Secrets Manager机密(secretsmanager:GetSecretValue)权限的AWS账户。CONNECT到数据库、在目标表上执行SELECT操作、在相关系统视图(如pg_class、pg_namespace、svv_all_schemas、svv_tables、svv_table_info)上执行SELECT操作)。强烈建议使用具有最小权限原则的角色。请参阅安全注意事项。你的Redshift连接详细信息通过AWS Secrets Manager进行管理,服务器使用Redshift数据API进行连接。你需要:
这些详细信息将通过环境变量进行配置,具体请参阅配置部分。
设置环境变量:
本服务器需要以下环境变量才能通过AWS数据API连接到你的Redshift集群。你可以直接在shell中设置这些变量,使用systemd服务文件、Docker环境文件,或者在项目根目录中创建一个.env文件(如果使用支持从.env文件加载的工具,如uv或python-dotenv)。
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" # 或 AWS_DEFAULT_REGION
# export AWS_PROFILE="your-aws-profile-name" # 可选
.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:*)的权限。
在你的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 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
stdio传输类型。uvx run redshift_utils_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用户的权限。
| 工具名称 | 描述 | 关键参数(必需*) | 示例调用 |
|---|---|---|---|
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}) |
欢迎贡献代码!请遵循以下指南。
通过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)文件。