GPT Apps 实战:OpenAI 把 ChatGPT 变成 App 平台了
OpenAI 在 2025 年 10 月上线了 GPT Apps,让开发者把交互式 UI 直接嵌进 ChatGPT 对话窗口,Booking.com、Canva、Spotify 是首批合作伙伴,目前 App Directory 已对所有开发者开放提交。本文介绍 GPT Apps 的底层架构(双层 iframe 隔离、window.openai 通信 API、状态持久化),以及如何用 LeanMCP
兄弟们,OpenAI 这次动作挺大的。
2025 年 10 月,他们悄悄上线了 GPT Apps,Booking.com、Canva、Spotify 是首批合作伙伴。2025 年 12 月,ChatGPT App Directory 正式对外开放提交。
说白了就一件事:你写的应用,现在可以直接嵌在 ChatGPT 的对话窗口里跑,用户不用跳页面。
用户问"帮我找个北京的酒店",Booking.com 的订房界面直接出现在对话里。问"帮我改一下这个 PPT",Canva 直接内嵌打开。
800M+ ChatGPT 用户,分发渠道是真的大。
一、为啥纯文字交互不够用?
这个问题其实很直白:有些事情文字根本做不好。
你可以用文字描述一家酒店,但你没法让用户在文字里筛选价格、对比房型、直接下单。
GPT Apps 解决的就是这个问题 - 让 AI Agent 从"说话的"变成"能干活的"。
而且不只 OpenAI 在搞,Anthropic 的 MCP Apps(2026 年 1 月)解决的是同一个问题,只是跑在 Claude、VS Code、Goose 上。两个都基于 MCP 协议,本质是同一个方向:Agent 正在变成 App 平台,不只是聊天界面。
二、GPT Apps 底层怎么跑的?
架构不复杂,四个关键点:
1. UI 资源预声明 Widget HTML 在 MCP server manifest 里提前注册,OpenAI 在发布前审核,同时做缓存。不是运行时动态注入的,安全模型设计得很扎实。
2. 双层 iframe 隔离 ChatGPT 先跑一个沙箱外层 iframe,再在里面加载你的 UI。第三方代码和 ChatGPT 本体完全隔离。
3. window.openai 通信 API OpenAI 提供了一套干净的全局 API:
window.openai.toolInput // 工具的输入参数
window.openai.toolOutput // 工具的返回结果
window.openai.sendFollowUpMessage({ prompt }) // 给模型发消息
window.openai.callTool(name, args) // 从 UI 触发工具调用
4. 状态持久化 这是 GPT Apps 目前比 MCP Apps 领先的一点:跨工具调用的状态(window.openai.widgetState)和跨 session 的状态(window.openai.widgetSessionId)都有 API 支持。
三、用 LeanMCP 搭一个 GPT App
GPT Apps 基于 MCP,所以你需要一个 MCP server 作为后端。LeanMCP 帮你处理生产环境的那些脏活累活 - 认证、可观测性、多租户,你只管写业务逻辑。
第一步:建项目
npm install -g @leanmcp/cli
npx @leanmcp/cli create my-gpt-app
cd my-gpt-app
npm install
第二步:定义工具
// mcp/hotel/index.ts
import { Tool, SchemaConstraint } from "@leanmcp/core";
class HotelSearchInput {
@SchemaConstraint({ description: "要搜索的城市", minLength: 1 })
city!: string;
}
export class HotelService {
@Tool({
description: "搜索酒店并返回可交互界面",
inputClass: HotelSearchInput
})
async searchHotels(args: HotelSearchInput) {
const hotels = await fetchHotels(args.city);
// 返回数据,UI 资源在 server manifest 里单独注册
// ChatGPT 拿到数据后渲染你的 widget HTML
return {
city: args.city,
hotels: hotels,
totalCount: hotels.length
};
}
}
@SchemaConstraint 直接在 TypeScript 类上写校验规则,不用手搓 JSON Schema。
第三步:启动 Server
// main.ts
import { createHTTPServer } from "@leanmcp/core";
await createHTTPServer({
name: "my-gpt-app",
version: "1.0.0",
port: 8080,
cors: true,
logging: true, // 工具调用、延迟、报错,全记
autoDiscover: true // 自动扫描 ./mcp 目录,不用手动注册
});
跑起来 http://localhost:8080/mcp 就能用了。
第四步:加认证
生产环境裸奔不行,@Authenticated 一个装饰器搞定:
import { AuthProvider, Authenticated } from "@leanmcp/auth";
// 支持 Cognito、Auth0、Supabase、Firebase
const authProvider = new AuthProvider('cognito', {
region: process.env.AWS_REGION,
userPoolId: process.env.COGNITO_USER_POOL_ID,
clientId: process.env.COGNITO_CLIENT_ID
});
await authProvider.init();
// 整个 service 受保护
// token 从 _meta.authorization.token 自动验证,失败直接拒
@Authenticated(authProvider)
export class HotelService {
@Tool({
description: "搜索酒店 - 仅限认证用户",
inputClass: HotelSearchInput
})
async searchHotels(args: HotelSearchInput) {
// 走到这里说明 token 已经验过了,直接写业务逻辑
return { hotels: await fetchHotels(args.city) };
}
}
第五步:快速加新服务
leanmcp add booking
# 自动建 mcp/booking/index.ts(带样板代码)
# 自动在 main.ts 注册
# 直接开写
四、GPT Apps vs MCP Apps,开发者怎么选?
很多人问我这两个有啥区别,放张表:
| GPT Apps | MCP Apps | 用 LeanMCP | |
|---|---|---|---|
| 支持平台 | 仅 ChatGPT | Claude、ChatGPT、VS Code、Goose | 两个都支持,一个 server |
| 标准 | 私有(OpenAI 控制) | 开放(SEP-1865) | 全兼容 |
| 状态持久化 | 支持 | 暂不支持 | Runtime 层处理 |
| 认证 | 不含 | 不含 | @Authenticated 装饰器 |
| 可观测性 | 不含 | 不含 | logging: true 一行 |
| 多租户 | 自己搞 | 自己搞 | 内置 |
| 类型安全 | 手动 | 手动 | @SchemaConstraint 自动校验 |
最关键的一点:同一个 LeanMCP server 同时支持 GPT Apps 和 MCP Apps,不用维护两套代码。
GPT Apps 背后是 800M+ 用户,分发优势是真实的。但平台锁定也是真实的,OpenAI 一个政策变动你就被动。
MCP Apps 是开放标准,今天写的代码,明天可以跑在任何支持它的客户端上。
两个都要?一个 LeanMCP server 搞定,不用选。
五、生产环境那个坑
SDK 文档写得挺好,OpenAI 还提供了 Developer Mode 方便本地测试,上手确实快。
但"能跑起来"和"能扛住真实流量"是两回事。
ChatGPT Apps SDK 给了你 UI 层,没给你这些:
- 多租户认证 - 怎么对每个用户单独做身份验证?
- 用量追踪 - 谁在消耗你的 API 预算?
- 密钥注入 - 怎么安全地按请求注入 API Key?
- 审计日志 - 合规场景下,谁做了什么操作?
- 可观测性 - 凌晨两点出问题,你怎么发现?
LeanMCP 就是专门填这个坑的。协议是协议,Runtime 是 Runtime。
可观测性一行搞定:
await createHTTPServer({
name: "my-gpt-app",
version: "1.0.0",
logging: true // 工具调用、延迟、错误、用户维度,全有
});
六、真实案例长啥样
2025 年 10 月首批上线的合作伙伴:
- Booking.com - 酒店搜索、筛选、对比、下单,全在对话里跑,不跳页面
- Canva - PPT 编辑直接内嵌在 ChatGPT 里,告别切 Tab
- Figma - 设计稿 review 和反馈在对话上下文里完成
- Spotify - 音乐发现和歌单管理变成对话式 UI
- Zillow - 房产搜索和房源浏览嵌在对话里
- Shopify - 商品目录、尺码选择、购物车流程全在 agent 对话里
这些公司背后都需要同一套东西:认证、可观测性、扩缩容、密钥管理。这就是 LeanMCP 在干的事。
七、提交 App Directory 要准备啥
OpenAI 的审核要求:
- MCP 连接信息
- 给审核人员的测试说明
- 目录元数据(名字、描述、分类)
- 国家/地区可用性设置
- 隐私政策 - 必须有
- 符合 OpenAI 使用政策
人工 + 自动双重审核。现在提交还早,先发优势是真实的,Directory 已经开放了。
快速开始
npm install -g @leanmcp/cli
npx @leanmcp/cli create my-gpt-app
cd my-gpt-app && npm start
# -> http://localhost:8080/mcp
在 ChatGPT Developer Mode 里测试,没问题了再正式提交。
- GitHub(MIT 协议):github.com/LeanMCP/leanmcp-sdk
- 文档:docs.leanmcp.com
- Discord:discord.com/invite/DsRcA3GwPy
有在搭 GPT Apps 的吗?踩过啥坑欢迎评论区聊。
更多推荐



所有评论(0)