← 返回洞察

2026/7/9AI 辅助研究

MCP Apps 的关键变化:工具结果不只回文本,也能回可交互 UI

本文基于 OpenAI Apps SDK、Vercel AI SDK、Microsoft Learn 与相关开源资料,给出一个工作性理解:MCP Apps 的核心不是“给聊天加个前端”,而是把工具调用结果拆成“模型可见的数据层”和“用户可交互的界面层”。这会影响 AI 应用、企业工具、网站与小程序式容器的产品设计方式。

关于这篇研究

本文由 AI 基于公开来源辅助整理,并经过来源、重复度与主题边界检查。请通过文末链接核对原始信息。

本文采用的是基于所列项目与资料的工作性理解,不是行业统一定义。

我们的工作性理解是:MCP Apps 的关键变化,不是“模型会画界面”,而是工具调用开始同时返回两层结果——给模型看的内容,以及给用户直接操作的界面。 这使聊天式 AI 从“文本解释工具结果”走向“在对话中承载一个可运行的小部件”。[1][6]

判断一:MCP Apps 的本质是“工具结果双通道”,不是普通富文本升级

一个直接判断是:MCP Apps 并不只是把 JSON 渲染得更漂亮,而是把工具结果拆成了至少两类面向对象不同的输出。

OpenAI Apps SDK 的参考文档明确写到,工具结果可包含 structuredContentcontent_meta 三类字段;其中 structuredContentcontent 会呈现在会话转录中,而 _meta 只交付给组件,对模型隐藏。[1]

这件事的产品意义很大。

  • structuredContent:更像模型可继续推理、总结、引用的数据层。[1]
  • content:更像用户和模型共享的文本或多模态说明层。[1]
  • _meta:更像只给前端组件使用的运行时状态、补水数据和会话关联信息。[1]

如果沿着这个机制理解,MCP Apps 不是“把前端塞进聊天框”,而是让一次工具调用同时产出:

面向对象典型用途
structuredContent模型 + 组件结构化结果、后续推理输入
content模型 + 组件用户可读说明、摘要、提示
_meta组件UI 状态、隐藏字段、组件补水数据

对产品研发的启发是:今后设计工具接口时,不应只问“返回什么 JSON”,还要问“哪些字段给模型,哪些字段只给 UI”。

我们的建议是,在设计 MCP 工具时先做一次“结果分层”:

  1. 哪些数据必须进入模型上下文;
  2. 哪些数据只用于界面渲染;
  3. 哪些数据需要支持组件后续交互。

这样做有助于减少模型上下文噪声,也让 UI 具备更明确的状态边界。[1]

判断二:可交互 UI 的价值,不在展示,而在“工具可被再次调用”

如果 UI 只能展示,那它仍然更接近结果卡片;真正的分水岭是界面本身可以再次触发工具调用

Microsoft Learn 在介绍生成 MCP 应用小部件时明确提到:如果在调用生成技能时提供工具名称,生成的控件可集成交互式工具调用能力;例如刷新按钮可以再次调用该工具。文档还指出,这类控件会连接 app.callServerTool 事件,用户点击刷新后,控件会直接从工具获取更新数据;如果不提供工具名称,小部件则是只读的,仅渲染 ontoolresult 回调传来的数据。[2]

这意味着,MCP Apps 把工具的交互周期从:

用户提问 -> 模型调工具 -> 返回文本/JSON -> 对话结束

推进到:

用户提问 -> 模型调工具 -> UI 呈现 -> 用户在 UI 中操作 -> 工具再次被调用 -> UI 局部刷新

这更接近“小程序式工具体验”或“嵌入式工作台体验”。

对 AI 应用来说,这种能力特别适合以下类型的任务:

  • 列表刷新与筛选;
  • 图表切换、提示信息展开;
  • 地图缩放、区域查看;
  • 仪表板局部重载;
  • 在聊天内做轻量级多步操作。

这里要注意一个很实际的限制:Microsoft 文档特别提醒,生成小部件需要工具中的实际 JSON 数据而不是示例或模拟数据,因为数据结构会决定小部件的生成方式;如果粘贴模拟数据,连接真实工具后可能无法正常工作。[2]

这给产品团队一个很明确的执行建议:先稳定工具输出结构,再讨论自动生成 UI。 如果 JSON 结构频繁变化,交互式组件会非常脆弱。

判断三:MCP Apps 更像“服务器提供界面资源”,而不是业务方手写每个宿主适配层

Vercel AI SDK 对 MCP Apps 的概述很直接:MCP Apps 扩展了 MCP 工具,让工具可以指向一个包含 HTML 的 ui:// 资源,然后由应用在沙箱 iframe 中渲染。[6]

CopilotKit 文档也给出了类似判断:MCP Apps 是那些暴露带有关联 UI 资源的工具的 MCP 服务器;当代理调用工具时,宿主会自动获取并渲染 UI 组件,而且强调“无需额外前端代码”。[5]

如果把这两份资料放在一起看,可以得到一个务实判断:MCP Apps 正在把“界面交付”从宿主应用内建页面,转向工具服务端随结果分发的资源。

这会带来三个产品层面的变化:

  1. 工具拥有自己的最小展示权
    不再完全依赖宿主为每个工具单独开发页面。

  2. 跨宿主复用的可能性上升
    同一工具 UI 理论上可在多个兼容宿主中被渲染。Microsoft 文档就将兼容宿主举例为 Microsoft 365 Copilot、Claude 和 Visual Studio Code。[2]

  3. 前端工作从“大页面开发”转向“工具内嵌组件开发”
    研发对象更像卡片、面板、地图、图表,而不是完整站点。

从研发组织角度看,这更适合把 UI 与工具能力一起封装成产品单元。对中后台、知识工具、客服辅助、运营分析类场景尤其有吸引力,因为这类场景常常不需要完整导航体系,反而更需要“在对话中完成一个动作”。

判断四:安全与隔离不是附属问题,而是 MCP Apps 能成立的前提

一个明确判断是:如果没有明确的沙箱和外链边界,MCP Apps 很难作为通用宿主能力落地。

CopilotKit 资料把“安全沙箱”列为 MCP Apps 的关键收益之一,指出内容运行在隔离的 iframe 中。[5]

OpenAI Apps SDK 文档则给出了更细的控制点:_meta.ui.csp 不支持为 window.openai.openExternal(...) 链接配置 redirect_domains,如果要为重定向目标设置白名单,仍需配置 _meta["openai/widgetCSP"].redirect_domains。[1]

这段信息虽然技术性强,但产品含义很清楚:MCP Apps 不是任意 HTML 自由运行,而是需要围绕外链、跳转和资源加载做严格约束。

因此,在设计企业级 AI 工具 UI 时,可以考虑把安全策略拆成三层:

安全层关注点可考虑的做法
渲染层组件是否隔离运行使用沙箱 iframe 思路[5][6]
数据层哪些数据给模型,哪些只给组件_meta 隔离 UI 补水数据[1]
链接层外链、跳转、重定向白名单按宿主要求配置 CSP/redirect 域名[1]

我们的建议是,产品经理不要把这类配置视为“发布前再补的工程细节”,而应在工具设计阶段就确认:

  • 组件是否需要打开外部链接;
  • 是否依赖第三方静态资源;
  • 哪些数据不应出现在模型上下文中;
  • 是否需要按实例追踪组件会话。

因为 OpenAI 文档还提到,宿主可在工具结果 _meta 中提供 openai/widgetSessionId,这是当前挂载 widget 实例的稳定 ID,可用于关联日志和工具调用。[1] 这类机制说明,MCP Apps 从一开始就被当作“可运行的交互单元”,而非一次性渲染片段。

判断五:MCP Apps 会把“AI 应用前端”推向组件化、资源化和会话持久化

从现有资料看,一个较清晰的方向是:MCP Apps 不只是渲染一次结果,而是在宿主内形成可恢复、可持续的界面状态。

CopilotKit 文档明确提到线程持久化:MCP Apps 会存储在会话历史中,并在重新连接时恢复。[5]

这意味着,组件不再只是消息气泡中的临时视觉元素,而更像“会话中的状态对象”。

如果把这个能力用于网站、企业助手或小程序式容器,可能出现几类新的产品组织方式:

1. 会话即工作流入口

用户不一定跳转到完整页面,而是在对话里直接看到:

  • 某个分析卡片;
  • 某个任务面板;
  • 某个图表部件;
  • 某个地图或表格组件。

2. 组件即工具的最小产品单元

传统上,工具能力、API、前端页面常由不同边界维护;而 MCP Apps 更适合把它们打包为同一个“工具产品单元”。

3. 历史消息不只保存文本,也保存可恢复的交互状态

这对客服工作台、运营面板、分析追问、知识排查等任务很重要,因为用户往往不是一次看结果,而是要返回历史上下文继续操作。[5]

这里可以用一个简化关系图来理解:

flowchart LR
  U[用户] --> C[聊天宿主]
  C --> M[模型]
  M --> T[MCP 工具]
  T --> R[工具结果]
  R --> SC[structuredContent/content]
  R --> META[_meta]
  T --> UI[ui:// UI资源]
  C --> IFRAME[沙箱组件]
  UI --> IFRAME
  META --> IFRAME
  IFRAME --> ACT[用户交互]
  ACT --> T

这个结构的核心不是“会话里有个 iframe”,而是工具结果、界面资源、用户交互和再次调用形成了闭环。[1][5][6]

判断六:当前更适合优先落地在“高频查看 + 轻交互”的垂直数字化场景

基于现有资料,本文的工作性理解是:MCP Apps 当前最适合的,不是复杂事务型系统全量迁移,而是那些结果结构清晰、交互步骤短、局部刷新价值高的场景。

原因主要来自资料里透露的三个约束:

  • UI 依赖工具输出结构稳定,真实 JSON 很关键。[2]
  • 渲染通常运行在沙箱中,说明宿主会控制能力边界。[5][6]
  • 工具结果存在模型可见层与组件专用层,需要开发时明确分工。[1]

因此可以优先考虑:

场景类型为什么适合
数据卡片/图表/仪表板JSON 结构相对清晰,适合直接映射 UI [2]
知识检索结果面板可展示结构化结果,并保留额外 _meta 给 UI [1]
客服/运营辅助工作台对话中查看、刷新、展开详情的需求强
地图与清单类组件Microsoft 示例直接覆盖地图、图表、布局调整 [2]

相对而言,涉及大量跨页导航、复杂权限流、超长表单流程的系统,是否适合完全转成 MCP Apps,需要更谨慎评估。现有资料更能支持“嵌入式任务组件”判断,而不是“替代完整业务前端”的结论。

判断七:对产品团队来说,真正的新能力不是“生成 UI”,而是“定义 UI 资源协议”

开源生态资料也在强化这一点。

mcp-ui 项目给出了较具体的宿主渲染方式:MCP Apps 宿主可使用 AppRenderer 渲染工具 UI,并传入 toolNametoolInputtoolResult、sandbox 配置、打开链接与消息处理器等参数。[3] 资料还提到一种线格式:宿主检测 _meta.ui.resourceUri,通过 resources/read 获取 UI,再用 AppRenderer 渲染;其底层 UIResource 中包含 ui:// 形式的 uritext/html;profile=mcp-app 的 MIME 类型。[3]

即使这不是官方标准全文,它仍提示出一个值得关注的产品方向:未来竞争点未必是谁先做出一个聊天框,而是谁更清楚地定义工具、结果、资源和宿主之间的协议边界。

对研发管理来说,这意味着可以把工作拆成四块:

  1. 工具 schema 设计;
  2. 工具结果分层设计;
  3. UI 资源组织与渲染;
  4. 宿主安全与消息交互接入。

我们的建议是,不要把 MCP Apps 仅当作“前端自动生成效率工具”。更稳妥的做法是把它视为一种面向对话宿主的组件交付协议。一旦这么理解,产品路线会更清晰:

  • 先建设稳定工具协议;
  • 再为高价值工具补 UI;
  • 最后再考虑用生成式方法加速组件生产。

可以怎样落地:一个务实的产品实施顺序

基于以上资料,我们建议团队按下面顺序试点,而不是一上来追求复杂的智能界面。

第一步:筛选“适合组件化”的工具

优先选择以下特征明显的工具:

  • 输出天然是 JSON;[2]
  • 结果有明显结构;
  • 用户会频繁查看或刷新;
  • 用户对局部交互有刚需。

第二步:先定义结果分层

把返回结果明确区分为:

  • 给模型推理的结构化字段;
  • 给用户阅读的说明字段;
  • 只给组件用的 _meta 字段。[1]

第三步:把 UI 做成最小可运行部件

优先从卡片、表格、图表、地图这类低耦合组件开始,而不是试图复刻整个后台系统。[2][5]

第四步:只增加一到两个高价值交互动作

例如:

  • 刷新;[2]
  • 切换视图;
  • 展开详情;
  • 重新筛选。

这样更容易验证“界面内再次调用工具”是否真的带来效率提升。[2]

第五步:在安全和可观测性上补齐宿主能力

尤其关注:

  • iframe 沙箱;[5][6]
  • 外链重定向白名单;[1]
  • widget 会话 ID 与日志关联。[1]

结论:MCP Apps 值得关注的,不是 UI 更好看,而是 AI 工具终于有了“可操作表面”

最后给出本文最核心的判断:MCP Apps 的产品意义,在于让工具输出从“被模型解释的数据”变成“用户可以直接操作的界面对象”。[1][2][6]

这会把一部分 AI 应用从“问答层”推进到“工作界面层”。

本文的工作性理解是,接下来更值得做的,不是讨论它是否会立即替代所有前端,而是判断哪些垂直场景最适合先受益:

  • 结果结构清楚;
  • 轻交互高频;
  • 需要会话内持续操作;
  • 希望工具能力跨宿主复用。

如果团队正做企业助手、数据产品、知识工作台、网站内嵌 AI 工具或小程序式轻应用,MCP Apps 至少提供了一个值得试验的新方向:把“工具接口”升级为“带界面的工具单元”。

SOURCES / 研究来源

  1. Reference – Apps SDK | OpenAI Developersdevelopers.openai.com
  2. 使用 AI 代码生成工具创建 MCP 应用小部件 - Power Apps | Microsoft Learnlearn.microsoft.com
  3. MCP-UI-Org/mcp-ui: UI over MCP. Create next- ...github.com
  4. Apps SDK UI Components shipped and is amazing! - ChatGPT Apps SDK - OpenAI Developer Communitycommunity.openai.com
  5. MCP Appsdocs.showcase.copilotkit.ai
  6. AI SDK Core: MCP Appsai-sdk.dev

研究时间:2026/7/9 21:39:53

PRODUCT & COLLABORATION / 产品与合作

有一个想法?
一起把它做成产品。

我们关注产品合作、技术共创与企业数字化项目。沟通从一个清晰的场景和目标开始。