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.
What happens
When a tool call returns structuredContent tied to a resource widget, ChatGPT shows:
Error loading app
Runtime error
[Retry]
Clicking Retry does not resolve it. The tool call itself succeeds, the server returns valid data, but the widget iframe never connects to the host.
Reproduction
- Open ChatGPT in developer mode
- Connect any MCP server that exposes a resource with mimeType: text/html;profile=mcp-app
- Trigger a tool call that returns structuredContent bound to that resource
- The widget shows “Error loading app / Runtime error”
This 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.
What we’ve verified
- Not app-specific. Tested across three independent MCP apps (2 custom apps built with sunpeak[.]ai, plus Booking[.]com). All
produce the identical error. - Server-side is correct. Tool calls succeed, structuredContent is returned, resource HTML is served. Server logs show no
errors. - The widget HTML is valid. The same HTML renders correctly in local testing environments and in production ChatGPT
(non-developer mode). - The error comes from ChatGPT’s host-side error boundary. The “Error loading app / Runtime error” text does not exist in any
of the app code — it’s rendered by the ChatGPT client.
Likely cause
The 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.
Additional observations from server logs
While investigating, we logged the developer mode’s MCP session behavior per user message:
- 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.
- 3 sessions abandoned every turn — initialize sent, handshake never completed
- Race condition — at least once, tools/call was sent before notifications/initialized, causing “Error: Bad Request: Server not initialized”
These may be developer-mode-specific behaviors.
Environment
- ChatGPT: production (chat[.]openai[.]com), developer mode enabled
- Date observed: April 23, 2026
- Tested MCP servers: custom apps (Node.js / sunpeak 0.20.7) + Booking[.]com
Ask
Is 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?

