{
"$type": "site.standard.document",
"bskyPostRef": {
"cid": "bafyreigpood6vwbwpeauddavq77kbgf6zypnobixtl3rvbdezfb66a2vri",
"uri": "at://did:plc:lk3jfj3zq4k4wxnk474axylu/app.bsky.feed.post/3mk5xg2xf4hj2"
},
"path": "/t/mcp-apps-error-loading-app-runtime-error-on-all-resource-widgets-in-developer-mode/1379591#post_1",
"publishedAt": "2026-04-23T11:08:11.000Z",
"site": "https://community.openai.com",
"textContent": "Resource-bound widgets (MCP Apps using resources/read with mimeType: text/html;profile=mcp-app) fail to render in ChatGPT’s developer mode. The error is consistent and affects all MCP apps, including Booking[.]com’s official integration.\n\nWhat happens\n\nWhen a tool call returns structuredContent tied to a resource widget, ChatGPT shows:\n\n\n Error loading app\n Runtime error\n [Retry]\n\n\nClicking Retry does not resolve it. The tool call itself succeeds, the server returns valid data, but the widget iframe never connects to the host.\n\nReproduction\n\n 1. Open ChatGPT in developer mode\n 2. Connect any MCP server that exposes a resource with mimeType: text/html;profile=mcp-app\n 3. Trigger a tool call that returns structuredContent bound to that resource\n 4. The widget shows “Error loading app / Runtime error”\n\n\n\nThis also reproduces with Booking[.]com — ask it to search for a hotel. The tool executes, results come back, but the Booking[.]com widget fails with the same error. In non-developer (production) ChatGPT, the same Booking[.]com widget renders correctly.\n\nWhat we’ve verified\n\n * Not app-specific. Tested across three independent MCP apps (2 custom apps built with sunpeak[.]ai, plus Booking[.]com). All\nproduce the identical error.\n * Server-side is correct. Tool calls succeed, structuredContent is returned, resource HTML is served. Server logs show no\nerrors.\n * The widget HTML is valid. The same HTML renders correctly in local testing environments and in production ChatGPT\n(non-developer mode).\n * The error comes from ChatGPT’s host-side error boundary. The “Error loading app / Runtime error” text does not exist in any\nof the app code — it’s rendered by the ChatGPT client.\n\n\n\nLikely cause\n\nThe resource iframe uses postMessage to establish a JSON-RPC bridge with the ChatGPT parent window. In developer mode, the host-side listener for this bridge appears to be missing or misconfigured, so the iframe’s connection handshake times out and throws.\n\nAdditional observations from server logs\n\nWhile investigating, we logged the developer mode’s MCP session behavior per user message:\n\n * 7-8 MCP sessions opened per turn, when 4 are sufficient (tools/list + resources/list + resources/read + tools/call). Re-discovering tools and resources per turn is expected with streamable HTTP, but the extra 3-4 sessions are not.\n * 3 sessions abandoned every turn — initialize sent, handshake never completed\n * Race condition — at least once, tools/call was sent before notifications/initialized, causing “Error: Bad Request: Server not initialized”\n\n\n\nThese may be developer-mode-specific behaviors.\n\nEnvironment\n\n * ChatGPT: production (chat[.]openai[.]com), developer mode enabled\n * Date observed: April 23, 2026\n * Tested MCP servers: custom apps (Node.js / sunpeak 0.20.7) + Booking[.]com\n\n\n\nAsk\n\nIs this a known issue with a timeline for a fix, as we can’t test our widgets at the moment? Are OpenAI developers using the developer mode internally, too?",
"title": "MCP Apps: \"Error loading app / Runtime error\" on all resource widgets in developer mode"
}