External Publication
Visit Post

Widget-originated ui/message now renders full message text in transcript (previously hidden)

OpenAI Developer Community June 12, 2026
Source

I have an MCP App (interactive carousel) in ChatGPT, built with @modelcontextprotocol/ext-apps. On card click, the widget needs to give the model the selected resource’s full context so it can respond to a follow-up.

The recommended approach doesn’t work for us. The documented pattern is updateModelContext (offload bulk context) + a short sendMessage trigger. But on ChatGPT, ui/update-model-context ACKs with {} and then silently drops the context on live-rendered iframes — see silently dropped for live-rendered iframes and ACKs but follow-up turns use stale/missing context. The model never sees the context.

So we worked around it by packing the full context directly into the app.sendMessage({ role: "user", content: [...] }) (ui/message) text, since that path reliably reaches the model.

Now the workaround broke too. Widget-originated ui/message calls used to be hidden from the transcript (they appeared to carry is_visually_hidden_from_conversation: true). A recent ChatGPT frontend change now renders the full message text as a visible user bubble, exposing the large context blob to the user. This also seems to contradict prior guidance in Displaying a message on user’s behalf, where staff said you can’t make a widget message appear as user-authored.

Net effect: the two paths for getting in-app context to the model are now mutually exclusive on ChatGPT — updateModelContext is silently dropped, and the sendMessage fallback now leaks its full payload into the visible conversation.

Questions:

  1. Is the ui/message visibility change documented, and is the new visible rendering intended going forward?
  2. Given updateModelContext is currently unreliable on live iframes, what is the supported way to pass substantial in-app context to the model without it appearing in the transcript?
  3. Are these two issues related (same iframe context-binding lifecycle), or separate?

Environment: ChatGPT web/desktop, MCP Apps connector, @modelcontextprotocol/ext-apps, ui/message + ui/update-model-context.

Discussion in the ATmosphere

Loading comments...