使用说明
AWS Athena MCP服务器
AWS Athena的模型上下文协议(MCP)服务器,旨在与n8n AI代理集成。
概述
此MCP服务器为n8n AI代理查询AWS Athena和检索数据提供了一种标准化的方法。它实现了模型上下文协议,允许n8n代理:
- 列出可用的数据库和表
- 获取表架构和元数据
- 执行SQL查询并检索结果
特性
- 简单的API,用于从n8n AI代理与Athena交互
- 内置健康检查和监测
- 可通过环境变量进行配置
- 容器化,便于部署
- Kubernetes已准备好示例EKS清单
先决条件
- 具有Athena访问权限的AWS帐户
- 具有适当权限的AWS凭据
- Docker用于本地开发/测试
- 用于生产部署的Kubernetes/EKS
环境变量
使用以下环境变量配置服务器:
| 变量 | 描述 | 默认值 |
|---|---|---|
AWS_REGION |
雅典娜的AWS区域 | us-east-1 |
ATHENA_CATALOG |
Athena目录名称 | AwsDataCatalog |
ATHENA_DATABASE |
要使用的默认数据库 | 无 |
ATHENA_WORKGROUP |
要使用的Athena工作组 | primary |
ATHENA_OUTPUT_LOCATION |
查询结果的S3位置 | 无(必填) |
HOST |
主机绑定服务器 | 0.0.0.0 |
PORT |
要收听的端口 | 8050 |
可用工具
MCP服务器为n8n AI代理提供以下工具:
execute_query
对Athena执行SQL查询并检索结果。
参数:
query(字符串,必填):要执行的SQL查询database(字符串,可选):数据库名称catalog(字符串,可选):目录名称output_location(字符串,可选):S3位置显示结果workgroup(字符串,可选):工作组名称max_results(整数,可选):要返回的最大结果数max_wait_seconds(整数,可选):等待查询完成的最长时间
列表_数据库
列出目录中的可用数据库。
参数:
catalog(字符串,可选):目录名称
list_tables
列出特定数据库中的表。
参数:
database(字符串,必填):数据库名称catalog(字符串,可选):目录名称
获取表数据
获取特定表的元数据,包括列定义。
参数:
table(字符串,必填):表名database(字符串,必填):数据库名称catalog(字符串,可选):目录名称
地方发展
安装
- 克隆存储库:
git clone https://github.com/yourusername/aws-athena-mcp-server.git
cd aws-athena-mcp-server
- 安装依赖项:
pip install -r requirements.txt
- 配置AWS凭据:
export AWS_ACCESS_KEY_ID=your_access_key
export AWS_SECRET_ACCESS_KEY=your_secret_key
export AWS_REGION=your_region
export ATHENA_OUTPUT_LOCATION=s3://your-bucket/folder/
- 运行服务器:
python main.py
服务器将在以下时间可用http://localhost:8050.
Docker设置
构建Docker镜像
docker build -t athena-mcp-server:latest .
运行Docker容器
docker run -p 8050:8050 \
-e AWS_REGION=us-east-1 \
-e ATHENA_OUTPUT_LOCATION=s3://your-bucket/folder/ \
-e AWS_ACCESS_KEY_ID=your_access_key \
-e AWS_SECRET_ACCESS_KEY=your_secret_key \
athena-mcp-server:latest
部署到AWS EKS
先决条件
- 配置了适当权限的AWS CLI
kubectl已安装并配置为连接到EKS集群- 安装Docker以构建镜像
部署步骤
- 构建Docker镜像并将其推送到ECR:
# Create ECR repository if it doesn't exist
aws ecr create-repository --repository-name athena-mcp-server
# Get ECR login command
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin ${AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com
# Build and tag the image
docker build -t ${AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/athena-mcp-server:latest .
# Push the image to ECR
docker push ${AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/athena-mcp-server:latest
- 为EKS服务帐户创建IAM角色:
# Create IAM policy
aws iam create-policy \
--policy-name AthenaQueryPolicy \
--policy-document file://k8s/aws-policy.json
# Create IAM role for service account (IRSA)
eksctl create iamserviceaccount \
--name athena-mcp-server \
--namespace default \
--cluster your-eks-cluster \
--attach-policy-arn arn:aws:iam::${AWS_ACCOUNT_ID}:policy/AthenaQueryPolicy \
--approve \
--override-existing-serviceaccounts
- 用实际值更新Kubernetes清单占位符:
export AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
export AWS_REGION=us-east-1
export ATHENA_DEFAULT_DATABASE=your_database
export ATHENA_WORKGROUP=primary
export ATHENA_OUTPUT_LOCATION=s3://your-bucket/athena-results/
# Replace variables in YAML files
envsubst < k8s/deployment.yaml > k8s/generated/deployment.yaml
envsubst < k8s/serviceaccount.yaml > k8s/generated/serviceaccount.yaml
- 应用Kubernetes清单:
kubectl apply -f k8s/generated/serviceaccount.yaml
kubectl apply -f k8s/generated/deployment.yaml
kubectl apply -f k8s/generated/service.yaml
- 验证部署:
kubectl get pods -l app=athena-mcp-server
kubectl get service athena-mcp-server
- (可选)如果需要外部访问,请创建入口资源。
与n8n集成
要将此MCP服务器与n8n一起使用,请执行以下操作:
- 将MCP服务器部署到您的基础架构
- 使用适当的系统提示配置n8n AI Agent节点(请参阅
docs/n8n_system_prompt_template.md) - 从n8n连接到MCP服务器端点
n8n AI代理系统提示模板
在中使用模板 docs/n8n_system_prompt_template.md 用于n8n AI Agent节点系统提示。此模板指导AI:
- 了解数据库模式
- 制定高效的SQL查询
- 通过MCP服务器执行查询
- 清晰地呈现结果
使用您特定的Athena数据库结构和常见查询模式自定义模板。
文档
其他文档可以在 docs/ 目录:
n8n_system_prompt_template.md:n8n AI Agent系统提示模板implementation_guide.md:详细的实施指南architecture.md:架构图和说明troubleshooting.md:常见问题的解决方案n8n_integration_example.md:示例n8n工作流examples/:包含特定用例示例提示的目录
许可证
麻省理工学院
贡献
欢迎投稿!请随时提交拉取请求。