AIエージェントをライブWebデータに接続する:AWS Strands + Scrapeless MCPサーバー統合ガイド
Lead Scraping Automation Engineer
主なポイント:
- AWS Strands SDK + Scrapeless MCPはAIエージェントに型付けされたウェブデータツールの表面を提供します。 エージェントは
google_search、scrape_html、scrape_markdown、およびフルブラウザセッションツール(browser_create→browser_goto→browser_wait_for→browser_get_html→browser_close)を、REST API周りのグルーコードなしで、エージェントループを通じて直接呼び出します。 - ホストエンドポイントに21のMCPツール(
https://api.scrapeless.com/mcp)。ブラウザセッション制御(16のツール)、検索(google_search、google_trends)、およびステートレススクレイピング(scrape_html、scrape_markdown、scrape_screenshot) — ストリーミングHTTP上でscrapeless-mcp-serverによって公開。ホストエンドポイントはserverInfo.name: "scrapeless-mcp-server"、公開時点でのバージョンは0.2.0を報告します。 - 住宅用プロキシ出口を持つクラウドブラウザ。 ページはエージェントがDOMを読み取る前にScrapeless Scraping Browserでレンダリングされるため、JavaScriptが多く使われているターゲットでもローカルブラウザインフラがなくても機能します。合格率はサイトによって異なります:よりシンプルなチャレンジページは短い
browser_waitの後にクリアされる一方で、ボット検出層が厳しいサイトではデフォルトのMCPセッションがブロックされることもあります — そのようなターゲットには、事前に設定されたブラウザプロファイルを持つSDK表面を使ってください。 - モデルに依存しないエージェントループ。 Strandsの知覚→推論→行動サイクルはClaude(またはサポートされている任意のモデル)がツール呼び出しを自律的に決定できるようにします。このガイドは、StrandsのAnthropicプロバイダーを通してAnthropic Claudeを使用しています。
- 無料で開始。 新しいScrapelessアカウントには無料のスクレイピングブラウザランタイムが含まれています — scrapelessのウェブサイトにサインアップし、成長した際には料金ページをご覧ください。
大規模言語モデル(LLMs)によって駆動されるAIエージェントは推論し、意思決定を行うことができますが、トレーニングデータによって制限されます。真に有用なエージェントを構築するためには、リアルタイムのウェブデータに接続する必要があります。このガイドでは、AWS Strands SDKをScrapelessのMCPサーバーと組み合わせて、自律的なAIエージェントがライブウェブデータにアクセスし、分析できる方法を示します。
このガイドで学ぶこと:
- AWS Strands SDKとは何か、それがAIエージェントを構築するための有用なフレームワークである理由。
- AWS Strands SDKが、ウェブに気づくエージェントのためにScrapelessのMCPサーバーとどのように適切に組み合わさるか。
- AWS StrandsをScrapelessのMCPサーバーと統合して、自律的な競争情報エージェントを作成する方法。
- 目標に基づいて自律的にどのウェブスクレイピングツールを使用するかを決定するエージェントを構築する方法。
さあ、始めましょう。
これを使って何ができるか
- 競争情報ループ。 競合他社の名前を
google_searchで検索し、トップ結果に対してscrape_markdownを呼び出して位置付けと最近のローンチを要約します。 - 単一ページの豊かさ。 ASINまたは製品ページに対して
browser_create→browser_goto→browser_wait_for→browser_get_html→browser_closeを実行し、モデルがタイトル、価格、評価、在庫をPromptsで定義したJSON形式に引き出させます。 - 多地域価格チェック。 異なる国のストアフロントで同じSKUに対して2つの
browser_createセッションを実行し、1つのレスポンスで価格を比較します。 - 検索エンジン駆動の研究。
google_search+google_trendsを組み合わせてトピックの勢いを読み取り、その後、scrape_markdownで個々のアーティクルに深く掘り下げます。 - コンプライアンスのためのスクリーンショットキャプチャ。 UIインタラクションの後にページがある時点でどのように見えたかの証拠を保持するために、
scrape_screenshot(URL入力、PNG出力)またはセッション中のbrowser_screenshotを使用します。 - 多ステップのUIフロー。
browser_click、browser_type、browser_press_key、browser_scrollを使って、エージェントがフォーム、ログゲート、及び遅延読み込みされたグリッドを1つの永続的なセッション内で操作させます。
Scrapelessでは、適用法令、規制、ウェブサイトのプライバシーポリシーを厳守しながら、公開されているデータのみをアクセスします。この投稿の内容はデモ目的のみです。
AWS Strands SDKとは何か?
AWS Strands SDKは、AIエージェントを構築するためのPythonフレームワークで、PyPIにAWSによって公開されています(strands-agents、著者opensource@amazon.com)。これは、モデルとツールのリストを取り、タスクが完了するまで知覚→推論→行動ループを実行するAgentクラスを公開します。
このガイドは、公開されたパッケージで確認されたSDKの3つの部分を使用します:
from strands import Agent— エージェントクラス自体。from strands.models.anthropic import AnthropicModel— Anthropicプロバイダー;コンストラクタシグネチャはAnthropicModel(*, client_args: dict | None = None, **model_config)で、model_id、max_tokens、params={"temperature": ...}を受け入れます。from strands.tools.mcp import MCPClient— MCPトランスポートをラップし、任意のMCPサーバーのツールをAgent(tools=...)に渡すことができます。
エージェントの結果タイプはstrands.agent.agent_result.AgentResultで、フィールドにはstop_reason、message、metrics、state(追加のオプションとしてinterrupts、structured_output)があります。
ループの動作方法
- ユーザーが
agent.invoke_async(prompt)にプロンプトを渡します。 - モデルはプロンプトと利用可能なツールのリストを受け取ります。
- 最終メッセージを返すか、ツール呼び出しを発行します。
- ツールが呼び出されると、Strandsはそれを実行し、結果をモデルに返します。
- ステップ3〜4は、モデルが最終メッセージを返すまで繰り返されます。
なぜAWS Strands SDKをScrapelessのMCPサーバーと組み合わせてWebデータを取得するのか
LLMは自力でライブWebデータを取得することができません。Strandsエージェントにその能力を与えるためには、Webツールを公開するMCPサーバーに接続します。scrapeless-mcp-serverはそのようなMCPサーバーの一つで、住宅プロキシを介して出入りするクラウドホステッドブラウザであるScrapeless Scraping Browserによってバックアップされています。
現在確認されたライブ(https://api.scrapeless.com/mcpに対するtools/list):21のツール、3つのグループに分けられています:
- ステートレススクレイピング —
scrape_html、scrape_markdown、scrape_screenshot。 - 検索 —
google_search、google_trends。 - 永続ブラウザセッション —
browser_create、browser_goto、browser_go_back、browser_go_forward、browser_wait、browser_wait_for、browser_get_html、browser_get_text、browser_snapshot、browser_click、browser_type、browser_press_key、browser_scroll、browser_scroll_to、browser_screenshot、browser_close。
Scrapelessの無料プランAPIキーは、scrapeless websiteで取得できます。MCPサーバーのソースは、github.com/scrapeless-ai/scrapeless-mcp-serverで確認できます。
PythonでAWS Strands SDKをScrapeless MCPサーバーと統合する方法
このセクションでは、AWS Strands SDKを使用して、Scrapeless MCPサーバーからのライブデータスクレイピングおよび取得機能を備えたAIエージェントを構築します。
例として、このガイドは市場と競合を自律的に分析できる競争情報エージェントを構築します。エージェントはその目標に基づいて使用するツールを決定し、エージェントとしてのループの力を示します。
AWS Strands SDKを使用してClaude + Scrapeless MCPで動作するAIエージェントを構築するためのステップバイステップガイドに従ってください。
前提条件
コード例を再現するために、以下の要件を満たしていることを確認してください:
ソフトウェア要件:
- Python 3.10以上。
- Node.js(最新のLTSバージョン推奨)。
- Python拡張機能付きのVS CodeやPyCharmなどのPython IDE。
アカウント要件:
- ScrapelessアカウントおよびAPIキー — scrapelessでサインアップしてください。
- Claude APIアクセスおよびクレジットを持つAnthropicアカウント。
背景知識(役立つが必須ではない):
- MCPの基本的な動作理解。
- AIエージェントとその能力に関する知識。
- Pythonでの非同期プログラミングの基本知識。
ステップ#1:Pythonプロジェクトを作成する
ターミナルを開いて、プロジェクト用の新しいフォルダーを作成します:
bash
mkdir strands-scrapeless-agent
cd strands-scrapeless-agent
Pythonの仮想環境を設定します:
bash
python -m venv venv
仮想環境をアクティブ化します:
bash
# Linux/macOSの場合:
source venv/bin/activate
# Windowsの場合:
venv\Scripts\activate
メインのPythonファイルを作成します:
bash
touch agent.py
フォルダー構造は次のようになります:
strands-scrapeless-agent/
├── venv/
└── agent.py
これで、Webデータアクセスを持つAIエージェントを構築するためのPython環境が整いました。
ステップ#2:AWS Strands SDKをインストールする
アクティブ化された仮想環境で、必要なパッケージをインストールします:
bash
pip install "strands-agents>=1.0" anthropic "mcp>=1.0" python-dotenv
これによりインストールされるもの:
strands-agents:AIエージェントを構築するためのAWS Strands SDK。anthropic:strands.models.anthropic.AnthropicModelのための必要な依存関係。mcp:mcp.client.streamable_httpトランスポートに必要な公式MCP Python SDK。python-dotenv:環境変数管理用。
次に、agent.pyファイルにこれらのインポートを追加します:
python
from strands import Agent
from strands.models.anthropic import AnthropicModel
from strands.tools.mcp import MCPClient
from mcp.client.streamable_http import streamablehttp_client
これで、AWS Strands SDKを使用してエージェントを構築できるようになりました。
ステップ#3:環境変数の設定
APIキーの安全な管理のために、プロジェクトフォルダーに.envファイルを作成します:
bash
touch .env
.envファイルにAPIキーを追加します:
ini
# Claudeモデル用のAnthropic API
ANTHROPIC_API_KEY=your_anthropic_key_here
# MCP経由でのWebスクレイピングのためのScrapeless認証情報
SCRAPELESS_KEY=your_scrapeless_key_here
agent.pyに環境変数の読み込みを設定します:
python
import os
ja
dotenvからload_dotenvをインポート
load_dotenv()
# APIキーの読み込み
ANTHROPIC_API_KEY = os.getenv("ANTHROPIC_API_KEY")
SCRAPELESS_KEY = os.getenv("SCRAPELESS_KEY")
これで、.envファイルからAPIキーを安全にロードする準備が整いました。
ステップ #4: Scrapeless MCPエンドポイントの確認
このガイドでは、https://api.scrapeless.com/mcp にある ホスティングされたストリーミングHTTPエンドポイント を使用します。ローカルインストールは必要ありません。
curlを使ってホスティングされたエンドポイントをスモークテストします:
bash
curl -X POST "https://api.scrapeless.com/mcp" \
-H "x-api-token: $SCRAPELESS_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"smoke","version":"1.0"}}}'
成功すると、以下が返されます:
- HTTP
200 OKとContent-Type: text/event-stream mcp-session-idヘッダー — フォローアップのtools/listやtools/callリクエストで再利用- ボディイベント
data: {"result":{"protocolVersion":"2024-11-05","capabilities":{"tools":{"listChanged":true}},"serverInfo":{"name":"scrapeless-mcp-server","version":"0.2.0",...}},...}
発行時点でのライブエンドポイントに対してテスト済み:21のMCPツールと上記の serverInfo が返されます。
無料プランでAPIキーを取得: app.scrapeless.com
完全なSDKおよびCLIリファレンス: scrapeless website。
ステップ #5: Strandsモデルの初期化
agent.py でAnthropic Claudeモデルを設定します:
python
# Anthropicモデルの初期化 (StrandsのAnthropicプロバイダーを介したClaude)
model = AnthropicModel(
client_args={"api_key": ANTHROPIC_API_KEY},
model_id="claude-sonnet-4-6",
max_tokens=4096,
params={"temperature": 0.3}
)
これにより、エージェントのLLMとしてClaudeが設定され、一貫した集中した応答のためにパラメータが調整されます。client_args辞書はAnthropicクライアント設定を渡す公式なStrandsの方法です(AWS Strands Anthropicプロバイダードキュメントを参照)。
ステップ #6: Scrapeless MCPサーバーに接続
ホスティングされたストリーミングHTTPエンドポイントに接続するためのMCPクライアント設定を作成します:
python
import asyncio
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
def http_transport():
"""ホスティングされたScrapeless MCPエンドポイントへのストリーミングHTTPトランスポート。"""
return streamablehttp_client(
url="https://api.scrapeless.com/mcp",
headers={"x-api-token": SCRAPELESS_KEY},
)
async def connect_mcp_tools():
"""Scrapeless MCPサーバーに接続し、ツールを発見します。"""
logger.info("Scrapeless MCPサーバーに接続中 (HTTP)...")
mcp_client = MCPClient(http_transport)
with mcp_client:
tools = mcp_client.list_tools_sync()
logger.info(f"発見された {len(tools)} MCPツール")
for tool in tools:
logger.info(f" - {tool.tool_name}")
return mcp_client, tools
ライブエンドポイントに対してテスト済み:上記の呼び出しシーケンスは 発見された 21 MCPツール とログに記録され、下のテーブルにリストされたすべて21のツール名が続きます。
利用可能なScrapeless MCPツール
以下のリストは、Scrapeless MCPサーバーがストリーミングHTTPトランスポートで公開するツールを要約したものです。list_tools_sync()はランタイムで同じセットを返します。
| ツール | 目的 |
|---|---|
browser_create |
Scrapelessクラウドブラウザセッションを割り当てる |
browser_close |
セッションを解放する |
browser_goto |
URLに移動する |
browser_go_back / browser_go_forward |
セッションの履歴を移動する |
browser_wait_for |
CSSセレクタの出現を待つ |
browser_wait |
ミリ秒単位で固定の時間を待つ |
browser_get_html |
完全にレンダリングされたDOMを読み取る |
browser_get_text |
現在のページの可視テキストを読み取る |
browser_snapshot |
ページのアクセシビリティスナップショットをキャプチャする |
browser_click |
セレクタで要素をクリックする |
browser_type |
入力フィールドにテキストを入力する |
browser_press_key |
PageDownやEnterなどのキー入力を送信する |
browser_scroll |
現在のページをスクロールする |
browser_scroll_to |
特定の要素を表示するためにスクロールする |
browser_screenshot |
PNGスクリーンショットをキャプチャする |
google_search |
Google検索クエリを実行し、結果を返す |
google_trends |
キーワードのGoogleトレンドデータを取得する |
scrape_html |
任意のURLのレンダリングされたHTMLを取得する |
scrape_markdown |
URLを取得し、読みやすいMarkdownを返す |
scrape_screenshot |
任意のURLのスクリーンショットをキャプチャする |
ステップ #7: 競争インテリジェンスエージェントの定義
競争インテリジェンス用に特化したプロンプトでエージェントを作成します:
python
def create_agent(model, tools):
競争情報エージェントをウェブデータアクセスで作成する
ja
async def connect_mcp_tools():
"""Scrapeless MCPサーバーに接続してツールを発見します。"""
logger.info("Scrapeless MCPサーバーに接続中(HTTP)...")
mcp_client = MCPClient(http_transport)
with mcp_client:
tools = mcp_client.list_tools_sync()
logger.info(f"{len(tools)}個のMCPツールを発見しました")
for tool in tools:
logger.info(f" - {tool.tool_name}")
return mcp_client, tools
def create_agent(model, tools):
"""ウェブデータアクセスを持つ競争情報エージェントを作成します"""
system_prompt = """あなたはScrapeless MCPサーバーを介してウェブデータツールにアクセスできる競争情報の専門家です。
## ミッション
リアルタイムのウェブデータを使用して包括的な市場と競争分析を行います。
## 利用可能なMCPツール(Scrapeless)
- google_search, google_trends
- scrape_html, scrape_markdown, scrape_screenshot
- browser_create, browser_close
- browser_goto, browser_go_back, browser_go_forward
- browser_wait_for, browser_wait
- browser_get_html, browser_get_text, browser_snapshot
- browser_click, browser_type, browser_press_key
- browser_scroll, browser_scroll_to
- browser_screenshot
## 自律的な分析ワークフロー
分析タスクが与えられたとき、自律的に:
1. 目標に基づいて使用するツールを決定します。
2. 複数のソースから包括的なデータを収集します。
3. 発見を行動可能な洞察に合成します。
4. 特定の戦略的提言を提供します。
ツールの選択に積極的でいてください。任意のツールの組み合わせを使用する完全な自主性があります。"""
return Agent(
model=model,
tools=tools,
system_prompt=system_prompt
)
async def main():
"""競争情報エージェントを実行します"""
print("AWS Strands + Scrapeless MCP 競争情報エージェント")
print("=" * 70)
try:
mcp_client, tools = await connect_mcp_tools()
agent = create_agent(model, tools)
print("\nエージェントがウェブデータアクセスで準備完了です。")
print("\n分析を開始します...")
print("-" * 40)
prompt = """
テスラの電気自動車市場における競争状況を分析します。
調査:
- 現行の製品ラインアップと価格戦略。
- 主な競合他社とその提供。
- 最近の戦略的発表。
- 市場シェアとポジショニング。
Scrapelessツールを使用して、tesla.comと検索結果からリアルタイムデータを収集します。
"""
with mcp_client:
result = await agent.invoke_async(prompt)
print("\n分析結果:")
print("=" * 50)
print(result)
print("\n分析完了。")
except Exception as e:
logger.error(f"エラー:{e}")
print(f"\nエラー:{e}")
if __name__ == "__main__":
asyncio.run(main())
このガイドは、AWS Strands SDKをScrapelessのMCPサーバーに接続しました:~100行のPythonコード、モデルに利用可能な21の検証済みMCPツール、Scrapelessスクレイピングブラウザを介した検証済みデータパス。
APIキーはapp.scrapeless.comで取得してください。
AI駆動のデータパイプラインを構築する準備はできましたか?
私たちのコミュニティに参加して、無料プランを請求し、AWS Strands + Scrapeless MCPエージェントを構築している開発者とつながりましょう:Discord · Telegram。
無料のスクレイピングブラウザの実行時間を得て、上記のAWS Strands統合をチームに必要なワークフローに適応させるには、app.scrapeless.comにサインアップしてください。完全なリファレンスはdocs.scrapeless.comにあります。これらのツールを動かすスクレイピングブラウザの実行時間に関する詳細な背景は、Scrapeless Scraping Browser製品ページおよび[ScrapelessをLangChainエージェントと統合する]の兄弟ガイドを参照してください。
FAQ
Q1: MCPとは何か、そしてなぜAIエージェントにとって重要なのか?
MCP(モデルコンテキストプロトコル)は、AIエージェントをツールやデータソースに接続するためのオープンスタンダードです。MCPサーバーは、どのMCPに対応したクライアント(AWS Strands SDKを含む)でも呼び出すことができる型付きツールリストを公開します。Scrapeless MCPを使用すると、エージェントは、APIごとの接続コードを記述することなく、実際のクラウドブラウザ、検索エンジンクエリ、およびMarkdown/HTMLスクレイパーに型付きでアクセスできます。エージェントは、エージェントのループ内で呼び出すツールを決定し、MCPが型付きのスキーマと結果を持ち運びます。
**Q2: ホスティングされたMCPエンドポイントは何を提供しますか?**
`https://api.scrapeless.com/mcp`(`x-api-token`ヘッダー付き)は、完全な21ツールのリストを返し、このガイドにおいてStrandsの`MCPClient`でエンドツーエンドで検証されました。ローカルのNodeランタイムやバックグラウンドプロセスは必要ありません — `streamablehttp_client(...)`は一つのインポートと一つのURLです。
**Q3: エージェントのループは、ツールの失敗やボット対策の課題をどう処理しますか?**
Strandsはツールの結果(エラーを含む)をモデルにフィードバックし、再試行するか、ツールを切り替えるか、失敗を明らかにするかを決定します。Scrapelessに特有の一般的な回復方法は、`browser_close`と新しい`browser_create`を行うか、フルブラウザセッションから`scrape_markdown` / `scrape_html`にフォールバックすることです。呼び出しごとのプロキシリージョンは、MCPの`browser_create`ツールが公開するパラメーターではありません — `scrapeless-mcp-server/src/session-manager.ts`は`session_ttl`、`profile_id`、および`profile_persist`のみを転送します。特定のリージョンを固定するには、ダッシュボードで国が組み込まれたScrapelessプロファイルを作成し、MCPサーバーの`BROWSER_PROFILE_ID`環境変数で参照します。
**Q4: AIエージェントなしでこれを実行できますか?**
はい。すべてのScrapeless MCPツールは、平凡なPythonスクリプトや、ストリーム可能なHTTPエンドポイントに対する`curl`から呼び出すことができます(ステップ#4の`curl`は`serverInfo.name: "scrapeless-mcp-server"`と、今後の`tools/list`および`tools/call`リクエストで再利用する`mcp-session-id`ヘッダーを返します)。AWS Strands SDKは、その上にエージェントのループを追加します。
**Q5: Claude Sonnet以外にどのモデルが働きますか?**
Strandsの`AnthropicModel`は、Anthropic APIが公開する任意のモデルIDを受け入れます — より安価な抽出と要約のループ用に`claude-haiku-*`、より重たい多段階推論用に`claude-opus-*`。Strandsはまた、`OpenAIModel`、`BedrockModel`、`GeminiModel`、およびMistral、Ollama、LiteLLM、llamacpp、SageMakerのプロバイダーを提供します。モデルラインを入れ替えるだけで、`agent.py`の残りは同じままです。
OpenAI API互換のエンドポイントも、`OpenAIModel`を介して`base_url`の上書きで動作します。このガイドでは、OpenRouterに対してエンドツーエンドで検証済みです:
```python
from strands.models.openai import OpenAIModel
model = OpenAIModel(
client_args={
"api_key": OPENROUTER_API_KEY,
"base_url": "https://openrouter.ai/api/v1",
},
model_id="openai/gpt-4o-mini", # またはanthropic/claude-3.5-sonnet、google/gemini-flash-1.5など。
params={"temperature": 0.3},
)
その入れ替えで、同じAgent(model=..., tools=tools, system_prompt=...)がOpenRouterカタログに対して実行されます。このガイドでopenai/gpt-4o-miniでテストされた結果、エージェントは自律的にgoogle_searchを3回、scrape_markdownを1回呼び出し、stop_reason: end_turnでクリーンな答えを返し、約$0.001のコストで実行されました。
Q6: ERR_TUNNEL_CONNECTION_FAILEDや503のような一時的エラーにどう対処しますか?
どちらもScrapelessのエグレスプールから発生し、通常は一時的です。Strandsのループは既にエラーをモデルにフィードバックし、次のターンで再試行します。プロンプトで決定論的な回復を指示するために、エージェントに次のように指示します:「ブラウザツールがトンネルエラーまたは503エラーを返した場合は、browser_closeを呼び出し、再試行前に新しいbrowser_createを開始してください。」その表現は、モデルに決定させるよりもクリーンな再試行を生み出します。
Q7: 複数のエージェントはMCP接続を共有できますか?
MCPClientは、with mcp_client:の各コンテキストごとに1つのセッションを開きます。並行エージェントには、それぞれ独自のMCPClientインスタンス(したがってホスティングされたエンドポイントでの独自のセッションID)を与え、再利用は避けてください。ホスティングされたエンドポイントは並行セッションでスケールします;アカウントごとの同時実行の制限は、Scrapelessの価格階層に存在します。
Q8: 自分の非Scrapelessツールをどこに組み込めばいいですか?
Agent(tools=...)はリストを受け入れます。tools + my_extra_toolsを渡します。ここでmy_extra_toolsはStrands互換のツール(@toolで装飾された関数、または別のMCPサーバーのツール)である任意のものです。モデルはスキーマの和集合を見て、どれを呼び出すかを決定します。
Scrapelessでは、適用される法律、規制、およびWebサイトのプライバシーポリシーを厳密に遵守しながら、公開されているデータのみにアクセスします。 このブログのコンテンツは、デモンストレーションのみを目的としており、違法または侵害の活動は含まれません。 このブログまたはサードパーティのリンクからの情報の使用に対するすべての責任を保証せず、放棄します。 スクレイピング活動に従事する前に、法律顧問に相談し、ターゲットウェブサイトの利用規約を確認するか、必要な許可を取得してください。



