AWS Athena MCP Server について
AWS Athena MCP Serverは、n8n AIエージェントによるAthenaデータベースの確認とSQL実行を可能にします。データベースやテーブルの検索、スキーマ情報の取得、クエリ実行ツールを提供し、コンテナとEKSのデプロイ手順も含みます。
主な機能
- 01データベースとテーブルの一覧表示
- 02テーブルのスキーマとメタデータの取得
- 03SQLクエリの実行と結果の返却
- 04環境変数による設定
- 05ヘルスチェックと監視
活用シーン
- 01n8nエージェントで利用可能なAthenaデータベースを調査
- 02クエリ作成前にテーブル列を確認
- 03n8nでSQLを実行して結果を取得
- 04DockerまたはEKSでサーバーをデプロイ
MCP 対応
n8n AIエージェントを含むMCPクライアントに、Athenaのデータベース検索、メタデータ取得、SQL実行ツールを提供します。AWSリージョン、カタログ、データベース、ワークグループ、クエリ結果用S3ロケーションを設定できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
AWS Athena MCP サーバー
n8n AI エージェントとの連携を目的とした、AWS Athena 用の Model Context Protocol(MCP)サーバーです。
概要
この MCP サーバーは、n8n AI エージェントが AWS Athena にクエリを実行し、データを取得するための標準化された方法を提供します。Model Context Protocol を実装しており、n8n エージェントは次の操作を行えます。
- 利用可能なデータベースとテーブルを一覧表示する
- テーブルのスキーマとメタデータを取得する
- SQL クエリを実行して結果を取得する
特長
- n8n AI エージェントから Athena を操作するためのシンプルな API
- ヘルスチェックとモニタリングを組み込み
- 環境変数による設定が可能
- デプロイしやすいコンテナ化
- EKS のマニフェスト例を含む、Kubernetes 対応
前提条件
- Athena にアクセスできる AWS アカウント
- 適切な権限を持つ AWS 認証情報
- ローカルでの開発/テスト用の Docker
- 本番環境へのデプロイ用の Kubernetes/EKS
環境変数
サーバーは次の環境変数を使用して設定します。
| 変数 | 説明 | デフォルト |
|---|---|---|
AWS_REGION | Athena の 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(string、必須):実行する SQL クエリdatabase(string、任意):データベース名catalog(string、任意):カタログ名output_location(string、任意):結果の S3 ロケーションworkgroup(string、任意):ワークグループ名max_results(integer、任意):返す結果の最大件数max_wait_seconds(integer、任意):クエリ完了までの最大待機時間
list_databases
カタログ内の利用可能なデータベースを一覧表示します。
パラメーター:
catalog(string、任意):カタログ名
list_tables
指定したデータベース内のテーブルを一覧表示します。
パラメーター:
database(string、必須):データベース名catalog(string、任意):カタログ名
get_table_metadata
列定義など、指定したテーブルのメタデータを取得します。
パラメーター:
table(string、必須):テーブル名database(string、必須):データベース名catalog(string、任意):カタログ名
ローカル開発
インストール
- リポジトリをクローンします。
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
- 外部からのアクセスが必要な場合は、(任意で)Ingress リソースを作成します。
n8n との連携
この MCP サーバーを n8n で使用するには、次の手順を実行します。
- MCP サーバーをインフラストラクチャにデプロイします
- n8n AI Agent ノードに適切なシステムプロンプトを設定します(
docs/n8n_system_prompt_template.mdを参照) - n8n から MCP サーバーのエンドポイントに接続します
n8n AI エージェントのシステムプロンプトテンプレート
n8n AI Agent ノードのシステムプロンプトには、docs/n8n_system_prompt_template.md のテンプレートを使用してください。このテンプレートは、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/:特定のユースケース向けのプロンプト例が含まれるディレクトリ
ライセンス
MIT
コントリビューション
コントリビューションを歓迎します。お気軽に Pull Request を送信してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。