Yaw Labs AWS MCP について
Yaw Labs AWS MCPは、AWS CLIを介してAWS APIを呼び出すローカルMCPサーバーです。AIアシスタントでAWSを管理する開発者向けに、API呼び出し、リソースCRUD、複数リージョン操作、SSO再ログインを提供します。
主な機能
- 01単一ツールによるAWS API呼び出し
- 021,300超のリソースタイプでのCRUD
- 03変更プレビューとIAM権限チェック
- 04複数リージョン・アカウントでの操作
- 05AWSドキュメント検索とスクリプト一括処理
- 06デバイスコードによるSSO再認証
活用シーン
- 01AIアシスタントによるAWSサービス操作
- 02リソース更新の適用前プレビュー
- 03複数リージョンやアカウントでの反復操作
- 04長時間のワークフロー中のSSO更新
MCP 対応
MCPクライアント向けのローカルMCPサーバーで、AWS CLIを使ったAPI呼び出し、リソース管理、ドキュメント検索を公開します。MCPツールからスクリプトによる一括処理も実行できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @yawlabs/aws-mcpAWS_PROFILEAWS profile used when a tool call omits `profile`. Any profile your aws CLI can use (SSO, credential_process, role chaining, static keys). Unset: AWS_DEFAULT_PROFILE, then `default`.AWS_REGIONRegion used when a tool call omits `region`. Unset: AWS_DEFAULT_REGION, then us-east-1 (a profile's own region setting is not read).ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
28掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| region | string | いいえ | AWS リージョン。デフォルトは $AWS_REGION または us-east-1 です。 |
| profile | string | いいえ | AWS プロファイル名。デフォルトは $AWS_PROFILE または 'default' です。 |
詳細
@yawlabs/aws-mcp
ワンクリックでローカルの Yaw MCP 設定に追加され、すべての Yaw Terminal セッションで利用できるようになります。または、以下の手順で手動インストールしてください。
AI アシスタント向けの小規模な AWS MCP です。1 つのサーバー、1 つの設定エントリ、SSO の再認証機能を内蔵、1,300 種類以上のリソースタイプに対応する汎用 CRUD、ライブドキュメント検索、バッチワークフロー向けのサーバーサイドスクリプト機能を備えています。
これはAWS 公式 MCP サーバーの代替であり、補完するものではありません。どちらもあらゆる AWS API にアクセスできるため、両方を実行すると、モデルに同じ操作を行うための重複した方法を 2 つ与えることになります。(AWS も旧サーバーについて同じことを勧めており、セットアップガイドでは「AI エージェントを混乱させるツールの競合を避けるため」に削除するよう記載しています。)どちらか一方を選んでください。対応範囲は重複していますが、設計は異なります。率直に比較すると、次のとおりです。
- AWS MCP Server — AWS がホストするサーバーで、2026 年 5 月から GA となり、Agent Toolkit for AWS の一部です。AWS チームが厳選したスキル、数日前までの API カバレッジを備えたサーバーサイド Python サンドボックス(
run_script)、読み取り専用のサーバーレストラブルシューティング機能(Lambda のdiagnose、最近の変更、X-Ray トレースの要約)、直接の API 呼び出しと区別できる IAM 条件キー、ツールごとの CloudWatch メトリクスに強みがあります。2026 年 9 月時点で、AWS API を呼び出す汎用的な方法はrun_scriptのみです。単一呼び出し用のcall_awsツールは削除されたため、単発のdescribeであっても、モデルが作成する Python スクリプトとして実行します。エンドポイントはus-east-1とeu-central-1で稼働します。接続方法は 2 通りあります。- OAuth(2026 年 7 月より)を AWS Sign-in 経由で利用します。インストールは不要です。クライアントがブラウザーを開き、エンドポイントに直接接続します。各セッションは 1 つの IAM ロールに紐付けられ、最長 12 時間更新されます。また、プリンシパルには
signin:AuthorizeOAuth2Accessとsignin:CreateOAuth2Tokenが必要です。 - SigV4 は
uvで実行するローカルプロキシ(AWS のガイドにあるuvx mcp-proxy-for-aws-cli@latest)経由で利用し、AWS CLI の認証情報(CLI 2.32.0 以降)で署名します。AWS はターミナルや IDE のコーディングエージェントにこの方法を推奨しており、プロキシ起動時に固定される許可リストから、呼び出しごとにプロファイルを切り替えられるのはこの方法だけです。AWS CLI 2.35.0 以降では、aws configure agent-toolkitを実行すると、エージェントの MCP 設定に SigV4 エントリ(uvx mcp-proxy-for-aws@latest)がaws-mcpというキーで書き込まれます。
- OAuth(2026 年 7 月より)を AWS Sign-in 経由で利用します。インストールは不要です。クライアントがブラウザーを開き、エンドポイントに直接接続します。各セッションは 1 つの IAM ロールに紐付けられ、最長 12 時間更新されます。また、プリンシパルには
@yawlabs/aws-mcp(このサーバー)— npm からインストールし、手元のawsCLI とプロファイルを使ってローカルで実行します。npxの 1 行だけで導入でき、uvもプロキシも、ホスト型サービスへの中継も不要です。特に、aws sso loginのブラウザー連携が途切れたとき(特に Windows)に SSO に再ログインしやすい点、ツール呼び出し 1 回につき AWS 操作 1 件の実行(aws_callではservice、operation、paramsを指定するため、ホストの承認プロンプトにはスクリプトではなく操作そのものが表示されます)、ドライラン差分に対応した使いやすい CCAPI CRUD、複数リージョン・複数アカウントへのファンアウト、事前の IAM 権限チェック、バッチ処理が必要な場合に使える JS スクリプトツール(インプロセスであり、セキュリティサンドボックスではありません。ツール一覧を参照)に優れています。ライブ AWS ドキュメントの検索とページ読み込みも組み込まれているため、どちらを選んでも別のドキュメントサーバーは不要です。トピックのルーティングやスキルの検索結果はありませんが、公式サーバーのsearch_documentation/read_documentationと同じ範囲をカバーします。 どちらの選択肢にも確実に組み合わせられる MCP は、awslabs/mcpのサービス別サーバーです。汎用の AWS API ツールでは対応できない機能を利用できます。最もわかりやすい例は、Bedrock のエージェント型ナレッジベース検索です(補助的な設定を参照)。AWS は現在、このリポジトリの後継として Agent Toolkit for AWS を案内しています。このリポジトリは引き続き動作し、コントリビューションも受け付けていますが、一部のサーバーは非推奨、または後継に置き換えられています。汎用の AWS API サーバーもそのひとつです。追加する前に、各サーバーの README を確認してください。
このサーバーがうまく対処しようとしていることは、次の 5 つです。
- SSO の再ログイン。 セッション中にトークンの有効期限が切れると、
aws sso loginはサブプロセスからブラウザーを開こうとしますが、Windows(および場合によってはそれ以外の環境)では、その受け渡しが何の通知もなく失敗します。その結果、ターミナルに切り替えて自分でコマンドを実行し、戻ってくることになります。--no-browserを使うデバイスコードフローなら、この問題を解決できます。アシスタントに短縮 URL とコードが表示されるので、一度クリックすれば完了です。(--no-browserだけでは不十分になりました。AWS CLI 2.22.0 では PKCE 認可コードフローがデフォルトになり、短縮コードが表示されなくなったため、このサーバーは--use-device-codeも併用し、aws --versionを一度確認することで、2.22 より前の CLI との互換性を保ちます。)長時間のワークフローを始める前に、期限切れが近い認証情報を先回りして更新するaws_refresh_if_expiring_soonもあります。AWS のホスト型サーバーは、この問題を解決するのではなく回避しています。OAuth を使う場合、MCP クライアントが独自のブラウザーサインインを実行し、トークンはそのクライアントとサーバーにひも付けられるため、マシン上のほかのものはその恩恵を受けられません。SigV4 を使う場合、AWS のトラブルシューティング表は、SSO ユーザーにaws sso loginを自分で実行してから MCP クライアントを再起動するよう案内しています。こちらでは再ログインにより、CLI、SDK、およびマシン上のほかのすべてのツールが読み取る同じ~/.aws/sso/cacheトークンが更新されます。 - あらゆる AWS API の呼び出し。
aws_callはawsCLI を直接プロキシします。サービスごとにツールを増やしたり、SDK を同梱したりすることなく、明日 AWS が追加するサービスも含め、API の全機能を一つのツールで利用できます。これは将来の話ではありません。2026 年 9 月に追加された AWS Batch の一括cancel-jobs/terminate-jobs(CLI 2.36.44)、STS のセッショントークンサイズフィールド(2.36.45)、Elastic Beanstalk のクラスター環境(2.36.47)、"Tunnel" VPC エンドポイント(2.36.48)は、ローカルのawsCLI が対応した時点で利用でき、@yawlabs/aws-mcpのアップグレードは不要です。古い CLI では、知らない操作は送信前に拒否され、アップグレードを促すエラーが表示されます。aws_paginateはページネーションを伴う list/describe 操作を処理し、aws_multi_regionは同じ操作を N 個のリージョンに並列で実行します。また、JMESPath のqueryパラメーターで、サーバー側でレスポンスを絞り込めます。このサーバーの 5 MB の出力上限に達するより、ずっと早くこれらのツールを活用してください。MCP ホストの制限はさらに小さく、Claude Code は 10,000 トークンで警告し、デフォルトでは 25,000 トークンを超える結果をファイルに保存します。モデルはそのファイルを読み戻す必要があります。 - サービスをまたいだ汎用 CRUD。
aws_resource_*(ドライランのプレビュー用aws_resource_diffを含む 7 つのツール)は AWS Cloud Control API をラップしているため、CloudFormation スキーマを持つあらゆるコントロールプレーンリソースで、同じライフサイクル(get/list/create/update/delete/status)を利用できます。Lambda 関数、S3 バケット、IAM ロール、SSM パラメーター、RDS インスタンスなど、AWS の公開リストにある 1,300 種類が対象です(すべての種類がすべての操作に対応しているわけではありません)。awaitCompletion: trueを指定すると、サーバーが非同期の作成/更新/削除を終端状態までポーリングします。AWS Labs は 2026 年 3 月に独自の Cloud Control API MCP サーバーを非推奨とし、移行ガイドには、リソースの get/list/create/update/delete に対する直接の代替手段は記載されていません。後継は代わりに CloudFormation と CDK を作成します。CCAPI はコントロールプレーン専用です。データプレーンでは、DynamoDB のget-item/queryと Bedrock のconverseはaws_callで処理できる通常の操作です(DynamoDB の値は型付き JSON の{"S": "..."}のままです)。Lambda の呼び出しには専用ツールaws_lambda_invokeがあります。aws_callでは扱えない操作は 3 種類あります。位置引数の出力ファイルにレスポンス本文を書き込む操作(S3 のget-object、Bedrock のinvoke-model)、--cli-input-jsonを登録しない CLI 独自実装のコマンド(s3 cp/ls/sync、logs tail、cloudformation deploy)、そして CLI がそもそも提供していないイベントストリーム操作(Bedrock のconverse-stream、invoke-agent、エージェント型の Knowledge Base 検索)です。 - 最新の AWS ドキュメント。
aws_docs_searchは docs.aws.amazon.com の検索ボックスと同じバックエンドを検索し、aws_docs_readはドキュメントページを取得して、ページ分割された Markdown として返します。別の MCP サーバーをインストールしなくても、エージェントが新しいサービスを見つけたり、正確なパラメーター名を調べたりできます。 - 1 回の往復でバッチ処理するワークフロー。
aws_scriptはnode:vmコンテキスト内で短い JS スニペットを実行し、aws.call、aws.paginate、aws.paginateAll、aws.resource.*、aws.logsTail、aws.metricsQuery、aws.iamSimulate、aws.multiRegion、aws.assumeRole、aws.docs.{search,read}を利用できます。ほかの方法では N 回のツール呼び出しが必要になる「X を一覧表示し、それぞれについて Y を取得して、Z を返す」パイプラインに最適です。AWS のrun_script(サーバー側でサンドボックス化された Python)と同じ発想です。現在、AWS のサーバーで AWS API を呼び出す汎用的な唯一の方法となっています。こちらでは、単一の操作にはaws_callを使い、バッチ処理にはローカルで実行する JS ネイティブの選択肢として利用できます。
オプションの補完ツール:AWS Labs のサービス別サーバー
汎用の AWS API ツールでは対応できない作業には、このサーバーと合わせて該当する awslabs/mcp サーバーを追加してください。Bedrock のエージェント型ナレッジベース検索が最も分かりやすい例です。この処理では AgenticRetrieveStream が呼び出されますが、これは AWS CLI のコマンド一覧に含まれていないイベントストリーム操作のため、aws_call を含む CLI ベースのツールでは実行できません。(通常の検索である bedrock-agent-runtime retrieve は、一般的な aws_call 操作です。)これらは uvx で実行する Python サーバーで、このサーバーとツール名が重複しないため、問題なく併用できます。
{
"mcpServers": {
"aws": {
"command": "npx",
"args": ["-y", "@yawlabs/aws-mcp@latest"]
},
"aws-bedrock-kb": {
"command": "uvx",
"args": ["awslabs.bedrock-kb-retrieval-mcp-server@latest"],
"env": { "AWS_PROFILE": "my-profile", "AWS_REGION": "us-east-1" }
}
}
}
このサーバーのエージェント型ツールはマネージドナレッジベースで動作します。また、デフォルトでは mcp-multirag-kb=true タグが付いたナレッジベースのみを一覧表示します。タグと IAM 権限については、README を参照してください。古い awslabs.lambda-mcp-server は使用しないでください。すべてのリリースが PyPI で取り下げられており、Lambda の呼び出しは aws_lambda_invoke としてこのサーバーに組み込まれています。
こちらと他の AWS MCP の使い分け
| 必要なこと | 最適な選択肢 |
|---|---|
Node/npm のみでインストールし、ローカルの aws CLI とプロファイルを使って実行する(uv もプロキシも不要) | @yawlabs/aws-mcp |
| ローカルに何もインストールしない(リモートサーバー、ブラウザーでサインイン) | AWS MCP Server(OAuth) |
| Windows での SSO 再ログイン/ブラウザーの引き継ぎ不具合を、マシン上のすべてのツールで修正する | @yawlabs/aws-mcp(aws_login_start のデバイスコードフロー) |
ツール呼び出しごとに AWS 操作を 1 つ実行する。承認プロンプトにはスクリプトではなく service、operation、params が表示される | @yawlabs/aws-mcp(aws_call) |
| 1,300 種類を超えるリソースタイプに対する汎用 CRUD | @yawlabs/aws-mcp(aws_resource_*) |
| 更新を適用する前にドライランする | @yawlabs/aws-mcp(aws_resource_diff) |
| 1 回の呼び出しで複数リージョンに展開する | @yawlabs/aws-mcp(aws_multi_region) |
| 1 回の呼び出しで複数のアカウントに同じ操作を実行する | @yawlabs/aws-mcp(aws_multi_account) |
| N 個のツール呼び出しを 1 回のラウンドトリップにまとめる(JS) | @yawlabs/aws-mcp(aws_script) |
| 操作を試す前に IAM 権限を確認する | @yawlabs/aws-mcp(aws_iam_simulate) |
| 1 つのセッションで複数アカウント/複数ロールを使用する | どちらも可 — このサーバーは呼び出しごとに設定済みの任意の profile を受け付け、STS のロールチェーン用に aws_assume_role を追加します。一方、AWS のサーバーは SigV4 のみを使い、プロキシの起動時に宣言されたプロファイルから呼び出しごとに 1 つを使用します(OAuth セッションでは 1 つのロールを使用します) |
| サーバー側でサンドボックス化された Python スクリプトを実行する | AWS MCP Server(run_script) |
| ホスト型エンドポイントを通じて、最新数日分の API カバレッジを利用する | AWS MCP Server(run_script) |
| AWS チームが厳選したベストプラクティスのスキルを利用する | AWS MCP Server(retrieve_skill) |
| Lambda のガイド付きトラブルシューティング(診断、最近の変更、トレースの概要) | AWS MCP Server(サーバーレス機能) |
| CLI ベースのツールでは対応できない操作向けの、型付きサービス別ヘルパー(Bedrock のエージェント型 KB 検索など) | awslabs/mcp(サービス別サーバー) |
@yawlabs/aws-mcp と AWS の公式サーバーは、どちらか一方を選んでください。トレードオフを考慮して選択してください。awslabs/mcp のサービス別サーバーは、どちらを選んでも問題なく併用できます。
このサーバーが AWS の公式サーバーから取り入れたもの
功績は正当に認めましょう。ここにある 2 つの機能は、AWS 公式 MCP Server を参考にして設計されています。
aws_scriptは、公式サーバーのrun_scriptに相当します。「X を一覧表示し、それぞれについて Y を取得し、Z を返す」というパイプラインを 1 回の往復にまとめるスクリプト実行ツールです。公式サーバーでは Python を使い、サーバー側でサンドボックス化されています。また、現在はそのサーバーにおける唯一の汎用 API 経路です。こちらは JS ネイティブで、このサーバー自身のプロセス内で実行されます。詳しくはツール一覧の信頼性に関する注記をご覧ください。また、aws_callに代わるものではなく、併用できます。aws_docs_search/aws_docs_readは、どちらのサーバーを選んでも別途ドキュメント MCP を用意する必要がないように追加されました。公式サーバーのsearch_documentation/read_documentationと同じく、ライブ検索とページの読み取りに対応していますが、トピックのルーティングやスキルの結果には対応していません。
それ以外の SSO デバイスコードによる再ログイン、dry-run 差分付きの CCAPI CRUD、複数リージョンへのファンアウト、IAM の事前チェックは、このサーバー独自の機能です。
ツール
| ツール | 機能 |
|---|---|
aws_whoami | 現在の ID(アカウント、ARN)と SSO トークンの有効期限までのカウントダウンを表示します。最初に呼び出してください。 |
aws_login_start | aws sso login --no-browser --use-device-code を開始し、確認用 URL と短いコード、および sessionId を返します。(2.22.0 より古い AWS CLI では、デバイス認可がすでにデフォルトのため、--use-device-code は省略されます。) |
aws_login_complete | SSO サブプロセスが終了するまで待機します(ブラウザーで認証します)。新しい ID を返します。 |
aws_refresh_if_expiring_soon | キャッシュ済みの SSO トークンを確認し、有効期限までの残りが thresholdMinutes 未満(デフォルトは 10 分)なら自動的に更新を開始します。「期限が近いか確認し、近ければ再ログインする」処理を 1 回のラウンドトリップで行います。 |
aws_session_set | この MCP セッションの残りの期間に使用するデフォルトのプロファイルやリージョンを設定します。「prod に切り替える」「us-west-2 を使う」といった指定ができます。 |
aws_session_get | 現在のセッションのデフォルト設定と、各値の取得元(session/env/default)を表示します。 |
aws_session_clear | セッションのプロファイル/リージョンの上書きを削除し、環境変数やデフォルト設定が再び使われるようにします。引数なしで両方を削除します。 |
aws_list_profiles | ~/.aws/config に設定されたプロファイルの名前、リージョン、SSO メタデータを一覧表示します。プロファイルの切り替え前や、見覚えのないプロファイル名を含む SSO エラーが発生した場合に使用します。 |
aws_assume_role | 現在の ID で STS AssumeRole を呼び出し、一時的な認証情報を新しいプロファイル(mcp-<sessionName>)として ~/.aws/credentials に保存します。クロスアカウントアクセスに使用します。シークレットとセッショントークンはディスク上に保存され、モデルには返されません。SAML や credential_process のコールドスタートが遅い場合に指定できる timeoutMs(デフォルトは 120 秒)もあります。 |
aws_call | 任意の AWS API オペレーションを実行します。service: 's3api', operation: 'list-buckets'、任意で params(PascalCase の JSON)、任意で query(JMESPath)を指定します。解析済みの JSON を返します。手書きの CLI コマンド(s3 cp/ls/sync、logs tail)や、応答をファイルにストリーミングするオペレーション(s3api get-object、bedrock-runtime invoke-model、bedrock-agentcore invoke-agent-runtime、lambda invoke)は --cli-input-json を受け付けないため、aws_call では実行できません。エラーにはその旨と代替手段(aws_lambda_invoke、aws_logs_tail、bedrock-runtime converse、またはシェル)が示されます。待機処理は operation: 'wait <name>' として実行できます。Blob 型のパラメーターには base64 を指定します。 |
aws_paginate | ページ分割された list/describe オペレーションの 1 ページを取得します。query にも対応しています。nextToken/hasMore を返すので、続行するにはトークンを指定して再度呼び出します。 |
aws_logs_tail | 1 つのロググループから最新の CloudWatch Logs イベントを取得します(aws logs filter-log-events による FilterLogEvents)。since、filterPattern、ストリーム名のフィルターを指定でき、{timestamp, logStreamName, message} オブジェクトを古い順に返します。maxEvents(デフォルトは 500、最大 10000)で上限を設定します。イベント数が多い期間では最新のイベントが保持され、truncated: true が報告されます。AWS CLI 2.35.8 以降では読み取り自体が maxEvents 件で停止するため、切り詰められた場合の totalEvents は null になります。それ以前の CLI では期間全体をスキャンし、正確な件数を報告します。呼び出し先リージョンのロググループ ARN を logGroupIdentifier として指定できます。これにより、クロスアカウント監視アカウントからソースアカウントの ARN を使用できます(AWS CLI 2.9.15 以降が必要です)。 |
aws_logs_query | CloudWatch Logs Insights クエリを最初から最後まで実行します。StartQuery を実行し、GetQueryResults を終端ステータスになるまでポーリングして行を返すため、開始、ポーリング、ステータス解釈を個別に行う代わりに、1 回の呼び出しで完了します。logGroupNames(1~50 個、名前のみ、または ARN)、queryString(Logs Insights QL、または queryLanguage による PPL)、および aws_metrics_query と同じ形式の startTime/endTime を指定します。期間の上限は 90 日で、limit のデフォルトは 1000 です。行は API の [{field, value}] ペアから平坦化され、プレーンなオブジェクトとして返されます。また、statistics(recordsMatched/recordsScanned/bytesScanned)も返します。課金対象は圧縮前のスキャンバイト数なので、期間を広げる前に絞り込んでください。タイムアウトまたはクライアントによるキャンセル時もクエリは停止されず、queryId が返され、結果は 7 日間取得できます。 |
aws_metrics_query | GetMetricData(最新の複数メトリクス/式対応 API)を使って CloudWatch メトリクスをクエリします。queries: [{id, namespace, metricName, dimensions?, statistic?, period?}] または式ベースのクエリを渡します。startTime/endTime は ISO 8601 または相対形式('15m'、'1h'、'1d')を受け付けます。期間は時間範囲に応じて自動選択されます。{series: [{id, label?, timestamps, values, period?, statusCode?}], periodSeconds, profile, region, nextToken, hasMore, messages?} を返します(完全なエンベロープは「安定性」を参照してください)。 |
aws_resource_get | typeName と identifier(例:AWS::Lambda::Function と関数名)を使い、Cloud Control API 経由で AWS リソースを読み取ります。解析済みの Properties を返します。 |
aws_resource_list | CCAPI 経由で指定した種類のリソースをページ分割して一覧表示します。各項目の {identifier, properties} と、nextToken/hasMore を返します。 |
aws_resource_create | CCAPI 経由で AWS リソースを作成します。非同期で、トップレベルに requestToken と operationStatus を返します。awaitCompletion: true を指定すると、サーバーが終端状態までポーリングし、1 回の呼び出しで完了します。 |
aws_resource_update | RFC 6902 JSON Patch を使い、CCAPI 経由で AWS リソースを更新します。非同期処理と awaitCompletion の形式は作成時と同じです。 |
aws_resource_delete | CCAPI 経由で AWS リソースを削除します。非同期処理と awaitCompletion の形式は作成時と同じです。破壊的な操作のため、最初に identifier を確認してください。 |
aws_resource_status | requestToken を使って非同期の CCAPI リクエストの状態をポーリングします。現在の状態を返し、operationStatus、identifier、errorCode、statusMessage をフラット化してトップレベルに配置します(PENDING/IN_PROGRESS/SUCCESS/FAILED/CANCEL_*)。 |
aws_resource_diff | CCAPI 更新をドライランします。現在の状態を取得し、メモリ上で JSON Patch をシミュレートして {before, after, changes[]} を返します。AWS への変更リクエストは送信されません。RFC 6902 の add/remove/replace サブセットに対応しています。add は、CCAPI の実際の更新時の動作に合わせて、存在しないオブジェクトの親を自動作成します(そのため、/Environment/Variables がまだ存在しない場合でも、/Environment/Variables/NEW_KEY のようなパッチが機能します)。changes[i].after は最終的なパッチ適用後の状態ではなく、操作 i によって生じた状態を示すため、同じパスへの連続した操作を正しく追跡できます。パッチが意図どおりの結果になるか確認する場合は、aws_resource_update の前に呼び出してください。 |
aws_multi_region | 同じ AWS オペレーションを N 個のリージョンで並列実行します。aws_call と同じ形式ですが、regions: string[] を受け取ります。{region, ok, data?, error?}[] と okCount/errorCount を返します。一部の失敗は想定内です(サービスがすべてのリージョンで提供されているとは限らず、権限がリージョン単位で設定されている場合もあります)。1 回の呼び出しにつき最大 64 リージョンまで指定でき、同時実行数は最大 32 です。 |
aws_multi_account | 各アカウントで roleName を引き受け、同じ AWS オペレーションを N 個のアカウントで並列実行します。呼び出し中、すべてのアカウントの認証情報はメモリ内に保持され、その呼び出しの 1 つのプロセス起動に渡されます。aws_assume_role を繰り返す場合とは異なり、~/.aws/credentials には何も書き込まれません。繰り返し実行するとアカウントごとにセクションを書き込むか、同じセクションを何度も上書きし、途中で処理が停止すると有効なキーがディスクに残ってしまうことがあります。aws_multi_region と同じエンベロープで、region の代わりに accountId を使用します。5 MB の合計上限と、上限適用前に計算される okCount/errorCount も同じです。ロールがすべてのアカウントに存在するとは限らないため、一部の失敗は想定内です。 |
aws_script | 他のツールを連携させる短い JS スニペットを実行し、結果をまとめて返します。サンドボックスでは aws.call、aws.paginate、aws.paginateAll、aws.resource.{get,list,create,update,delete,status}、aws.logsTail、aws.metricsQuery、aws.iamSimulate、aws.multiRegion、aws.assumeRole、aws.docs.{search,read} に加え、標準的な JS 組み込み機能(JSON、Math、Date、Promise など)と console を利用できます。require/import/process/fs/fetch/タイマーはコンテキストにバインドされていません。**これはセキュリティ境界ではありません。**スクリプトはこのサーバー自身のプロセスで実行され、ホストのグローバル変数にも内部からアクセスできるため、aws_script は他のツールより厳しい制限がありません。他のツールは AWS と IAM ポリシーで制限されますが、このツールにはその制限がありません。このマシンで自分が実行してもよいスクリプトのテキストだけを渡してください。ログ行、リソースタグ、その他の AWS 応答に含まれていたテキストは決して渡さないでください。通常なら N 回のラウンドトリップが必要となる「X を一覧表示し、それぞれについて Y を取得し、Z を返す」パイプラインに最適です。結果を返すには return <value> を使います。 |
aws_iam_simulate | プリンシパルの IAM 権限をシミュレートします。プリンシパル X がリソース Z に対してアクション Y を実行できるかを確認します。iam simulate-principal-policy をラップしています。(アクション、リソース)のペアごとに 1 つの項目を返します。resources を省略すると、リソースが * の各アクションについて 1 つずつ返します。各項目には decision(allowed/explicitDeny/implicitDeny/unknown)、matchedStatementIds(判定を行った IAM ステートメント)、missingContextValues(ポリシーが必要としていたが指定されていないコンテキストキー)、および AWS がアクションごとに報告する permissionsBoundaryDecision と organizationsDecision が含まれます。SCP による拒否では該当するステートメント名は示されません。また、SCP が参照するキーは不足している値として報告されません。そのような場合は contextEntries に aws:RequestedRegion などを渡してください。「allowed」は必要条件ですが、十分条件ではありません。RCP、対象リソース自身のポリシー、セッションポリシー、VPC エンドポイントポリシーは評価されません。aws_whoami に表示される STS セッション ARN ではなく、IAM ロール ARN を渡してください。403 を避けるため、リスクのある操作の前に使用します。aws_call の失敗後に表示される Suggestion と組み合わせてください。呼び出し元に iam:SimulatePrincipalPolicy が必要です。 |
aws_lambda_invoke | Lambda 関数を同期的に呼び出し、応答ペイロードと実行ログの末尾をデコードして返します。aws_call では構造上 実行できません。aws lambda invoke は必須の位置引数として応答本文の出力先ファイルを受け取り、--cli-input-json を拒否するため、2 つ目の(Python の)MCP サーバーなしで機能する Lambda 用の手段はこれだけです。デコード済みの logTail によって、「呼び出し、ロググループを探し、末尾を取得し、対象の期間にログが含まれていることを期待する」という一連の処理を 1 回の呼び出しにまとめられます。空でない functionError は、関数の HANDLER が例外をスローしたことを示します。呼び出し自体は成功しているため ok は true で、スローされたエラーは payload に含まれます。CLI の自動再試行はこのツールでは無効になっているため、呼び出しは最大 1 回だけ送信されます。再試行すると関数が再実行されるためです。関数の完了を待つ時間は timeoutMs で指定します(デフォルトは 60 秒、最大 900000)。スロットリングされた呼び出しは実行されていないため安全に再試行できます。タイムアウト後のエラーには、呼び出しが送信されたかどうかが示されます。 |
aws_docs_search | AWS のドキュメントをリアルタイムで検索します(docs.aws.amazon.com の検索ボックスのバックエンドを使用)。ランク付けされた {title, url, summary, excerpt} を返します。各結果にはローカルで計算された lexicalMatch も含まれ、応答には queryTerms/termsMatchedNowhere/bestLexicalOverlap/lowRelevance が含まれます。バックエンドは常に曖昧検索の結果を 1 ページ分返し、「適切な一致なし」とは決して報告しないため、クエリに一致するものがなかったことを示す手掛かりはこれらだけです。モデルが知らない可能性のあるサービス/API/概念(新しいサービス、最近変更された API、正確なパラメーター名など)に関する適切なドキュメントページを見つけるために使用します。 |
aws_docs_read | https://docs.aws.amazon.com/...html ページを取得し、Markdown として返します。ナビゲーション、Cookie バナー、フィードバック用の要素は除去されます。長いページは startIndex と maxLength を使って分割取得できます。応答には hasMore と nextStartIndex が含まれます。通常は aws_docs_search から取得した URL を指定します。 |
インストール
MCP クライアントの設定(例:.mcp.json)に追加します。
{
"mcpServers": {
"aws": {
"command": "npx",
"args": ["-y", "@yawlabs/aws-mcp@latest"]
}
}
}
キーは aws にしてください(aws-mcp 以外なら何でもかまいません)。AWS の aws configure agent-toolkit ウィザードは、ホスト型サーバーを aws-mcp という名前で登録します。また、既存の aws-mcp エントリがあると、実行内容を確認せずに設定済みとして報告します。
-y フラグを指定すると、セッションを読み込むたびに自動更新されます。MCP クライアントがサーバーを起動するたびに、npx がレジストリで最新の @yawlabs/aws-mcp を確認し、より新しいバージョンがあればダウンロードします。新しいキャッシュでの初回起動では約100~500ミリ秒かかります。それ以降の起動では npm のキャッシュが使われるため(メタデータの一般的な鮮度保持期間:5分)、追加時間は約50ミリ秒以下です。サーバーの起動後は、ツール呼び出しに自動更新によるオーバーヘッドはありません。確認が実行されるのは起動時(または再起動時)のみです。別途インストールする必要はなく、初回インストールと継続的な更新の両方を -y で処理できます。
特定のバージョンに固定したい場合(自動更新はありませんが、起動時のオーバーヘッドはゼロです)は、グローバルにインストールして、設定からインストール済みのバイナリを指定します。
npm install -g @yawlabs/aws-mcp
{
"mcpServers": {
"aws": {
"command": "aws-mcp"
}
}
}
新しいバージョンが必要になったときは、npm install -g @yawlabs/aws-mcp@latest を手動で実行してください。
セッション例
アシスタントにステージングバケットの確認を頼みましたが、SSO トークンの有効期限が切れていた場合の、アシスタントの動作と表示内容を紹介します。
You: "How many objects are in the staging-artifacts bucket right now?"
Claude: (calls aws_whoami) -> SSO session expired for profile 'staging'.
(calls aws_login_start with profile='staging')
"Your SSO token expired. Open
https://device.sso.us-east-1.amazonaws.com/
and enter code: ABCD-EFGH
I'll wait."
You: *click, authenticate in your browser*
Claude: (calls aws_login_complete with the sessionId)
(calls aws_call with service='s3api', operation='list-objects-v2',
params={ Bucket: 'staging-artifacts' },
query='KeyCount')
"There are 4,182 objects in staging-artifacts."
SSO のフローはワンクリックで完了しました。「ブラウザーが開かなかったので、ターミナルで実行します」というコンテキスト切り替えは必要ありません。
より大きなリストの場合――このサーバーの5 MBの上限よりはるかに小さい、MCP ホストの出力上限を超えるような場合――アシスタントは aws_paginate を使います。
(calls aws_paginate with service='ec2', operation='describe-instances',
maxItems=50,
query='Reservations[].Instances[].{Id:InstanceId,State:State.Name}')
-> returns one page + a nextToken; Claude calls again until hasMore=false
query(JMESPath)を指定すると、サーバー側でレスポンスを絞り込めます。必要なフィールドが2つだけの場合、一般的な describe-instances の結果はメガバイト単位からキロバイト単位に縮小します。
「このリソースを作成して、準備ができたら知らせて」という場合は、aws_resource_create に awaitCompletion: true を指定すると、通常の作成後にポーリングする処理を1回のツール呼び出しにまとめられます。
(calls aws_resource_create with
typeName='AWS::SSM::Parameter',
desiredState={Name: '/my/param', Type: 'String', Value: 'hello'},
awaitCompletion: true)
-> server polls get-resource-request-status until SUCCESS / FAILED / CANCEL_COMPLETE
and returns the terminal ProgressEvent in one call
aws_resource_update と aws_resource_delete も同様です。デフォルトの開始後にポーリングする動作を使う場合は、awaitCompletion を省略するか、false に設定します。時間のかかる更新を開始し、後で状況を確認したい場合に便利です。
「適用する前にパッチをプレビューして」という場合は、次のようにします。
(calls aws_resource_diff with
typeName='AWS::Lambda::Function',
identifier='my-fn',
patchDocument=[{op: 'replace', path: '/MemorySize', value: 1024}])
-> returns { before: {MemorySize: 256, ...}, after: {MemorySize: 1024, ...},
changes: [{op: 'replace', path: '/MemorySize', before: 256, after: 1024}] }
AWS に変更リクエストは送信されません。エージェントは aws_resource_update を呼び出す前にパッチを確認できます。
バッチ処理のワークフローでは、aws_script を使うと N 回のツール呼び出しを1回にまとめられます。
(calls aws_script with code=`
const listed = await aws.resource.list({ typeName: "AWS::Lambda::Function" });
const big = [];
for (const r of listed.resources) {
const cfg = await aws.resource.get({
typeName: "AWS::Lambda::Function", identifier: r.identifier });
if (cfg.properties.MemorySize > 1024) {
big.push({ name: cfg.properties.FunctionName, mem: cfg.properties.MemorySize });
}
}
return big;
`)
-> one round-trip; the agent gets the filtered list without N intermediate tool calls
複数リージョンからの読み取りには、次のようにします。
(calls aws_multi_region with
service='ec2', operation='describe-instances',
regions=['us-east-1','us-west-2','eu-west-1'],
query='Reservations[].Instances[].InstanceId')
-> {okCount: 3, errorCount: 0, results: [{region, ok, data}, ...]}
要件
- Node.js 22+(または oam.js — ランタイムを参照)
PATH上に AWS CLI v2 があること。AWS と通信するすべてのツール(aws_docs_*、aws_session_*、aws_list_profiles以外)は AWS CLI を呼び出すため、インストール済みの CLI によって利用可能なサービス、操作、パラメーターが決まります。最低バージョンは指定していません:- 2.22.0 以降を推奨します。 このリリースで
--use-device-codeが追加されました。これは、このサーバーで SSO の短縮コードフローを引き続き機能させるために必要です。古い 2.x でも引き続き動作します。サーバーがバージョンを検出し、適切に対応します。 - 2.34.3 を使用して開発・テストしています。 使用中の CLI より新しい機能は、リクエストの送信前に CLI によって拒否されます。サービスや操作が不明な場合は「invalid choice」(このエラーにはアップグレードを促すメッセージが表示されます)、新しいパラメーターの場合は
Unknown parameter in inputとなります。AWS のインストーラーまたはインストールスクリプトでインストールした場合はaws update(CLI 2.36.0 以降)で、それ以外の場合はインストーラーまたはパッケージマネージャーでアップグレードしてください。 - セキュリティ(2026-09 時点): CLI 2.35.3 以降では、公開済みの AWS CLI v2 のすべてのアドバイザリ(GHSA-747p-wmpv-9c78、CVE-2026-13769、CVE-2026-18654)に対応しています。影響を受ける経路は、このサーバーからは利用できません。該当する4つのコマンド(
emr ssh/socks/put/get、codeartifact login、deploy register、iam create-virtual-mfa-device)はいずれも--cli-input-jsonを登録しておらず、aws_callがパラメーターを渡す方法はこれだけです。また、3つ目のアドバイザリはオプトイン機能のcli_historyデータベースに関するものですが、このサーバーでは有効化しません。ただし、同じ CLI インストールをマシン上のほかのすべての用途と共有しています。v2 はインストーラーとして提供されるため、依存関係スキャナーでは検出されません。新しいアドバイザリがないか、アドバイザリ一覧を確認する価値があります。 - AWS CLI v1 はサポート対象外です。2026-07-15 にメンテナンスモードに入り、2027-07-15 にサポートが終了します。
- 2.22.0 以降を推奨します。 このリリースで
- CLI で使用できる AWS プロファイルがあること — プロファイルの選択方法については環境を参照してください。SSO / IAM Identity Center プロファイルでは、デバイスコードによる再ログインツールも利用できます。
ランタイム
このサーバーは oam.js と Node の両方で変更なしに動作します。ランチャーは 0.18.0 より古い oam ではサーバーを起動せず、この最低バージョン以上で見つかった oam バイナリのうち最も新しいものを選択します。oam 0.18.0(aarch64-pc-windows-msvc)で検証済みです。MCP ハンドシェイクで28個のツールすべてを一覧表示すること、ローカルツールの呼び出し、後述する aws_script のサンドボックス動作を確認しています。
oam 0.18.0 が最低バージョンです。 ランチャーはこのバージョン以上で見つかった oam のうち最も新しいものを選択し、それより古いバージョンではサーバーを起動せず、該当するバージョンがない場合は Node にフォールバックします(AWS_MCP_RUNTIME=oam を指定するとエラーになります)。最低バージョンの指定には理由があります。0.9.0 より前のリリースでは、child_process.execFile の引数がシェル経由で実行され、exec の timeout が受け入れられても無視され、stdio: 'inherit' が 'pipe' として扱われていました。このサーバーは、ほぼすべてのツールで AWS CLI をシェル経由で呼び出します。
oam で実行するには、MCP クライアントの command を次のように指定します:
{
"mcpServers": {
"aws": {
"command": "oam",
"args": ["run", "/path/to/aws-mcp/dist/index.js"],
"env": { "AWS_PROFILE": "my-sso-profile", "AWS_REGION": "us-west-2" }
}
}
}
お使いのハードウェアで起動時間を計測してください。 MCP クライアントはセッションごとにこのサーバーを1回コールドスタートするため、実際に発生するコストは起動時間です。以下の数値は、現在の最低バージョンである 0.18.0 よりかなり前の oam 0.8.2 で測定したもので、その後は再測定していません。そのため、現在のランキングとして解釈しないでください。initialize + tools/list のハンドシェイクが完了するまでの、ウォームアップ後10回の実行の中央値です:
| ランタイム | コールドスタート |
|---|---|
node dist/index.js | 359 ms |
oam run dist/index.js | 650 ms |
oam run src/index.ts(ビルド手順なし) | 947 ms |
公開されている aws-mcp コマンドは、見つかった中で最も新しい oam を優先します(環境の AWS_MCP_RUNTIME を参照してください)。oam がなければ、コストはほとんどかかりません。検出時に行うのはファイルの存在確認だけで、サブプロセスは起動せず、フォールバックでは npm がすでに起動した Node プロセス内でサーバーを実行します。ただし、oam がインストールされている場合、このコマンドは Node を起動し、見つかったすべての oam バイナリに対して --version を実行して最新のものを選んでから、ようやく oam を起動します。そのため、上記の設定でクライアントから oam を直接指定するより、常に遅くなります。AWS_MCP_RUNTIME=node を指定すると、oam を完全にスキップします。 |
このリポジトリで oam が優れている点は、ほかにも2つあります。どちらもオプトインであり、公開されている npm パッケージには影響しません。
npm run check:oam--oam check(ネイティブの TypeScript 7 である tsgo)を使って型チェックを行います。計測では、tsc --noEmitの約3.8~4.7秒に対して約1.0秒でした。同じtsconfig.jsonを解決し、テストを含む同じファイルを対象とします。テストファイルに型エラーを仕込み、どちらもエラーを検出することを確認済みです。引き続き、移植性の高いデフォルトとしてnpx tsc --noEmitを使用できます。npm run build:binary:oam--oam compileを使ってスタンドアロンバイナリをビルドします。win32-arm64 での計測値は58.60 MBで、約493 KBの埋め込みV8バイトコードを含みます。bin/<platform>-<arch>/に出力され、リリースのステージングスクリプトがこれを使用します。このバイナリを再配布する場合、oam のランタイムが埋め込まれるため、oam のLICENSE、NOTICE、THIRD_PARTY_LICENSES.mdも同梱してください。
ソースがランタイムに依存しないのは意図的です。oam: のインポートは一切なく、テストには引き続き node:test を使います。これにより、Node のフォールバックは名目上ではなく、実際に機能します。
oam で aws_script を実行する場合に知っておくべき動作の違いが1つあります。Node は node:vm コンテキストの codeGeneration: { strings: false } を尊重するため、eval と Function は例外をスローしますが、oam はこの設定を尊重しないため、これらを使えます。oam 0.18.0 に対して再計測しても違いは変わっていません。サンドボックス内では、oam で eval('1+1') は 2 を返し、Function('return 7')() は 7 を返しますが、Node ではどちらも EvalError が発生します。そのため、これは継続的な違いとして扱ってください。重要な封じ込めには影響しません。oam では Function('return this')() が返すグローバルの process と require はどちらも undefined であり、Function('return require') は例外をスローします。そのため、スクリプトは同じコードを本体に書いた場合にできること以上のことはできません。aws_script はもともとセキュリティ境界ではありません(説明を参照してください)。実際の防御となるのはシャドウ化されたグローバルのリストであり、そのフラグではありません。
なお、oam を実行すると、作業ディレクトリの oam/ にバイトコードキャッシュが書き込まれます。このディレクトリはすでに .gitignore に含まれています。
環境
| 変数 | デフォルト | 用途 |
|---|---|---|
AWS_PROFILE / AWS_DEFAULT_PROFILE | default | ツール呼び出しで profile が省略された場合に使用するプロファイルです。AWS_DEFAULT_PROFILE は旧式の表記です。両方が設定されている場合は、AWS CLI v2 と同様に AWS_PROFILE が優先されます(単体の botocore と boto3 は AWS_DEFAULT_PROFILE を先に確認します)。空の値は未設定として扱われます。 |
AWS_REGION / AWS_DEFAULT_REGION | us-east-1 | ツール呼び出しで region が省略された場合に使用するリージョンです。両方が設定されている場合は AWS_REGION が優先されます。 |
AWS_SHARED_CREDENTIALS_FILE | ~/.aws/credentials | aws_assume_role が作成したプロファイルを書き込む場所です。botocore と同様に ~ の展開を行って反映されるため、CLI が後で読み込むファイルと同じ場所に書き込まれます。 |
AWS_MCP_AWS_CLI | 未設定 | PATH 上で見つかったものの代わりに実行する aws 実行ファイルの絶対パスです。GUI から起動した MCP ホストは、多くの場合シェルの PATH をまったく継承しません。また、AWS が推奨するインストーラーは現在、macOS と Linux でデフォルトの配置先を ~/.local/bin にしており、このようなホストからはほとんど見えません。command -v aws(macOS/Linux)または where.exe aws(Windows)でパスを確認してください。Windows の Git Bash では command -v aws ではなく where.exe aws を使用してください。前者は POSIX 形式のパス(/c/Program Files/...)を出力しますが、この変数はネイティブな絶対パスを要求するため、その形式を受け付けません。この設定はすべての呼び出しと aws sso login に適用されます。絶対パスでなければならず、Windows では aws.exe を指定する必要があります。.cmd または .bat のシムはシェルなしでは起動できません。使用できない値が指定されると、設定と異なる CLI を黙って実行するのではなく、この変数名を含むメッセージを出して、すべての呼び出しが失敗します。未設定の場合、サーバーは PATH 上の絶対パスのディレクトリをたどります。作業ディレクトリにある aws は実行しません。 |
公開されている aws-mcp コマンドが実行するランチャー(npx @yawlabs/aws-mcp が起動する bin/aws-mcp.mjs)は、さらに2つの変数を読み込みます。これらはランタイムを選択するもので、AWS に関する設定ではありません。クライアントから dist/index.js を直接指定すると、どちらも適用されません。oam 上での実行による変更については、ランタイムを参照してください。
| 変数 | デフォルト | 用途 |
|---|---|---|
AWS_MCP_RUNTIME | auto | auto:ランチャーがすでに実行されている oam が 0.18.0 以降であれば、その上でサービスを提供します。そうでない場合は、見つかった最新の oam バイナリ(0.18.0 以降、OAM_BIN を参照)を使用し、それもなければ Node で実行します。0.18.0 より古い oam ホストがサーバー自体を提供することはありません。最も新しい使用可能な oam に処理を引き継ぐか、PATH 上の Node に引き継ぐか、どちらもなければエラーで終了します。使用できない OAM_BIN は必ず標準エラー出力に表示されます。それ以外の、使用可能な oam が見つからずに候補から除外された oam バイナリは、その場合にのみ名前が表示されます。oam:同じ動作ですが、Node にフォールバックせずエラーで終了します。node:常に Node を使用します。npx の下では同一プロセス内で実行され、クライアントが oam run でコマンドを起動した場合は PATH 上の Node に処理を引き継ぎます。大文字と小文字は区別されません。それ以外の値は auto と同じように動作します。 |
OAM_BIN | 未設定 | 検出より優先して使用する oam バイナリのパスです。0.18.0 以降である必要があります。存在しない場合、古い場合、または実行できない場合、ランチャーはその旨を標準エラー出力に表示して検出を続行します。検出では、OAM_INSTALL_DIR が設定されていればそのディレクトリ(oam インストーラー独自のインストール先)を確認し、次にインストール済みの場所(Windows では %LOCALAPPDATA%\oam\bin、続いて ~/.oam/bin、それ以外では ~/.oam/bin)、さらに PATH を確認します。見つかったすべての oam にバージョンを問い合わせ、最も新しいものを使用します。同じバージョンの場合はインストール済みのものが優先されます。Windows では oam.exe のみが対象です。oam.cmd / oam.bat のシムは実行されず、使用可能な oam が見つからない場合は標準エラー出力に名前が表示されます。AWS_MCP_RUNTIME=node の場合、およびすでに oam 0.18.0 以降で実行されている場合は無視されます。 |
サーバーがすべての aws 呼び出しで設定する環境変数です。 各 aws 子プロセスには次の環境変数が設定され、シェルや ~/.aws/config の設定より優先されます。いずれも、このサーバーが解析する出力に影響するためです。AWS_CLI_ERROR_FORMAT=enhanced(CLI 2.34.0 の json/yaml/text/table エラー形式では、errorKind の分類で読み取る An error occurred (Code) というテキストが取り除かれます)、AWS_CLI_AUTO_PROMPT=off(自動プロンプトはコンソールを必要とするため、MCP ホストからの呼び出しでは aws sso login を含め、毎回失敗します)、AWS_CLI_OUTPUT_ENCODING=utf-8 と PYTHONUTF8=1(Windows では、これらがないと CLI は ANSI コードページで出力するため、そのコードページに含まれない文字があると失敗します)。さらに Windows では、NoDefaultCurrentDirectoryInExePath=1 も設定されます(session-manager-plugin など、CLI 独自のヘルパーが作業ディレクトリから実行されないようにします)。これらはフラグではなく環境変数なので、いずれかを認識しない古い 2.x CLI は、その変数を無視するだけです。副作用が 1 つありますが、Windows のみに該当します。2.25.0 より古い CLI では、PYTHONUTF8=1 によって CLI が ~/.aws/config と ~/.aws/credentials も UTF-8 として読み込むため、従来の Windows コードページで保存された非 ASCII 文字があると解析に失敗します。その場合は、ファイルを UTF-8 で保存し直すか、CLI を更新してください。macOS と Linux では、ANSI コードページから切り替える必要がないため、この設定によるコストはありません。linux/arm64 の aws-cli 2.36.49 で測定したところ、~/.aws/config に cp1252 のバイトが含まれている場合、PYTHONUTF8 が未設定、=0、=1 のいずれでも、また LC_ALL=C と LC_ALL=POSIX のどちらでも同じように解析に失敗しました。一方、同じ文字を UTF-8 でエンコードすると、いずれの条件でも解析できます。params を含む呼び出しには --cli-binary-format base64 も渡されるため、設定内容にかかわらず、blob 型のパラメーターは常に base64 になります。意図的に設定に委ねている項目は、再試行モードと最大試行回数、cli_timestamp_format(CLI では設定ファイルでのみ指定でき、wire では ISO 形式の文字列ではなくエポック秒が返されます)、cli_history、エンドポイント、プロキシ、CA の設定です。 |
SAML(Okta/Azure AD/ADFS)またはカスタムの credential_process で認証する場合は、そのプロファイルを AWS_PROFILE に設定してください。
すべての呼び出しでは、まずプロファイル名が次の順序で解決されます――ツールの profile 引数 -> aws_session_set で設定されたセッションプロファイル -> $AWS_PROFILE -> $AWS_DEFAULT_PROFILE -> リテラルの default。その後、--profile <name> として CLI に渡されます。「プロファイルなし」のモードはありません。ただし例外として、aws_multi_account では、解決されたプロファイルは sts:AssumeRole 呼び出しにのみ使われます。アカウントごとの操作はそれぞれ、そのアカウントの引き受けたロールの認証情報を使い、--profile フラグなしで実行されます。選択されたプロファイル内では、CLI 独自の認証情報チェーンが通常どおり解決を行います。対象は、credential_process、SSO セッション(sso_session ブロックとインラインの sso_start_url の両方)、source_profile/role_arn によるロールの連鎖、~/.aws/credentials に保存された静的キー、コンテナ認証情報、IMDS です。
例外 -- 環境変数に設定された静的キーは使われません。 プロファイルが常に明示的に渡されるため、botocore は認証情報チェーンから環境変数プロバイダーを除外します。そのため、シェルでエクスポートされた AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY/AWS_SESSION_TOKEN は参照されません。(コンテナ認証情報と IMDS には影響しません。これらはチェーン内で後に評価され、プロファイルの指定には左右されません。)静的キーを使うには、環境変数としてエクスポートするのではなく、~/.aws/credentials のプロファイルセクションに設定し、そのプロファイルを AWS_PROFILE に指定してください。
プロキシまたはプライベート CA の背後で使用する場合
aws_docs_search と aws_docs_read はこのプロセスから HTTPS 経由で取得するため、企業ゲートウェイによって問題が発生するのはこの 2 つのツールです。原因を AWS のバックエンドのせいにせず、原因そのものを示すようになりました。修正するには、MCP 設定に env エントリを追加します。シェルで export するのではありません。以下の 2 つの変数はプロセスの起動時に読み込まれ、MCP クライアントがサーバー自体を起動するためです。
| 変数 | 用途 |
|---|---|
NODE_EXTRA_CA_CERTS | TLS インターセプトにより、自己署名または発行者不明のエラーで取得に失敗する場合に、ゲートウェイの CA 証明書を格納した PEM ファイルのパスを指定します。 |
NODE_USE_SYSTEM_CA=1 | ファイルを指定する代わりに、オペレーティングシステムの証明書ストアを信頼します(Node 22.19 以降)。 |
HTTPS_PROXY / https_proxy | 経由して取得するプロキシです。Node では、NODE_USE_ENV_PROXY=1 または --use-env-proxy で明示的に有効化しない限り、無視されます(Node 22.21 以降。NODE_OPTIONS 内での指定も可能です)。有効化しない場合、リクエストは直接接続し、プロキシ経由のみのネットワークではタイムアウトします。oam 上で実行する場合は、明示的な有効化なしでこの変数が適用されます。 |
AWS CLI は独立したプロセスであり、独自のルールに従います。そのため、同じゲートウェイ経由の credential_process、SSO ログイン、または aws_call は、上記の Node 変数ではなく、AWS CLI 独自のプロキシ設定(HTTP_PROXY / HTTPS_PROXY および AWS_CA_BUNDLE)に従います。これらの失敗にも、それぞれ対処方法が表示されるようになりました。
呼び出しで profile が省略され、aws_session_set が呼び出されておらず、AWS_PROFILE も AWS_DEFAULT_PROFILE も空でない値に設定されておらず、さらに ~/.aws/config と ~/.aws/credentials のどちらにも default プロファイルが定義されていない場合、CLI は --profile default を ProfileNotFound で拒否します。ツールはこれを no_creds エラーとして報告します。MCP 設定で AWS_PROFILE を通常使用するプロファイルに設定してください。
SSO ログインフローの仕組み
1. Claude calls aws_login_start({ profile: "prod" })
2. Server spawns: aws sso login --no-browser --use-device-code --profile prod
(--use-device-code keeps the CLI on the device grant; without it, 2.22.0+
prints an authorize URL with no short code to surface)
3. Server parses the URL + code from stdout, returns them to Claude
4. Claude surfaces: "Open https://device.sso.us-east-1.amazonaws.com/ and enter ABCD-EFGH"
5. You click — browser opens in your own user session — auth in ~10 seconds
6. Claude calls aws_login_complete({ sessionId })
7. Tool returns your new identity. Back to work.
トークンは通常の aws sso login と同じ方法で ~/.aws/sso/cache/<hash>.json にキャッシュされるため、AWS CLI、SDK、およびマシン上のほかのすべてのツールで透過的に使用できます。
このサーバーをローカルで実行する必要がある理由(mcp.hosting 上ではなく)
SSO トークンは、お使いのデバイス上の ~/.aws/sso/cache/ に保存されます。リモート MCP サーバーはそのトークンを読み取れません。そのため、これはホスト型ではなく stdio サーバーです。これは AWS SSO の制約であり、mcp.hosting の制限ではありません。
安定性
1.0 以降、このパッケージはセマンティックバージョニングに従います。0.x 系は安定化前の調整段階です。破壊的変更は CHANGELOG.md に記載されますが、必ずしもメジャーバージョンの更新を条件とするわけではありません。
1.x で安定している項目(以下の内容に対する変更は、メジャーバージョンの更新が必要となる破壊的変更です):
-
ツール名 -- 上記のツール表に記載されている28個のツール名は、変更も削除もされません。
-
ツールのアノテーション --
readOnlyHint、destructiveHint、idempotentHint、openWorldHint。これらは、MCP ホストに呼び出しを制御する方法を示します。黙って値を反転すると、ホストの UI が壊れてしまいます。保証の方向に注意してください。ツールができることを以前のアノテーションが過小評価していた場合、パッチリリースでアノテーションをより厳格(より慎重)にすることはあります。そのため、v2.0.1 ではaws_call、aws_multi_region、aws_resource_updateにdestructiveHint: trueを設定しました。メジャーリリース以外で緩和されることはありません。ホストがこれらを基に確認プロンプトを抑止する場合は、aws_callとaws_multi_regionが、呼び出し元の IAM ID に許可されたあらゆる AWS API(削除を含む)を呼び出せるものとして扱ってください。 -
必須入力フィールド -- ツールごとの必須フィールドの構成は変更も削除もされません。新しい任意フィールドが追加されることはあります。
-
ツールごとの成功エンベロープの形式 --
{ok: true, data}レスポンスのdataオブジェクト、具体的には次のとおりです。aws_call->{command, commandArgv, result}aws_paginate->{command, result, nextToken, hasMore}aws_multi_region->{service, operation, regionCount, okCount, errorCount, results: [{region, ok, data?, command?, error?, errorKind?, truncated?}]}(集約レスポンスには上限があります。上限を超えたエントリーはregion/okを保持しますが、dataは省略され、truncated: trueが設定されます。エラーのエントリーは削除されません。また、okCount/errorCountは上限適用前に算出されるため、上限内に残った結果ではなく、呼び出しの実際の結果を常に表します。)aws_multi_account->{service, operation, roleName, accountCount, okCount, errorCount, results: [{accountId, ok, data?, command?, error?, errorKind?, truncated?}]}。5 MB の集約上限に達した場合は、さらにtruncated、truncatedAccounts、maxTotalResultBytesが含まれます。regionの代わりにaccountIdを使う以外は、フィールドごとにaws_multi_regionと同じです。これには、okCount/errorCountが上限適用前に算出され、上限内に残った結果ではなく呼び出しの実際の結果を表すことも含まれます。重複するアカウント ID は統合されるため、results.lengthがaccounts.lengthを下回る場合があります。accountCountを使用してください。認証情報が~/.aws/credentialsに書き込まれたり、command、error、rawBodyに表示されたりすることはありません。aws_whoami->{account, userId, arn, profile, region, ssoToken: {expiresAt, minutesLeft, startUrl?} | null}(キャッシュされたトークンにstartUrlが記録されていない場合、startUrlは省略されます)aws_login_start->{sessionId, profile, verificationUrl, userCode, instructions, reused?}(同じプロファイルの進行中のログインを再提示する場合はreused: true)aws_login_complete->{loggedIn, account, userId, arn, profile, region, ssoToken}(aws_whoamiと同じssoTokenの形式で、任意のstartUrlも含みます)aws_refresh_if_expiring_soon-> 分岐に応じて次の2種類の形式のいずれかになります。 キャッシュされたトークンの残り時間がthresholdMinutesより長い場合は{status: "ok", minutesLeft, expiresAt, profile}、更新が進行中の場合は{status: "refreshing", reason, sessionId, profile, verificationUrl, userCode, reused?, instructions}です。statusで判別してください。aws_assume_role->{profile, credentialsPath, expiration, assumedRoleArn, assumedRoleId, sourceProfile, hint, warning?}(warningは、対象プロファイルがすでに存在し、その3つの認証情報キーがその場で上書きされた場合にのみ含まれます。AWS_SHARED_CREDENTIALS_FILEが設定されている場合、credentialsPathはその値に従います)aws_list_profiles->{configPath, profiles: [{name, region?, ssoStartUrl?, ssoRegion?, ssoSession?, isSso}]}aws_session_get/aws_session_set/aws_session_clear->{profile, region, profileSource, regionSource}(*Sourceは"session" | "env" | "default"のいずれかです)。3つとも同じ形式を返します(set/clear は変更後の状態を返します)。aws_resource_get->{command, typeName, identifier, properties, propertiesRaw?}aws_resource_list->{command, typeName, resources: [{identifier, properties, propertiesRaw?}], nextToken, hasMore}(Properties文字列の解析に失敗したエントリーにはpropertiesRawが付随し、aws_resource_getと同じ動作になります)aws_resource_create/_update/_delete/_status->{command, requestToken, operationStatus, identifier, errorCode, statusMessage, retryAfter, progressEvent}をフラットに昇格した形式です。awaitCompletion: trueが指定された場合はawaited: {attempts, elapsedMs}ブロックが追加されます。awaitCompletion: trueが指定されていてもポーリング対象のリクエストトークンが返されなかった場合は、代わりにawaitSkipped文字列が含まれます。aws_resource_diff->{command, typeName, identifier, before, after, changes, changeCount}aws_logs_tail->{command, logGroupName, logGroupIdentifier, since, eventCount, totalEvents, truncated, events}。各イベントは{timestamp, logStreamName, message}です。timestampはミリ秒を含む ISO 8601 UTC 形式で、messageはイベントのテキストそのものです。メンバーのない状態で届いたイベントでは、3つの値のいずれかがnullになります。そのようなイベントは削除されず保持されるため、eventCountはサービスが返した件数と一致します(実際の CloudWatch は3つすべてを返しますが、それと異なるエンドポイントではそうならない場合があります)。eventsは古い順で、maxEvents(デフォルトは500)を上限とし、最新のイベントを保持します。eventCountはeventsの件数であり、それを超えるイベントがウィンドウ内にある場合に限りtruncatedは true です。totalEventsはツールがウィンドウ全体を読み取った場合のイベント数で、途中で停止した場合はnullです。AWS CLI 2.35.8+ では新しい順に読み取り、maxEventsを超えた時点で停止するため、その場合、切り詰められた結果のtotalEventsはnullになります。一方、古い CLI、または FilterLogEvents のstartFromHeadを無視するエンドポイントでは、ウィンドウ全体を読み取り、正確な件数を返します。logGroupNameは常にグループ名のみです。入力が ARN の場合、logGroupIdentifierは FilterLogEvents に送信される ARN(末尾の:*を除去したもの)で、それ以外の場合はnullです。aws_logs_query->{command, startCommand, profile, region, queryId, status, queryLanguage, logGroupNames, startTime, endTime, fields, rows, rowCount, statistics, truncated, polled: {attempts, elapsedMs}}。ok: trueの場合、statusは常に"Complete"です。それ以外のすべての終端状態(Failed、Cancelled、Timeout、未認識の状態、状態がない場合)はok: falseを返します。また、maxWaitMsのタイムアウトとクライアントによるキャンセルもok: falseとなり、どちらもエラー文字列にqueryIdを含みます(エラーエンベロープにはdataがないためです)。commandは最後のget-query-results呼び出し、startCommandはstart-query呼び出しです(その--cli-input-jsonペイロードは秘匿されるため、クエリテキストは返されません)。rowsは API の[{field, value}]ペアを単純なオブジェクトに平坦化したもので、文字列以外の値はnullになります。fieldsはフィールド名を初めて現れた順に集めたものです。logGroupNamesは実際にクエリされた名前のみの解決済みロググループ名です(ARN を入力した場合は、抽出した名前が返されます)。レスポンスにqueryLanguageやstatisticsがない場合、それらはnullになります。rowCountが実効的なlimitに達した場合、truncatedは true です。このツールが AWS 側でクエリを停止することは、どの経路でもありません。aws_metrics_query->{command, profile, region, startTime, endTime, periodSeconds, series: [{id, label?, timestamps, values, period?, statusCode?}], nextToken, hasMore, messages?: [{code?, value?}]}(messagesは空の場合は省略されます。系列ごとのlabel/period/statusCodeは、CloudWatch が返す場合、またはクエリで期間が指定/継承される場合に含まれます。CloudWatch がレスポンスを切り詰めない限り、nextTokenは null でhasMoreは false です)aws_iam_simulate->{command, principalArn, summary: {allowed, denied, unknown, total}, results, marker, hasMore}(resultsには、IAM のリソースごとのResourceSpecificResultsから読み取った、(アクション、リソース)ペアごとのエントリーが1つずつ含まれます。resourcesを指定せずに呼び出すと、アクションごとにresource: "*"のエントリーが1つ含まれます。アクションをリソースごとに分解しない AWS の場合は、AWS 自身のEvalResourceName(*またはそのアクションの ARN テンプレート)を持つエントリーが1つ含まれます。summaryはエントリー数を集計します。リソースごとの値が AWS から返されない場合、organizationsDecisionとpermissionsBoundaryDecisionは AWS のアクションレベルの値にフォールバックします。ただし、allowedのエントリーは常に"allowed"を使用します。unknownは、判定が欠落または未認識のエントリー数です。不正なレスポンスがdeniedに暗黙にまとめられることはありません。CLI が IAM のページネーションを自ら処理するため、最初の呼び出しは完了済みで、hasMore: false、marker: nullになります。2つの値がカーソルを持つのはmarkerから再開した呼び出しの場合のみで、その場合、summaryはそのページのみを表します。)aws_lambda_invoke->{command, statusCode, functionError, executedVersion, payload, logTail}。レスポンス本文が切り詰められた場合にのみpayloadTruncated: trueが追加されます(それ以外では省略され、サイズ報告ではなく例外フラグとして機能します)。logTailは、関数のLogResultをすでに base64 デコードしたものです。空でないfunctionErrorがあっても、ok: trueです。呼び出し自体は成功しており、関数のハンドラーが例外を発生させたことを意味します。発生したエラーはpayloadに含まれます。呼び出しの失敗(関数名が不正、権限がない、スロットリング、タイムアウト)はok: falseとなります。呼び出しが複数回送信されることはありません。errorKind: "timeout"は時間内に応答がなかったことを意味し、そのメッセージには呼び出しが送信されたかどうかが記載されます(送信済みの場合、関数は実行された可能性があり、実行中の可能性もあります)。aws_script->{result, logs, truncatedLogs, durationMs}。resultは、スクリプトがreturnした値(undefinedを含む、JSON にシリアライズ可能な任意の値)です。aws_docs_search->{query, count, results: [{title, url, summary?, excerpt?, lexicalMatch}], queryTerms, termsMatchedNowhere?, bestLexicalOverlap, lowRelevance, relevanceNote?}(summary/excerptは、上流の検索バックエンドが返した場合のみ含まれます。2.1.0 以降に提供されている関連度フィールドは、このサーバーがローカルで計算します。クエリの語句と結果のタイトル/要約/抜粋との文字どおりの単語の重複であり、バックエンドのスコアでも意味的な順位付けでもありません。結果には注釈が付くだけで、並べ替えは行われません。結果ごとのlexicalMatchは{overlap, matchedTerms, unmatchedTerms}です。スコアリング可能な語句がないクエリではnullとなり、その場合bestLexicalOverlapもnullで、termsMatchedNowhereは省略されます。最良の結果がクエリ語句の半分以下にしか一致しない場合、どの結果にも現れない語句がある場合、またはバックエンドが何も返さなかった場合、lowRelevanceは true です。relevanceNoteは、lowRelevanceの判定、またはスコアリング可能な語句がない場合についての文章による説明です。説明する内容がなければ省略されます。)aws_docs_read->{url, cached, content, startIndex, endIndex, totalLength, hasMore, nextStartIndex}
-
エラーエンベロープ --
{ok: false, error: string, rawBody?: string, errorKind?: string, suggestion?: string}。error文字列は人が読める形式で、その文言は可能な範囲での提供です(下記参照)。安定した機械可読の情報はerrorKindです(下記の列挙型を参照)。suggestionには、認識された AWS エラーコードに対する1行の対処法が含まれます。これはerrorの末尾にも埋め込まれるため、追加情報ではなく、プログラムから呼び出す場合の便宜を図るものです。ワイヤー上でエラー結果は単一のテキストブロックであり、errorKindは独立した最初の行に記載されます。errorKind: <kind>の後に改行、続いてError: <message>、さらに空行の後、メッセージ内でまだ引用されていない場合はrawBodyが続きます。分類されない失敗ではこの行が省略され、従来どおりError:から始まります。 -
errorKindの列挙型 --"sso_expired" | "expired_creds" | "no_creds" | "invalid_creds" | "bad_input" | "spawn_failure" | "timeout" | "output_too_large" | "malformed_json" | "nonzero_exit" | "unexpected" | "cancelled"。これは異なるルールが適用される、2つの別個の箇所に現れます。 トップレベルのエラーエンベロープでは、awsCLI 呼び出しをラップするすべてのツール、つまりaws_call、aws_paginate、aws_logs_tail、aws_logs_query、aws_metrics_query、aws_iam_simulate、aws_lambda_invoke、aws_assume_role、aws_whoami、aws_login_complete、aws_resource_*ファミリーが対象です。失敗が CLI に到達しなかった場合、ここにerrorKindは存在せず、デフォルト値も設定されません。該当するのは、ツール独自の入力検証、aws_docs_*の HTTP エラー、クライアントによってキャンセルされたポーリングです。errorKindがない場合はnonzero_exitではなく、「未分類」として扱ってください。ファンアウトツールの
results配列の各エントリーでは、aws_multi_regionとaws_multi_accountが対象です。失敗したエントリーには、CLI に到達しなかった場合も含め、エントリーごとのerrorKindが常に存在します。両ツールは、自ら拒否したエントリー(不正なリージョン名、12 桁ではないアカウント ID)をbad_inputとして分類し、ワーカーが例外をスローしたエントリーをunexpectedとして分類します。unexpectedはファンアウト専用であり、トップレベルのエンベロープには現れません。同様に、cancelledもトップレベルには現れません。これは、ワーカーが処理を開始する前にクライアントがリクエストをキャンセルしたため、一度も試行されなかったエントリーを示します。cancelledのエントリーについて AWS には何も送信されていません。すでに実行済みのエントリーは実際の結果を保持し、配列にはリクエストされた全項目が引き続き含まれるため、キャンセルされた一括処理を、より小規模で成功した処理とokCount/errorCountが誤認することはありません。新しいバリアントは追加される場合がありますが、既存のものが改名されたり、別の用途に転用されたりすることはありません。3 種類の認証情報は、対処方法が異なるため意図的に区別されています。
no_credsは認証情報が見つからなかったこと、invalid_credsは認証情報の解決後に AWS が拒否したこと(キーのローテーション後によく見られます)、expired_credsは一時セッションの期限切れを意味します。expired_credsは認証情報の取得元を問わず使われます。AWS は、SSO 由来のセッション、aws_assume_roleセッション、ウェブ ID セッションのいずれに対しても、同じExpiredTokenラッパーを返すためです。そのため、メッセージでは SSO と決めつけず、両方の対処方法を示します。sso_expiredは、botocore の SSO トークンプロバイダーを具体的に示すエラーに限って使用します。malformed_jsonは、標準出力が{または[で始まり、解析に失敗したことを意味します。つまり、--queryが正当に生成するスカラー出力ではなく、切り詰められたレスポンスを示します。
ベストエフォート(マイナーリリースまたはパッチリリースで変更される可能性があります):
- エラーメッセージの文言。 「プロファイル 'X' の SSO セッションの有効期限が切れています。aws_login_start を呼び出してください...」のような文字列は、わかりやすさを高めるために調整される場合があります。正規表現で
errorテキストを照合するのではなく、errorKindまたは構造化エンベロープを基準にしてください。 suggestionの文言――認識された AWS エラーコードから導かれる、1 行の対処方法です。suggestionがあるかどうかはエラーコードによって決まりますが、文そのものは調整される場合があります。このテキストではなく、errorKindに基づいて分岐してください。これはerrorの末尾にも重複して含まれるため、両方を読む呼び出し元は二重に表示しないでください。rawBodyの内容――診断用の、基盤となるawsCLI の標準エラー出力/標準出力です。形式は、インストールされているバージョンの CLI が出力する内容に従います。command文字列――結果とともに表示される、人が読めるコマンドです。引数の順序と、正確な秘匿値のスタブ形式(<redacted len=N>)は変わる場合があります。これはサーバーが実行されるホストのシェル向けに引用符で囲まれます。POSIX シェル、または Windows 上の PowerShell が対象です。cmd.exeでは正しく動作しません。引用符の付け方にかかわらず、&、|、改行がそのまま有効だからです。また Windows 上の Git Bash でも正しく動作しません。単一引用符を含む値では引用符が失われ、誤った値が渡されるためです(現実的な例はBuckets[?Name=='prod'].Nameです。この場合、実行可能なコマンドになるのではなく、無効な JMESPath になります)。commandを解析するのではなく、commandArgvを使用してください。commandを含むすべてのエンベロープには、同じ呼び出しを正確なトークンの配列で表したcommandArgvも含まれます。トークンは引用符なしで、エントリー 0 は表示されるバイナリ、その後は引数ごとに 1 エントリーです。文字列は配列から生成されるため、同じように秘匿化されます。サーバーが実際に起動するのはこれであり(シェルは一切介在しません)、解析し直す必要はなく、想定外のシェルによって再解釈されることもありません。実行する必要がある場合は、ご利用のシェル向けに引用符を付け直してください。文字列形式は読みやすくするためのものであり、契約となるのは配列です。- ツールの「説明」 — モデルに提示される文章です。これを改善しても、互換性は損なわれません。
非推奨化ポリシー: 安定した形式を破壊的に変更するにはメジャーバージョンの更新が必要です。非推奨化はまずマイナーバージョンで行います(古い形式は引き続き動作し、新しい形式が併せて利用可能になります)。削除は次のメジャーバージョンで予定されます。非推奨化と削除の両方を CHANGELOG.md に記載します。
開発
npm test は単体テストと統合テストの両方を実行します。統合テストスイートは、AWS CLI のスタブとして動作するローカルの fake-aws サブプロセスを起動します。AWS の認証情報やネットワークアクセスは不要です。*.realcli.test.ts という名前のスイートは、実際の AWS CLI を使って fake を検証します。使い捨てのキーを使用して、PATH 上の AWS CLI v2 をプロセス内エンドポイント 127.0.0.1 に接続し、それ以外のすべてのアドレスは到達不能なプロキシにルーティングするため、マシンの外部に通信が出ることはありません。CLI の起動が数回だけ必要なテストは、毎回 npm test で実行され、CLI v2 がインストールされていない場合はスキップされます。実際のタイムアウトや再試行を待つテストでは、release.sh が設定する AWS_MCP_REAL_CLI_TESTS=1 も必要です。実際の AWS 認証情報が必要なのは、環境変数 AWS_MCP_LIVE_TESTS で制御されるライブテストのみで、通常の npm test の実行ではスキップされます。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。