Comparativas
MCP Apps vs MCP-UI vs Apps SDK de OpenAI: sobre cuál construir
Tres nombres para la misma idea: una interfaz interactiva que una llamada a una tool pinta dentro del chat. En 2026 uno es el estándar y los otros dos son de donde salió.
6 min de lectura
#La respuesta corta
MCP Apps es el estándar; MCP-UI y el Apps SDK de OpenAI son los dos proyectos de los que nace. Si estás comparando MCP Apps con MCP-UI, o MCP Apps con las apps de ChatGPT, en 2026 construye sobre MCP Apps: es una extensión oficial de MCP, ChatGPT la implementa, Claude, VS Code y Microsoft 365 Copilot la pintan, y MCP-UI ya la emite. Las extensiones propias de ChatGPT se añaden encima cuando hacen falta, nunca en su lugar.
Lo que sigue explica de dónde viene cada uno, en qué se diferencian campo a campo y qué hacer con el código que ya tengas escrito para cualquiera de los dos anteriores.
#De dónde viene cada uno
MCP-UI llegó primero. Es un proyecto de código abierto de la comunidad, liderado por Ido Salomon y Liad Yosef, que demostró que una tool MCP podía devolver HTML interactivo en vez de texto plano. Tenía SDK de servidor para TypeScript, Python y Ruby, y lo adoptaron equipos como Postman, Hugging Face, Shopify, Goose y ElevenLabs (la especificación de MCP Apps los cita). Su web lo dice sin rodeos: "MCP-UI is now standardized into MCP Apps" (mcpui.dev).
El Apps SDK de OpenAI era la forma de meter interfaces en ChatGPT: un servidor MCP, una plantilla HTML servida como text/html+skybridge y un objeto window.openai en la página. A octubre de 2026, OpenAI llama "plugins" a las apps de ChatGPT y las documenta en developers.openai.com/plugins. Muchos tutoriales de finales de 2025 siguen enseñando el camino de skybridge.
MCP Apps es la fusión. La especificación, SEP-1865, se propuso el 21 de noviembre de 2025 con autores de MCP-UI, OpenAI y Anthropic, y el 26 de enero de 2026 pasó a ser la "first official MCP extension" (blog de MCP). Su identificador de extensión es io.modelcontextprotocol/ui. El 22 de febrero de 2026 OpenAI anunció que "ChatGPT is now fully compatible with the MCP Apps spec" (changelog).
Si prefieres empezar por los conceptos, lee antes qué son las MCP Apps.
#MCP Apps vs MCP-UI vs Apps SDK, cara a cara
| MCP Apps | MCP-UI | Apps SDK de OpenAI | |
|---|---|---|---|
| De quién es | Proyecto MCP (extensión oficial) | Proyecto de la comunidad, ya integrado en MCP Apps | OpenAI |
| Estado en 2026 | Estable desde el 26 de enero de 2026 | Estandarizado en MCP Apps; los tipos de contenido antiguos son legacy | Sigue funcionando; ChatGPT implementa MCP Apps y mantiene sus campos como alias |
| Tipo MIME | text/html;profile=mcp-app | Ahora text/html;profile=mcp-app. Legacy: rawHtml, externalUrl (text/uri-list), remoteDom (application/vnd.mcp-ui.remote-dom) | text/html+skybridge |
| Cómo apunta la tool a la interfaz | _meta.ui.resourceUri en la tool, un recurso ui:// | Legacy: la tool devolvía el recurso de interfaz en su resultado. Ahora: _meta.ui.resourceUri | _meta["openai/outputTemplate"] |
| Campos de CSP | _meta.ui.csp: connectDomains, resourceDomains, frameDomains, baseUriDomains | Ahora los de MCP Apps | openai/widgetCSP: connect_domains, resource_domains, frame_domains |
| API del puente | JSON-RPC sobre postMessage (ui/initialize, ui/notifications/tool-result, tools/call, ui/message); clase App de @modelcontextprotocol/ext-apps | Ahora el puente de MCP Apps; AppRenderer de @mcp-ui/client para hosts | window.openai (callTool, widgetState, requestModal...) |
| Hosts que lo pintan | Claude (web y escritorio), ChatGPT, GitHub Copilot en VS Code, Microsoft 365 Copilot, Goose, Postman, MCPJam, Cursor y más (matriz de clientes) | Los hosts de MCP Apps, y los hosts MCP-UI antiguos para los tipos legacy | ChatGPT |
Hay dos cosas que saltan a la vista. Los campos de MCP Apps son casi un cambio de nombre uno a uno de los de OpenAI, y por eso migrar es sobre todo mecánico. Y el único host que lee los campos de skybridge es ChatGPT, mientras que los de MCP Apps llegan a todos los hosts de la matriz, ChatGPT incluido.
#Tengo código de MCP-UI: ¿qué hago?
Actualiza los paquetes y mira qué tipo de contenido usabas.
createUIResourcede@mcp-ui/serverya produce un recurso con el tipo MIMEtext/html;profile=mcp-app. Si servías HTML, al actualizar pasas al estándar casi sin tocar nada más.- Haz que la tool apunte al recurso con
_meta.ui.resourceUriy sirve el HTML desde un handler de recursoui://, en vez de devolver la interfaz dentro del resultado de la tool. Ese es el patrón de MCP Apps: la definición de la tool nombra su interfaz y el host lee el recurso aparte. externalUrlyremoteDomson legacy. Una URL externa pasa a ser una página HTML autocontenida (o un iframe declarado enframeDomains, que algunos hosts restringen). Una vista Remote DOM hay que rehacerla como vista HTML.- Si lo que construyes es un host y no un servidor,
AppRendererde@mcp-ui/clientes el renderizador que recomienda MCP-UI, y@modelcontextprotocol/ext-apps/app-bridge, el oficial, es la otra opción.
#Tengo código del Apps SDK de OpenAI: ¿qué hago?
Déjalo funcionando y muévelo campo a campo. La guía de migración oficial traduce cada pieza:
| Apps SDK | MCP Apps |
|---|---|
openai/outputTemplate | ui.resourceUri |
text/html+skybridge | text/html;profile=mcp-app |
openai/widgetCSP (connect_domains, resource_domains, frame_domains) | ui.csp (connectDomains, resourceDomains, frameDomains) |
openai/widgetDomain | ui.domain |
openai/widgetPrefersBorder | ui.prefersBorder |
openai/widgetAccessible, openai/visibility | ui.visibility |
window.openai.callTool | app.callServerTool |
ChatGPT sigue aceptando openai/outputTemplate como alias de compatibilidad, y openai/visibility quedó obsoleto el 21 de julio de 2026. El repo oficial trae además una skill de agente, migrate-oai-app, que hace la conversión contigo. El paso a paso, con el código de la vista, está en la interfaz de un plugin de ChatGPT con MCP Apps.
#Qué sigue siendo propio de cada host
El estándar cubre lo común: el recurso, el saludo inicial, la entrada y el resultado de la tool, llamar a tools, abrir enlaces, mandar mensajes, los modos de visualización y el tema. Hay cosas que siguen dependiendo del host:
- Las extensiones de ChatGPT.
requestCheckout,requestModal,uploadFile,selectFiles,getFileDownloadUrlywidgetState/setWidgetStateviven enwindow.openai. El consejo de la propia OpenAI es que primero funcione el flujo de MCP Apps y quewindow.openaise use "only for capabilities that the shared specification does not cover", detectando cada extensión y con alternativa (documentación de OpenAI). - El dominio del sandbox.
ui.domaindepende del host (por ejemplo, un hash bajoclaudemcpcontent.comen Claude o un nombre bajooaiusercontent.comen ChatGPT). - Los iframes anidados. Claude restringe
frameDomainshasta que pase una revisión de seguridad, y ChatGPT bloquea los iframes anidados por defecto. Lo tienes en la CSP de MCP Apps explicada. - El aspecto. Cada host pasa sus variables CSS, sus fuentes y su tema en el contexto del host; tu vista debería leerlos en vez de fijar colores. Más en temas en MCP Apps.
- Si se pinta o no. Los clientes solo de texto, como Claude Code en la terminal, llaman a la tool y enseñan su contenido de texto. Qué clientes pintan la interfaz está en clientes de MCP Apps.
#¿Cuál uso?
- Empiezas de cero: MCP Apps. Usa
@modelcontextprotocol/ext-apps(registerAppTool,registerAppResource, la claseApp) o un framework construido encima. Mira crear una MCP App en TypeScript. - Solo apuntas a ChatGPT y necesitas pagos, modales o ficheros: la base sigue siendo MCP Apps, con esas extensiones de
window.openaiencima y detectadas antes de usarlas. - Tienes una app del Apps SDK en producción: migra campo a campo; los alias te dan margen, pero la interfaz nueva debería usar los campos compartidos.
- Tienes código de MCP-UI: actualiza
@mcp-ui/servery pasa a_meta.ui.resourceUri; dejaexternalUrlyremoteDom. - Construyes un host: implementa MCP Apps con el app bridge oficial o con
AppRendererde MCP-UI. - Quieres la interfaz sin escribir la vista: los constructores y frameworks de constructores de MCP Apps comparados apuntan todos a MCP Apps.
Widgetry es uno de ellos: produce widgets MCP Apps estándar (el documento text/html;profile=mcp-app más un manifiesto con _meta.ui.resourceUri y _meta.ui.csp) a partir de una plantilla y un diseño, los previsualiza en un host MCP Apps de verdad y deja que tu servidor los enlace. No usa skybridge ni window.openai, así que el mismo widget se pinta en ChatGPT, en Claude y en el resto de hosts.