使用说明
ChatGPT应用SDK Next.js入门版
一个最小的Next.js应用程序,演示如何构建 OpenAI应用软件开发工具包 兼容的MCP服务器,在ChatGPT中呈现小部件。
概述
本项目展示了如何使用模型上下文协议(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中间件(proxy.ts)
处理客户端导航期间跨源RSC(React Server Components)获取所需的浏览器OPTIONS预检请求:
export function proxy(request: NextRequest) {
if (request.method === "OPTIONS") {
// Return 204 with CORS headers
}
// Add CORS headers to all responses
}
4.SDK引导(app/layout.tsx)
这 <NextChatSDKBootstrap> 组件修补浏览器API,使其在ChatGPT iframe中正常工作:
它修补了什么:
history.pushState/history.replaceState-阻止历史记录中的完整源URLwindow.fetch-重写同源请求以使用正确的基本URL<html>属性观察器-防止ChatGPT修改根元素
所需配置:
<html lang="en" suppressHydrationWarning>
<head>
<NextChatSDKBootstrap baseUrl={baseURL} />
</head>
<body>{children}</body>
</html>
注: suppressHydrationWarning 目前是必需的,因为ChatGPT在Next.js应用程序水合之前修改了初始HTML,导致水合不匹配。
入门指南
安装
npm install
# or
pnpm install
发展
npm run dev
# or
pnpm dev
打开 http://localhost: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
proxy.ts # CORS handling for RSC
next.config.ts # Asset prefix configuration
运作原理
- 工具调用:ChatGPT调用在中注册的工具
app/mcp/route.ts - 资源引用:工具响应包括
templateUri指向已注册的资源 - 小部件渲染:ChatGPT获取资源HTML并在iframe中呈现
- 客户保湿:Next.js使用修补的API在iframe内水合应用程序
- 导航:客户端导航使用补丁
fetch装载RSC有效载荷
了解更多
部署
该项目旨在与 维塞尔 部署。这 baseUrl.ts 配置会自动检测Vercel环境变量并设置正确的资产URL。
配置会自动处理:
- 生产URL通过
VERCEL_PROJECT_PRODUCTION_URL - 通过预览/分支URL
VERCEL_BRANCH_URL - 在iframe中正确加载资源的资产前缀