¿Un nuevo sistema operativo? Aplicaciones en ChatGPT y SDK de aplicaciones (basado en MCP): Desbloqueando una nueva plataforma

Autor: Boxu Li en Macaron
Introducción:
Las aplicaciones en ChatGPT ahora permiten a desarrolladores de terceros crear miniaplicaciones interactivas que viven dentro de la interfaz de chat. En lugar de enviar a los usuarios a sitios web o aplicaciones móviles, estas aplicaciones se ejecutan dentro de la conversación y aprovechan el razonamiento del modelo para impulsar acciones. Socios tempranos como Canva, Coursera, Expedia y Zillow demostraron cómo los usuarios pueden solicitar una lista de reproducción, diseñar un cartel o buscar bienes raíces sin salir de ChatGPT[1]. El nuevo Apps SDK se basa en el Protocolo de Contexto del Modelo (MCP), un estándar abierto que permite a los modelos interactuar con herramientas externas e interfaces de usuario[2]. Este blog profundiza en la arquitectura de las aplicaciones basadas en MCP, explica las capacidades del SDK, guía en la creación de una aplicación paso a paso, explora cómo los usuarios descubren y utilizan las aplicaciones, y discute consideraciones de privacidad y seguridad. A lo largo, citamos documentación oficial y periodismo de renombre para fundamentar el análisis en fuentes creíbles.
Entendiendo el Protocolo de Contexto del Modelo (MCP)
Por qué los estándares abiertos importan
El Protocolo de Contexto de Modelo es la base del SDK de Apps. Según la documentación para desarrolladores, cada integración del SDK de Apps utiliza un servidor MCP para exponer herramientas, manejar la autenticación y empaquetar tanto datos estructurados como HTML que se renderiza en ChatGPT[2]. MCP es un estándar abierto—cualquiera puede implementar un servidor en cualquier idioma y conectar un modelo como GPT‑4 o Codex. La naturaleza de código abierto significa que no hay bloqueo de proveedor; teóricamente, la misma aplicación puede ejecutarse en cualquier plataforma de IA que implemente el protocolo. Esta apertura fomenta las contribuciones de la comunidad y promueve un ecosistema análogo a la web temprana, donde estándares como HTTP permitieron sitios web interoperables.
Servidores, Herramientas y Recursos
Un servidor MCP expone una o más herramientas. Una herramienta define una acción que el modelo puede llamar, como "crear un tablero kanban", "buscar casas" o "generar una lista de reproducción". Cada herramienta está descrita por un nombre de máquina, un título amigable para el usuario y un esquema JSON que le dice al modelo qué argumentos acepta. Cuando ChatGPT decide que se debe invocar la herramienta, envía una llamada estructurada al servidor. El servidor ejecuta la lógica, ya sea consultando una API, realizando un cálculo o interactuando con una base de datos, y luego devuelve una respuesta de herramienta. Esta respuesta incluye tres campos:
- structuredContent – datos visibles para el modelo que describen el estado actual. Por ejemplo, un tablero kanban podría incluir un array de columnas y tareas[3].
- content – texto opcional que el asistente le habla al usuario. Esto puede resumir el resultado o instruir al usuario.
- _meta – metadatos ocultos no visibles para el modelo. Los desarrolladores los utilizan para almacenar IDs o listas usadas en componentes de la interfaz de usuario. Por ejemplo, el ejemplo del tablero utiliza un mapa tasksById en _meta para mantener los detalles de las tareas sin exponerlos al modelo[4].
Las herramientas también pueden referirse a recursos, como plantillas HTML o imágenes, haciendo referencia a una URL ui://. El servidor registra estos recursos durante el inicio. La documentación advierte que debido a que los recursos son almacenados en caché por la infraestructura de OpenAI, los desarrolladores deberían versionarlos incluyendo un hash de compilación en el nombre del archivo[5]. De lo contrario, los usuarios podrían ver una interfaz obsoleta después de los despliegues.
Contenido Estructurado vs. Metadatos
La distinción entre structuredContent y _meta es crucial. Según la documentación, structuredContent es visible para el modelo y se utiliza para hidratar el componente de la interfaz de usuario; _meta está oculto al modelo y puede contener datos adicionales para la interfaz de usuario, como listas para menús desplegables[3]. Al separar los datos visibles y ocultos, los desarrolladores pueden proteger la información sensible del modelo mientras siguen mostrando interfaces enriquecidas. Este diseño también fomenta un intercambio de datos mínimo; solo se expone lo necesario para completar la tarea, alineándose con los principios de privacidad.
Autenticación y Sesiones
Cuando un usuario llama por primera vez a una aplicación, el servidor puede necesitar autenticarlo. El SDK de Apps admite flujos de OAuth 2.1; los desarrolladores especifican los alcances y redirigen a los usuarios al proveedor de identidad. Una vez que el usuario otorga el consentimiento, la aplicación obtiene un token y puede acceder a los datos del usuario. La función del servidor es gestionar el estado de la sesión, a menudo almacenando los tokens en una base de datos vinculada a la cuenta de ChatGPT del usuario. Esto asegura que las llamadas de herramientas posteriores puedan reutilizar la sesión sin solicitar de nuevo al usuario.
Principios de Seguridad
OpenAI enfatiza el menor privilegio posible, el consentimiento explícito del usuario y la defensa en profundidad[6]. Las aplicaciones deben solicitar solo los permisos mínimos necesarios, y los usuarios deben autorizar de manera explícita el intercambio de datos; el modelo en sí nunca debe adivinar credenciales. La retención de datos es limitada: el contenido estructurado permanece solo mientras el mensaje del usuario esté activo, y los registros se redactan antes de ser compartidos con los desarrolladores[6]. El acceso a la red para los componentes de la aplicación está restringido por una política de seguridad de contenido; los iframes no pueden acceder a APIs arbitrarias del navegador, y todas las solicitudes HTTP deben originarse desde el servidor en lugar del cliente[7]. Esto previene la ejecución de scripts en sitios cruzados y la exfiltración de tokens.
El SDK de Apps: Construyendo Aplicaciones Reales en ChatGPT

La Experiencia del Desarrollador
El SDK de Apps envuelve el MCP en bibliotecas cliente idiomáticas (actualmente Python y TypeScript) y herramientas de scaffolding. Cuando creas una aplicación, defines las herramientas, registras plantillas de UI e implementas la lógica del servidor. El servidor puede ejecutarse en tu propia infraestructura y utiliza cualquier framework (FastAPI, Express, etc.), pero debe implementar los endpoints del MCP. OpenAI proporciona servidores de desarrollo y un Inspector MCP para probar llamadas localmente.
Los desarrolladores diseñan tanto la lógica como la interfaz de usuario. Las UIs generalmente se escriben en React y se compilan en recursos estáticos. Se sirven dentro de un iframe aislado en ChatGPT. Dentro de este iframe, los desarrolladores pueden acceder a un objeto global window.openai para interactuar con el host. Según la guía Construir una experiencia de usuario personalizada, esta API proporciona:
- Globales: displayMode, maxHeight, theme y locale informan al componente sobre el diseño y estilo [8].
- Payloads de herramientas: toolInput, toolOutput y widgetState permiten leer los argumentos, resultados y estado persistente a través de las representaciones [8].
- Acciones: setWidgetState() guarda el estado que persiste a través de los mensajes; callTool() desencadena una acción del servidor; sendFollowupTurn() envía un mensaje de seguimiento al modelo; requestDisplayMode() solicita ir a pantalla completa o imagen en imagen [8].
- Eventos: el componente puede suscribirse a openai:set_globals cuando el host actualiza el diseño o tema, y a openai:tool_response cuando se resuelve una llamada de herramienta [8].
Estas APIs permiten a los desarrolladores crear componentes interactivos ricos que se mantienen sincronizados con el razonamiento del modelo. Por ejemplo, si un usuario arrastra una tarea a una nueva columna en un tablero kanban, el componente puede enviar un callTool para actualizar el servidor, persistir el nuevo estado y luego devolver un nuevo structuredContent. Mientras tanto, el modelo solo ve el estado general del tablero; la interfaz de usuario maneja detalles como arrastrar y soltar.
Registro de Herramientas y Plantillas
In the server code you register a tool and its template. For instance, in a TypeScript server you might write:
import { Tool, StructuredToolResponse } from "@openai/apps";
// Register UI template
server.registerResource("ui://kanban-board/abc123", buildHtml());
// Define tool schema
const createBoard: Tool = {
name: "createKanbanBoard",
description: "Create a new kanban board with given tasks and columns",
inputSchema: z.object({
title: z.string(),
columns: z.array(z.object({ name: z.string() })),
tasks: z.array(z.object({ name: z.string(), columnIndex: z.number() }))
}),
async execute(input, ctx): Promise<StructuredToolResponse> {
// compute board state
const columns = input.columns.map((col, i) => ({
id: i,
title: col.name,
taskIds: input.tasks.filter(t => t.columnIndex === i).map((_t, idx) => idx)
}));
const tasksById = input.tasks.map((task, id) => ({ id, name: task.name }));
return {
content: `Created board '${input.title}'`,
structuredContent: { title: input.title, columns },
_meta: { tasksById, uiTemplate: "ui://kanban-board/abc123" }
};
}
};
The _meta field includes tasksById for hidden metadata and uiTemplate referencing the registered HTML. When ChatGPT receives this response, it will render the template with the structured content. The window.openai.toolOutput object in the component can then read the board data and display it.
Control de versiones y almacenamiento en caché
Debido a que los recursos como las plantillas de la interfaz de usuario se almacenan en caché en los servidores de OpenAI, los desarrolladores deben incluir un hash único o una versión en el identificador ui://. Los documentos advierten que si despliegas una nueva versión sin actualizar la ruta, los usuarios pueden seguir viendo la interfaz antigua debido al almacenamiento en caché[5]. Una buena práctica es incrustar el SHA del commit o el ID de compilación en la URL. Esto garantiza que cada despliegue resulte en un recurso fresco.
Persistencia del estado y seguimientos
Frecuentemente, los componentes necesitan mantener el estado. Por ejemplo, una aplicación de lista de reproducción podría permitir a los usuarios marcar canciones como favoritas; estas favoritas deberían mantenerse incluso cuando el usuario haga otra pregunta. El método setWidgetState() almacena datos fuera de structuredContent y persiste a través de los turnos[8]. El modelo no ve este estado, asegurando la privacidad.
A veces, una aplicación necesita hacer una pregunta aclaratoria al usuario. El método sendFollowupTurn() permite que el componente envíe un nuevo mensaje a ChatGPT, que luego aparecerá en la transcripción como si el modelo hubiera hecho la pregunta[8]. Esto es útil para flujos de trabajo de varios pasos: por ejemplo, una aplicación de reservas de viajes podría preguntar “¿Cuántas noches te quedarás?” después de que el usuario seleccione un hotel.
Building Your First App: Step‑By‑Step Guide
In this section we will build a simple Task Tracker app that demonstrates the core concepts of the Apps SDK. The app will let a user create tasks and organise them into categories. We choose this example because it is generic, easy to extend and showcases structured content, metadata, custom UI and tool calls.
- Set up the MCP Server
First install the TypeScript SDK and scaffolding tool:
npm install -g @openai/apps-generator
apps init task-tracker
cd task-tracker
npm install
This command scaffolds a project with a server, a React frontend and build scripts. The server uses Express and the @openai/apps library. Run npm run dev to start the development server; the project includes an MCP Inspector that opens in your browser and simulates ChatGPT calling your app.
- Define the Tool
Open src/server.ts and define a tool called createTasks. The tool accepts an array of tasks and returns structured content grouping them by category. It also provides a summary in the content field.
import { Tool, StructuredToolResponse } from "@openai/apps";
export const createTasks: Tool = {
name: "createTasks",
description: "Create a list of tasks grouped by category",
inputSchema: z.object({ tasks: z.array(z.object({ name: z.string(), category: z.string() })) }),
async execute({ tasks }): Promise<StructuredToolResponse> {
const categories = Array.from(new Set(tasks.map(t => t.category)));
const grouped = categories.map(category => ({
name: category,
taskIds: tasks.filter(t => t.category === category).map((_, i) => i)
}));
const tasksById = tasks.map((task, id) => ({ id, name: task.name, category: task.category }));
return {
content: `Created ${tasks.length} tasks in ${categories.length} categories`,
structuredContent: { categories: grouped },
_meta: { tasksById, uiTemplate: "ui://task-tracker/1.0.0" }
};
}
};
Register the template before using it:
server.registerResource("ui://task-tracker/1.0.0", fs.readFileSync(path.join(__dirname, "../dist/index.html"), "utf8"));
server.registerTool(createTasks);
- Build the Custom UI
Next open src/frontend/App.tsx. This React component will read the structuredContent and display categories and tasks. It will also allow users to mark tasks as complete and persist that state using setWidgetState.
import { useEffect, useState } from "react";
declare global {
interface Window {
openai: any;
}
}
export default function App() {
const [complete, setComplete] = useState<{ [id: string]: boolean }>(() => window.openai.widgetState?.complete || {});
const output = window.openai.toolOutput;
const tasksById = output?._meta?.tasksById || [];
const categories = output?.structuredContent?.categories || [];
// persist completion state
useEffect(() => {
window.openai.setWidgetState({ complete });
}, [complete]);
return (
<div className="task-tracker">
{categories.map((cat: any, ci: number) => (
<div key={ci} className="category">
<h3>{cat.name}</h3>
<ul>
{cat.taskIds.map((tid: number) => (
<li key={tid}>
<label>
<input type="checkbox" checked={complete[tid]} onChange={() => setComplete(prev => ({ ...prev, [tid]: !prev[tid] }))} />
{tasksById[tid].name}
</label>
</li>
))}
</ul>
</div>
))}
</div>
);
}
This component uses window.openai.toolOutput to access the structuredContent and _meta fields. It stores completion state in widgetState so that checking a box persists even when the user continues the conversation. On subsequent tool calls, the component can fetch new tasks or update existing ones. This demonstrates how to combine model reasoning with client‑side interactions.
- Testing and Iterating
Run npm run dev again and open the MCP Inspector. In the prompt area, type:
@task‑tracker create a list of tasks: buy milk in shopping, finish report in work, call mom in personal
The inspector will show the structured content and render the task list UI. You can check tasks off; the state persists across turns. You can then ask ChatGPT: “Remind me of my tasks later.” Because the model retains context, it can call the tool again, display the UI and summarise your progress.
How Users Discover and Use Apps

Named Mention and In‑Conversation Discovery
ChatGPT surfaces apps when it believes they can assist the user. There are two primary discovery modes. Named mention occurs when the user explicitly mentions the app name at the beginning of a prompt; in this case, the app will be surfaced automatically[9]. For instance, “@Spotify create a workout playlist” immediately invokes the Spotify integration. The user must place the app name at the start; otherwise the assistant may treat it as part of the conversation.
In‑conversation discovery happens when the model infers that an app could help based on context. The documentation explains that the model evaluates the conversation context, prior tool results and the user’s linked apps to determine which app might be relevant[9]. For example, if you are discussing travel plans, ChatGPT might suggest the Expedia app to book flights. The algorithm uses metadata like tool descriptions and keywords to match the conversation with potential actions[10]. Developers can improve discoverability by writing action‑oriented descriptions and clear UI component names.
Directory and Launcher
OpenAI plans to release an app directory where users can browse and discover new apps[10]. Each listing will include the app name, description, supported prompts and any onboarding instructions. Users can also access the launcher via the “+” button in chat; this shows a menu of available apps based on context. These entry points will help less technical users find and enable apps without memorising names.
Onboarding and Consent
La primera vez que un usuario activa una aplicación, ChatGPT inicia un proceso de incorporación. El modelo pide al usuario que conecte su cuenta (si es necesario) y explica qué datos necesita la aplicación. Las directrices para desarrolladores enfatizan que las aplicaciones deben respetar la privacidad de los usuarios, comportarse de manera predecible y tener políticas claras[11]. Los usuarios deben otorgar o negar permiso explícitamente; no hay acceso silencioso a los datos. Una vez conectada, la aplicación puede permanecer vinculada para interacciones posteriores, pero los usuarios siempre tienen la capacidad de desconectar y revocar permisos.
Privacidad, Seguridad y Diseño Responsable
Principios de Aplicaciones Confiables
Las directrices para desarrolladores de aplicaciones de OpenAI definen varios principios para garantizar que el ecosistema siga siendo seguro y confiable. Las aplicaciones deben proporcionar un servicio legítimo, tener una política de privacidad clara y prácticas de retención de datos, y cumplir con las políticas de uso[11]. Deben minimizar la recopilación de datos, evitar almacenar información personal sensible y no compartir datos de usuario sin consentimiento[12]. Las aplicaciones deben comportarse de manera predecible; no pueden manipular el modelo para producir contenido dañino o engañoso.
Límites y Minimización de Datos
Las directrices enfatizan que las aplicaciones solo deben recopilar datos esenciales para su función y no deben solicitar ni almacenar datos sensibles como registros de salud o identificaciones gubernamentales[12]. El contenido estructurado enviado al modelo no debe contener secretos; los metadatos ocultos no deben almacenar tokens de usuario o detalles privados. Los desarrolladores deben implementar un cifrado fuerte y un almacenamiento seguro para cualquier token obtenido durante OAuth. El servidor debe mantener límites estrictos entre las sesiones de usuario; los datos de un usuario nunca deben filtrarse al contexto de otro.
Medidas de Seguridad en el SDK
La Guía de Seguridad y Privacidad describe los mecanismos de defensa incorporados en la plataforma. Enfatiza el principio de privilegio mínimo y el consentimiento expreso del usuario como principios centrales[6]. La retención de datos es limitada; los registros accesibles para los desarrolladores se redactan para eliminar la información personal identificable, y el contenido estructurado solo se retiene mientras lo requiera el aviso[6]. El acceso a la red desde el iframe está restringido por la política de seguridad de contenido; las solicitudes externas deben pasar por el servidor, evitando solicitudes de origen cruzado no autorizadas[7]. La autenticación utiliza flujos de OAuth estándar de la industria con tokens de corta duración. Se requiere que los desarrolladores implementen revisiones de seguridad, canales de informes de errores y monitoreo de incidentes para mantener la preparación operacional[7].
Equidad y Adecuación
Las aplicaciones deben ser apropiadas para un público amplio. Las directrices prohíben aplicaciones que ofrezcan contenido extenso, automatización compleja o anuncios[13]. Por ejemplo, una aplicación no debería intentar ofrecer un video de 30 minutos o replicar una red social completa dentro de ChatGPT. La plataforma fomenta interacciones concisas que complementen el flujo conversacional. Las violaciones pueden llevar al rechazo o la eliminación.
Oportunidades y Consideraciones
Un Nuevo Canal de Distribución para Desarrolladores
Al abrir ChatGPT a aplicaciones de terceros, OpenAI se posiciona como una “capa de intención” entre los usuarios y los servicios. Los desarrolladores ahora pueden llegar a millones de usuarios a través de la interfaz de chat sin construir aplicaciones web o móviles por separado. Las aplicaciones tienen el potencial de reducir la fricción: en lugar de descargar una aplicación o visitar un sitio web, los usuarios solo mencionan el servicio en la conversación. Esto podría democratizar el acceso a herramientas y nivelar el campo de juego para pequeños desarrolladores.
Las primeras asociaciones muestran las posibilidades: los usuarios pueden ver conferencias de Coursera mientras hacen preguntas a ChatGPT; diseñar carteles en Canva; explorar opciones de viaje en Expedia o listados de bienes raíces en Zillow; generar listas de reproducción en Spotify; o diagramar ideas con Figma[14][13]. Debido a que las aplicaciones funcionan dentro del chat, el modelo puede resumir, analizar y generar recomendaciones, convirtiendo contenido estático en lecciones interactivas. Las aplicaciones también ofrecen múltiples modos de visualización—tarjetas en línea, pantalla completa o imagen en imagen—proporcionando flexibilidad para diferentes tareas[15].
Transformando las expectativas del usuario
La capacidad de usar aplicaciones sin cambiar de contexto podría redefinir cómo las personas interactúan con los servicios. ChatGPT se convierte no solo en un chatbot, sino en un sistema operativo universal para intenciones. Como observó Casey Newton, esto nos lleva de lanzar aplicaciones discretas a simplemente expresar lo que queremos[16]. Algunos analistas comparan este cambio con el lanzamiento de la App Store o el navegador: una plataforma única que agrega funcionalidad y competencia.
Sin embargo, esta transformación plantea preguntas sobre control y poder. Si ChatGPT determina qué aplicaciones mostrar, podría convertirse en un guardián. Newton advierte que un “grafo de IA” basado en las preferencias del usuario podría crear riesgos de privacidad más serios que los de las redes sociales[16]. Los incentivos económicos podrían llevar a una colocación o clasificación de aplicaciones de pago. Los desarrolladores podrían sentirse presionados a diseñar para ChatGPT en lugar de mantener su relación con los usuarios. Es crucial que la plataforma se mantenga transparente y justa para conservar la confianza.
Implicaciones Regulatorias y Éticas
Dado que las aplicaciones pueden acceder a datos personales, como ubicación, contactos y métodos de pago, los reguladores pueden examinar cómo fluye la información a través de ChatGPT. Los desarrolladores deben cumplir con leyes de privacidad como el RGPD, aunque la plataforma aún no está disponible en la Unión Europea[17]. OpenAI ha prometido controles de privacidad más detallados y opciones de monetización, incluyendo un protocolo de comercio agente que permitirá realizar compras instantáneas dentro del chat[18]. El éxito de este ecosistema dependerá de una seguridad robusta, un consentimiento claro del usuario y modelos económicos justos.
Direcciones Futuras e Investigación
El SDK de Apps todavía está en vista previa y muchas funciones aún deben desarrollarse. La hoja de ruta para desarrolladores incluye:
- Flujo de envío y revisión – Actualmente, los desarrolladores pueden crear aplicaciones pero no listarlas públicamente. Un proceso de revisión formal garantizará el cumplimiento de las directrices y la confianza.
- Compartición de ingresos y monetización – OpenAI insinuó un protocolo de comercio agentico que podría permitir a los usuarios comprar productos directamente en el chat[18]. Esto plantea oportunidades para el comercio electrónico, pero también preguntas sobre tarifas, clasificaciones y competencia.
- Herramientas para desarrolladores – Más lenguajes y frameworks, herramientas de depuración mejoradas y canales de implementación más sencillos reducirán la barrera de entrada. La naturaleza de estándar abierto de MCP puede llevar a implementaciones impulsadas por la comunidad y proveedores de alojamiento.
- Interoperabilidad – Debido a que MCP es abierto, otras plataformas o modelos podrían adoptarlo. Esto podría permitir un ecosistema de aplicaciones cruzado donde los desarrolladores escriban una vez y ejecuten en cualquier lugar. La investigación sobre la estandarización de protocolos de agentes y el intercambio de contexto será importante.
- Investigación de seguridad – Evaluar cómo prevenir la inyección de prompts, código malicioso o el uso indebido de datos de usuarios sigue siendo un área importante de investigación. Los documentos sobre ataques adversarios contra aplicaciones integradas con LLM informarán sobre las mejores prácticas y directrices.
Conclusión: Un nuevo sistema operativo en proceso
La introducción de Apps en ChatGPT y el SDK de Apps basado en MCP marca un cambio significativo en cómo interactuamos con el software. Al llevar aplicaciones de terceros directamente a la interfaz de chat, OpenAI ha creado una nueva plataforma que combina lenguaje natural, razonamiento e interfaces de usuario interactivas. El Protocolo de Contexto de Modelo proporciona una manera abierta y estandarizada para que los modelos llamen herramientas y rendericen componentes; el SDK de Apps simplifica el desarrollo al manejar la comunicación del servidor, la integración de la interfaz de usuario y la gestión de estados. Ejemplos paso a paso como el Rastreador de Tareas demuestran lo fácil que es construir una aplicación útil mientras se mantienen estrictos límites de datos y privacidad.
Sin embargo, esta innovación conlleva responsabilidades. Los desarrolladores deben seguir pautas que prioricen la privacidad, seguridad y equidad del usuario[11][12]. Los mecanismos de seguridad como el mínimo privilegio y el consentimiento explícito protegen a los usuarios[6]. Al mismo tiempo, los observadores de la industria advierten que la plataforma podría crear nuevas formas de restricción y riesgos de privacidad[16]. A medida que el ecosistema madura, la transparencia, los estándares abiertos y el compromiso de la comunidad determinarán si la plataforma de aplicaciones de ChatGPT se convierte en una capa transformadora y confiable para las tareas diarias.
[1] Últimas noticias de la carrera armamentista de IA: ChatGPT ahora permite a los usuarios conectarse con Spotify y Zillow en los chats
[2] [3] [4] [5] Configura tu servidor
https://developers.openai.com/apps-sdk/build/mcp-server
[6] [7] Seguridad y privacidad
https://developers.openai.com/apps-sdk/guides/security-privacy
[8] Crea una experiencia de usuario personalizada
https://developers.openai.com/apps-sdk/build/custom-ux
[9] [10] Interacción del usuario
https://developers.openai.com/apps-sdk/concepts/user-interaction
[11] [12] Directrices para desarrolladores de aplicaciones
https://developers.openai.com/apps-sdk/app-developer-guidelines/
[13] Las aplicaciones de ChatGPT están en vivo: Aquí están las primeras que puedes probar | The Verge
https://www.theverge.com/news/793081/chagpt-apps-sdk-spotify-zillow-openai
[14] OpenAI DevDay 2025: ChatGPT obtiene aplicaciones, AgentKit para desarrolladores y modelos GPT más económicos
[15] OpenAI anuncia Apps SDK que permite a ChatGPT lanzar y ejecutar aplicaciones de terceros como Zillow, Canva, Spotify | VentureBeat
https://venturebeat.com/ai/openai-announces-apps-sdk-allowing-chatgpt-to-launch-and-run-third-party
[16] Nueva plataforma, riesgos conocidos: Zillow y Expedia apuestan por el lanzamiento de aplicaciones de ChatGPT de OpenAI – GeekWire
[17] OpenAI DevDay: Aplicaciones de ChatGPT, AgentKit, y lanzamiento GA de Codex - SD Times
https://sdtimes.com/ai/openai-devday-chatgpt-apps-agentkit-and-ga-release-of-codex/
[18] OpenAI quiere convertir a ChatGPT en una interfaz universal de aplicaciones - Ars Technica
https://arstechnica.com/ai/2025/10/openai-wants-to-make-chatgpt-into-a-universal-app-frontend/










