Agent Toolkitを使用すると、AIエージェントはチャットの会話内で関連するPendoガイドを直接表示できます。訪問者がタスクの完了方法を尋ねると、エージェントはModel Context Protocol(MCP)を介してPendoに問い合わせ、訪問者がアプリ内で起動できるウォークスルーを提供します。
この記事では、お客様自身で構築およびホストするエージェントについて説明します。エージェントがIntercom Finで動作している場合は、代わりに「Intercom Finを使用したPendoガイドの配信」を参照してください。ツールを接続する手順までのセットアップは共通であり、該当の記事ではIntercom側の設定について説明しています。
注:この機能はクローズドベータ版でご利用いただけます。アクセスを希望される場合は、MCPサポートエージェントの関心表明フォームにご記入ください。Pendoのアカウント担当者がフォローアップしてサブスクリプションの有効化をします。
ユースケース
このインテグレーションを使用して、次のことができます。
- サポートに関する質問に対しては、静的なテキスト回答ではなく、インタラクティブなステップバイステップのチュートリアルを提供する。
- 訪問者に対し、状況に応じた即時的なサポートを提供することで、問い合わせ件数を削減する。
- ガイドを配信する際は、既存のPendoセグメントルールとガイドのターゲット設定に従い、訪問者には表示対象となるガイドのみを提供します。
- Streamable HTTP経由でMCPサーバーを呼び出すことができる任意のエージェントフレームワークから、すでに管理しているガイドライブラリを再利用できます。
仕組み
エージェントは、Agent Toolkitで設定したのと同じMCP接続を介してPendoにアクセスします。エンドツーエンドのフローは次のとおりです:
- 訪問者がアプリのチャットでエージェントに質問します。
- エージェントは、その質問をタスクに関するヘルプのリクエストとして認識します。
- エージェントは、訪問者の質問と、任意でPendoの訪問者ID(Visitor ID)を渡して、Pendo MCPサーバー上の
getInAppGuidanceツールを呼び出します。 - Pendoは既存のセグメントルールとガイドのターゲット設定に基づいて、ガイドライブラリからその訪問者が閲覧できるガイドを絞り込み、最も関連性の高いものを1つ返します。
- エージェントは、訪問者が選択してアプリ内でウォークスルーを起動できるリンクとしてガイドを表示します。
始める前に
このセットアップを完了するには、以下が必要です。
- このフィーチャーへのベータアクセス権。アクセス権をリクエストするには、MCPサポートエージェント利用申請フォームに入力します。Pendoのアカウント担当者がお客様のサブスクリプションでこれを有効にします。
- サブスクリプションでAgent Toolkitが有効になっていること。サブスクリプション管理者が[設定(Settings)]>[サブスクリプション設定(Subscription settings)]>[AIアクセス(AI access)]>[Agent Toolkit]でこれをオンにします。その後、サービスアカウント、Webhook、[セマンティック検索(Semantic search)]など、Agent Toolkitが依存する設定もオンになります。Agent ToolkitにはPendoの有料サブスクリプションが必要です。
-
[セマンティック検索(Semantic search)]が有効になっていること。これはAgent Toolkitとともに有効になります。オフになっている場合、サブスクリプションでGoogle AI機能がオプトアウトされている可能性があり、
getInAppGuidanceツールは利用できません。 - サブスクリプション管理者権限。Agent Toolkitは管理者のみ利用できます。非管理者ユーザーのメインナビゲーションにはAgent Toolkitが表示されず、直接リンクからそのページにアクセスすることもできません。
- トークン更新とMCP接続を設定するための開発者または技術リソース。
ステップ1:Agent Toolkitでエージェントを作成する
Agent Toolkitはエージェントが認証に使用するサービスアカウントを作成し、ステップ3とステップ4で必要となる接続値を提供します。ここでの操作はすべてPendo内で行われます。
- メインナビゲーションで[Agent Toolkit(Agent Toolkit)]に移動し、[エージェントを追加(Add agent)]を選択します。
- [エージェントタイプ(Agent type)]で、[カスタムエージェント(Custom Agent)]を選択します。
- エージェントの[名前(Name)]を入力し、必要に応じて[説明(Description)]を入力します。
- [アクセス可能なアプリ(Accessible apps)]で、少なくとも1つのアプリを選択します。これは必須であり、エージェントが返すことができるガイドを決定します。エージェントは、ここで選択したアプリに属するガイドのみを表示できます。
- [続行(Continue)]を選択します。
- [MCPに接続(Connect MCP)]ステップで、[MCPサーバー(MCP server)]をオンにします。Pendoはこのエージェント用のサービスアカウントを作成します。
- ウィザードに表示される値をコピーします。次の5つがすべて必要です:
- OAuthトークンURL
- クライアントID
- クライアントシークレット
- スコープ
- MCPサーバーURL
-
クライアントシークレットを保存したことを確認します。完了するまで続行できません。
重要:クライアントシークレットを今すぐ安全な場所に保存してください。ウィザードを終了すると、Pendoで再度表示することはできません。紛失した場合は、シークレットをローテーションして新しいものを生成する必要があります。
- [続行(Continue)]を選択します。[Webhookを設定(Set up webhooks)]ステップで、[スキップ(Skip)]を選択します。Webhookはタスクナッジやフラストレーションシグナルを機能させるためのものであり、ガイドには使用されません。
- [確認(Review)]ステップでエージェントの詳細を確認し、MCPが接続されていることを確認したら、[エージェントを追加(Add agent)]を選択します。
Pendoがエージェントを作成し、その概要ページを開きます。後から追加できる機能など、ウィザードの詳細については、「Agent Toolkitでエージェントを設定する」を参照してください。
注:サービスアカウントは1つのAgent Toolkitエージェントにのみリンクできます。再利用したい既存のサービスアカウントがある場合は、まず現在のエージェントからリンクを解除してください。Agent Toolkitを使用することが推奨されますが、[設定(Settings)]>[インテグレーション(Integrations)]>[サービスアカウント(Service accounts)]から手動で作成することもできます。「サービスアカウントを使用してPendo MCPサーバーに認証する」を参照してください。
ステップ2:ガイドをエージェントで利用可能にする
エージェントが返すことができるのは、Agent Toolkitの対象であり、アクティベーションURLが設定されているガイドのみです。これはエージェントの[ガイド(Guides)]タブで設定します。
[Agent Toolkit]に移動し、エージェントを選択して[ガイド]タブを開きます。各行には、ガイドの[適格性(Eligibility)]、[アクティベーションURL(Activation URL)]、[対象セグメント(Target segment)]、[対象ページ(Target Page)]が表示されます。
アクティベーションURLの設定
アクティベーションURLは、ガイドを起動するためにPendoが訪問者を誘導するページです。アクティベーションURLがないガイドは[非アクティブ(Inactive)]のままになり、返されることはありません。
- ガイドを見つけて、そのクイック編集パネルを開きます。
- [アクティベーションURL(Activation URL)]に、ガイドの最初のステップが表示されるURLを入力します。これは最初のステップのページルールと一致している必要があります。
- ガイドが最近起動された場所に基づいてPendoにURLを提案させるには、[アクティベーションURLを提案(Suggest an activation URL)]を選択します。ガイドが十分に起動されていない場合、提案は表示されません。
- 変更を保存します。PendoがURLを検証し、ガイドのステータスを更新します。
アクティベーションURLでの動的属性の使用
URLが訪問者ごとに異なる場合(パスにアカウントIDが含まれている場合など)、リテラル値の代わりに動的属性を挿入します。「@」を[アクティベーションURL(Activation URL)]フィールドに入力し、既存の属性を選択するか、新しい属性を作成します。Pendoはこれを{{attributeName}}として保存します。
クライアントは、ステップ5で説明するattributesパラメーターを介して呼び出し時に値を指定します。アクティベーションURLにクライアントが値を指定していないプレースホルダーが含まれているガイドは結果から除外されるため、使用するすべての属性にクライアントが値を入力できることを確認してください。
ガイドの適格性の確認
[適格性(Eligibility)]列には、ガイドを返すことができるかどうかが表示されます。
| 適格性 | 意味 |
|---|---|
| [すべての訪問者に対してアクティブ(Active for all visitors)] | ガイドにセグメントのターゲット設定がなく、どの訪問者にも返すことができます。 |
| [セグメントに対してアクティブ(Active for segment)] | ガイドはセグメントをターゲットに設定しています。エージェントが訪問者IDを渡し、その訪問者がセグメントに一致する場合にのみ返されます。 |
| 非アクティブ | ガイドは機能する可能性がありますが、何かが不足しているかオフになっています。ステータスの横にある理由を選択して、修正箇所を確認してください。 |
| [サポート対象外(Unsupported)] | このガイドはAgent Toolkitでは一切使用できません。 |
サポートされていないガイドタイプ
一部のガイドタイプはAgent Toolkitで使用できず、適格性には常に[サポート対象外]と表示されます。
- 非公開設定になっているガイド。
- リソースセンターのガイド。
- 複数のアプリケーションに関連するガイド。
- 埋め込みガイド。
- ステップのないガイド。
ステップ3:MCPクライアントの認証
MCPクライアントは、Pendo MCPサーバーを呼び出す前に、ステップ1の認証情報をアクセストークンと交換する必要があります。PendoはOAuth 2.0クライアント認証情報グラントを使用します。
トークンエンドポイント
ステップ1でウィザードから取得したOAuthトークンURLを使用します。これはPendoサブスクリプションがホストされているリージョンと一致し、Pendoへのサインインに使用するホスト名と同じです。
| 地域 | OAuthトークンエンドポイント |
|---|---|
| 米国 | https://app.pendo.io/oauth/v1/token |
| US1 | https://us1.app.pendo.io/oauth/v1/token |
| EU | https://app.eu.pendo.io/oauth/v1/token |
| 日本 | https://app.jpn.pendo.io/oauth/v1/token |
| オーストラリア | https://app.au.pendo.io/oauth/v1/token |
リクエストパラメータ
application/x-www-form-urlencodedとしてエンコードされた以下のパラメーターを本文に含めてPOSTリクエストを送信します。
| パラメータ | 値 |
|---|---|
grant_type |
client_credentials |
client_id |
ステップ1のクライアントID |
client_secret |
ステップ1のクライアントシークレット |
scope |
read:me |
リクエストの例
curl -X POST "https://app.pendo.io/oauth/v1/token" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "grant_type=client_credentials" \ -d "client_id=YOUR_CLIENT_ID" \ -d "client_secret=YOUR_CLIENT_SECRET" \ -d "scope=read:me"
応答の例
{
"access_token": "eyJhbGciOi...",
"token_type": "Bearer",
"expires_in": 3600
}トークンの使用と更新
Pendo MCPサーバーへのすべてのリクエストで、Authorizationヘッダーにアクセストークンを渡します。
Authorization: Bearer {access_token}重要:スキームは大文字と小文字が区別されます。「bearer」ではなく「Bearer」を使用してください。そうしないと、リクエストは未認証として拒否されます。
トークンはexpires_inで示された秒数が経過すると期限切れになり、リフレッシュトークンは発行されません。クライアントは、現在のトークンの有効期限が切れる前に、同じエンドポイントから新しいトークンをリクエストする必要があります。リクエストが失敗するのを待つのではなく、有効期限が切れる前に新しいトークンをリクエストしてください。
ステップ4:MCPエンドポイントへの接続
MCPクライアントの接続先に、ステップ1でウィザードに表示されたMCPサーバーURLを指定します。これはPendoサブスクリプションがホストされているリージョンと一致し、Pendoへのサインインに使用するホスト名と同じです。
| 地域 | MCPサーバーURL |
|---|---|
| 米国 | https://app.pendo.io/mcp/visitor/shttp |
| US1 | https://us1.app.pendo.io/mcp/visitor/shttp |
| EU | https://app.eu.pendo.io/mcp/visitor/shttp |
| 日本 | https://app.jpn.pendo.io/mcp/visitor/shttp |
| オーストラリア | https://app.au.pendo.io/mcp/visitor/shttp |
このエンドポイントはStreamable HTTPトランスポートを使用します。ステップ3のAuthorization: Bearer {access_token}ヘッダーを使用して、このURLにJSON-RPCリクエストを送信してください。
例:MCPセッションを初期化する
curl -X POST "https://app.pendo.io/mcp/visitor/shttp" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {access_token}" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "initialize", "params": {"protocolVersion": "2025-06-18", "capabilities": {}, "clientInfo": {"name": "your-agent-name", "version": "1.0"}}}'成功したレスポンスによりサーバーの機能が返されます。利用可能なツールのリストを取得するには、ハンドシェイクの完了後にtools/listを呼び出します。
サーバーは、プロトコルバージョン2025-11-25、2025-06-18、2025-03-26、2024-11-05を受け付けます。クライアントがリクエストしたバージョンで応答するか、クライアントが認識できないバージョンをリクエストした場合はサポートしている最新のバージョンで応答します。
レスポンスにはMcp-Session-Idヘッダーも含まれます。クライアントがセッションを追跡する場合は後続のリクエストでそれを返し、追跡しない場合はヘッダーを完全に省略します。独自の値を作成しないでください。不正な形式のセッションIDは拒否されます。
注: initialize応答を受信した後、ツールを呼び出す前に、notifications/initialized通知を送信してハンドシェイクを完了してください。
ステップ5. getInAppGuidanceツールの呼び出し
getInAppGuidanceは、エージェントがガイドを見つけるために呼び出すツールです。訪問者の質問を受け取り、ガイドライブラリをその訪問者が閲覧できるものに絞り込んで、最も一致する結果を1件返します。
パラメータ
| パラメータ | 必須である | 説明 |
|---|---|---|
クエリ |
可 | ガイドと照合する質問。訪問者の正確な発言、または意図を伝えるために会話の前半からコンテキストを追加して言い換えた内容を指定できます。 |
訪問者ID |
いいえ | 訪問者のPendo訪問者ID。これは、Pendo Web SDKを通じて設定した訪問者IDと同じものです。訪問者IDとガイドの適格性を確認してください。 |
ホスト名 |
いいえ | 返されたアクティベーションURLのホストを置き換えます。これは、地域ごとに1つなど、アプリが複数のホスト名で提供されている場合に使用します。 |
属性 |
いいえ | アクティベーションURL内の{{attributeName}}プレースホルダーを埋めるために使用される、属性名と文字列値のマップ。一致する属性がないプレースホルダーを含むガイドは、結果から除外されます。 |
重要:hostnameとattributesは、エージェントではなくクライアントコードで設定する必要があります。モデルに公開したり、システムプロンプトに記述しないでください。
コール内でサブスクリプションを特定する必要はありません。Pendoは、クライアントが認証に使用した認証情報からこれを特定します。
訪問者IDとガイドの適格性
visitorIdとして渡す値によって、どのガイドが対象となるかが決まります:
- 省略済み。セグメントのターゲット設定がないガイドのみが返されます。エージェントが訪問者を確実に識別できない場合に使用します。
- 提供済み。Pendoはセグメントルールとガイドのターゲティングに基づいて訪問者を評価し、セグメントをターゲットにしたガイドを含め、その訪問者が閲覧可能なガイドを返します。
リクエストの例
curl -X POST "https://app.pendo.io/mcp/visitor/shttp" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {access_token}" \
-d '{"jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": {"name": "getInAppGuidance", "arguments": {"query": "How do I set up single sign-on?", "visitorId": "visitor-1234"}}}'応答の例
このツールは1つのテキストコンテンツブロックを返します。そのテキストは、1つのガイドを説明するJSONオブジェクトです:
{
"Id": "kD3nR7xQ_a1B2c",
"Type": "Guide",
"Name": "Set up single sign-on",
"Description": "Walks an admin through configuring SAML SSO.",
"activationUrl": "https://app.example.com/settings/security?pendo=RMz6L_ZaNHIlvzSZ4HHwO4wbGLk&step=oZNPUs6q_zOiwyJSzOeWJ7x6Poo&pendosource=atk",
"GuideContent": "Go to Settings, then select Security..."
}一致するガイドがない場合、ツールはJSONオブジェクトの代わりにこのテキストを返します:
検索クエリに関連するアプリ内ガイドは見つかりませんでした。
ステップ 6. エージェントの指示を更新する
MCPサーバーはtools/listを通じてツールの名前、説明、パラメーターを公開するため、ご自身でツールの説明を記述する必要はありません。エージェントのシステムプロンプトに以下を追加します:
-
ツールを呼び出すタイミング。「…はどうすればよいですか」、「…を手伝ってください」、およびタスクを完了するための同様のヘルプリクエストは、
getInAppGuidanceを呼び出す合図として扱ってください。 - クエリとして渡す内容。訪問者の質問。そのまま、またはそれまでの会話の文脈を含めて言い換えたもののいずれか。
-
結果の表示方法。チャットインターフェースでサポートされている形式を使用して、ガイド名をラベルにしたクリック可能なリンクとして
activationUrlを表示します。たとえば、Markdownでは[ガイド名](activationUrl)、HTMLでは<a href="activationUrl">ガイド名</a>です。 - 一致するガイドがない場合の対処方法。通常どおり質問に回答してください。訪問者に「該当するアプリ内ガイドが見つかりませんでした」のテキストを表示しないでください。