"Runtime error" on all resource widgets in developer mode

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

  1. Open ChatGPT in developer mode
  2. Connect any MCP server that exposes a resource with mimeType: text/html;profile=mcp-app
  3. Trigger a tool call that returns structuredContent bound to that resource
  4. 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?

Hey Daniel, thanks for posting. I can’t seem to reproduce this myself with the Booking app:

Could I ask you for the Request ID so I can debug in our logs?

Here’s how to find it: looking at your network tab when you open a conversation that is failing, can you give me the x-oai-request-id header value of the /ecosystem/widget API call? It should look like a UUID.

Thanks.

An important information is that is only happening on Safari, for all apps! Chrome works fine.