Setting the file. One moment.
Subchapter 2.2
references/apps-sdk-docs-workflow.mdMarkdown8 KBView on GitHub
Use this reference to keep code generation aligned with current OpenAI Apps SDK docs.
https://developers.openai.com/apps-sdk/build/mcp-server/https://developers.openai.com/apps-sdk/build/chatgpt-ui/https://developers.openai.com/apps-sdk/build/examples/https://developers.openai.com/apps-sdk/plan/tools/https://developers.openai.com/apps-sdk/reference/https://developers.openai.com/apps-sdk/quickstart/ for first implementation scaffolds and happy-path wiringhttps://developers.openai.com/apps-sdk/deploy/ when the task includes local ChatGPT testing via tunnel, hosting, or production deployment planninghttps://developers.openai.com/apps-sdk/deploy/submission/ when the task includes public launch, app review, or publishing stepshttps://developers.openai.com/apps-sdk/app-submission-guidelines/ when the task includes submission readiness, policy/reliability checks, or review-risk reductionUse focused searches before fetching:
ChatGPT Apps SDK build MCP server register resource template resourceUri outputTemplateChatGPT Apps SDK build ChatGPT UI MCP Apps bridge ui/notifications/tool-resultChatGPT Apps SDK examples React widget upload modal PizzazApps SDK define tools annotations readOnlyHint destructiveHint openWorldHintApps SDK reference tool descriptor _meta ui.resourceUri openai/outputTemplateChatGPT Apps SDK quickstart build web component tools/callChatGPT app company knowledge compatibility search fetch toolsplatform MCP search tool fetch tool schemaChatGPT Apps SDK deploy app local development tunnel ngrok refresh connectorChatGPT Apps SDK submit app review prerequisites app submission guidelinestext/html;profile=mcp-app) or RESOURCE_MIME_TYPE when using @modelcontextprotocol/ext-apps/server_meta.ui.resourceUri on render tools; optionally mirror _meta["openai/outputTemplate"] for ChatGPT compatibilitystructuredContent concise and move widget-only payloads to _metareadOnlyHint, destructiveHint, openWorldHint)propertyIds for a render property map widget that takes IDs returned from the fetch properties nearby tool) if you want to make sure the widget only renders 1p data; make the widget input semantically relevant if you want to allow the model to render the widget with generated data (e.g. questionAndAnswerPairs for a flashcards widget)search and fetch tools by defaultui/* notifications + tools/call) for new appsui/message for follow-up messaging in baseline examples; treat window.openai.sendFollowUpMessage as optional ChatGPT-specific compatibilitywindow.openai as compatibility plus optional ChatGPT extensionsstructuredContent and treat host-delivered data as untrusted inputui/update-model-context only for UI state the model should reason aboutapps-sdk/build/examples and the official examples repo before generating a greenfield scaffold from scratch_meta.ui.csp.connectDomains and _meta.ui.csp.resourceDomains exactlyframeDomains unless iframe embedding is central to the experience_meta.ui.domain for submission-ready appsopenai/widgetDescription to inform the model what the widget is to be used forhttp://localhost:<port>/mcp/mcp when adding the app in ChatGPT settings/mcp route responds before calling the result “working”search and fetch tool shapes against the standard/mcpdeploy/submission and app-submission-guidelines together (process + policy requirements)$openai-docs../scripts/scaffold_node_ext_apps.mjs <output-dir> --app-name <name> only when the user wants a greenfield Node + @modelcontextprotocol/ext-apps starter and no upstream example is the better fit.node scripts/scaffold_node_ext_apps.mjs <output-dir> --app-name <name>.package.json, tsconfig.json, public/widget.html, and src/server.ts.ui/message, and limits window.openai to optional host signals/extensions.