AWS发布教程:用Bedrock AgentCore部署可交互MCP应用
MCP Apps扩展让MCP服务器能返回交互式HTML组件,AWS演示了如何在AgentCore runtime上托管这类应用,并通过AgentCore Gateway让ChatGPT、Claude等支持该扩展的AI宿主访问。
AI解读:MCP Apps是Model Context Protocol的一个扩展,让AI宿主能渲染MCP服务器返回的交互式HTML组件,而不只是纯文本。AWS这篇教程演示了如何用Amazon Bedrock AgentCore托管并发布这样一个应用,目标是在不同AI宿主之间复用同一套服务器和组件。
对开发者来说,这件事解决的是分发问题:过去要接入ChatGPT或Claude,往往需要为每个宿主单独适配。MCP Apps是宿主无关的开放标准,只要宿主支持这个扩展,同一个MCP服务器就能给出相同体验。AgentCore则承担扩容、会话隔离、健康监控等运维工作,业务逻辑可以留在已有服务里。
目前公开的只是一个示例项目和部署教程,没有生产环境的性能或成本数据。它更适用于已有AI客服或工具集成需求、且希望减少重复适配的团队,普通读者不需要立即行动。
AWS Machine Learning博客发布文章,演示如何构建并部署一个带交互式HTML组件的MCP App,托管在Amazon Bedrock AgentCore上。作者Dantis Stephen在文中说明,随着用户通过ChatGPT、Claude等AI宿主访问数字服务,组织需要一种让服务在多个宿主中以富UI形式可达、又不绑定单一宿主的方式。MCP Apps和Amazon Bedrock AgentCore正是为此设计。
MCP Apps扩展了Model Context Protocol(MCP),在AI宿主内部直接渲染交互式HTML组件。Amazon Bedrock AgentCore是一个用于大规模构建、连接和优化代理的平台,支持任意框架或模型。针对MCP Apps,AgentCore runtime提供安全的无服务器、会话隔离托管环境,原生支持MCP;AgentCore Gateway则通过一个安全端点将其暴露给兼容MCP Apps的宿主。
示例应用名为Unicorn Rentals,用户可在AI宿主中浏览可租独角兽、预订租赁、查看有效预订和归还独角兽。文中称,无论用户是在ChatGPT、Claude还是其他支持的宿主中打开,应用的外观和操作都一致;示例虽以ChatGPT演示,同一服务器也可在Claude或其他支持MCP Apps扩展的宿主中运行。
示例中的四次交互
文章按四个步骤展示应用行为。第一步,用户问“Can you show all unicorns?”,宿主将请求解释为MCP工具调用,渲染出每只独角兽的交互卡片,包含图片、名称、描述、小时费和可用状态,而不是纯文本列表。
第二步,用户说“I would like to book Stardust unicorn”,应用记录预订并立即确认,显示预订ID、日期、小时费和预订的独角兽。
第三步,用户说“Show me my unicorn bookings”,应用返回当前有效租赁、已租时长和迄今产生的费用。文中特别说明,这次响应以文本而非卡片返回,因为并非每个请求都需要富界面。
第四步,用户说“I would like to return my unicorn”,租赁结束,应用按租用时长和小时费率计算总费用并在对话中报告。这些操作都由运行在AgentCore runtime上的单个MCP服务器提供,并由AgentCore Gateway前置。
架构与请求流程
方案中,MCP App部署在Amazon Bedrock AgentCore上,通过MCP暴露业务逻辑和交互式HTML组件。业务逻辑由专门的AWS Lambda函数实现,使用Amazon DynamoDB做持久化。
注册MCP App时,用户提供包括MCP服务器URL在内的应用信息。AI宿主向该URL发起tools/list和resources/list MCP调用。MCP服务器提供list_unicorns、book_unicorn、view_bookings和return_unicorn等工具,以及unicorn-list、booking-confirmation等资源,后者提供每个响应对应的组件HTML。AWS WAF通过IP允许列表和托管规则验证请求,AgentCore Gateway将其路由到AgentCore runtime,Gateway使用自身的AWS Identity and Access Management(IAM)执行角色调用runtime。
用户请求过程分为两个阶段。阶段一为工具调用:用户从AI宿主发出自然语言请求,宿主将其转换为MCP tools/call消息发往AgentCore Gateway端点;AWS WAF先行筛查;Gateway调用托管MCP App的AgentCore runtime;MCP App将业务操作委托给Unicorn Rental Service Lambda;Lambda对DynamoDB执行业务逻辑并返回结果;MCP App将响应包装为MCP格式返回给AI宿主。
阶段二为组件渲染:如果工具关联了资源URI(例如ui://widget/unicorn-list),宿主会发起该阶段;没有关联组件的工具,如view_bookings和return_unicorn,只返回文本内容并完全跳过此阶段。宿主发送MCP resources/read请求,经AgentCore Gateway到达MCP App;MCP App解析资源URI并返回自包含的组件HTML;宿主可能在iframe中的沙箱中渲染HTML,通过MCP Apps生命周期注入工具响应的结构化数据;组件从Amazon CloudFront拉取所需图片,CloudFront以Amazon Simple Storage Service(Amazon S3)为源站。
MCP服务器与部署配置
MCP App是一个基于官方 @modelcontextprotocol/sdk和 @modelcontextprotocol/ext-apps扩展构建的TypeScript应用,后者提供从MCP服务器交付交互式组件的标准方式。它作为Express.js HTTP服务器运行,由AgentCore runtime内部管理。
工具通过registerAppTool注册,提供工具名、工具配置和处理函数。工具配置中的 _meta.ui.resourceUri字段告诉AI宿主为展示该工具响应应渲染哪个组件;tools/call响应中的structuredContent包含数据载荷,AI宿主在渲染组件时注入这些数据。组件则通过registerAppResource注册为MCP资源。
部署时,构建过程将MCP App代码打包为zip文件,部署步骤上传到Amazon S3桶并创建引用它的AgentCore runtime资源。runtime配置指定NODE_22环境、入口点和MCP协议模式。AgentCore runtime根据请求量自动扩缩,MCP协议配置会激活协议特定优化;基于资源的策略限制可调用runtime的主体,本方案中只允许AgentCore Gateway执行角色,拒绝其他主体。
AgentCore runtime支持IAM(SigV4)和OAuth认证调用。方案将AgentCore Gateway放在runtime前,外部AI宿主通过单一托管端点访问MCP服务器。Gateway接受无认证的入站请求,再用自己的IAM执行角色通过SigV4调用runtime,调用方无需处理AWS凭证。AWS WAF通过IP允许列表、托管威胁检测规则和速率限制保护Gateway端点。
业务逻辑层是Unicorn Rentals的Lambda函数,负责对DynamoDB的库存查询和预订操作,它本身不知道MCP。文章指出,实际实现中这部分可以是运行在Amazon ECS、Amazon EKS或其他计算服务上的现有服务;关键在于MCP服务器只是一个薄协议适配层,核心业务逻辑保留在原处,通过HTTP调用或SDK客户端等标准调用模式连接到MCP层。
部署步骤与生产注意事项
文章给出的前置条件包括:拥有部署AgentCore runtime所需权限的AWS账户、Node.js 22+、安装并配置好的AWS CLI V2.0或更高版本、全局安装的AWS CDK CLI。部署通过单个deploy.sh脚本编排构建和CDK栈部署:先执行git clone https://github.com/aws-samples/sample-agentcore-mcp-apps.git并进入目录,再运行bash deploy.sh,记录输出中的GatewayResourceUrl用于连接AI宿主。
连接ChatGPT的步骤是:进入chatgpt.com,选择用户资料、Plugins、Developer Mode并开启开发者模式;在Plugins中选择New Plugin;名称填UnicornRentals,描述填“Browse unicorns, book rentals, view active bookings, and return unicorns. Shows rich UI cards with pricing and booking confirmations”;连接处填入CDK输出中的GatewayResourceUrl;认证选择No Auth;选择创建。连接Claude.ai的步骤是:进入claude.ai,选择Customize,再选择Connectors,选择Add Connector;名称填UnicornRentals,远程MCP服务器URL填GatewayResourceUrl;选择保存。
生产部署需要考虑监控、成本与负责任AI。监控方面可使用Amazon CloudWatch观察AgentCore Gateway请求指标、Unicorn Service Lambda调用和AgentCore runtime容器健康,设置错误率和延迟阈值告警,并开启日志记录MCP方法调用和响应时间。成本方面,AgentCore runtime按容器运行时间和调用次数计费,需合理配置容器内存和CPU、根据预期流量检查Lambda并发设置。负责任AI方面,应在信任边界添加安全控制:在MCP服务器中用严格模式校验工具参数,并在Unicorn Service Lambda中再次校验,避免业务逻辑信任未验证输入;对跨越边界的非结构化文本,可使用Amazon Bedrock Guardrails过滤有害内容、阻止被拒话题,并在响应到达客户端前脱敏个人身份信息等敏感数据。
清理资源时,进入infrastructure/cdk目录并运行npx cdk destroy。文章称,读者可替换Unicorn Rental Service Lambda为自己的业务逻辑并添加新的工具和组件。文中总结该架构为:AgentCore runtime上的薄MCP协议层将业务逻辑委托给专用Lambda函数,并以MCP App资源提供自包含的组件HTML,通过AgentCore Gateway端点暴露,从而以较少运维开销获得可扩展的MCP Apps部署。