Amazon Q Developer CLIからMCPを経由してStrands Agentsを呼び出してみた(AIエージェント間通信)

From What is Model Context Protocol (MCP)? How it simplifies AI integrations compared to APIs)
目次
- はじめに
- 本記事の対象読者
- LambdaでStrands Agentsを構築してみる
- AWS Lambda MCP ServerにLambdaを追加する
- Amazon Q Developer CLIからMCP経由でStrands Agentsを呼び出してみる
- まとめ
1. はじめに
こんにちは!ベンジャミンの松延(まつのぶ)です!
AWS公式ブログにてオープンソースのAIエージェントSDKである「Strands Agents」が紹介されました。
Strands Agents SDKを使用することで、AIエージェントをプログラム上で簡単実装できるようになります。
Strands Agentsに関する概要は、「オープンソースのAIエージェントSDK「Strands Agents」をハンズオンしてみよう!」という記事を執筆していますので、ご確認ください。
Strands Agentsが発表されてまだ日が浅いのですが、少し踏み込んでみました。
Strands Agents公式を確認してみたところ、Lambda上でStrands Agentsを使用してAIエージェントを構築・実行することが可能とのことです。
また、AWS Lambda MCP Serverを使用すると、MCPを経由してAWSアカウント上のLambda関数を実行することが可能です。
つまり、Lambda上でStrands Agentsを使用してAIエージェントを構築してAWS Lambda MCP Serverに登録することで、Amazon Q Developer CLIからMCPを経由してAIエージェント(Strands Agents)を呼び出すことができます。AIエージェント同士で通信が可能になります。
本記事では、上記の実装方法についてシェアしていきたいと思います。
2. 本記事の対象読者
以下を対象読者としています。そのため、Amazon Q Developer CLIやMCP、Strands Agentsの概要については割愛させていただきます。
また、本記事のハンズオン中にAWS CDKを使用する場面がありますが、CDKに関する概要やcdk bootstrap等についての説明は割愛させていただきます。AWS CDKの概要等については、こちらの記事が参考になります。
- Strands Agentsに関する概要は、「オープンソースのAIエージェントSDK「Strands Agents」をハンズオンしてみよう!」という記事を執筆していますので、ご確認ください。
- Amazon Q Developer CLIとMCPの連携方法は、「Amazon Q Developer CLIとMCPを連携してみよう」という記事を執筆していますので、ご確認ください。
3. LambdaでStrands Agentsを構築してみる
Strands Agents公式を確認してみたところ、Lambda上でStrands Agentsを使用してAIエージェントを構築・実行することが可能とのことです。
まずこちらをハンズオンしてみましょう!
1. 前提条件
- オレゴンリージョン(us-west-2)のAmazon BedrockにてClaude 3.7 Sonnetが有効化されていること
- 作業端末にてAWS CLIがインストールされており、AWS CLIで認証情報の設定が完了していること
- 作業端末にてpipが25.1.1以上がインストールされていること
2. サンプルコードをダウンロードする
1. ハンズオン用のディレクトリを作成してください。
mkdir ~/Desktop/strands-agents-handson
cd ~/Desktop/strands-agents-handson
2. Strands Agentsのリポジトリをクローンしてください。
git clone https://github.com/strands-agents/docs.git
3. リポジトリをクローンした後、Lambda用のサンプルコードをコピーしましょう。
cp -r docs/docs/examples/cdk/deploy_to_lambda/ ./deploy_to_lambda
cd ./deploy_to_lambda
deploy_to_lambdaのディレクトリ構造は以下のようになっているかと思います。
deploy_to_lambda/
├── .gitignore
├── .mise.toml
├── README.md
├── bin/ # CDKアプリのエントリーポイントとデプロイスクリプトを含む
├── lib/ # TypeScriptでのCDKスタック定義を含む
├── lambda/ # Python Lambda関数のコードを含む
├── packaging/ # Lambdaデプロイメントアセットと依存関係を保存するディレクトリ
├── tsconfig.json
├── cdk.json
├── package.json
├── package-lock.json
└── requirements.txt
deploy_to_lamba/lambda/agent_handler.pyにて、Strands AgentsでAIエージェントが定義されています。
サンプルコードでは、アメリカの各地域の天気情報を取得するためのAIエージェントが定義されています。
from strands import Agent
from strands_tools import http_request
from typing import Dict, Any
# Define a weather-focused system prompt
WEATHER_SYSTEM_PROMPT = """You are a weather assistant with HTTP capabilities. You can:
1. Make HTTP requests to the National Weather Service API
2. Process and display weather forecast data
3. Provide weather information for locations in the United States
When retrieving weather information:
1. First get the coordinates or grid information using https://api.weather.gov/points/{latitude},{longitude} or https://api.weather.gov/points/{zipcode}
2. Then use the returned forecast URL to get the actual forecast
When displaying responses:
- Format weather data in a human-readable way
- Highlight important information like temperature, precipitation, and alerts
- Handle errors appropriately
- Convert technical terms to user-friendly language
Always explain the weather conditions clearly and provide context for the forecast.
"""
def handler(event: Dict[str, Any], _context) -> str:
weather_agent = Agent(
system_prompt=WEATHER_SYSTEM_PROMPT,
tools=[http_request],
)
response = weather_agent(event.get('prompt'))
return str(response)
サンプルコードでは、CDKを用いてLambda関数がデプロイされるようです。
3. CDKスタックをデプロイしてLambda関数を構築する
1. CDKとTypeScriptを含むNode.jsの依存関係をインストールしてください。
npm install
2. Pythonの仮想環境を作成してください。
python -m venv .venv
source .venv/bin/activate # Windowsの場合: .venv\Scripts\activate
3. Pythonの依存関係をインストールしてください。
pip install -r requirements.txt
4. Lambda関数用のPython依存関係をインストールしてください。
(pip 25.1.1未満だと以下コマンド実行時にエラーが発生することがあります。pip 25.1.1以上にアップデートしてください)
pip install -r requirements.txt --platform manylinux2014_aarch64 --target ./packaging/_dependencies --only-binary=:all:
5. Lambdaをパッケージ化してください。
python ./bin/package_for_lambda.py
Lambdaのパッケージが完了すると以下が表示されるかと思います。
Creating Lambda deployment package: /Users/matsunobu/Desktop/strands-agents-handson/deploy_to_lambda/packaging/app.zip
Creating ZIP files...
Creating dependencies.zip...
Creating app.zip...
Lambda deployment packages created successfully: dependencies.zip app.zip
6. AWS環境をブートストラップしましょう(まだ行なっていない場合)
npx cdk bootstrap --region us-west-2
7. CDKスタックをデプロイしましょう!
npx cdk deploy --region us-west-2
デプロイが完了するまで約1〜2分ほどかかります。

4. Lambda関数を実行してAIエージェントが動作することを確認する
1. 以下コマンドを実行してLambda関数を実行してみましょう。
aws lambda invoke --function-name AgentFunction \
--region us-west-2 \
--cli-binary-format raw-in-base64-out \
--payload '{"prompt": "ニューヨークの今日の天気を教えてください。"}' \
output.json
2. 出力結果を見てみましょう!
cat ./output.json
"\n\n# ニューヨーク市の今日の天気\n\n## 本日の天気概況\n**天気**: ほとんど晴れ (Mostly Sunny)\n**最高気温**: 66°F (約19°C)\n**風**: 北風、時速8〜13マイル (約13〜21 km/h)\n\n## 詳細予報\nニューヨーク市は今日、ほとんど晴れの穏やかな一日となっています。最高気温は66°F (約19°C)で、北風が時速8〜13マイル程度吹いています。\n\n## 今後の天気\n今夜は気温が下がり53°F (約12°C)前後となり、雲が増えて「ほとんど曇り (Mostly Cloudy)」の状態になる見込みです。東風が時速7〜10マイル程度吹く予報です。\n\n明日(水曜日)からは天気が崩れ、雨の可能性が高くなります。気温は56°F (約13°C)まで上がる見込みですが、雨の影響で体感温度は下がるでしょう。降水確率は70%となっています。\n\n## 週末の見通し\n週末に向けて天気は徐々に回復し、土曜日と日曜日は部分的に晴れる見込みです。日曜日の最高気温は67°F (約19°C)まで上昇する予報です。\n\n今日はお出かけに適した良い天気となっていますが、明日以降は傘をお持ちになることをお勧めします。\n"%
読みにくいのですが、問題なく出力できています!
また、CloudWatch Logsにもログ出力されています。

4. AWS Lambda MCP ServerにLambdaを追加する
AWS Lambda MCP Serverを使用すると、MCPを経由してAWSアカウント上のLambda関数を実行することが可能です。
AWS Lambda MCP Serverにさきほど作成したLambda関数を追加しましょう!
事前にLambda関数を実行することが可能なIAMユーザを作成しておき、AWS CLIのプロファイルに指定する必要があります。
1. Lambda関数を実行可能なIAMユーザを作成する
1. AWSマネジメントコンソール上部の検索エリアに[IAM]と入力して、IAMホーム画面を開いてください


2. IAM画面左側の[アクセス管理] > [ユーザー]を選択して、IAMユーザ一覧画面を表示してください。


3. [ユーザーの作成]を選択してください。

4. ユーザ詳細画面にて以下を設定し、[次へ]を選択してください。
項目名 | 設定値 |
ユーザー名 | strands-agents-handson-lambda |
AWSマネジメントコンソールへのユーザーアクセスを提供する | チェックなし |
5. 今回はハンズオンのためLambdaへのフルアクセス権限を付与してIAMユーザを作成してください。
(※)実際にシステム構築する際は、AWSベストプラクティスである「最小権限の原則」に従い、必要な権限のみ付与するようにしてください。

6. IAMユーザ作成後、該当IAMユーザの詳細画面からアクセスキーを発行しましょう。
[セキュリティ認証情報]タブの[アクセスキー]セクションにて、[アクセスキーを作成]を選択してください。

7. ユースケースを選択して、[次へ]を選択してください。

8. 説明タグは省略して[アクセスキーを作成]を選択してください。

9. アクセスキーをダウンロードし外部に漏れないように厳重に保管してください。

10. ターミナルを開き、以下コマンドを実行してください。
vim ~/.aws/credentials
11. 以下をコピー&ペーストして保存し、vimエディタを閉じてください。(:wqコマンド実行で、保存・vimエディタを閉じます)
[strands-agents-handson-lambda]
aws_access_key_id=<IAMユーザのアクセスキー>
aws_secret_access_key=<IAMユーザのシークレットアクセスキー>
region=us-west-2
12. 以下コマンドを実行しAWS STS認証を実行しておきます。
aws sts get-caller-identity --profile strands-agents-handson-lambda
以下のような結果が返却されてきている場合は、正常に認証が成功しています。
{
"UserId": "<ユーザID>",
"Account": "<AWSアカウントID>",
"Arn": "arn:aws:iam::<AWSアカウントID>:user/strands-agents-handson-lambda"
}
補足となりますが、IAMユーザのアクセスキー等を使用せずにIAMロールを使用して認証設定することも可能です。IAMロールを使用した認証設定方法については、こちらの記事が参考になります。
2. AWS Lambda MCP ServerにLambda関数を追加する
1. Amazon Q Developer CLIのMCP設定ファイルを作成してください。
mkdir ~/Desktop/strands-agents-handson/.amazonq
cd ~/Desktop/strands-agents-handson/.amazonq
touch mcp.json
2. MCP設定ファイル(.amazonq/mcp.json)を開き、以下をコピー&ペーストして保存してください。
{
"mcpServers": {
"awslabs.lambda-mcp-server": {
"command": "uvx",
"args": ["awslabs.lambda-mcp-server@latest"],
"env": {
"AWS_PROFILE": "strands-agents-handson-lambda",
"AWS_REGION": "us-west-2",
"FUNCTION_PREFIX": "AgentFunction"
}
}
}
}
envプロパティに含める各種設定値については以下になります。
設定項目 | 説明 |
AWS_PROFILE | AWS CLIで指定するプロファイル名 (今回は、strands-agents-handson-lambdaを指定) |
AWS_REGION | 実行されるLambda関数が所属しているリージョン (今回は、オレゴンリージョン(us-west-2)を指定) |
FUNCTION_PREFIX | 実行対象のLambda関数名 (今回は、サンプルCDK実行時にデプロイされたLambda関数(AgentFunction)を指定) |
これでAWS Lambda MCP Serverに対してLambda関数を追加することができました!
5. Amazon Q Developer CLIからMCP経由でStrands Agentsを呼び出してみる
ようやくここまでできたので、Amazon Q Developer CLIからMCP経由でStrands Agentsを呼び出してみましょう!
1. 以下ディレクトリ上でq chatコマンドを実行し、Amazon Q Developer CLIを起動してください。
cd ~/Desktop/strands-agents-handson
q chat
すると、以下のような表示がされます。
✓ awslabslambda_mcp_server loaded in 5.12s
✓ 1 of 1 mcp servers initialized
⢠⣶⣶⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣶⣿⣿⣿⣶⣦⡀⠀
⠀⠀⠀⣾⡿⢻⣿⡆⠀⠀⠀⢀⣄⡄⢀⣠⣤⣤⡀⢀⣠⣤⣤⡀⠀⠀⢀⣠⣤⣤⣤⣄⠀⠀⢀⣤⣤⣤⣤⣤⣤⡀⠀⠀⣀⣤⣤⣤⣀⠀⠀⠀⢠⣤⡀⣀⣤⣤⣄⡀⠀⠀⠀⠀⠀⠀⢠⣿⣿⠋⠀⠀⠀⠙⣿⣿⡆
⠀⠀⣼⣿⠇⠀⣿⣿⡄⠀⠀⢸⣿⣿⠛⠉⠻⣿⣿⠛⠉⠛⣿⣿⠀⠀⠘⠛⠉⠉⠻⣿⣧⠀⠈⠛⠛⠛⣻⣿⡿⠀⢀⣾⣿⠛⠉⠻⣿⣷⡀⠀⢸⣿⡟⠛⠉⢻⣿⣷⠀⠀⠀⠀⠀⠀⣼⣿⡏⠀⠀⠀⠀⠀⢸⣿⣿
⠀⢰⣿⣿⣤⣤⣼⣿⣷⠀⠀⢸⣿⣿⠀⠀⠀⣿⣿⠀⠀⠀⣿⣿⠀⠀⢀⣴⣶⣶⣶⣿⣿⠀⠀⠀⣠⣾⡿⠋⠀⠀⢸⣿⣿⠀⠀⠀⣿⣿⡇⠀⢸⣿⡇⠀⠀⢸⣿⣿⠀⠀⠀⠀⠀⠀⢹⣿⣇⠀⠀⠀⠀⠀⢸⣿⡿
⢀⣿⣿⠋⠉⠉⠉⢻⣿⣇⠀⢸⣿⣿⠀⠀⠀⣿⣿⠀⠀⠀⣿⣿⠀⠀⣿⣿⡀⠀⣠⣿⣿⠀⢀⣴⣿⣋⣀⣀⣀⡀⠘⣿⣿⣄⣀⣠⣿⣿⠃⠀⢸⣿⡇⠀⠀⢸⣿⣿⠀⠀⠀⠀⠀⠀⠈⢿⣿⣦⣀⣀⣀⣴⣿⡿⠃
⠚⠛⠋⠀⠀⠀⠀⠘⠛⠛⠀⠘⠛⠛⠀⠀⠀⠛⠛⠀⠀⠀⠛⠛⠀⠀⠙⠻⠿⠟⠋⠛⠛⠀⠘⠛⠛⠛⠛⠛⠛⠃⠀⠈⠛⠿⠿⠿⠛⠁⠀⠀⠘⠛⠃⠀⠀⠘⠛⠛⠀⠀⠀⠀⠀⠀⠀⠀⠙⠛⠿⢿⣿⣿⣋⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠛⠿⢿⡧
╭──────────────── Did you know? ─────────────────╮
│ │
│ You can resume the last conversation from your current directory by │
│ launching with q chat --resume │
│ │
╰────────────────────────────────────────╯
/help all commands • ctrl + j new lines • ctrl + s fuzzy search
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
>
2. 以下チャットコマンドを実行して、AWS Lambda MCP Serverが登録されていることを確認します。
> /tools
Tool Permission
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Built-in:
- fs_read * trusted
- fs_write * not trusted
- use_aws * trust read-only commands
- report_issue * trusted
- execute_bash * trust read-only commands
awslabslambda_mcp_server (MCP):
- awslabslambda_mcp_server___lambda_function * not trusted
awslabslambda_mcp_server___lambda_functionが登録されていますね!
3. では、以下チャットコマンドを実行してみましょう!
> --prompt "ニューヨークの今日の天気について教えてください"
もしくは以下でも大丈夫です。
> ニューヨークの今日の天気について教えてください。(パラメータはprompt)
補足ですが、チャットコマンド末尾に「–prompt」「(パラメータはprompt)」と指示しているのは、Lambda関数(agent_handler.py)のevent引数にてpromptが指定されているためです。
def handler(event: Dict[str, Any], _context) -> str:
weather_agent = Agent(
system_prompt=WEATHER_SYSTEM_PROMPT,
tools=[http_request],
)
response = weather_agent(event.get('prompt')) # こちらでpromptをパラメータとして受け取る
return str(response)
以下のようにAWS Lambda MCP Serverを使用して、天気予報エージェント(Strands Agents)を呼び出そうとしています。
> --prompt "ニューヨークの今日の天気について教えてください"
ニューヨークの今日の天気情報を取得するために、天気予報エージェントを呼び出します。
🛠️ Using tool: lambda_function from mcp server awslabslambda_mcp_server
⋮
● Running lambda_function with the param:
⋮ {
⋮ "arguments": {
⋮ "parameters": {
⋮ "prompt": "ニューヨークの今日の天気について教えてください"
⋮ }
⋮ },
⋮ "name": "lambda_function"
⋮ }
Allow this action? Use 't' to trust (always allow) this tool for the session. [y/n/t]:
4. 以下チャットコマンド(yes)を実行してください。
> y
すると、以下のように天気情報を返却してくれました!
⋮
● Completed in 26.98s
# ニューヨークの今日の天気
## 今日の天気概要
• **天気**: ほとんど晴れ (Mostly Sunny)
• **最高気温**: 66°F (約19°C)
• **風**: 北風、時速8〜13マイル (約13〜21 km/h)
• **降水確率**: 記載なし(低い可能性)
## 詳細予報
今日のニューヨークはほとんど晴れの良い天気です。最高気温は66°F(約19°C)で、北風が時速8〜13マイル(約13〜21 km/h)で吹く見込みです。雨の予報はありません。
## 週間天気の傾向
明日(水曜日)から天気が崩れ、雨が降り始める可能性が高くなります。明日の最高気温は56°F(約13°C)で、降水確率は70%です。木曜日も雨が続く見込みです。天気が回復するのは週末になりそうです。
今日はニューヨークでの外出には良い天気ですが、明日以降は雨具の準備をお勧めします。
>
Lambda関数のログ上(CloudWatch Logs)にもAIエージェントのやり取りが記録されています。

Amazon Q Developer CLIからAWS Lambda MCP Serverを経由してLambdaを実行しAIエージェント(Strands Agents)の実行ができています。AIエージェント間で通信できていますね!
6. まとめ
Amazon Q Developer CLIからAWS Lambda MCP Serverを経由してLambdaを実行しAIエージェント(Strands Agents)の実行が可能であることを確認できました。AIエージェント間で通信できることは、アイデア次第でかなり応用できることがわかりました!実務の業務改善や実案件に活かしていきたいです!