AI

AIエージェント開発のためのGoogle ADKとMCPサーバーの統合

Google ADKとBright Data MCPを使用してAIエージェントを作成し、PythonでWebデータのライブ検索とインテリジェントな自動化を実現する方法をご紹介します。
9 分読
Google ADK × Bright Data MCP blog image

このガイドの中で、あなたは見ることができる:

  • AIエージェントを構築するためのGoogle ADKライブラリとは?
  • なぜMCPへのネイティブ・サポートが特別なのか。
  • Bright Data MCPサーバーと統合して非常に強力なAIエージェントを構築する方法

さあ、飛び込もう!

Google ADKとは?

GoogleADK(Google Agent Development Kitの略)は、AIエージェントの構築とデプロイのためのオープンソースのPythonフレームワークである。Gemini とより広範な Google エコシステムに最適化されているが、モデルにとらわれず、デプロイにとらわれない。

ADKは開発者の体験を重視し、強力なマルチエージェントシステムを簡単に構築できるツールとデータ構造を提供します。ツールや統合により、推論、コラボレーション、世界との対話が可能なAIエージェントを定義することができます。

Google ADKの究極のゴールは、エージェント開発を従来のソフトウェア開発のように感じられるようにすることだ。それは、エージェントアーキテクチャの作成、デプロイ、オーケストレーションのプロセスを単純化することで達成される。

グーグルADKの特徴

他のAIエージェント作成ライブラリと比較して、Google ADKはMCP(Managed Connectivity Platform)のビルトインサポートで際立っている。MCPとは、AIモデルが外部のツールやデータソース(API、データベース、ファイルシステムなど)とやり取りするための標準化された方法である。

簡単に言うと、MCPによってGoogle ADKエージェントはMCP互換サーバーの機能を活用できるようになります。実世界のデータやアクションにアクセスできるようにすることで、基礎となるLLMの制限を越えてAIエージェントを拡張するプラグアンドプレイ統合と考えてください。

このオプションは、エージェントと外部機能を接続するための、構造化された、安全で、拡張可能な方法を提供します。MCPの統合は、Bright Data MCPサーバーのようなリッチなMCPサーバーと統合されると、特に説得力が増します。

このMCPサーバーはNode.js上で動作し、Bright Dataのすべての強力なAIデータ検索ツールにシームレスに接続します。これらのツールにより、エージェントはライブウェブデータ、構造化データセット、スクレイピング機能と対話することができます。

この記事を書いている時点で、サポートされているMCPツールは以下の通り:

工具 説明
検索エンジン Google、Bing、Yandexの検索結果をスクレイピング。SERPの結果をマークダウン形式で返します(URL、タイトル、説明)。
scrape_as_markdown 1つのウェブページをスクレイピングし、抽出したコンテンツをMarkdown形式で返します。ボットで保護されたページやCAPTCHAで保護されたページでも動作します。
scrape_as_html 上記と同じですが、コンテンツを生のHTMLで返します。
セッション統計 現在のセッションにおけるツールの使用状況の概要を提供する。
ウェブ_データ_アマゾン_商品 構造化されたAmazon商品データを/dp/URLを使って取得する。キャッシュによりスクレイピングよりも信頼性が高い。
web_data_amazon_product_reviews dp/URLを使用して構造化されたAmazonレビューデータを取得します。キャッシュされ、信頼できる。
web_data_linkedin_person_profile(ウェブデータ・リンケディン・パーソン・プロフィール 構造化されたLinkedInプロフィールデータにアクセス。一貫性とスピードのためにキャッシュされます。
web_data_linkedin_会社概要 LinkedInの構造化された企業データにアクセス。キャッシュバージョンで信頼性が向上。
web_data_zoominfo_会社概要 構造化された ZoomInfo 企業データを取得します。有効な ZoomInfo URL が必要です。
ウェブ_データ_インスタグラム_プロフィール 構造化されたインスタグラムのプロフィールデータ。有効なInstagramのURLが必要です。
ウェブ_データ_インスタグラム_投稿 Instagramの投稿の構造化データを取得する。
ウェブ_データ_インスタグラム_リール インスタグラムのリールの構造化データを取得する。
ウェブ_データ_インスタグラム_コメント インスタグラムのコメントを構造化データとして取得する。
ウェブデータ_facebook_posts Facebook投稿の構造化データにアクセス
ウェブデータ_facebook_マーケットプレイス_リスティング Facebook Marketplaceから構造化されたリストを取得します。
web_data_facebook_企業レビュー Facebookの企業レビューを取得する。会社のURLとレビュー数が必要です。
web_data_x_posts X(旧Twitter)の投稿から構造化データを取得する。
ウェブデータ_ジロー物件リスト 構造化されたZillowの物件データにアクセス。
web_data_booking_hotel_listings Booking.comから構造化されたホテルのリストを取得します。
web_data_youtube_videos 構造化されたYouTube動画データ。有効な動画 URL が必要です。
スクレイピング_ブラウザ_ナビゲート スクレイピング・ブラウザを新しいURLに移動する。
スクレイピング_ブラウザ_ゴーバック 前のページに戻る。
スクレイピング_ブラウザ_ゴーフォワード ブラウザの履歴を進む。
スクレイピング_ブラウザ_クリック ページ上の特定の要素をクリックする。要素セレクタが必要です。
スクレイピング_ブラウザリンク 現在のページにあるすべてのリンクを、セレクタとテキストとともに取得する。
スクレイピング・ブラウザ・タイプ 入力フィールドにテキストを入力するシミュレーション。
スクレイピング・ブラウザ・ウェイト・フォー 特定の要素が見えるようになるのを待つ。
スクレイピング_ブラウザ_スクリーンショット 現在のページのスクリーンショットを撮る。
スクレイピング_ブラウザ_get_html 現在のページの完全なHTMLを取得する。ページ全体のコンテンツが不要な場合は、注意して使用すること。
スクレイピング_ブラウザ_テキスト取得 現在のページの可視テキストコンテンツを取得する。

もう一つの可能性のある統合については、MCPサーバーを使ったウェブスクレイピングの記事を参照してください。

:Bright Data MCPサーバーには定期的に新しいツールが追加され、時間の経過とともにますます強力で豊富な機能を備えています。

Google ADKでこれらのツールを活用する方法をご覧ください!

Google ADKとBright Data MCPサーバーを統合する方法

このチュートリアルでは、Google ADKを使用して強力なAIエージェントを構築する方法を学びます。このチュートリアルでは、Bright Data MCPサーバーが提供するライブスクレイピング、データ検索、変換機能を装備します。

この設定はMeir Kadoshが最初に実装したものなので、彼のオリジナルのGitHubリポジトリをぜひチェックしてほしい。

具体的には、AIエージェントは以下のことができる:

  1. 検索エンジンからURLを取得する。
  2. ウェブページからテキストをスクレイピングする。
  3. 抽出されたデータを使用して、ソースベースの回答を生成します。

:コード内のプロンプトを変更することで、AIエージェントを他のシナリオやユースケースに簡単に適応させることができます。

以下の手順に従って、PythonでBright Data MCPを搭載したGoogle ADKエージェントを構築してください!

前提条件

このチュートリアルに従うには

注意:Google ADKとBright Data MCPサーバーの統合は、現在Windowsではネイティブに動作しません。実行しようとすると、この部分のコードでNotImplementedErrorが発生する可能性があります:

transport = await self._make_subprocess_transport(
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        protocol, popen_args, False, stdin, stdout, stderr,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        bufsize, **kwargs)
        ^^^^^^^^^^^^^^^^^^
    raise NotImplementedError

このため、このチュートリアルでは、Linux、macOS、またはWSLを使用していることを前提としている。

これも必要だ:

  • ブライトデータのアカウント
  • ジェミニAPIキー

このチュートリアルでは、必要に応じてGeminiとBright Dataの両方の認証情報を設定する方法を説明します。ですから、今は心配しないでください。

必須ではありませんが、以下はこのチュートリアルを最大限に活用するのに役立ちます:

ステップ1:プロジェクトのセットアップ

ターミナルを開き、スクレイピング・エージェント用の新しいフォルダを作成する:

mkdir google_adk_mcp_agent

google_adk_mcp_agentフォルダには、Python AIエージェントのすべてのコードが格納されます。

次に、プロジェクトフォルダーに移動し、その中に仮想環境を作成する:

cd google_adk_mcp_agent
python3 -m venv .venv

お好みのPython IDEでプロジェクトフォルダを開きます。Python拡張機能付きのVisual Studio CodeまたはPyCharm Community Editionを使用することを推奨します。

google_adk_mcp_agent の中に、web_search_agent というサブフォルダを作成します。このサブフォルダには、エージェントのコアロジックが含まれ、以下の2つのファイルが必要です:

  • __init__.pyagent.pyからロジックをエクスポートします。
  • agent.py: Google ADKエージェントの定義が含まれています。

これは、Google ADKライブラリが正しく機能するために必要なフォルダ構造です:

GOOGLE_ADK_MCP_AGENT'という名前のPythonプロジェクトのファイル構造で、仮想環境ディレクトリ'.venv'と2つのPythonファイルを含むサブディレクトリ'web_search_agent'があります:'__init__.py'と'agent.py'です。

次に、__init__.pyファイルを以下の行で初期化します:

from . import agent

その代わりに、agent.pyはエージェントAIのエージェントロジックで定義されます。

IDEのターミナルで、仮想環境を有効にします。LinuxまたはmacOSでは、このコマンドを実行する:

./.venv/bin/activate

同様に、Windowsでは、起動します:

.venv/Scripts/activate

これで準備完了です!これで、Google ADKとBright Data MCPサーバーを使ってAIエージェントを構築するためのPython環境が整いました。

ステップ2:環境変数の設定 読み込み

あなたのプロジェクトはGeminiやBright Dataのようなサードパーティのサービスとやり取りします。Pythonのコードに直接APIキーや認証の秘密をハードコーディングするのではなく、環境変数から読み込むのがベストプラクティスです。

この作業を簡単にするために、python-dotenvライブラリを使います。仮想環境を起動した状態で、python-dotenv ライブラリをインストールします:

pip install python-dotenv

agent.pyファイルで、ライブラリをインポートし、load_dotenv() で環境変数をロードします:

from dotenv import load_dotenv

load_dotenv()

これにより、ローカルの.envファイルから変数を読み込むことができます。したがって、ネストしたエージェントディレクトリに.envファイルを追加します:

.env設定ファイルは、仮想環境フォルダと関連するPythonファイルを含む'GOOGLE_ADK_MCP_AGENT'という名前のプロジェクトのディレクトリ構造内で強調表示されます。

このコードで、コード中の環境変数を読み取ることができる:

env_value = os.getenv("<ENV_NAME>")

Python標準ライブラリからosモジュールをインポートすることを忘れないでください:

import os

素晴らしい!これで、サードパーティ・サービスと安全に統合するための秘訣を読む準備ができた。

ステップ #3: Google ADKを使い始める

起動した仮想環境で、Google ADK Pythonライブラリをインストールしてください:

pip install google-adk

次に、agent.pyを開き、以下のインポートを追加します:

from google.adk.agents import Agent, SequentialAgent
from google.adk.tools.mcp_tool.mcp_toolset import MCPToolset, StdioServerParameters

これらは、Google ADK統合の次のステップで使用される。

ここで、Google ADKはAIプロバイダーとの統合を必要とすることに留意してほしい。ここでは、GoogleのAIモデルに最適化されたライブラリであるGeminiを使用する。

APIキーをまだ取得していない場合は、Googleの公式ドキュメントに従ってください。Googleアカウントにログインし、Google AI Studioにアクセスします。その後、“Get API Key” セクションに移動すると、このようなモーダルが表示されます:

It's time to build」と題されたポップアップウィンドウには、Google AI Studioの使用とGemini APIのAPIキー取得のオプションが表示され、「Try Gemini」と「Get API key」と書かれた2つの青いボタンが表示される。

Get API key “ボタンをクリックします。次の画面で「APIキーを作成」ボタンを押します:

Gemini APIのAPIキーを生成するためのインターフェースを表示したスクリーンショット。curlを使用してPOSTリクエストを行うためのコードスニペットと、APIキーを作成するためのハイライトされたボタンが含まれている。

生成されると、キーがモーダルに表示されます:

APIキーが生成されました」という通知ダイアログが表示され、APIキーを安全に使用し、公に共有しないよう指示がある。ボックス内に表示された不明瞭なAPIキーと「コピー」ボタン。

キーをコピーして安全な場所に保管してください。同じキーがあれば、Geminiでウェブスクレイピングを行うことができます。

: このチュートリアルでは、無料の Gemini ティアで十分です。有料レベルは、より高いレート制限が必要な場合、またはプロンプトと回答をGoogle製品の改善に使用したくない場合にのみ必要です。Gemini 課金ページを参照してください。

次に、.envファイルを以下の環境変数で初期化する:

GOOGLE_GENAI_USE_VERTEXAI="False"
GOOGLE_API_KEY="<YOUR_GEMINI_API_KEY>"

を先ほど生成した実際のキーに置き換えてください。google-adkライブラリは自動的に環境変数GOOGLE_API_KEYを探すのでagent.pyに追加のコードは必要ありません。

同様に、GOOGLE_GENAI_USE_VERTEXAI設定は、Google ADKがVertex AIと統合すべきかどうかを決定する。代わりにGemini APIを直接使用するには、"False "に設定する。

驚いた!これでGoogle ADKでGeminiが使えるようになった。それでは、統合に必要なスレイドパーティソリューションの初期設定を続けよう。

ステップ#4: Bright Data MCPサーバーのセットアップ

まだの方は、[ブライト・データのアカウントを作成してください]().すでにお持ちの場合は、ログインしてください。

次に、公式の指示に従って次のことを行う:

  1. Bright Data API トークンを取得します。
  2. ウェブアンロッカーとスクレイピングブラウザをMCP統合用に設定する。

結局、あなたはこうなる:

  • Bright Data APIトークン。
  • Web Unlockerゾーン(ここでは、デフォルトの名前をmcp_unlockerとする)。
  • <BRIGHT_DATA_SB_USERNAME>:<BRIGHT_DATA_SB_PASSWORD>の形式でブラウザ認証情報をスクレイピングする。

これで、Node.js環境にBright Data MCPサーバーをグローバルにインストールする準備が整いました:

npm install -g @brightdata/mcp

次に、@brightdata/mcpnpmパッケージを使ってMCPサーバーを起動する:

API_TOKEN="<YOUR_BRIGHT_DATA_API_TOKEN>" \
BROWSER_AUTH="<BRIGHT_DATA_SB_USERNAME>:<BRIGHT_DATA_SB_PASSWORD>" \
npx -y @brightdata/mcp

上記のコマンドは、必要な環境変数(API_TOKENと BROWSER_AUTH)を設定し、ローカルでMCPサーバーを起動する。すべてが正しく設定されていれば、サーバーが正常に実行されていることを示す出力が表示されるはずです:

Checking for required zones...
Required zone "mcp_unlocker" already exists
Starting server...

素晴らしい!Bright DataのMCPサーバーは魅力的な働きをしてくれます。

これらの環境変数をGoogle ADKプロジェクトのルートにある.envファイルに追加します:

BRIGHT_DATA_API_TOKEN="<YOUR_BRIGHT_DATA_API_TOKEN>"
BRIGHT_DATA_BROWSER_AUTH="<BRIGHT_DATA_SB_USERNAME>:<BRIGHT_DATA_SB_PASSWORD>"

プレースホルダーを実際の値に置き換える。

次に、これらのenvをコードで読み込む:

BRIGHT_DATA_API_TOKEN = os.getenv("BRIGHT_DATA_API_TOKEN")
BRIGHT_DATA_BROWSER_AUTH = os.getenv("BRIGHT_DATA_BROWSER_AUTH")

完璧です!これで、Bright Data MCPサーバーとGoogle ADKを統合するための準備はすべて整いました。その前に、AIエージェントを定義しましょう。

ステップ5:エージェントの定義

冒頭で述べたように、MCPを搭載したGoogle ADKエージェントは、コンテンツ要約エージェントとして機能する。その主な目的は、ユーザーの入力を受け取り、高品質でソースのしっかりした要約を返すことである。

詳細には、エージェントはこのワークフローに従う:

  1. ユーザーのリクエストを解釈し、Googleスタイルの検索クエリに分解する。
  2. ポリラング・プレースホルダーは変更しない

  3. ユーザーのオリジナル・クエリに対してMarkdownレポートを生成する。このプロセスでは、収集されたばかりのコンテンツをソースとして使用し、さらに読むためのリンクが含まれます。

プロセスは自然に3つの段階に分かれるので、トップレベルのAIエージェントを3つのサブエージェントに分けるのは理にかなっている:

  • プランナー複雑なトピックを整形式の検索クエリに変換します。
  • リサーチャー:検索を実行し、結果のウェブページから意味のある情報を抽出する。
  • 出版社研究をよく練り上げ、構成された文書にまとめる。

以下のPythonコードを使って、Google ADKにこれら3つのエージェントを実装する:

  • プランナー
def create_planner_agent():
    return Agent(
        name="planner",
        model="gemini-2.0-flash",
        description="Breaks down user input into focused search queries for research purposes.",
        instruction="""
        You are a research planning assistant. Your task is to:
        1. Analyze the user's input topic or question.
        2. Break it down into 3 to 5 focused and diverse search engine-like queries that collectively cover the topic.
        3. Return your output as a JSON object in the following format:

        {
            "queries": ["query1", "query2", "query3"]
        }

        IMPORTANT:
        - The queries should be phrased as if typed into a search engine.
        """,
        output_key="search_queries"
    )
  • 研究者:
def create_researcher_agent(mcp_tools):
    return Agent(
        name="researcher",
        model="gemini-2.0-flash",
        description="Performs web searches and extracts key insights from web pages using the configured tools.",
        instruction="""
        You are a web research agent. Your task is to:
        1. Receive a list of search queries from the planner agent.
        2. For each search query, apply the `search_engine` tool to get Google search results.
        3. From the global results, select the top 3 most relevant URLs.
        4. Pass each URL to the `scraping_browser_navigate` tool.
        5. From each page, use the `scraping_browser_get_text` tool to extract the main page content.
        6. Analyze the extracted text and summarize the key insights in the following JSON format:
        [
            {
                "url": "https://example.com",
                "insights": [
                    "Main insight one",
                    "Main insight two"
                ]
            },
            ...
        ]

        IMPORTANT:
        - You are only allowed to use the following tools: `search_engine`, `scraping_browser_navigate`, and `scraping_browser_get_text`.
        """,
        tools=mcp_tools
    )

注意:mcp_tools入力引数は、エージェントが対話できる MCP ツールを指定するリストです。次のステップでは、Bright Data MCP サーバが提供するツールを使用して、このリストに入力する方法を説明します。

  • 出版社
    “python
    def create_publisher_agent():
    return Agent(
    name=”publisher”、
    model=”gemini-2.0-flash”、
    description=”研究成果を包括的で構造化された最終文書にまとめる””、
    instruction=””
    あなたはライターのエキスパートです。あなたの仕事は、スクレイパーエージェントから構造化された研究成果を受け取り、明確で洞察に満ちた、よく整理されたレポートを作成することです。タイトル(#)、サブタイトル、イントロダクション、章(##)、サブチャプター(###)、結論(##)。- リサーチャー・エージェントの出力から URL を使用し、(必要な場合は)文脈リンクを統合する。- 専門的、客観的、有益な論調を維持する。- 調査結果の再記述にとどまらず、情報を合成し、アイデアをつなげ、首尾一貫した物語として提示する。""")
Note that each AI agent prompt corresponds to one specific step in the overall 3-step workflow. In other words, each sub-agent is responsible for a distinct task within the process.

### Step #6: Add the MCP Integration
As mentioned in the previous step, the `reasearch` agent depends on the tools exported by the Bright Data MCP server. Retrieve them with this function:

python
async def initialize_mcp_tools():
print(“Bright Data MCPに接続中…”)
tools, exit_stack = await MCPToolset.from_server(
connection_params=StdioServerParameters()。
command=’npx’、
args=[“-y”, “@brightdata/mcp”]、
env={
“API_TOKEN”:bright_data_api_token、
“browser_auth”:bright_data_browser_auth、
}
)
)
print(f “MCP Toolset created successfully with {len(tools)} tools”)
tool_names = [tool.name for tool in tools] (ツール内のツールに対するツール名)
print(f “Available tools include:{‘、’.join(tool_names)}”)

print("MCP initialization complete!")

return tools, exit_stack

MCPツールをロードするために、Google ADKはMCPToolset.from_server()関数を提供します。このメソッドには、MCPサーバーの起動に使用したコマンドと、必要な環境変数を指定します。この場合、コードに設定されているコマンドは、ステップ#4でMCPサーバーをローカルでテストするために使用したコマンドに対応します。

⚠️警告:警告: MCPツールを設定し、エージェントのプロンプトに記載しても、ライブラリが実際にそ れらを使用することを保証するものではありません。タスクを達成するためにそれらのツールが必要かどうかを決定するのは、最終的にはLLM次第です。Google ADKのMCP統合はまだ初期段階であり、必ずしも期待通りに動作するとは限らないことを覚えておいてください。

よくやった!あとはこの関数を呼び出して、出来上がったツールをサブエージェントを順次実行するエージェントに統合するだけだ。

ステップ#7: ルートエージェントの作成

Google ADK は、いくつかのタイプのエージェントをサポートしています。この場合、ワークフローは明確な一連のステップに従うので、ルートシーケンシャルエージェントが正しい選択です。このように定義できます:

async def create_root_agent():
    # Load the MCP tools
    mcp_tools, exit_stack = await initialize_mcp_tools()

    # Define an agent that applies the configured sub-agents sequentially
    root_agent = SequentialAgent(
        name="web_research_agent",
        description="An agent that researches topics on the web and creates comprehensive reports.",
        sub_agents=[
            create_planner_agent(),
            create_researcher_agent(mcp_tools),
            create_publisher_agent(),
        ]
    )

    return root_agent, exit_stack

これを動作させるために、Google ADKはagent.pyファイルにroot_agent変数を定義することを期待します。そのためには

root_agent = create_root_agent()

注意:ここでawaitを使わずに非同期関数を呼び出すことは気にしないでください。これはGoogle ADKの公式ドキュメントで推奨されている方法です。このように、フレームワークがあなたの代わりに非同期実行を処理します。

よくやった!Bright Data MCPサーバーとGoogle ADKの統合が完了しました。

ステップ8:すべてをまとめる

これで、agent.pyファイルには

from dotenv import load_dotenv
import os
from google.adk.agents import Agent, SequentialAgent
from google.adk.tools.mcp_tool.mcp_toolset import MCPToolset, StdioServerParameters

# Load the environment variables from the .env file
load_dotenv()

# Read the envs for integration with the Bright Data MCP server
BRIGHT_DATA_API_TOKEN = os.getenv("BRIGHT_DATA_API_TOKEN")
BRIGHT_DATA_BROWSER_AUTH = os.getenv("BRIGHT_DATA_BROWSER_AUTH")

# Define the functions for the creation of the required sub-agents
def create_planner_agent():
    return Agent(
        name="planner",
        model="gemini-2.0-flash",
        description="Breaks down user input into focused search queries for research purposes.",
        instruction="""
        You are a research planning assistant. Your task is to:
        1. Analyze the user"s input topic or question.
        2. Break it down into 3 to 5 focused and diverse search engine-like queries that collectively cover the topic.
        3. Return your output as a JSON object in the following format:

        {
            "queries": ["query1", "query2", "query3"]
        }

        IMPORTANT:
        - The queries should be phrased as if typed into a search engine.
        """,
        output_key="search_queries"
    )

def create_researcher_agent(mcp_tools):
    return Agent(
        name="researcher",
        model="gemini-2.0-flash",
        description="Performs web searches and extracts key insights from web pages using the configured tools.",
        instruction="""
        You are a web research agent. Your task is to:
        1. Receive a list of search queries from the planner agent.
        2. For each search query, apply the `search_engine` tool to get Google search results.
        3. From the global results, select the top 3 most relevant URLs.
        4. Pass each URL to the `scraping_browser_navigate` tool.
        5. From each page, use the `scraping_browser_get_text` tool to extract the main page content.
        6. Analyze the extracted text and summarize the key insights in the following JSON format:
        [
            {
                "url": "https://example.com",
                "insights": [
                    "Main insight one",
                    "Main insight two"
                ]
            },
            ...
        ]

        IMPORTANT:
        - You are only allowed to use the following tools: `search_engine`, `scraping_browser_navigate`, and `scraping_browser_get_text`.
        """,
        tools=mcp_tools
    )

def create_publisher_agent():
    return Agent(
        name="publisher",
        model="gemini-2.0-flash",
        description="Synthesizes research findings into a comprehensive, well-structured final document.",
        instruction="""
        You are an expert writer. Your task is to take the structured research output from the scraper agent and craft a clear, insightful, and well-organized report.

        GUIDELINES:
        - Use proper Markdown-like structure: title (#), subtitle, introduction, chapters (##), subchapters (###), and conclusion (##).
        - Integrate contextual links (where needed) using the URLs from the output of the researcher agent.
        - Maintain a professional, objective, and informative tone.
        - Go beyond restating findings—synthesize the information, connect ideas, and present them as a coherent narrative.
        """
    )

# To load the MCP tools exposed by the Bright Data MCP server
async def initialize_mcp_tools():
    print("Connecting to Bright Data MCP...")
    tools, exit_stack = await MCPToolset.from_server(
        connection_params=StdioServerParameters(
            command="npx",
            args=["-y", "@brightdata/mcp"],
            env={
                "API_TOKEN": BRIGHT_DATA_API_TOKEN,
                "BROWSER_AUTH": BRIGHT_DATA_BROWSER_AUTH,
            }
        )
    )
    print(f"MCP Toolset created successfully with {len(tools)} tools")
    tool_names = [tool.name for tool in tools]
    print(f"Available tools include: {", ".join(tool_names)}")

    print("MCP initialization complete!")

    return tools, exit_stack

# Define the root agent required by Google ADK to start
async def create_root_agent():
    # Load the MCP tools
    mcp_tools, exit_stack = await initialize_mcp_tools()

    # Define an agent that applies the configured sub-agents sequentially
    root_agent = SequentialAgent(
        name="web_research_agent",
        description="An agent that researches topics on the web and creates comprehensive reports.",
        sub_agents=[
            create_planner_agent(),
            create_researcher_agent(mcp_tools),
            create_publisher_agent(),
        ]
    )

    return root_agent, exit_stack

# Google ADK will load the root agent in the web UI or CLI
root_agent = create_root_agent()

プロジェクトのルートフォルダで、仮想環境を有効にして、ウェブUIでAIエージェントを起動します:

adk web

http://localhost:8000、以下のアプリケーションが起動する

左サイドバーには、イベント、ステート、アーティファクト、セッション、評価のタブがあり、中央には「会話なし」を示すエリアと、下部に「メッセージを入力...」と書かれたテキスト入力エリア、マイクとビデオオプションのアイコンがある。

最初のリクエストを実行すると、Google ADK ライブラリはroot_agent変数にアクセスしようとする。これはcreate_root_agent()関数をトリガーし、次にinitialize_mcp_tools() を呼び出す。

その結果、ターミナルにはこう表示される:

Connecting to Bright Data MCP...
Checking for required zones...
Required zone "mcp_unlocker" already exists
Starting server...
MCP Toolset created successfully with 30 tools
Available tools include: search_engine, scrape_as_markdown, scrape_as_html, session_stats, web_data_amazon_product, web_data_amazon_product_reviews, web_data_linkedin_person_profile, web_data_linkedin_company_profile, web_data_zoominfo_company_profile, web_data_instagram_profiles, web_data_instagram_posts, web_data_instagram_reels, web_data_instagram_comments, web_data_facebook_posts, web_data_facebook_marketplace_listings, web_data_facebook_company_reviews, web_data_x_posts, web_data_zillow_properties_listing, web_data_booking_hotel_listings, web_data_youtube_videos, scraping_browser_navigate, scraping_browser_go_back, scraping_browser_go_forward, scraping_browser_links, scraping_browser_click, scraping_browser_type, scraping_browser_wait_for, scraping_browser_screenshot, scraping_browser_get_text, scraping_browser_get_html
MCP initialization complete!

ご覧のように、Google ADKは30個のBright Data MCPツールを正しくロードしました。
これで、チャットにリクエストを入力すると、AIエージェントが

  1. リクエストを検索エンジン風のキーワードに変換します。
  2. これらのキーワードをsearch_engineMCPツールに送る
  3. これらの洞察に基づいて、文脈に関連した記事やレポートを作成し、クエリに回答します。

ステップ#6で述べたように、Gemini(または他のLLM)はMCPツールを完全にスキップする場合があることに注意してください。それは、たとえそれらがコード内で設定され、サブエージェントのプロンプトで明示的に言及されていたとしても同様です。詳細には、推奨されるMCPツールを使用せずに、直接応答を返したり、サブエージェントを実行したりすることがあります。

この副作用を避けるには、サブエージェントのプロンプトを慎重に調整してください。また、Google ADKのMCP統合はまだ進化しており、必ずしも期待通りに動作するとは限らないことを覚えておいてほしい。したがって、ライブラリが最新であることを確認してください。

さて、最近選出されたローマ法王の経歴を知りたいとする。通常、LLMは時事的なクエリに苦労するでしょう。しかし、Bright DataのSERP APIとウェブスクレイピング機能のおかげで、AIエージェントはリアルタイムの情報を簡単に取得し、要約することができます:

AIエージェントが、実際の検証可能な情報源に裏打ちされた結果を提供していることに注目してください。

やった!ミッション完了。

結論

このブログポストでは、Google ADKフレームワークをBright Data MCPと組み合わせて使用し、Pythonで強力なAIエージェントを構築する方法を学びました。

このように、機能豊富なMCPサーバーとGoogle ADKを組み合わせることで、ウェブからリアルタイムのデータを取得できるAIエージェントを作成することができます。これは、ブライト・データのツールやサービスが、AI主導の高度なオートメーションにどのように力を与えることができるかの一例に過ぎません。

AIエージェント開発のためのソリューションをご覧ください:

  • 自律型AIエージェント:強力なAPIセットを使って、あらゆるウェブサイトをリアルタイムで検索、アクセス、対話。
  • 業種別AIアプリ:信頼性の高いカスタムデータパイプラインを構築し、業種固有のソースからウェブデータを抽出します。
  • 基礎モデル:ウェブスケールのデータセットにアクセスし、事前学習、評価、微調整を行うことができます。
  • マルチモーダルAI:AIに最適化された世界最大の画像、動画、音声のリポジトリを利用できます。
  • データプロバイダー:信頼できるプロバイダーと接続し、高品質でAIに対応したデータセットを大規模に調達。
  • データパッケージ:キュレーションされた、すぐに使える、構造化された、エンリッチされた、注釈付きのデータセットを入手。

詳しくはAIハブをご覧ください。

ブライトデータのアカウントを作成し、AIエージェント開発のためのすべての製品とサービスをお試しください!

クレジットカードは必要ありません