Widget-originated ui/message now renders full message text in transcript (previously hidden)
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:
- Is the
ui/messagevisibility change documented, and is the new visible rendering intended going forward? - Given
updateModelContextis 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? - 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