Maps Experience エージェント ツール

Maps Experience エージェント ツール(旧称 Maps Grounding Lite)は、Model Context Protocol(MCP)と REST をサポートする Google Maps Platform サービスです。Google マップの信頼できる地理空間データを使用して AI アプリケーションをグラウンディングできます。そのツールを使用すると、LLM は場所、天気、大気質、花粉、ルートのデータにアクセスできます。他のツールは、場所の名前と Google マップの URL をプレイス ID に解決します。Maps Experience エージェント ツールを試すには、MCP サーバーをサポートする任意のツールで MCP サーバーを有効にします。各ツールを REST メソッドとして呼び出すこともできます。詳細については、REST を使用してツールを呼び出すをご覧ください。

Maps Experience Agent Tools は、Essentials と Pro の 2 つの SKU を持つ 1 つのプロダクトです。Pro オプションを使用しない限り、すべてのリクエストは Essentials で課金されます。Pro オプションでは、ルート沿いの Place Search、Place Details の拡張、検索あたりの場所の増加、ルートあたりの経由地の増加、リアルタイム交通情報を考慮したルート設定、花粉予測、過去の Air Quality が追加されます。どちらの SKU も、同じツール、MCP サーバー、REST メソッド、認証情報を使用します。詳しくは、Essentials と Pro をご覧ください。

ツール

Maps Experience Agent Tools を使用すると、LLM は次の Google マップ機能にアクセスできます。

  • 場所を検索する: 場所に関する情報をリクエストし、AI 生成の要約を取得します。レスポンスには、概要に記載されている各場所のプレイス ID、緯度と経度の座標、Google マップのリンクも含まれます。プレイス ID と緯度 / 経度座標を他の Google Maps Platform API と組み合わせて使用すると、地図上に場所を表示できます。Places UI キットを使用して、追加料金なしでこれらの場所を表示するには、エージェント データ可視化トークン(プレビュー)を使用します。Pro では、クチコミからの分析情報など、Place Details をリクエストできます。1 回のリクエストで最大 10 件の場所をリクエストできます。
  • ルート沿いの検索: compute_routes、route_endpoints、encoded_polyline の retrieval_token を使用して指定された移動ルート沿いの場所を検索し、AI 生成の概要、場所の詳細、迂回距離、移動時間、エージェント データ可視化トークン(プレビュー)を取得します。すべての search_along_route リクエストは Pro SKU で課金されます。
  • 天気の検索: 天気(現在の状況、24 時間の履歴、最大 10 日間の 1 時間ごとおよび日別の予報)や、現在または最大 4 日間の大気質の予報など、特定の場所の環境条件をリクエストします。Pro では、最大 5 日間の日別の花粉飛散予測(植物種の詳細を含む)と、最大 30 日間の 1 時間ごとの大気質の履歴をリクエストすることもできます。
  • ルートを計算する: 出発地と目的地の間のルートをリクエストします。必要に応じて中間地点を指定することもできます。ルートの距離、所要時間、search_along_route に渡すことができる DRIVE ルートの retrievalToken が返されます。Pro では、ルートでリアルタイムの交通状況を考慮し、より多くの経由地を含めることができます。

  • 名前を解決する、マップ URL を解決する: 場所の名前、住所、Google マップの URL をプレイス ID に解決します。詳細については、Resolution API をご覧ください。

MCP サーバーを有効にすると、LLM はそのツールを呼び出して、これらのデータ型のグラウンディング情報を取得できます。LLM はこの情報をコンテキストに使用できます。ただし、最終的な回答には、MCP サーバーから返された正確な情報が含まれていない場合があります。生成された回答の正確性を確認します。

Essentials と Pro

Essentials と Pro は同じプロダクトの 2 つの SKU であり、別々のプロダクトやプランではありません。Pro オプションを使用するリクエストは、Pro の料金で請求されます。その他のリクエストは Essentials で課金されます。Pro オプションはツール リクエストの通常のフィールドであるため、LLM はユーザーに代わってそれらを使用できます。エージェントは、同じ会話で両方の SKU を使用することもできます。たとえば、エージェントは Essentials を使用して、ランドマークの近くのコーヒー ショップを見つけることができます。その後、Pro を使用して、看板メニューや座席に関するフォローアップの質問に回答します。Pro 用の個別の MCP サーバー、エンドポイント、認証情報はありません。

Essentials、Pro、Google マップによるグラウンディングの比較

Google マップによるグラウンディングは別のプロダクトです。これは、Gemini API、Google AI Studio、Gemini Enterprise Agent Platform の Gemini モデルに組み込まれています。モデルは、Google マップにクエリを実行するタイミングを決定し、引用を含むグラウンディングされた回答を返します。Gemini で構築し、モデルでグラウンディングを処理する場合は、Google マップによるグラウンディングを選択します。他のモデルやエージェント フレームワーク、または各ツール呼び出しを直接制御する場合は、Maps Experience エージェント ツールを選択します。

次の表は、Essentials SKU、Pro SKU、Google マップによるグラウンディングを比較したものです。

Maps Experience エージェント ツール Google マップによるグラウンディング
Essentials SKU
(旧称: Maps Grounding Lite)
Pro SKU
リクエストの課金方法 Pro オプションを使用しない各ツール リクエスト すべての search_along_route リクエスト、または Pro オプションを使用する別のツールへのリクエスト。Pro SKU で請求される内容をご覧ください。 Google マップのクエリまたはグラウンディングされたプロンプトごと(プラットフォームとモデルによって異なる)
モデルとプラットフォーム MCP をサポートしているか、REST API を呼び出すことができるモデルまたはエージェント フレームワーク。両方の SKU で同じツールセットと認証情報を使用 Gemini API、Google AI Studio、Gemini Enterprise Agent Platform の Gemini モデル
ツールが返す内容 コアデータ: 検索ごとに最大 5 件の Place Details、リアルタイムの交通情報を含まないルートの距離と所要時間、現在の天気と天気予報(および 24 時間の 1 時間ごとの天気履歴)、現在または予測される大気質 Essentials のすべての機能に加えて、迂回時間と距離を含むルート沿いの場所、Place Details(クチコミからの分析情報など)、1 回の検索につき最大 10 か所の場所、リアルタイムの交通情報を含むルート、最大 25 か所の中間ウェイポイント、花粉予測、最大 30 日間の過去の大気質データ クチコミから得られる Place Details と分析情報、リアルタイム交通情報を含むルート情報
リクエストの例 事実に基づく物流に関する質問: 店舗やビジネスの検索、営業時間、住所、距離や移動時間の見積もり、現在の天気、10 日間の天気予報、現在または 4 日間の大気質予報 主観的、広範、または専門的な質問: ルート沿いの場所、雰囲気、看板メニュー、訪問者向けのヒント、6 ~ 10 か所の比較、現在の交通状況での移動時間、花粉やアレルギーの予報、過去 30 日間の大気質の履歴 Gemini での会話形検索、旅行プランの作成、地域の情報検索
Places UI キットの可視化 エージェント データ可視化トークン(プレビュー)に追加料金なしで含まれています 別途請求
毎月の無料使用枠 10,000 件のリクエスト 5,000 リクエスト プラットフォームとモデルによって異なります。たとえば、Gemini API では、Gemini 3 以降のモデルに、1 か月あたり 5,000 件の検索クエリが無料で含まれています。それ以降は、検索クエリ 1,000 件あたり 14 ドルが課金されます。
従量課金制料金 リクエスト 1,000 件あたり $7.00(ボリューム ディスカウントあり) リクエスト 1,000 件あたり $14.00(ボリューム割引あり)
サブスクで節約 Essentials プランと Pro プランに含まれています Pro プランに含まれる 利用不可
始める 両方の SKU に共通の設定: MCP サーバーを使用するように LLM を構成するまたは REST でツールを呼び出すをご覧ください。 Gemini API または Agent Platform

これらのオプションは、どちらの SKU でも同じように機能します。移動手段、出発時刻と到着時刻、代替ルート、ルートのポリライン、天気の検索、現在と予測の大気質の検索(汚染物質濃度と地域の AQI スケールを含む)、天気単位システム、Resolution API。リクエストの請求対象となる SKU は変更されません。

Pro SKU で請求されるもの

次の表に、Essentials に含まれる機能と、Pro SKU が必要な機能を示します。

ツール 能力 Essentials Pro
場所を検索する 1 リクエストあたりの場所数 最大 5 個 6 ~ 10(page_size、6 ~ 10)
検索サマリーの拡張された Place Details(クチコミからの分析情報、メニューのハイライト、雰囲気、混雑状況、訪問者のヒント、近接クエリの距離または移動時間) 利用不可 include_extended_details で利用可能
ルート沿いの検索 ルート沿いの場所、迂回距離と移動時間、オプションの拡張された場所の詳細、交通状況を考慮した迂回時間 利用不可 すべてのリクエスト
ルートを計算する ルーティング設定 リアルタイムの交通情報は考慮されない ROUTING_PREFERENCE_TRAFFIC_AWARE_OPTIMAL を使用して、リアルタイムの交通状況や、交通機関のルートのリアルタイムの交通機関データを考慮します。
ルートあたりの中間ウェイポイント 最大 10 人 11 ~ 25(10 を超える intermediate_waypoints)
天気を調べる 天気 現在の天気、1 時間ごとおよび 1 日ごとの予報(最大 10 日間)、最大 24 時間の 1 時間ごとの履歴(capabilities の WEATHER、または capabilities、weather_options、air_quality_options、language_code を省略した以前のリクエスト) Pro オプションなし(すべての WEATHER データが Essentials に含まれます)
大気質 現在の状況、今日の 1 日の 1 時間ごとの結果、最大 4 日間の 1 時間ごとの予測(capabilities の AIR_QUALITY) 過去 30 日間の大気質の履歴(capabilities の AIR_QUALITY。date は今日より前、またはその場所のタイムゾーンの過去の hour)。レスポンスで返されます。
花粉 利用不可 最大 5 日間の日別の花粉飛散予測と植物種の詳細(capabilities の POLLEN)(レスポンスで返された場合)
Resolution API Pro オプションはありません。すべてのリクエストは、Places API テキスト検索の基本事項(ID のみ) SKU に基づいて課金されます(無料)。

各機能を有効にするリクエスト オプションについては、Place Search、ルートに沿って検索する、ルートを計算する、天気を検索するをご覧ください。

Pro の使用を管理する

search_places、compute_routes、lookup_weather では、Pro オプションはデフォルトでオフになっています。LLM は、ユーザーのリクエストで必要とされ、ツールの説明または指示で許可されている場合に、これらを設定するか、search_along_route を呼び出します。ツールの説明では、どのオプションの費用が高くなるか、また、それらのオプションをいつ使用するか(page_size が 5 を超える場合、拡張された Place Details、10 個を超える中間ウェイポイント、交通状況を考慮したルート、search_along_route)をモデルに伝えます。REST を使用してツールを呼び出す場合、コードですべてのオプションを設定します。費用を管理するには:

  • Pro オプションが適切な場合をモデルに伝えます。例: 「ユーザーがレビュー、メニュー、雰囲気について尋ねた場合にのみ include_extended_details を設定します。」または、「ユーザーが現在の移動時間を尋ねた場合にのみ ROUTING_PREFERENCE_TRAFFIC_AWARE_OPTIMAL を使用する」などです。または、「ユーザーがルート沿いの場所をリクエストした場合にのみ search_along_route を呼び出す」または、「ユーザーが花粉、アレルギー、過去の大気質について尋ねた場合にのみ、POLLEN、または過去の date または hour を含む AIR_QUALITY を含めます。」
  • エージェントを Essentials SKU に維持するには、search_along_route を呼び出したり、Pro オプションを使用したりしないようにモデルに指示します。Pro オプションは、include_extended_details、5 を超える page_size、ROUTING_PREFERENCE_TRAFFIC_AWARE_OPTIMAL、10 を超える中間ウェイポイント、capabilities の POLLEN、capabilities の AIR_QUALITY を含む過去の date または hour です。MCP クライアントがツールまたはツール引数を制限できる場合は、ツール構成で search_along_route とそれらの引数値もブロックできます。
  • 請求レポートで Maps Grounding Pro SKU をモニタリングし、予算アラートを設定します。

Resolution API

Maps Experience Agent Tools は Resolution API を提供します。自由形式の場所テキストと URL を、構造化された Google マップの場所識別子に解決します。Resolution API は、REST メソッドとして、また MCP サーバーのツールとして利用できます。

  • 名前を解決する(REST、MCP): 場所の名前または住所のバッチを Google マップ上の特定の場所エンティティに解決します。このツールは、構造化されていないユーザークエリを安定したプレイス ID にグラウンディングするのに役立ちます。
  • マップ URL を解決する(REST、MCP): Google マップの URL のバッチを特定の場所エンティティに解決します。サポートされている形式には、標準の場所の URL と短縮 URL があります。

返されたプレイス ID は、他の Google Maps Platform API で使用できます。各レスポンスには、解決された場所を Google マップにリストとして保存するリンクも含まれています。

詳細については、Maps Tools Resolution API をご覧ください。

サンプルアプリを試す(新しいタブで開く)

課金と割り当て

請求方法

Google Maps Platform の従量課金制の料金モデルでは、Maps Experience エージェント ツールの使用量はリクエストごとに計算されます。各リクエストは 1 つの課金イベントを表します。使用量はサービス SKU ごとにトラッキングされます。請求書には、合計料金に加えて、各 SKU の明細が表示されます。詳細については、レポートの概要をご覧ください。

MCP サーバーまたは REST を介した Search places、Search along route、Compute routes、Lookup weather の各リクエストは、1 つの SKU(Maps Grounding Essentials または Maps Grounding Pro)で課金されます。すべての search_along_route リクエストと、Pro オプションを使用するリクエストは、Pro SKU で課金されます。1 つのリクエストが両方の SKU で課金されることはありません。また、リクエスト内の Pro オプションの数によって料金が変わることはありません。各ツールの SKU を決定する機能とオプションについては、Pro SKU で請求される内容をご覧ください。

Maps Grounding Essentials リクエストは、毎月最初の 10,000 件のリクエスト以降、1,000 件のリクエストあたり $7.00 で課金されます。Maps Grounding Pro リクエストは、毎月最初の 5,000 件のリクエスト以降、1,000 件のリクエストあたり $14.00 で課金されます。どちらの SKU も、月間使用量が多い場合にボリューム割引が適用されます。

料金の詳細については、メインの料金表とインドの料金表をご覧ください。

Resolution API リクエスト(ResolveNames と ResolveMapsUrls)は、Places API テキスト検索 Essentials(ID のみ) SKU で無料で課金されます。

Places UI キットを使用して search_places または search_along_route レスポンスの場所を表示する場合は、エージェント データ可視化トークン(プレビュー)を使用することで、Places UI キットのリクエストが課金されないようにできます。

Essentials SKU の使用量は、Essentials プランと Pro プランの定期購入割引に含まれています。Pro SKU の使用量は、Pro プランに含まれています。

割り当て

Maps Experience Agent Tools が提供するツールと API には、次の割り当てが適用されます。

  • 場所の検索: プロジェクトごとに 1 分あたり 300 件のクエリ。
  • ルート沿いの検索: プロジェクトごとに 1 分あたり 300 件のクエリ。
  • 天気の検索: プロジェクトごとに 1 分あたり 300 件のクエリ。
  • Compute routes: プロジェクトごとに 1 分あたり 300 件のクエリ。
  • 名前の解決: プロジェクトごとに 1 分あたり 600 件のクエリ。
  • Resolve Maps URLs: プロジェクトごとに 1 分あたり 600 件のクエリ。

割り当てはツールごとにカウントされ、Essentials SKU と Pro SKU で共有されます。Pro リクエストは、同じツールへの Essentials リクエストと同じ割り当てを消費します。

Resolution API リクエストは、含まれるアイテムの数に関係なく、1 つのクエリとしてカウントされます。

ポリシーと利用規約

Maps Experience Agent Tools には、サービス固有の規約を含む Google Maps Platform 利用規約が適用されます。このセクションでは、互換性のある LLM やソース アトリビューションなど、Maps Experience エージェント ツールの追加の使用要件について説明します。この要件は、リクエストの課金対象となる SKU に関係なく、すべての結果に適用されます。

互換性のある LLM の要件

Maps Experience エージェント ツールは、Google Maps Platform 利用規約に準拠した LLM でのみ使用できます。

たとえば、Google マップ コンテンツが、選択した LLM によってキャッシュ、保存、または LLM の改善に使用されないようにすることは、お客様の責任となります。Maps Experience エージェント ツールを使用する前に、Maps Experience エージェント ツールで使用するモデルの利用規約を確認する必要があります。モデルに入力されたデータをモデルのトレーニングや改善に使用するモデルで、Maps Experience エージェント ツールを使用しないでください。お客様は、モデルの使用が Google Maps Platform 利用規約(サービス固有の規約を含む)の Google マップ コンテンツに関する制限に完全に準拠していることを確認する責任を負います。

Google マップのソースに関する帰属表示の要件

Maps Experience Agent Tools からの各ツール レスポンスには、ソースが含まれています。Maps Experience エージェント ツールの結果を表示する場合は、関連する Google マップのソースを含め、次の要件を満たす必要があります。

  • Google マップのソースは、ソースがサポートする生成コンテンツの直後に示す必要があります。この生成されたコンテンツは、グラウンディングされた出力とも呼ばれます。
  • Google マップのソースは、1 回のユーザー操作で表示できる必要があります。

「場所を検索」ツールと「経路沿いを検索」ツールの情報源

search_places ツールの places フィールドと search_along_route ツールの results[].place フィールドは、summary をサポートするソースを提供します。場所ごとに、次のメタデータが返されます。

  • place(リソース名)
  • id
  • location
  • googleMapsLinks
  • attribution

各場所について、次の要件を満たすリンク プレビューを生成する必要があります。

これらの要件は、クチコミからの分析情報など、Pro の拡張された Place Details を含む要約にも適用されます。summary は、places または results のエントリにマッピングされる 0 ベースのインデックス([0] など)を使用して各場所を引用します。各場所には、Google マップの場所のクチコミにリンクする googleMapsLinks.reviewsUrl も含まれています。ユーザーは、このリンクをたどって、インサイトの根拠となるレビューを確認できます。

音声ファーストのインターフェース

アプリが Maps Experience Agent Tools の結果を音声で提示する場合は、音声ファースト インターフェースの要件も満たす必要があります。まとめると、次のとおりです。

  • ソースの表示: 音声会話の逐語的な履歴を表示するコンパニオン UI に、Google マップのソースを表示します。
  • 積極的な開示: ユーザーとのやり取りの際に、AI 生成コンテンツに Google マップの情報が含まれている可能性があることをユーザーに伝えます。また、詳細なソースはコンパニオン UI で確認できることも伝えます。この操作は、画面上または音声で行うことができます。
  • 永続的な開示: AI 生成コンテンツに Google マップのコンテンツが含まれる可能性があることを、音声設定メニューなどで永続的に説明します。
  • ユーザーからの問い合わせ: コンテンツのソースに関するユーザーからの質問に正確に回答し、詳細についてはコンパニオン UI を参照するよう案内します。

MCP サーバーを使用するように LLM を構成する

Maps Experience エージェント ツールを使用するには、Maps Experience エージェント ツール API サービスが有効になっている Google Cloud プロジェクトが必要です。また、API キーまたは OAuth クライアント ID も必要です。次に、MCP サーバーにアクセスするように LLM を構成します。MCP サーバーは Streamable HTTP トランスポートを使用します。

Google Cloud プロジェクトで Maps Experience Agent Tools を有効にする

プロジェクトで API を有効にするには:

  1. Google Cloud コンソールで、Maps Experience エージェント ツールに使用するプロジェクトを選択します。
  2. Google Cloud Console でプロジェクトの課金を有効にします。
  3. Google Cloud コンソールの API ライブラリで、Maps Experience エージェント ツールを有効にします。

API キーを使用して認証する

Maps Experience Agent Tools で既存の API キーを使用することも、新しい API キーを作成することもできます。どちらの場合も、Google Cloud プロジェクトとキーの両方で Maps Experience agent tools API サービスを有効にします。

API キーを使用して認証するには:

  1. Google Maps Platform のスタートガイドの手順に沿って、API キーを作成または構成します。
  2. X-Goog-Api-Key ヘッダーを使用して、キーを MCP サーバーに渡します。これは、LLM の MCP ツール構成でカスタム HTTP ヘッダーとして指定する必要があります。

OAuth を使用して認証する

OAuth を使用して認証するには、OAuth 認証情報を作成して MCP ホストまたは MCP サーバー アプリケーションに渡します。

OAuth を使用して認証するには:

  1. Google Cloud コンソールで、Maps Experience エージェント ツールに使用するプロジェクトを選択します。
  2. [API とサービス] メニューで、[認証情報] を選択します。
  3. トップメニューで [認証情報を作成] > [OAuth クライアント ID] を選択します。
  4. プロジェクトに同意画面が構成されていない場合は、[同意画面を構成] をクリックし、画面上の指示に沿って操作します。
  5. [指標] セクションで、[OAuth クライアントを作成] をクリックします。
  6. [OAuth クライアント ID の作成] 画面で、アプリケーションの種類を選択し、クライアント ID の名前を入力します。
  7. アプリケーションの種類に関連する追加の詳細を指定します。たとえば、ウェブ アプリケーションを作成する場合は、ブラウザとサーバーのリクエストに承認済みの URI を追加します。
  8. クライアントが作成されたら、クライアント ID とシークレットを保存します。
  9. MCP ホストまたは MCP サーバー アプリケーションを構成するときに、OAuth クライアント ID とシークレットを渡します。また、次のスコープをリクエストする必要があります。https://www.googleapis.com/auth/maps-platform.mapstools

詳しくは、OAuth 2.0 を使用した Google API へのアクセスをご覧ください。

Maps Experience Agent Tools MCP サーバーにアクセスするように LLM を構成する

Maps Experience エージェント ツール サービスを有効にして認証情報を作成したら、MCP サーバーにアクセスするように LLM を構成できます。LLM の MCP 構成ドキュメントに沿って、MCP サーバーの URL(https://mapstools.googleapis.com/mcp)を使用します。

詳細については、AI アプリケーションで MCP を構成するをご覧ください。

Gemini CLI を使用して Maps Experience Agent Tools を構成する

このセクションでは、Gemini CLI を使用して Maps Experience エージェント ツール MCP サーバーを構成する方法の例を示します。詳細については、Gemini CLI を使用した MCP サーバーをご覧ください。

  1. Gemini CLI をインストールしたら、gemini mcp add を実行して MCP サーバーを構成します。

    gemini mcp add -s user -t http -H 'X-Goog-Api-Key: API_KEY' maps-experience-agent-tools-mcp https://mapstools.googleapis.com/mcp
    

    構成が成功すると、サーバーがユーザー設定に追加されたことを示す確認メッセージが表示されます。

  2. サーバーが動作していることを確認するには、/mcp list コマンドを実行します。

    > /mcp list
    
    Configured MCP servers:
    
    maps-experience-agent-tools-mcp - Ready (6 tools)
    Tools:
    -   compute_routes
    -   lookup_weather
    -   resolve_maps_urls
    -   resolve_names
    -   search_along_route
    -   search_places
    
  3. CLI を使用して、マップに相談を始めましょう。たとえば、「マウンテンビューのレストランをいくつかおすすめしてください」と入力すると、search_places ツールが呼び出されます。

Agent Development Kit(ADK)を使用して Maps Experience エージェント ツールを構成する

このセクションでは、Python、Java、TypeScript で Agent Development Kit(ADK)を使用して MCP サーバーを構成する方法について説明します。

Python

この例の完全な実装は、GitHub の adk-samples リポジトリにあります。

ステップ 1: Maps Experience エージェント ツール用の McpToolset を使用してエージェントを定義する

agent.py ファイルを変更します。YOUR_GOOGLE_MAPS_API_KEY は、実際の API キーに置き換えます。

# ./adk_agent_samples/mcp_agent/agent.py
import os
from google.adk.agents.llm_agent import Agent
from google.adk.tools.mcp_tool import McpToolset
from google.adk.tools.mcp_tool.mcp_session_manager import StreamableHTTPConnectionParams

# Retrieve the API key from an environment variable or directly insert it.
GOOGLE_MAPS_API_KEY = os.getenv("GOOGLE_MAPS_API_KEY")
if not GOOGLE_MAPS_API_KEY:
    GOOGLE_MAPS_API_KEY = "YOUR_GOOGLE_MAPS_API_KEY_HERE"

if GOOGLE_MAPS_API_KEY == "YOUR_GOOGLE_MAPS_API_KEY_HERE":
    print("WARNING: GOOGLE_MAPS_API_KEY is not set.")

root_agent = Agent(
    model='gemini-flash-latest',
    name='travel_planner_agent',
    description='A helpful assistant for planning travel routes.',
    tools=[
        McpToolset(
            connection_params=StreamableHTTPConnectionParams(
                url="https://mapstools.googleapis.com/mcp",
                headers={
                    "X-Goog-Api-Key": GOOGLE_MAPS_API_KEY,
                    "Content-Type": "application/json",
                    "Accept": "application/json, text/event-stream"
                }
            )
        )
    ]
)
    
ステップ 2: __init__.py が存在することを確認する

agent.py と同じディレクトリに __init__.py があることを確認します。

from . import agent
    
ステップ 3: adk web を実行して操作する
  1. 環境変数を設定する:
    ターミナルで Google Maps API キーを環境変数として設定します。
    export GOOGLE_MAPS_API_KEY="YOUR_ACTUAL_GOOGLE_MAPS_API_KEY"
            
  2. adk web を実行する:
    次のコマンドを実行して、ADK ウェブ インターフェースを起動します。
    adk web
            
  3. UI で操作する:
    • travel_planner_agent を選択します。
    • 次のようなプロンプトを試します。
      • 「明日はサンフランシスコにいます。天気はどう?」
      • 「ゴールデン ゲート パークの近くのカフェを探して」
      • 「Googleplex から SFO までのルートを教えて。」

Java

Java で McpToolset を初期化するエージェントを定義します。環境変数を使用しない場合は、YOUR_GOOGLE_MAPS_API_KEY_HERE を取得した実際の API キーに置き換えます。

package agents;

import com.google.adk.agents.LlmAgent;
import com.google.adk.runner.InMemoryRunner;
import com.google.adk.sessions.SessionKey;
import com.google.adk.tools.mcp.McpToolset;
import com.google.adk.tools.mcp.StreamableHttpServerParameters;
import com.google.genai.types.Content;
import com.google.genai.types.Part;
import java.util.HashMap;
import java.util.Map;

public class MapsAgentCreator {
    public static void main(String[] args) {
        String googleMapsApiKey = System.getenv("GOOGLE_MAPS_API_KEY");
        if (googleMapsApiKey == null || googleMapsApiKey.trim().isEmpty()) {
            googleMapsApiKey = "YOUR_GOOGLE_MAPS_API_KEY_HERE";
            if ("YOUR_GOOGLE_MAPS_API_KEY_HERE".equals(googleMapsApiKey)) {
                System.out.println("WARNING: GOOGLE_MAPS_API_KEY is not set.");
            }
        }

        Map<String, String> headers = new HashMap<>();
        headers.put("X-Goog-Api-Key", googleMapsApiKey);
        headers.put("Content-Type", "application/json");
        headers.put("Accept", "application/json, text/event-stream");

        StreamableHttpServerParameters serverParams =
                StreamableHttpServerParameters.builder("https://mapstools.googleapis.com/mcp")
                        .headers(headers)
                        .build();

        try (McpToolset toolset = new McpToolset(serverParams)) {
            LlmAgent agent = LlmAgent.builder()
                    .model("gemini-flash-latest")
                    .name("travel_planner_agent")
                    .description("A helpful assistant for planning travel routes.")
                    .tools(toolset)
                    .build();

            System.out.println("Agent created: " + agent.name());

            InMemoryRunner runner = new InMemoryRunner(agent);
            String userId = "maps-user-" + System.currentTimeMillis();
            String sessionId = "maps-session-" + System.currentTimeMillis();
            String promptText =
                    "Please give me directions to the nearest pharmacy to Madison Square Garden.";

            SessionKey sessionKey = runner.sessionService()
                    .createSession(runner.appName(), userId, null, sessionId)
                    .blockingGet()
                    .sessionKey();
            System.out.println("Session created: " + sessionId + " for user: " + userId);

            Content promptContent = Content.fromParts(Part.fromText(promptText));
            System.out.println("\nSending prompt: \"" + promptText + "\" to agent...\n");

            runner.runAsync(sessionKey, promptContent)
                    .blockingForEach(event -> {
                        System.out.println("Event received: " + event.toJson());
                    });
        } catch (Exception e) {
            System.err.println("An error occurred: " + e.getMessage());
            e.printStackTrace();
        }
    }
}
    

TypeScript

TypeScript で MCPToolset を初期化するエージェントを定義します。

import 'dotenv/config';
import {LlmAgent, MCPToolset} from "@google/adk";

const googleMapsApiKey = process.env.GOOGLE_MAPS_API_KEY;
if (!googleMapsApiKey) {
    console.warn("WARNING: GOOGLE_MAPS_API_KEY is not set.");
    throw new Error(
        'GOOGLE_MAPS_API_KEY is not provided, please run "export GOOGLE_MAPS_API_KEY=YOUR_ACTUAL_KEY" to add that.'
    );
}

export const rootAgent = new LlmAgent({
    model: "gemini-flash-latest",
    name: "travel_planner_agent",
    description: "A helpful assistant for planning travel.",
    tools: [
        new MCPToolset({
            type: "StreamableHTTPConnectionParams",
            url: "https://mapstools.googleapis.com/mcp",
            transportOptions: {
                requestInit: {
                    headers: {
                        "X-Goog-Api-Key": googleMapsApiKey,
                        "Content-Type": "application/json",
                        "Accept": "application/json, text/event-stream"
                    }
                }
            }
        })
    ],
});
    

REST を使用してツールを呼び出す

Maps Experience エージェント ツールの各ツールは、REST メソッドとしても使用できます。ツールを独自のエージェントまたはアプリケーションに接続する場合は、REST メソッドを直接呼び出します。たとえば、モデルに独自の関数を宣言する、モデルで設定できるオプションを選択する、コードにデフォルト値を設定するなどの場合です。

次の表に、各ツールの REST メソッドを示します。

ツール REST メソッド
search_places POST https://mapstools.googleapis.com/v1:searchText
search_along_route POST https://mapstools.googleapis.com/v1:searchAlongRoute
lookup_weather POST https://mapstools.googleapis.com/v1:lookupWeather
compute_routes POST https://mapstools.googleapis.com/v1:computeRoutes
resolve_names POST https://mapstools.googleapis.com/v1:resolveNames
resolve_maps_urls POST https://mapstools.googleapis.com/v1:resolveMapsUrls

REST リクエストは、対応するツールと同じオプションを受け取り、同じレスポンスを返します。REST リクエストとレスポンスの本文では、フィールド名にローワー キャメルケースを使用します(例: text_query ではなく textQuery)。REST リクエストは、同じ SKU で課金され、Pro オプションと同じルールに従い、MCP ツール呼び出しと同じ割り当てにカウントされます。

認証するには、MCP サーバーと同じ Google Cloud プロジェクトと認証情報を使用します。設定手順については、MCP サーバーを使用するように LLM を構成するをご覧ください。X-Goog-Api-Key ヘッダーで API キーを渡すか、Authorization ヘッダーで https://www.googleapis.com/auth/maps-platform.mapstools スコープを持つ OAuth アクセス トークンを渡します。

次の例では、searchText メソッドを呼び出します。

curl -X POST \
-H "Content-Type: application/json" \
-H "X-Goog-Api-Key: API_KEY" \
-d '{
  "textQuery": "coffee shops near Golden Gate Park"
}' \
"https://mapstools.googleapis.com/v1:searchText"

API_KEY を API キーに置き換えます。

レスポンスには、search_places ツールの結果と同じ summary、places、contentToken フィールドが含まれます。各ツールのガイドには、その例の REST バージョンが記載されています。

フィードバックの共有

Maps Experience エージェント ツールに関するフィードバックを送信するには、次のフォームを使用します。