MCP Apps in ChatGPT are fundamentally broken - 2 critical bugs

We’ve been building MCP Apps for ChatGPT and have hit two separate bugs that, combined, make the platform essentially unusable for production apps.

We are following the recommended approach from the MCP Apps compatibility guide, which positions MCP Apps as the standard way to build app UIs going forward.

Bug 1: _meta stripped from tool results

ChatGPT doesn’t forward _meta from CallToolResult to the widget via
ui/notifications/tool-result. This breaks the documented viewUUID pattern for state
persistence. params.content and params.structuredContent arrive correctly, but
params._meta is always undefined.

Bug 2: ontoolresult not replayed after page refresh

When the user refreshes the page, the iframe reconnects but the host doesn’t re-send the
last tool-result notification. The widget stays on a loading state with no way to
recover.

Impact

These are standard MCP Apps patterns and not edge cases or ChatGPT-specific extensions.

Since the compatibility guide tells developers to “build with the MCP Apps standard keys and bridge by default,” it’s important that the standard bridge works reliably.

Together these make it hard to build apps that work in ChatGPT:

  • State persistence via viewUUID doesn’t work (Bug 1)
  • Widgets don’t survive a page refresh (Bug 2)

Would love to know

Should we keep investing in MCP Apps and wait for fixes, or should we
move back to window.openai? Some clarity on whether these are being tracked and will be
fixed would really help us decide how to move forward.

Related posts:

3 Likes

Claude just works out of the box. Idk why OpenAI is this way.

because they have launch Apps way earlier… and have a double stack to support with potential collisions

The old way is the inefficient way of putting the HTML in the context and polluting right ?
or is there any other way ?

not sure to get it, there never was any solution including putting html in the context

Thanks for the detailed report. We’re tracking the reports around MCP Apps tool result metadata and refresh behavior.

Because deeper troubleshooting may require app-specific or account-specific details, please don’t post user IDs, org/workspace IDs, API keys, HAR files, private logs, request traces, or account-specific data in this thread.

For now, please email support@openai.com with this forum URL, the related repro links, and any minimal non-sensitive reproduction details you can share privately. After you’ve emailed support, reply here with the Case ID or exact subject line so we can locate it quickly.

As a temporary development workaround, avoid depending only on CallToolResult._meta for widget restore state. If it is safe for your app, use a small non-secret opaque state key in structuredContent, then have the widget re-fetch or rebuild state on startup. Do not put secrets, user data, large private payloads, or account-specific debug artifacts into model-visible fields.

Thanks!