使用说明
ChatGPT 应用程序SDK Next.js 初始模板
一个最简的Next.js应用程序,演示如何构建一个 OpenAI 应用程序开发工具包 (Apps SDK) 与ChatGPT兼容的带有小部件渲染功能的MCP服务器。
概述
这个项目展示了如何使用模型上下文协议(MCP)将一个Next.js应用程序与ChatGPT Apps SDK集成。它包含了一个可运行的MCP服务器,该服务器提供了可从ChatGPT调用的工具和资源,并且响应会在ChatGPT中原生渲染。
关键组件
1. MCP服务器路由(app/mcp/route.ts)
核心的MCP服务器实现,为ChatGPT提供工具和资源访问。
主要特点:
- 工具注册 带有OpenAI特定的元数据
- 资源注册 为iframe渲染提供HTML内容
- 交联 通过工具和资源之间的(途径/方式)
templateUri
OpenAI特定的元数据:
{
"openai/outputTemplate": widget.templateUri, // Links to resource
"openai/toolInvocation/invoking": "Loading...", // Loading state text
"openai/toolInvocation/invoked": "Loaded", // Completion state text
"openai/widgetAccessible": false, // Widget visibility
"openai/resultCanProduceWidget": true // Enable widget rendering
}
完整的配置选项: OpenAI 应用程序 SDK MCP 文档
2. 资产配置(next.config.ts)
关键: 设置 assetPrefix 以确保 /_next/ 静态资源从正确的源获取:
const nextConfig: NextConfig = {
assetPrefix: baseURL, // Prevents 404s on /_next/ files in iframe
};
如果没有这个,Next.js 将尝试从 iframe 的 URL 加载资源,从而导致 404 错误。
3. CORS 中间件(middleware.ts)
处理客户端导航期间跨域RSC(React服务器组件)获取所需的浏览器OPTIONS预检请求:
export function middleware(request: NextRequest) {
if (request.method === "OPTIONS") {
// Return 204 with CORS headers
}
// Add CORS headers to all responses
}
4. SDK 引导程序(Bootstrapapp/layout.tsx)
这个(或:该) <NextChatSDKBootstrap> 组件补丁用于使浏览器API在ChatGPT的iframe内正常工作:
它修复的内容:
history.pushState/history.replaceState- 防止在历史记录中显示完整的原始URLwindow.fetch- 重写同源请求以使用正确的基础URL<html>属性 observer - 防止 ChatGPT 修改根元素
所需配置:
<html lang="en" suppressHydrationWarning>
<head>
<NextChatSDKBootstrap baseUrl={baseURL} />
</head>
<body>{children}</body>
</html>
注: suppressHydrationWarning 当前之所以需要这样做,是因为ChatGPT在Next.js应用进行水合(hydration)之前修改了初始HTML,从而导致水合不匹配。
入门指南/开始使用
安装
npm install
# or
pnpm install
发展
npm run dev
# or
pnpm dev
开放 http://localhost:3000 翻译为中文是:“本地主机:3000 端口”。不过,通常我们不会直接翻译网址的格式,而是理解为访问本地计算机上运行在 3000 端口上的服务或应用 查看该应用程序。
测试MCP服务器
MCP服务器的访问地址为:
http://localhost:3000/mcp
通过ChatGPT连接
- 将您的应用部署到Vercel
- 在ChatGPT中,导航至 设置 → 连接器 → 创建 并将您的MCP服务器URL添加到其中
/mcp路径(例如。,https://your-app.vercel.app/mcp)
注: 要将MCP服务器连接到ChatGPT,需要启用开发者模式访问。请参阅 连接指南 用于设置说明。
项目结构
app/
├── mcp/
│ └── route.ts # MCP server with tool/resource registration
├── layout.tsx # Root layout with SDK bootstrap
├── page.tsx # Homepage content
└── globals.css # Global styles
middleware.ts # CORS handling for RSC
next.config.ts # Asset prefix configuration
它是如何工作的
- 工具调用ChatGPT调用了一个在(某处)注册的工具
app/mcp/route.ts - 资源参考工具响应包括
templateUri指向一个已注册的资源 - 小部件渲染ChatGPT获取资源HTML并在iframe中渲染它
- **客户端水合作用(或“客户端预渲染后初始化”)**Next.js 在 iframe 内部通过修补后的 API 来“水合”(即初始化)应用程序
- 导航客户端导航使用了修补程序
fetch装载RSC有效载荷
了解更多
部署
这个项目旨在与(其他系统/项目)无缝协作 Vercel 部署。该 baseUrl.ts 配置会自动检测Vercel环境变量,并设置正确的资源URL。
该配置会自动处理:
- 通过生成生产环境URL
VERCEL_PROJECT_PRODUCTION_URL - 通过预览/分支查看URL
VERCEL_BRANCH_URL - 在iframe中为资源加载正确设置资产前缀
