Apps SDK widget fails with “Failed to fetch template” / ChatGPT ecosystem widget 404

Hi everyone,

I’m testing a ChatGPT Apps SDK app called AI Workflow Architect on a personal ChatGPT Plus account before submission.

The MCP tool itself works correctly: the tool call completes successfully and the plain-text response renders as expected in ChatGPT.

The issue is only with the UI widget. ChatGPT consistently shows:

Error loading app
Failed to fetch template

I’ve reproduced this across multiple new chats and after disconnecting/reconnecting the app.

Chrome DevTools shows a 404 from ChatGPT’s /backend-api/ecosystem/... widget request when the template attempts to load.

What I’ve already checked:

  • MCP endpoint is live and healthy
  • tool call succeeds
  • advertised widget resource URI matches the resource returned by resources/read
  • widget resource is retrievable through MCP
  • MIME type is text/html;profile=mcp-app
  • app is being tested pre-submission in developer/custom app mode
  • disconnected and reconnected the app
  • retried in brand-new conversations
  • plain-text output continues to work correctly

MCP endpoint:

Public HTTPS MCP endpoint is live and healthy; happy to share the exact endpoint if needed.The app is not yet published in the directory.

Has anyone seen this exact combination before — tool works, text output works, but ChatGPT’s widget lookup returns 404 / Failed to fetch template?

I’ve already contacted OpenAI Support and followed up, but haven’t had a resolution yet.

I’m trying to determine whether this is:

  • a ChatGPT-side widget registration/snapshot issue,
  • a Developer Mode/custom app issue,
  • or something subtle in the Apps SDK resource setup that isn’t obvious from the MCP response itself.

Any guidance would be appreciated. I can also share the DevTools screenshot if useful.

Thanks,
Sisi

Hello, I actually ran into the same issue. I found that the core of my issue lied in the transport, I was initially using stdio, which from my diagnosis was causing the same error as yours due to the fact that it was attempting to cache and reuse stale widget HTML globally across users. When you switch to http, you can pass in ttlMs and cacheScope so the client knows how long the response can be considered fresh, and allows ChatGPT to properly attain your html asset and render through your tool(s).