MCP Apps 在 ChatGPT 中的兼容性 – Apps SDK | OpenAI 开发者
来源: https://developers.openai.com/apps-sdk/mcp-apps-in-chatgpt 抓取时间: 2026-07-21 16:26:39
概述
ChatGPT 支持用于嵌入式应用 UI 的 MCP Apps 开放标准。
MCP Apps UI 在 iframe 内运行,并通过标准桥接(postMessage 上的 ui/* JSON-RPC)与主机通信。ChatGPT 实现了相同的 iframe-and-bridge 模型,因此您只需构建一次 UI,即可在 ChatGPT 和其他 MCP Apps 兼容主机上运行。
现有的 Apps SDK API 仍然受支持,新的实验性功能会首先在 Apps SDK 中发布。OpenAI 从 ChatGPT Apps 开始帮助制定了 MCP Apps 标准,新功能在经过形态和功能验证后会移入 MCP 规范。
默认情况下,使用 MCP Apps 标准密钥和桥接进行构建。当您需要 ChatGPT 特定功能时,使用 window.openai。
推荐方法
对于新应用(以及现有应用内的新 UI 界面),从 MCP Apps 标准开始:
- 使用
_meta.ui.resourceUri声明您的 UI。 - 使用标准主机桥接(
postMessage上的ui/*JSON-RPC)进行初始化、通知和主机交互。
可选:
3. 仅当您需要共享规范未涵盖的功能时,通过 window.openai 叠加 ChatGPT 扩展。
MCP Apps 主机桥接 (ui/)
MCP Apps 定义了标准的 iframe 桥接:
- 传输方式:
window.postMessage上的 JSON-RPC 2.0 消息 - 命名空间: 用于 UI ↔ 主机交互的
ui/*方法和通知 - 工具调用: 使用 MCP 工具接口(例如,
tools/call),而不是特定于主机的 UI 全局变量
这与 Apps SDK 的关系
Apps SDK 是构建和分发 ChatGPT 应用的受支持方式。ChatGPT 还实现了 MCP Apps UI 标准,因此您的 UI 可以在 MCP Apps 兼容主机上运行。 实际上:
- 当有等效项时,使用 MCP Apps 标准密钥和桥接方法(
_meta.ui.resourceUri、ui/*)。 - 仅当您需要 ChatGPT 特定功能时,才使用 OpenAI 扩展。
这类似于 Web 平台:特定于供应商的 API 可以帮助提前交付,但一旦标准存在,文档应该以标准形式为主导。这是关于可移植性,而不是弃用。
通过 window.openai 的可选 ChatGPT 扩展
某些功能是 ChatGPT 特有的。当您使用它们时,将它们视为可选扩展,在 ChatGPT 中增加功能——同时不会阻止您的 UI 在其他 MCP Apps 主机中运行。 示例包括:
- 即时结账 (
window.openai.requestCheckout) - 文件处理 (
window.openai.uploadFile、window.openai.selectFiles、window.openai.getFileDownloadUrl) - 主机模态框 (
window.openai.requestModal)
迁移和映射指南
本节将常见的 Apps SDK 模式映射到 MCP Apps 标准等效项。
工具元数据
| 目标 | MCP Apps 标准 | ChatGPT 兼容性别名 |
|---|---|---|
| 将工具链接到 UI 资源 | _meta.ui.resourceUri | _meta[\"openai/outputTemplate\"] |
主机桥接
| 目标 | MCP Apps 标准 | ChatGPT 扩展(可选) |
|---|---|---|
| 接收工具输入 | ui/initialize \+ ui/notifications/tool-input | window.openai.toolInput |
| 接收工具结果 | ui/notifications/tool-result | window.openai.toolOutput |
| 从 UI 调用工具 | tools/call | window.openai.callTool |
| 发送后续消息 | ui/message | window.openai.sendFollowUpMessage |
| 更新模型可见的 UI 上下文 | ui/update-model-context | window.openai.setWidgetState |
| 围绕 MCP Apps 标准构建以实现可移植性,然后在可改善 ChatGPT 体验的地方叠加 ChatGPT 扩展。 |
扩展最佳实践
- 功能检测 在调用扩展之前进行。
- 优雅降级 当扩展不可用时。
- 避免产品名称分支。 优先使用功能检测和渐进式增强,而不是假设特定的主机界面。
const openai = typeof window !== "undefined" ? window.openai : undefined;
if (openai?.requestModal) {
await openai.requestModal({
/* ... */
});
} else {
// 没有此扩展的主机的回退行为。
}