
ChatGPT Apps SDK Next.js Starter
A minimal Next.js application demonstrating how to build an OpenAI Apps SDK compatible MCP server with widget rendering in ChatGPT.
Overview
This project shows how to integrate a Next.js application with the ChatGPT Apps SDK using the Model Context Protocol (MCP). It includes a working MCP server that exposes tools and resources that can be called from ChatGPT, with responses rendered natively in ChatGPT.
Key Components
1. MCP Server Route (app/mcp/route.ts)
The core MCP server implementation that exposes tools and resources to ChatGPT.
Key features:
- Tool registration with OpenAI-specific metadata
- Resource registration that serves HTML content for iframe rendering
- Cross-linking between tools and resources via templateUri
OpenAI-specific metadata:
Full configuration options: OpenAI Apps SDK MCP Documentation
2. Asset Configuration (next.config.ts)
Critical: Set assetPrefix to ensure /_next/ static assets are fetched from the correct origin:
Without this, Next.js will attempt to load assets from the iframe's URL, causing 404 errors.
3. CORS Middleware (middleware.ts)
Handles browser OPTIONS preflight requests required for cross-origin RSC (React Server Components) fetching during client-side navigation:
4. SDK Bootstrap (app/layout.tsx)
The <NextChatSDKBootstrap> component patches browser APIs to work correctly within the ChatGPT iframe:
What it patches:
- history.pushState/- history.replaceState- Prevents full-origin URLs in history
- window.fetch- Rewrites same-origin requests to use the correct base URL
- <html>attribute observer - Prevents ChatGPT from modifying the root element
Required configuration:
Note: suppressHydrationWarning is currently required because ChatGPT modifies the initial HTML before the Next.js app hydrates, causing hydration mismatches.
Getting Started
Installation
Development
Open http://localhost:3000 to see the app.
Testing the MCP Server
The MCP server is available at:
Connecting from ChatGPT
- Deploy your app to Vercel
- In ChatGPT, navigate to Settings → Connectors → Create and add your MCP server URL with the /mcppath (e.g.,https://your-app.vercel.app/mcp)
Note: Connecting MCP servers to ChatGPT requires developer mode access. See the connection guide for setup instructions.
Project Structure
How It Works
- Tool Invocation: ChatGPT calls a tool registered in app/mcp/route.ts
- Resource Reference: Tool response includes templateUripointing to a registered resource
- Widget Rendering: ChatGPT fetches the resource HTML and renders it in an iframe
- Client Hydration: Next.js hydrates the app inside the iframe with patched APIs
- Navigation: Client-side navigation uses patched fetchto load RSC payloads
Learn More
- OpenAI Apps SDK Documentation
- OpenAI Apps SDK - MCP Server Guide
- Model Context Protocol
- Next.js Documentation
Deployment
This project is designed to work seamlessly with Vercel deployment. The baseUrl.ts configuration automatically detects Vercel environment variables and sets the correct asset URLs.
The configuration automatically handles:
- Production URLs via VERCEL_PROJECT_PRODUCTION_URL
- Preview/branch URLs via VERCEL_BRANCH_URL
- Asset prefixing for correct resource loading in iframes

