はじめに
最近、AWS公式ブログのこの記事を読んで、「自然言語で料金を聞ける」という aws-pricing-mcp-server
に興味を持ちました。
加えて Strands Agents
も試してみたかったので、今回それらを組み合わせて遊んでみた記録です。
初心者なりに詰まったポイントも正直に書いているので、どなたかの参考になれば嬉しいです!
⚠️ ご注意ください
本記事は、Strands AgentsやMCP(Model Context Protocol)について学習中の筆者が試行錯誤しながら書いたものです。理解が至らない点や不正確な部分があるかもしれませんが、ご容赦いただけますと幸いです。もし誤りなどありましたら、優しくご指摘いただけるととても嬉しいです。
Strands Agents とは?
Strands Agents は、マルチエージェントAIアプリケーションを簡単に構築できる、AWS発のオープンソースSDKです。
従来、複数のAIエージェントが連携するアプリケーションを構築するには、タスク分担やツール統合、通信の仕組みなど、複雑な制御ロジックが必要でした。Strands Agentsはその課題を解決し、以下の特徴を持つ開発基盤を提供します。
AWS Pricing MCP サーバーとは?
AWS公式ブログから引用:
AWSの料金情報を自然言語で問い合わせできるエージェント向けのMCPサーバーです。
MCP を使用して AI アシスタントと AWS Price List API を直接つなぐ役割を果たします。
準備
仮想環境・依存パッケージ
python -m venv .venv
source .venv/bin/activate
pip install strands
pip install strands-agents-tools strands-agents-builder
.env ファイル
.env
にAWS認証情報を記載します。
AWS_ACCESS_KEY_ID=xxxxx
AWS_SECRET_ACCESS_KEY=xxxxx
AWS_REGION=us-east-1
※ AWSPriceListServiceFullAccess
などのポリシーを許可しています。
コード例(agent.py)
Strands AgentsのUser Guideを参考にしました。
import os
from mcp import stdio_client, StdioServerParameters
from strands import Agent
from strands.tools.mcp import MCPClient
from dotenv import load_dotenv
load_dotenv()
env_vars = {
"AWS_ACCESS_KEY_ID": os.getenv("AWS_ACCESS_KEY_ID"),
"AWS_SECRET_ACCESS_KEY": os.getenv("AWS_SECRET_ACCESS_KEY"),
"AWS_REGION": os.getenv("AWS_REGION", "ap-northeast-1"),
}
# ------------------------
# Windowsの場合のMCP接続設定
# ------------------------
stdio_mcp_client = MCPClient(lambda: stdio_client(
StdioServerParameters(
command="uvx",
args=[
"--from",
"awslabs.aws-pricing-mcp-server@latest", # ← AWS Pricing MCP サーバーを指定
"awslabs.aws-pricing-mcp-server.exe"
],
env=env_vars
)
))
# ------------------------
# Agent定義 & 日本語質問処理
# ------------------------
with stdio_mcp_client:
# MCPサーバーが提供するツール一覧を取得
tools = stdio_mcp_client.list_tools_sync()
print(tools)
# エージェントの作成(日本語対応)
agent = Agent(
name="AWS料金アシスタント",
system_prompt="あなたはAWSの料金について詳しいアシスタントです。ユーザーの日本語での質問を理解し、AWS Pricing MCPサーバーを使って回答してください。金額はなるべく正確に、分かりやすく伝えてください。",
tools=tools,
model="anthropic.claude-3-5-sonnet-20240620-v1:0"
)
# 日本語で料金を質問してみる
response = agent("バージニア北部で t3.micro の料金はいくらですか?")
print(response)
ハマったポイントと解決法
- AWS Pricing MCP サーバーがどうやったら使えるのか色々と迷走してしまった
(AWSのMCPのリポジトリをクローンしてきて、ローカルで動かせるのかなとか...)
以下で動かせるのは手軽だなと思いました!
command="uvx",
args=[
"--from",
"awslabs.aws-pricing-mcp-server@latest", # ← AWS Pricing MCP サーバーを指定
"awslabs.aws-pricing-mcp-server.exe"
],
- MCPの接続で認証に躓いた
以下、その時のresponse
の中身
もちろん、東京リージョン(ap-northeast-1)でのt3.microインスタンスの料金を調べてみましょう。AWS Price List APIを使用して正確な情報を取得します。
Tool #1: get_pricing
申し訳ありません。APIからの応答にエラーが発生しました。このエラーは通常、AWSの認証情報の問題によって引き起こされます。
(以下回答続く)....
StdioServerParameters
に認証情報(env)を追加したら解決しました!
この方法でいいのかはわかりませんが...
StdioServerParameters(
command="uvx",
args=[
"--from",
"awslabs.aws-pricing-mcp-server@latest",
"awslabs.aws-pricing-mcp-server.exe"
],
env=env_vars
)
実行結果
はい、バージニア北部(us-east-1リージョン)でのt3.microインスタンスの料金を確認いたします。AWS EC2のプライシング情報を取得するために、get_pricing関数を使用します。
Tool #1: get_pricing
バージニア北部(us-east-1リージョン)でのt3.microインスタンスの料金について、以下の情報を提供いたします:
1. オンデマンド料金(Linux):
- 1時間あたり $0.0104(約1.56円、1ドル=150円で計算)
2. リザーブドインスタンス料金(Linux、一部の例):
- 1年間、全額前払い:$53の前払い、時間料金$0
- 1年間、一部前払い:$27の前払い + 1時間あたり$0.0031
- 1年間、前払いなし:1時間あたり$0.0065
- 3年間、全額前払い:$103の前払い、時間料金$0
- 3年間、一部前払い:$55の前払い + 1時間あたり$0.0021
- 3年間、前払いなし:1時間あたり$0.0045
3. SQL Web付きの料金:
- オンデマンド:1時間あたり$0.078
- リザーブドインスタンスでも各種オプションあり
注意点:
- リザーブドインスタンスは長期利用を前提とした割引料金です。
- 実際の料金は、選択するオプション(期間、支払い方法)によって異なります。
- 為替レートの変動により、日本円での金額は変わる可能性があります。
- 上記の料金は基本的な利用料金であり、データ転送料金やその他のAWSサービスの利用料は含まれていません。
t3.microインスタンスを長期的に使用する予定がある場合は、リザーブドインスタンスを検討することでコストを削減できる可能性があります。具体的な利用計画や予算に応じて、最適なオプションを選択すること
をお勧めします。
バージニア北部(us-east-1リージョン)でのt3.microインスタンスの料金について、以下の情報を提供いたします:
1. オンデマンド料金(Linux):
- 1時間あたり $0.0104(約1.56円、1ドル=150円で計算)
2. リザーブドインスタンス料金(Linux、一部の例):
- 1年間、全額前払い:$53の前払い、時間料金$0
- 1年間、一部前払い:$27の前払い + 1時間あたり$0.0031
- 1年間、前払いなし:1時間あたり$0.0065
- 3年間、全額前払い:$103の前払い、時間料金$0
- 3年間、一部前払い:$55の前払い + 1時間あたり$0.0021
- 3年間、前払いなし:1時間あたり$0.0045
3. SQL Web付きの料金:
- オンデマンド:1時間あたり$0.078
- リザーブドインスタンスでも各種オプションあり
注意点:
- リザーブドインスタンスは長期利用を前提とした割引料金です。
- 実際の料金は、選択するオプション(期間、支払い方法)によって異なります。
- 為替レートの変動により、日本円での金額は変わる可能性があります。
- 上記の料金は基本的な利用料金であり、データ転送料金やその他のAWSサービスの利用料は含まれていません。
t3.microインスタンスを長期的に使用する予定がある場合は、リザーブドインスタンスを検討することでコストを削減できる可能性があります。具体的な利用計画や予算に応じて、最適なオプションを選択すること
をお勧めします。
回答があってるかはちゃんと調べてないですが、ぱっと見は合ってそう!
そもそも今回の質問がざっくりしているのと、今回は動くことが見たかったので回答精度は置いておきます。
まとめ
- Strands Agents を使えば、MCP連携がかなり簡単にできる
- AWS Pricing MCP Server の自然言語インターフェースは面白く、料金確認がスムーズになりそうだなと思いました!
- 認証や実行の仕組みでつまずくところもあったが、理解できれば応用もしやすいのではないかと思います