本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
WorkSpaces 应用程序 MCP 服务器
WorkSpaces 应用程序 MCP 服务器是一项完全托管的服务,为 AI 代理提供模型上下文协议 (MCP) 工具,以便在流式传输会话期间与桌面应用程序进行交互。代理可以单击按钮、输入文本、滚动和截取桌面的屏幕截图。
概述
当您在堆栈上启用代理访问权限时,代理可以连接到托管的 MCP 服务器以与桌面应用程序进行交互。MCP 服务器处理您的代理和流式传输会话之间的通信。您的代理发送 MCP 工具请求,服务器在桌面上执行这些请求。
MCP 服务器托管在 AWS 云中。您无需安装或维护任何服务器组件。服务器使用 Streamable HTTP 作为其传输协议。
代理访问支持未加入域和加入域的队列。连接方法因舰队类型而异。 Non-domain-joined 队列使用流媒体网址对会话进行身份验证,而加入域的队列则通过 SAML 联盟进行身份验证。有关与您的舰队相匹配的路径,请参阅连接到 MCP 服务器。
连接到 MCP 服务器
代理通过以下端点连接到 MCP 服务器:
https://agentaccess-mcp.region.api.aws/mcp
MCP 服务器托管在 AWS 云中,使用可流式 HTTP 作为其传输协议。您无需安装或维护任何服务器组件。
每个请求都必须 SigV4-signed 使用带有服务名称的 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更多信息,请参阅 m cp-proxy-for-
如何对直播会话进行身份验证取决于您的队列类型:
-
Non-domain-joined 舰队 -将直播网址作为标题传递。请参阅与未加入域的舰队连接。
-
Domain-joined 舰队 -将签名的 SAML 断言作为元数据传递。请参阅与加入域的舰队连接。
注意
在任何给定时间,只有一个代理可以连接到一个独特的会话。通过UserId参数指定的指定用户,每个队列一次只能有一个活跃会话。要同时运行多个代理,每个代理必须连接到自己的唯一会话。
与未加入域的舰队连接
对于未加入域名的队列,使用 CreateStreamingURL API 生成直播网址,并将其作为每个请求的标头传递。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 的更多信息,请参阅亚马逊 WorkSpaces 应用程序 2.0 API 参考中的CreateStreaming网址。
与加入域的舰队连接
当代理访问加入域的流式传输实例时,必须通过 SAML 提供商联合连接。此要求适用于传统会话和代理会话。对于代理会话,Certificate-Based 身份验证为必填项。
由于加入域的流式传输实例需要通过 SAML 进行访问,因此您的 MCP 客户端必须提供签名的 SAML 断言而不是串流 URL。编码的 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。
有关使用应用程序设置 SAML 联合的更多信息,请参阅《亚马逊 WorkSpaces WorkSpaces 应用程序管理指南》中的设置 SAML。有关更多信息和完整的工作示例,请参阅上示例中的工作空间代理访问存储库的示例代码
连接模式
通过在 MCP 请求上设置X-Amzn-AgentAccess-Connect-Mode标题,您可以控制代理如何等待桌面会话变为可用。
注意
连接模式适用于未加入域和加入域的队列。将X-Amzn-AgentAccess-Connect-Mode标头设置为您的队列类型使用的任何身份验证机制(未加入域的队列的流媒体网址标头或加入域的队列的 SAML 断言元数据)。
可用模式如下:
-
阻止(默认)— MCP 服务器等待桌面连接完全建立后再响应。
tools/list退货后,所有工具立即可用。 -
轮询 — MCP 服务器无需等待桌面连接即可立即响应。最初,只有该
connection_status工具可用。您的代理会轮询此工具,直到建立连接,此时完整的工具集才可用。
当您希望代理在等待桌面连接的同时执行其他工作时,或者需要对连接超时行为进行更多控制时,请使用轮询模式。
以下示例显示如何使用轮询模式:
# 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 应用程序流式传输会话过期。会话到期会终止底层流媒体实例并触发队列配置的自动缩放策略。有关更多信息,请参阅 适用于亚马逊 WorkSpaces 应用程序的 Fleet Auto Scaling。 -
false(默认)— 直播会话继续运行,直到达到断开连接超时为止。有关断开连接超时的更多信息,请参阅在亚马逊 WorkSpaces 应用程序中创建队列。
注意
默认情况下,当您正确结束客户端生命周期时,mcp-proxy-for-awsMCP 客户端会自动处理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、DownLeft、或Right),scroll_amount(必填-以刻度为单位,其中 120 个刻度等于一个轮槽口),modifiers(可选)。
键盘工具
type_text-
通过模拟每个字符的键盘事件来键入文本。
参数:
text(必填 — 最多 10,000 个字符)。 key-
按下按键或组合键。
参数:
keys(必需 — 由例如+actrl+c、或ctrl+shift+s)连接的单个密钥或组合。 hold_key-
按住按键或按键组合指定持续时间。
参数:
keys(必填),duration(必填 — 1 到 30 秒)。
屏幕工具
screenshot-
截取桌面的屏幕截图。返回的图像尺寸定义了所有鼠标工具的坐标空间。
参数:
include_cursor(可选-默认为false)。
MCP 工具转发
MCP 工具转发允许代理通过直接 MCP 调用而不是使用计算机使用工具与应用程序和桌面操作系统进行交互。当您启用工具转发时,MCP 服务器会将 WorkSpaces 应用程序会话中配置的工具转发到您的代理。
设置工具转发
要设置 MCP 工具转发,请执行以下操作:
-
启用工具转发 -通过 API 或控制台设置开启
FORWARD_MCP_TOOLS代理操作。 -
验证 MCP 服务器配置文件是否存在 -该服务在以下路径中查找配置文件:
C:\ProgramData\NICE\dcv\mcp_server_redirection_config.json -
在 WorkSpace映像上配置 MCP 服务器 — 配置文件为 JSON,带有单个顶级
mcpServers对象。每个密钥都是您为服务器选择的唯一名称。每个值都指定如何启动该服务器。{ "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" } } }字段 必填 Type Description command是 字符串 要启动的可执行文件的绝对路径。 args否 字符串数组 传递给可执行文件的参数。 -
验证工具可用性 -如果存在配置文件,则服务将连接到文件中配置的 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-style 路径无效。Windows 接受绝对路径的正斜杠,这样就无需将每个分隔符转义为。\\ -
Tool-call 超时。每个转发的工具调用必须在 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-compatible 代理框架连接到 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 应用程序访问权限。