# gadget-chatgpt-apps-sdk-guide-2025-10-10

## Veille

Guida allo sviluppo ChatGPT Apps SDK (OpenAI) - MCP, OAuth 2.1, Widget

## Titre Article

Everything you need to know about building ChatGPT apps

## Date

2025-10-10

## URL

https://gadget.dev/blog/everything-you-need-to-know-about-building-chatgpt-apps

## Keywords

ChatGPT Apps, OpenAI SDK, MCP, Model Context Protocol, OAuth 2.1, Widget, CORS, Vite, window.openai, Streamable HTTP, iframe, sviluppo applicazioni

## Authors

Harry (Gadget)

## Ton

**Profilo**: Resoconto di esperienza tecnica diretta, registro informale ma esperto, livello tecnico elevato.

**Descrizione**: L'autore condivide l'esperienza acquisita "a caldo" dopo diversi giorni di sviluppo intensivo sul ChatGPT Apps SDK. Il tono è quello di uno sviluppatore che si rivolge ai colleghi, unendo umorismo ("Cross Origin Emotional Damage", "boy oh boy are we early") a una competenza tecnica precisa. L'articolo assume la forma di una guida pratica, condividendo le insidie incontrate e le soluzioni trovate. L'autore non esita a criticare le carenze della documentazione ufficiale di OpenAI, offrendo al contempo alternative concrete. Pubblico target: sviluppatori esperti che desiderano costruire applicazioni ChatGPT.

## Pense-betes

- Una ChatGPT App = MCP server + estensione UI (widget) + facoltativamente OAuth 2.1/OIDC
- Preferire `StreamableHTTPServerTransport` alla versione SSE degli esempi di OpenAI
- Gli esempi ufficiali utilizzano una mappa di sessione in memoria che non funziona in serverless
- Utilizzare l'MCP Inspector per il debug prima di ChatGPT (i messaggi di errore di ChatGPT non sono informativi)
- OAuth 2.1: si è il **provider**, non il client - un'inversione del modello abituale
- I widget sono iframe sandboxed con HTML statico (nessun SSR possibile)
- Vite raccomandato per lo sviluppo dei widget (TypeScript, Tailwind, HMR)
- `window.openai` consente di chiamare gli strumenti MCP dal widget con l'auth inclusa gratuitamente
- Alternativa: `fetch` diretto ma con perdita di auth e di visibilità dell'LLM sulle interazioni
- CORS: configurazione necessaria per MCP, OAuth 2.1 e asset frontend
- Origine del widget: `https://web-sandbox.oaiusercontent.com`
- Plugin Vite per ChatGPT Widgets disponibile sul GitHub di Gadget

## RésuméDe400mots

Il team di Gadget condivide il proprio resoconto di esperienza dopo diversi giorni di sviluppo intensivo sul nuovo ChatGPT Apps SDK di OpenAI. L'articolo dettaglia i tre componenti essenziali di un'applicazione ChatGPT: un MCP server conforme al Model Context Protocol, un'estensione che consente di visualizzare interfacce utente all'interno delle conversazioni e, facoltativamente, un server OAuth 2.1 con OIDC per l'autenticazione.

Per la costruzione di MCP server, l'articolo raccomanda di utilizzare il trasporto Streamable HTTP piuttosto che la versione SSE presentata negli esempi ufficiali di OpenAI. Gli esempi forniti utilizzano una mappa di sessione in memoria non adatta alle piattaforme serverless. L'MCP Inspector è consigliato per il debug iniziale, poiché i messaggi di errore di ChatGPT sono poco informativi.

L'implementazione dell'autenticazione OAuth 2.1 rappresenta un cambio di paradigma: contrariamente alla pratica abituale di reindirizzare verso un provider esterno come Google, qui è l'applicazione stessa a dover fungere da provider OAuth per OpenAI. Ciò richiede l'implementazione degli endpoint di discovery OIDC che consentono a ChatGPT di ottenere i token.

La funzionalità più innovativa è la possibilità di servire agli utenti widget UI interattivi. Questi widget sono in realtà iframe sandboxed che caricano un documento HTML statico, messo in cache al momento dell'installazione dell'applicazione. Questo vincolo impone lo sviluppo di single-page application lato client, senza rendering dinamico lato server. Il team raccomanda Vite per la compilazione TypeScript, il bundling, l'hot-module-reloading e il supporto Tailwind. Un plugin Vite dedicato è disponibile su GitHub.

Per la comunicazione con il backend da un widget esistono due approcci. L'oggetto `window.openai` iniettato da OpenAI consente di chiamare gli strumenti MCP con l'autenticazione gestita automaticamente e visibilità per l'LLM sulle interazioni. L'alternativa tramite `fetch` diretto richiede la gestione manuale dell'autenticazione e perde la consapevolezza contestuale dell'LLM.

Il CORS rappresenta una sfida importante, con tre configurazioni distinte da gestire: le route MCP, le route OAuth 2.1 e gli asset frontend. Per le prime due, si raccomanda un header permissivo `Access-Control-Allowed-Origin: *`, poiché l'autenticazione già protegge le chiamate. Per gli asset dei widget, deve essere consentita l'origine `https://web-sandbox.oaiusercontent.com` utilizzata da OpenAI.

L'articolo conclude che l'ecosistema è ancora molto giovane ma promettente, con template pronti all'uso disponibili presso Gadget per accelerare l'avvio.

## GrapheDeConnaissance

- Gadget —publie→ guide ChatGPT Apps SDK (DOCUMENT, 0.98)
- Harry Brundage —publie→ guide ChatGPT Apps SDK (DOCUMENT, 0.95)
- ChatGPT App —est_basé_sur→ MCP server (TECHNOLOGIE, 0.98)
- ChatGPT App —utilise→ OAuth 2.1 (TECHNOLOGIE, 0.97)
- ChatGPT App —utilise→ widgets iframes (CONCEPT, 0.97)
- Gadget —recommande→ StreamableHTTPServerTransport (TECHNOLOGIE, 0.95)
- OpenAI —publie→ ChatGPT Apps SDK (TECHNOLOGIE, 0.98)
- ChatGPT Apps SDK —utilise→ OAuth 2.1 (CONCEPT, 0.95)
- Vite —améliore→ développement widgets ChatGPT (METHODOLOGIE, 0.92)
- window.openai —permet→ authentification gratuite (CONCEPT, 0.93)
- CORS —s_oppose_à→ développement ChatGPT Apps (CONCEPT, 0.9)
- MCP Inspector —améliore→ débogage MCP (METHODOLOGIE, 0.92)
- Gadget —s_oppose_à→ OpenAI (CONCEPT, 0.88)

---
Canonical: https://www.thekb.eu/it/fiches/gadget-chatgpt-apps-sdk-guide-2025-10-10/
