AWS Resources MCP Server について
AWS Resources MCP Server は、Claude が boto3 コードを実行して AWS リソースを照会・管理できるようにする Python 製 MCP サーバーです。git clone なしで Docker イメージから起動でき、AST 解析と制限付きの実行環境でコードを検証します。
主な機能
- 01boto3 コードスニペットによる AWS リソースの照会
- 02AST によるインポートとコード構造の検証
- 03組み込み関数を制限した実行環境
- 04複数アーキテクチャ向けの Docker イメージ
- 05環境変数または AWS プロファイルによる認証情報の指定
活用シーン
- 01Claude から S3 バケットや CodePipeline の実行履歴を照会する
- 02DynamoDB などのアクセス権限エラーを調査する
- 03コンテナ環境で AWS の運用確認を行う
MCP 対応
本プロジェクトは MCP サーバーであり、aws://query_resources リソースと aws_resources_query_or_modify ツールを MCP クライアントに公開して boto3 コードの実行を可能にします。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
AWS リソース MCP サーバー
概要
boto3 を使ったクエリを通じて、あらゆる AWS リソースにアクセスできる Python コードを生成して実行する、Model Context Protocol(MCP)サーバーの実装です。
ご自身の責任でご利用ください: 慎重な運用担当者がこのツールを使って管理操作を行えるよう、操作を読み取り専用に制限していません。実行できる操作は、AWS ユーザーロールの権限によって決まります。
デモ:Dynamodb の権限エラーを修正
https://github.com/user-attachments/assets/de88688d-d7a0-45e1-94eb-3f5d71e9a7c7
AWS MCP サーバーを新たに作成した理由
Developer Access を使って AWS Chatbot を試しました。無料利用枠では、リソースに対するクエリが月 25 回までに制限されています。次のプランは月額 $19 で、使わない機能が 90% 含まれています。また、結果は JSON 形式で返され、制約も多くあります。
aws-mcp も試しましたが、いくつかの問題がありました。
- セットアップの手間:Git リポジトリをクローンし、ローカル環境をセットアップする必要がありました
- 安定性の問題:Mac では十分に安定していませんでした
- Node.js スタック:Python 開発者のため、Node.js のコードベースに効果的に貢献できませんでした
そこで、次のような新しい方法を作成しました。
- Docker イメージから直接実行でき、Git のクローンは不要です
- Python と boto3 を使用することで、より安定しています
- Python 開発者が簡単に貢献できます
- コード実行のための適切なサンドボックス機能を備えています
- すべてをコンテナ内に収め、クリーンな状態を保ちます
Model Context Protocol とその仕組みについて詳しくは、Anthropic の MCP ドキュメントをご覧ください。
コンポーネント
リソース
サーバーは次のリソースを公開します。
aws://query_resources:boto3 のクエリを通じて AWS リソースにアクセスできる動的リソース
クエリの例
実行できるクエリの例を以下に示します。
- S3 バケットの一覧表示:
s3 = session.client('s3')
result = s3.list_buckets()
- 最新の CodePipeline デプロイメントを取得:
def get_latest_deployment(pipeline_name):
codepipeline = session.client('codepipeline')
result = codepipeline.list_pipeline_executions(
pipelineName=pipeline_name,
maxResults=5
)
if result['pipelineExecutionSummaries']:
latest_execution = max(
[e for e in result['pipelineExecutionSummaries']
if e['status'] == 'Succeeded'],
key=itemgetter('startTime'),
default=None
)
if latest_execution:
result = codepipeline.get_pipeline_execution(
pipelineName=pipeline_name,
pipelineExecutionId=latest_execution['pipelineExecutionId']
)
else:
result = None
else:
result = None
return result
result = get_latest_deployment("your-pipeline-name")
注:すべてのコードスニペットで、クライアントに返される result 変数を設定する必要があります。result 変数は、AWS 固有のオブジェクトや日時値を適切に処理したうえで、自動的に JSON 形式に変換されます。
ツール
サーバーは AWS クエリを実行するためのツールを提供します。
aws_resources_query_or_modify- AWS リソースをクエリまたは変更する boto3 コードスニペットを実行します
- 入力:
code_snippet(文字列):AWS リソースをクエリする boto3 を使用した Python コード- クエリ結果を格納する
result変数をコード内で設定する必要があります
- 許可されているインポート:
- boto3
- operator
- json
- datetime
- pytz
- dateutil
- re
- time
- 使用できる組み込み関数:
- 基本型:dict、list、tuple、set、str、int、float、bool
- 操作:len、max、min、sorted、filter、map、sum、any、all
- オブジェクト処理:hasattr、getattr、isinstance
- その他:print、import
実装の詳細
サーバーには、いくつかの安全機能が含まれています。
- インポートとコード構造を検証する、AST ベースのコード解析
- 使用できる組み込み関数を制限した実行環境
- AWS 固有のオブジェクトを適切に処理する結果の JSON シリアライズ
- 適切なエラー処理と報告
セットアップ
前提条件
AWS リソースをクエリするには、適切な権限を持つ AWS 認証情報が必要です。次の手順で取得できます。
- AWS アカウントで IAM ユーザーを作成します
- プログラムによるアクセス用のアクセスキーを生成します
- IAM ユーザーに、クエリする AWS サービスに必要な権限があることを確認します
次の環境変数が必要です。
AWS_ACCESS_KEY_ID:AWS アクセスキーAWS_SECRET_ACCESS_KEY:AWS シークレットキーAWS_SESSION_TOKEN:(任意)一時的な認証情報を使用する場合の AWS セッショントークンAWS_DEFAULT_REGION:AWS リージョン(設定されていない場合は、デフォルトで 'us-east-1' になります)
~/.aws/credentials ファイルに保存されたプロファイルも使用できます。その場合は、AWS_PROFILE 環境変数にプロファイル名を設定します。
注:AWS 認証情報は安全に保管し、バージョン管理に絶対にコミットしないでください。
Smithery 経由でインストールする
Smithery 経由で AWS Resources MCP Server を Claude Desktop に自動インストールするには:
npx -y @smithery/cli install mcp-server-aws-resources-python --client claude
Docker でのインストール
イメージをローカルでビルドするか、Docker Hub からプルできます。このイメージは Linux プラットフォーム用にビルドされています。
対応プラットフォーム
- Linux/amd64
- Linux/arm64
- Linux/arm/v7
オプション 1:Docker Hub からプルする
docker pull buryhuang/mcp-server-aws-resources:latest
オプション 2:ローカルでビルドする
docker build -t mcp-server-aws-resources .
コンテナを実行します:
docker run \
-e AWS_ACCESS_KEY_ID=your_access_key_id_here \
-e AWS_SECRET_ACCESS_KEY=your_secret_access_key_here \
-e AWS_DEFAULT_REGION=your_AWS_DEFAULT_REGION \
buryhuang/mcp-server-aws-resources:latest
または、保存済みの認証情報とプロファイルを使用します:
docker run \
-e AWS_PROFILE=[AWS_PROFILE_NAME] \
-v ~/.aws:/root/.aws \
buryhuang/mcp-server-aws-resources:latest
クロスプラットフォームでの公開
複数のプラットフォーム向けに Docker イメージを公開するには、docker buildx コマンドを使用できます。次の手順に従ってください。
-
新しいビルダーインスタンスを作成します(まだ作成していない場合):
docker buildx create --use -
複数のプラットフォーム向けにイメージをビルドしてプッシュします:
docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t buryhuang/mcp-server-aws-resources:latest --push . -
指定したプラットフォームでイメージが利用可能であることを確認します:
docker buildx imagetools inspect buryhuang/mcp-server-aws-resources:latest
Claude Desktop での使用方法
Docker で実行する
ACCESS_KEY_ID と SECRET_ACCESS_KEY を使用する例
{
"mcpServers": {
"aws-resources": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"AWS_ACCESS_KEY_ID=your_access_key_id_here",
"-e",
"AWS_SECRET_ACCESS_KEY=your_secret_access_key_here",
"-e",
"AWS_DEFAULT_REGION=us-east-1",
"buryhuang/mcp-server-aws-resources:latest"
]
}
}
}
PROFILE を使用し、ローカルの AWS 認証情報をマウントする例
{
"mcpServers": {
"aws-resources": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"AWS_PROFILE=default",
"-v",
"~/.aws:/root/.aws",
"buryhuang/mcp-server-aws-resources:latest"
]
}
}
}
Git clone で実行する
git clone とプロファイルを使用して実行する例
{
"mcpServers": {
"aws": {
"command": "/Users/gmr/.local/bin/uv",
"args": [
"--directory",
"/<your-path>/mcp-server-aws-resources-python",
"run",
"src/mcp_server_aws_resources/server.py",
"--profile",
"testing"
]
}
}
}
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。