{
"$type": "site.standard.document",
"bskyPostRef": {
"cid": "bafyreibet5ifqh4a5mpojilb3tzh22hlm5f5bj2xw5hfwytx53aq2ghhlq",
"uri": "at://did:plc:lk3jfj3zq4k4wxnk474axylu/app.bsky.feed.post/3mo4azqvju552"
},
"path": "/t/widget-originated-ui-message-now-renders-full-message-text-in-transcript-previously-hidden/1383520#post_1",
"publishedAt": "2026-06-12T16:45:38.000Z",
"site": "https://community.openai.com",
"tags": [
"silently dropped for live-rendered iframes",
"ACKs but follow-up turns use stale/missing context",
"Displaying a message on user’s behalf",
"@modelcontextprotocol"
],
"textContent": "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.\n\n**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.\n\n**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.\n\n**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.\n\n**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.\n\n**Questions:**\n\n 1. Is the `ui/message` visibility change documented, and is the new visible rendering intended going forward?\n 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?\n 3. Are these two issues related (same iframe context-binding lifecycle), or separate?\n\n\n\n**Environment:** ChatGPT web/desktop, MCP Apps connector, `@modelcontextprotocol/ext-apps`, `ui/message` + `ui/update-model-context`.",
"title": "Widget-originated ui/message now renders full message text in transcript (previously hidden)"
}