View a markdown version of this page

WorkSpaces アプリケーション MCP サーバー - Amazon WorkSpaces Applications

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

WorkSpaces アプリケーション MCP サーバー

WorkSpaces アプリケーション MCP サーバーは、ストリーミングセッション中にデスクトップアプリケーションとやり取りするためのモデルコンテキストプロトコル (MCP) ツールを AI エージェントに提供するフルマネージドサービスです。エージェントは、ボタンのクリック、テキストの入力、スクロール、デスクトップのスクリーンショットの撮影を行うことができます。

概要

スタックでエージェントアクセスを有効にすると、エージェントはマネージド MCP サーバーに接続してデスクトップアプリケーションとやり取りできます。MCP サーバーは、エージェントとストリーミングセッション間の通信を処理します。エージェントは MCP ツールリクエストを送信し、サーバーはそれらをデスクトップで実行します。

エージェントアクセスはnon-domain-joinedフリートとドメインに参加していないフリートの両方をサポートします。接続方法はフリートタイプによって異なります。non-domain-joinedフリートの場合、2 つの方法のいずれかで接続できます。最初に、スタックとユーザー ID を x-amzn-agentaccess-workspaces-applications-stackと の 2 つのヘッダーとして指定しますx-amzn-agentaccess-workspaces-applications-user-id。次に、MCP サーバーがストリーミングセッションを作成します。2 番目には、自分でストリーミング URL を生成し、ヘッダーとして渡します。ドメインに参加しているフリートの場合は、SAML フェデレーションを使用して認証します。フリートに一致するパスについては、「」を参照してくださいMCP サーバーへの接続。

MCP サーバーへの接続

エージェントは、次のエンドポイントで MCP サーバーに接続します。

https://agentaccess-mcp.region.api.aws/mcp

region を、リージョンコードに置き換えます。サポートされているリージョンとそのエンドポイントについては、「」を参照してくださいWorkSpaces アプリケーション MCP エンドポイント。

MCP サーバーは AWS クラウドでホストされ、Streamable HTTP をトランスポートプロトコルとして使用します。サーバーコンポーネントをインストールまたは保守する必要はありません。

注記

エージェントが接続する前に、スタックに関連付けられたフリートが実行されていて、使用可能な容量を持っている必要があります。

エージェントを接続するには、エージェントがリクエストを承認する方法とストリーミングセッションを識別する方法の 2 つの選択を行います。

承認を要求する

SigV4 署名または AWS サインインによる OAuth 2.1 認可の 2 つの方法のいずれかでリクエストを承認できます。

SigV4 署名

SigV4 を使用するには、サービス名 の IAM 認証情報を使用して各リクエストに署名しますagentaccess-mcp。次の Python の例は、 を使用した一般的な接続パターンを示していますmcp-proxy-for-aws。

from mcp_proxy_for_aws import aws_iam_streamablehttp_client async with aws_iam_streamablehttp_client( endpoint="https://agentaccess-mcp.region.api.aws/mcp", aws_service="agentaccess-mcp", aws_region="region", headers={ # Fleet-type-specific headers (see the following subsections) }, metadata={ # Fleet-type-specific metadata (see the following subsections) }, ) as (read, write, _): # Use read/write streams with your MCP client ...

他の言語の場合は、送信 MCP リクエスト用に独自の SigV4 署名ロジックを記述するか、SigV4 署名をサポートするライブラリを使用します。の詳細についてはmcp-proxy-for-aws、GitHub のmcp-proxy-for-aws」を参照してください。

OAuth 2.1 認可

IAM 認証情報を使用してリクエストに署名する代わりに、MCP サーバーは MCP AWS サーバーと同じ方法で、 AWS サインインによる OAuth 2.1 認可をサポートします。 AWS サインインは認可サーバーとして機能します。短期間のスコープ付きアクセストークンを発行します。MCP サーバーは、これらのトークンをベアラートークンとして受け入れます。OAuth は、既存の IAM ID、アクセス許可、および組織コントロールを使用します。エージェントを承認すると、ユーザーに代わって MCP サーバーにアクセスできます。追加のアクセス許可は取得されません。 AWS は、すべてのリクエストを IAM ポリシーと照合します。

Kiro、Claude Code、Cursor、Codex、Gemini などの OAuth 互換 MCP クライアントは、ローカルプロキシソフトウェアを使用せずに MCP サーバーエンドポイントに直接接続できます。 AWS Sign-In は 2 つの認可モデルをサポートしています。

  • インタラクティブ認可 — ブラウザを開くことができるエージェント向け。クライアントは動的クライアント登録を通じて登録し、 AWS サインインページにリダイレクトしてアクセスを認証および承認し、 AWS サインインはアクセストークンを発行および更新します。

  • 非インタラクティブ認可 — AWS 認証情報がすでにあり、ブラウザなしで実行されるエージェント (ヘッドレス認可と呼ばれることもあります)。エージェントは OAuth クライアント認証情報付与を使用して、SigV4-signed認証情報を有効期間の短いアクセストークンと交換します。

MCP サーバーの OAuth 認可は、MCP サーバーエンドポイント () を使用して、 AWS MCP サーバーの場合と同じように機能しますhttps://agentaccess-mcp.region.api.aws/mcp。セットアップ、必要な IAM アクセス許可、ガバナンスとモニタリングのオプションについては、OAuth 用エージェントツールキットユーザーガイド」の「AWS MCP サーバーの OAuth 2.1 認証」および「サインインユーザーガイド」のOAuth 2.0 でAWS サインイン」を参照してください。

セッション識別

ストリーミングセッションの識別方法は、フリートタイプによって異なります。

注記

どの時点でも、一意のセッションに接続できるエージェントは 1 つだけです。UserId パラメータで指定された名前付きユーザーは、フリートごとに一度に 1 つのアクティブなセッションのみを持つことができます。複数のエージェントを同時に実行するには、各エージェントが独自のセッションに接続する必要があります。

non-domain-joinedフリートとの接続

non-domain-joinedフリートの場合、2 つの方法のいずれかで接続できます。スタックとユーザー ID をヘッダーとして指定すると、MCP サーバーがストリーミングセッションを作成します。これは、静的に設定する MCP クライアントに適しています。このようなクライアントは固定ヘッダーペアを保持できますが、ストリーミング URL を生成したり、有効期限が切れたときに置き換えたりできないためです。または、ストリーミング URL を自分で生成し、ヘッダーとして渡します。このアプローチは、有効期間の設定など、セッションの作成を制御する必要がある場合に使用します。

スタックとユーザー ID を使用して接続するには、すべてのリクエストで次のヘッダーを渡します。

  • x-amzn-agentaccess-workspaces-applications-stack — スタック名または ARN。

  • x-amzn-agentaccess-workspaces-applications-user-id — セッションのユーザー ID。

注記

x-amzn-agentaccess-workspaces-applications-user-id ヘッダーはオプションです。これを省略すると、MCP サーバーは認証されたセッションからユーザー ID を取得します。存在する場合は を使用し、それ以外の場合は呼び出し元の IAM プリンシパルを使用します AWS SourceIdentity。 は、IAM ロールを引き受けるときにユーザーの元の企業 ID SourceIdentityを保持します。これは、ロールが外部 ID プロバイダー (IdP) を介して連鎖されている場合でも保持されます。

from mcp_proxy_for_aws import aws_iam_streamablehttp_client # Connect to the MCP server with the stack and user ID async with aws_iam_streamablehttp_client( endpoint="https://agentaccess-mcp.region.api.aws/mcp", aws_service="agentaccess-mcp", aws_region="region", headers={ "x-amzn-agentaccess-workspaces-applications-stack": "stack-name-or-arn", "x-amzn-agentaccess-workspaces-applications-user-id": "user-id", }, ) as (read, write, _): ...

代わりにストリーミング URL で接続するには、 CreateStreamingURL API を使用してストリーミング URL を生成し、すべてのリクエストでx-amzn-agentaccess-streaming-session-urlヘッダーとして渡します。エージェント固有のパラメータは必要ありません。エージェントの動作は、スタックのエージェントアクセス設定によって決まります。

import boto3 from mcp_proxy_for_aws import aws_iam_streamablehttp_client # Generate streaming URL appstream = boto3.client("appstream", region_name="region") response = appstream.create_streaming_url( StackName="stack-name", FleetName="fleet-name", UserId="user-id", ) streaming_url = response["StreamingURL"] # Connect to MCP server async with aws_iam_streamablehttp_client( endpoint="https://agentaccess-mcp.region.api.aws/mcp", aws_service="agentaccess-mcp", aws_region="region", headers={ "x-amzn-agentaccess-streaming-session-url": streaming_url, }, ) as (read, write, _): ...

CreateStreamingURL API の詳細については、Amazon WorkSpaces Applications 2.0 API Reference」の「CreateStreamingURL」を参照してください。

ドメインに参加しているフリートとの接続

エージェントがドメインに参加しているストリーミングインスタンスにアクセスする場合、接続は SAML プロバイダーを介してフェデレーションされる必要があります。この要件は、従来のセッションとエージェントセッションの両方に適用されます。エージェントセッションの場合は、 証明書ベースの認証 が必要です。

ドメイン結合ストリーミングインスタンスは SAML 経由でアクセスする必要があるため、MCP クライアントはストリーミング URL の代わりに署名付き SAML アサーションを提供する必要があります。エンコードされた SAML アサーションが HTTP ヘッダーのサイズ制限を超えています。これを回避するには、 の metadataフィールドを使用しますmcp-proxy-for-aws。

from mcp_proxy_for_aws import aws_iam_streamablehttp_client # saml_response: your signed, base64-encoded SAML assertion # stack_arn: the ARN of the AppStream stack for the AD user async with aws_iam_streamablehttp_client( endpoint="https://agentaccess-mcp.region.api.aws/mcp", aws_service="agentaccess-mcp", aws_region="region", metadata={ "saml_response": saml_response, "stack_arn": stack_arn, }, ) as (read, write, _): ...
注記

metadata パラメータがmcp-proxy-for-awsバージョン 1.6.1 で追加されました。以前のバージョンでは、追加の開発なしで _metaフィールドを挿入することはできません。アップグレードするには、 を実行しますpip install -U mcp-proxy-for-aws。

WorkSpaces アプリケーションを使用した SAML フェデレーションの設定の詳細については、「Amazon WorkSpaces アプリケーション管理ガイド」の「SAML の設定」を参照してください。 Amazon WorkSpaces 詳細と完全な実例については、 AWS GitHub の Samples の sample-code-for-workspaces-agent-access リポジトリを参照してください。

接続モード

MCP リクエストで x-amzn-agentaccess-connect-modeヘッダーを設定することで、エージェントがデスクトップセッションが利用可能になるまでの待機方法を制御できます。

注記

接続モードは、non-domain-joinedフリートとドメイン結合フリートの両方に適用されます。フリートタイプが使用する認証メカニズムと一緒に x-amzn-agentaccess-connect-mode ヘッダーを設定します。non-domain-joinedフリートの場合、スタックとユーザー ID ヘッダーまたは streaming-URL ヘッダーのいずれかです。ドメインに参加しているフリートの場合、これは SAML アサーションメタデータです。

次の方法を使用できます。

  • BLOCKING (デフォルト) — MCP サーバーは、応答する前にデスクトップ接続が完全に確立されるまで待機します。が tools/listを返すと、すべてのツールがすぐに使用できます。

  • POLLING — MCP サーバーはデスクトップ接続を待たずにすぐに応答します。最初は、 connection_status ツールのみを使用できます。エージェントは、接続が確立されるまでこのツールをポーリングし、その時点で完全なツールセットが利用可能になります。

デスクトップ接続を待っている間にエージェントが他の作業を実行できるようにする場合、または接続タイムアウト動作をより詳細に制御する必要がある場合は、POLLING モードを使用します。

次の例は、ポーリングモードを使用する方法を示しています。

# Pass the header when creating the MCP connection headers = { "x-amzn-agentaccess-streaming-session-url": streaming_url, # non-domain-joined fleets "x-amzn-agentaccess-connect-mode": "POLLING", } # After initialize, tools/list returns immediately with connection_status tools = await session.list_tools() # tools = [connection_status] # Poll connection_status until the desktop is ready while True: result = await session.call_tool("connection_status", {}) status = json.loads(result.content[0].text) if status["state"] == "CONNECTED": break time.sleep(2) # Now tools/list returns the full set (screenshot, left_click, type_text, etc.) tools = await session.list_tools()

セッションのクリーンアップ

MCP リクエストで x-amzn-agentaccess-expire-streaming-session-on-deleteヘッダーを設定することで、エージェントが接続を終了したときにストリーミングセッションの有効期限が切れるかどうかを制御できます。次の値を使用できます。

  • true — エージェントが明示的な HTTP DELETEリクエストを送信すると、MCP サーバーはクリーンアップの一環として WorkSpaces アプリケーションストリーミングセッションを期限切れにします。セッションの有効期限が切れると、基盤となるストリーミングインスタンスが終了し、フリートの設定済み自動スケーリングポリシーがトリガーされます。詳細については、「Amazon WorkSpaces アプリケーションのフリートAuto Scaling」を参照してください。

  • false (デフォルト) — ストリーミングセッションは、切断タイムアウトに達するまで実行され続けます。切断タイムアウトの詳細については、「」を参照してくださいAmazon WorkSpaces アプリケーションでフリートを作成する。

注記

デフォルトでは、クライアントライフサイクルを適切に終了するとmcp-proxy-for-aws、MCP クライアントは自動的にDELETEリクエストを処理します。

使用可能なツール

MCP サーバーには以下のツールが用意されています。エージェントはそれらを使用して、ストリーミングセッション中にデスクトップとやり取りします。すべてのツール名は agentaccess___ プレフィックスを使用します。

マウスツール

left_click

指定された座標で左クリックを実行します。

パラメータ: x (必須)y、 (必須)、 modifiers (オプション、例: ctrlまたは ctrl+shift)。

double_click

指定された座標でダブルクリックを実行します。

パラメータ: x (必須)、 y (必須)、 modifiers (オプション)。

triple_click

指定された座標でトリプルクリックを実行します。

パラメータ: x (必須)、 y (必須)、 modifiers (オプション)。

right_click

指定された座標で右クリックを実行します。

パラメータ: x (必須)、 y (必須)、 modifiers (オプション)。

middle_click

指定された座標でミドルクリックを実行します。

パラメータ: x (必須)、 y (必須)、 modifiers (オプション)。

left_click_drag

開始座標から終了座標への左クリックドラッグを実行します。

パラメータ: start_x (必須)start_y、 (必須)、 end_x (必須)、 end_y (必須)。

left_mouse_down

指定された座標で左マウスボタンを長押しします。

パラメータ: x (必須)、 y (必須)、 modifiers (オプション)。

left_mouse_up

指定された座標で左マウスボタンを離します。

パラメータ: x (必須)、 y (必須)、 modifiers (オプション)。

move_pointer

ポインタを指定された座標に移動します。

パラメータ: x (必須)、 y (必須)。

scroll

指定された座標でマウスホイールをスクロールします。

パラメータ: x (必須)y、 (必須 — scroll_direction Up、Down、、または Right)Left、 scroll_amount (必須 — ティック単位、120 ティックは 1 ホイールノッチ)、 modifiers (オプション)。

キーボードツール

type_text

文字ごとにキーボードイベントをシミュレートしてテキストを入力します。

パラメータ: text (必須 — 最大 10,000 文字)。

key

キーまたはキーの組み合わせを押します。

パラメータ: keys (必須 — 、actrl+c、 など+、 によって結合された単一のキーまたは組み合わせctrl+shift+s)。

hold_key

指定された期間、キーまたはキーの組み合わせを保持します。

パラメータ: keys (必須)、 duration (必須 — 1~30 秒)。

画面ツール

screenshot

デスクトップのスクリーンショットをキャプチャします。返される画像ディメンションは、すべてのマウスツールの座標空間を定義します。

パラメータ: include_cursor (オプション — デフォルトは false)。

アプリケーションツール

注記

これらのアプリケーションツールは、アプリケーションがフリートイメージのカタログに登録されている場合にのみ、エージェントのツールリストに表示されます。イメージに登録されたアプリケーションがない場合、これらのツールは利用できません。

launch_application

フリートイメージのカタログにあるアプリケーションからアプリケーションを起動します。

パラメータ: id (必須) — アプリケーション識別子。

ツール独自の説明には、使用可能なアプリケーションの識別子が一覧表示されます。MCP サーバーは、フリートイメージのカタログ (、、 などnotepad++eclipse) firefoxからこの説明を入力します。リストされている識別子のいずれかを使用します。カタログにない idは、 isError: trueとともに を返しますSERVER_ERROR: Invalid input。IDsはイメージの構築時に設定されます。アプリケーション名から ID を調べることはできません。

アプリケーションを起動しても、既に実行されているものは置き換えられません。以前に起動したアプリケーションは開いたままです。そのため、アプリスイッチャーは存在します。

toggle_app_switcher

アプリケーションスイッチャーオーバーレイを開閉します。

パラメータ: none。

このツールはオーバーレイのみを切り替えます。特定のアプリケーションをフォアグラウンドに移動するには、スクリーンショットから読み取られた座標を使用して、サムネイルleft_clickの をフォローアップします。現在フォアグラウンドにあるアプリケーションを報告するツールがないため、知る必要があるエージェントはスクリーンショットをキャプチャして表示する必要があります。

注記

アプリスイッチャーは、フリートのストリームビューがアプリケーションに設定されている場合にのみ使用できます。アプリケーションには、ユーザーが開いているアプリケーションのウィンドウのみが表示されます。WorkSpaces Applications はオペレーティングシステムの標準デスクトップとタスクバーを提供するため、ストリームビューが Desktop に設定されている場合は使用できません。

セッションツール

注記

エージェントの動作を監視するには、ブラウザでストリーミング URL を開くようにエージェントをコーディングします。URL はセッションアクセスを許可するため、モデルのコンテキストから遠ざけてください。URL は、次の 2 つの方法のいずれかで作成できます。

  • stack、、fleetおよび userIdの値を使用して CreateStreamingURL API を呼び出しget_session_info、ブラウザで返された URL を開きます。

  • get_session_info レスポンスの _metaフィールドからstreaming_url値を読み取り、ブラウザで開きます。

どちらの場合も、エージェント独自のコードが URL を処理するため、セッション認証情報がモデルに公開されることはありません。

get_session_info

現在のセッションに関する情報を返します。

パラメータ: none。

ツールの結果として、、mcpSessionId、stack、userIdworkSpacesSessionId、および の識別子フィールドを返しますfleet。

MCP ツールの転送

MCP ツール転送を使用すると、エージェントはアプリケーションとオペレーティングシステムを直接操作できます。コンピュータ使用ツールを使用する代わりに、直接 MCP 呼び出しを行います。ツール転送を有効にすると、MCP サーバーは WorkSpaces アプリケーションセッションで設定されたツールをエージェントに送信します。

ツール転送の設定

MCP ツールの転送を設定するには:

  1. ツール転送を有効にする — API またはコンソール設定を使用してFORWARD_MCP_TOOLSエージェントアクションを有効にします。

  2. MCP サーバー設定ファイルが存在することを確認する — サービスは、次のパスで設定ファイルを検索します。

    C:\ProgramData\NICE\dcv\mcp_server_redirection_config.json
  3. WorkSpace イメージで MCP サーバーを設定する — 設定ファイルは JSON で、最上位mcpServersオブジェクトが 1 つあります。各キーは、サーバー用に選択する一意の名前です。各値は、そのサーバーを起動する方法を指定します。

    { "mcpServers": { "filesystem": { "command": "C:/path/to/python.exe", "args": ["C:/mcpServerPath/filesystem.py", "C:/UserName/Documents"] }, "weather": { "command": "C:/Program Files/my-mcp/weather.exe" } } }
    フィールド 必要 型 [Description] (説明)
    command はい String 起動する実行可能ファイルへの絶対パス。
    args いいえ 文字列の配列 実行可能ファイルに渡される引数。
  4. ツールの可用性の検証 — ファイルが存在する場合、サービスはファイルに記載されている MCP サーバーに接続し、ツールを転送します。転送されたツールは、エージェントが使用可能なツールを一覧表示したときに表示されます。

  5. 設定をテストする — ツールの転送が機能することを確認するには、 mcpforwardingtesterスクリプトを実行します。これは、GitHub の sample-code-for-workspaces-agent-access リポジトリにあります。このスクリプトは、WorkSpace で MCP 設定をテストします。準備ができているツールが報告され、問題があればフラグが付けられます。

注記

ツール転送が機能するには、IAM アクセスとサービス設定の両方を有効にする必要があります。IAM アクセス許可は、サービス設定を上書きしません。

MCP ツールの転送に関する考慮事項

MCP ツール転送を設定するときは、次の考慮事項に注意してください。

  • トランスポートは標準 I/O (stdio) のみです。各エントリは、標準入出力で MCP を話すプロセスを起動する必要があります。リモート HTTP または SSE MCP エンドポイントはサポートされていません。リモートエンドポイントを使用するには、ローカル stdio サーバーにラップします。

  • commandと のみがサポートargsされています。環境変数や作業ディレクトリのフィールドはありません。各サーバーはストリーミングセッションの環境を継承し、セッションユーザーとして実行されます。パス引数には commandと の絶対パスを使用します。

  • パスでスラッシュを使用します (例: C:/Program Files/my-mcp/server.exe)。JSON はバックスラッシュをエスケープ文字として扱うため、単一のバックスラッシュで記述された Windows スタイルのパスは無効です。Windows は絶対パスのスラッシュを受け入れるため、すべての区切り文字を としてエスケープする必要がなくなります\\。

  • ツールコールのタイムアウト。転送された各ツール呼び出しは 5 秒以内に完了する必要があります。MCP サーバーは、時間がかかる呼び出しをキャンセルし、エージェントにエラーを返します。迅速に返すように転送されたツールを設計します。

転送されたツールがエージェントに表示される方法

サーバー間の衝突を防ぐために、MCP サーバーは次のパターンを使用してエージェントのツールリスト内の転送された各ツールの名前を変更します。

forwarded___server-name___original-tool-name

server-name は、設定ファイルのキーです。たとえば、weatherサーバーのget_forecastツールが として一覧表示されますforwarded___weather___get_forecast。エージェントが転送された名前を呼び出すと、MCP サーバーは所有サーバー上の元のツールにリクエストをルーティングします。ツール名に一致するエージェントコードには、このプレフィックスが必要です。

ツール転送の IAM アクセス許可

転送されたツールを呼び出すための IAM アクションは ですCallForwardedTool。特定のスタックへのアクセスを制限するには、 StackArn条件キーを使用します。

{ "Action": "agentaccess-mcp:*", "Resource": "*", "Condition": { "ArnLike": { "agentaccess-mcp:StackArn": "arn:aws:appstream:region:account-id:stack/stack-name" } } }

互換性のあるフレームワーク

Streamable HTTP および SigV4 署名をサポートする任意の MCP 互換エージェントフレームワークから WorkSpaces アプリケーション MCP サーバーに接続できます。以下のフレームワークがテストされています。

  • Strands Agents SDK — ネイティブ MCP クライアントサポートを提供します。

  • mcp-proxy-for-aws — Python での MCP リクエストの SigV4 署名を処理する軽量トランスポート。

モニタリング

エージェントのアクティビティは、次のサービスを通じてモニタリングできます。

  • AWS CloudTrail — エージェントセッションイベントは CloudTrail に記録されます。エージェントが接続するタイミング、使用するツール、セッションが終了するタイミングを表示できます。ツール呼び出しはデータイベントであり、データイベントをログに記録する証跡を設定する必要があります。詳細については、CloudTrail ユーザーガイド」の「データイベントのログ記録」を参照してください。

  • CloudWatch — エージェントセッションの運用メトリクスは CloudWatch で利用できます。

  • Amazon S3 — スクリーンショットストレージを設定すると、エージェントセッション中にキャプチャされたスクリーンショットは、指定した Amazon S3 バケットで使用できます。スクリーンショットは、次のキー形式で保存されます。

    agentaccess/screenshots/year=YYYY/month=MM/day=DD/session-id/timestamp.png

    パスの UUID は WorkSpaces アプリケーションストリーミングセッション ID です。

はじめに

WorkSpaces アプリケーション MCP サーバーの使用を開始するには、「」を参照してくださいWorkSpaces アプリケーションへのアクセス権をエージェントに付与する。