Facebook Apps (2007-2025)
Facebook embedded your app via iframe. You hosted everything on your servers—Facebook just framed it and passed user data via signed requests. This meant companies like Zynga could build standard web apps and run them inside Facebook with minimal integration work. When Zynga wanted to leave, the games were portable—they were never Facebook-native.
Sidenote: Early on when Facebook launched apps the entire friend list was shared with the developers. Hard to imagine nowadays.
ChatGPT Apps (Apps SDK)
OpenAI's Apps SDK builds on MCP. You build two things: an MCP server that defines tools, and a web component (React, vanilla JS, whatever) that renders in a sandboxed iframe. The iframe communicates with ChatGPT via `window.openai`—calling tools, reading theme/locale, managing state. Tools return `structuredContent` plus `_meta` pointing to your UI template.
- https://openai.com/index/introducing-apps-in-chatgpt/
- https://developers.openai.com/apps-sdk/quickstart/
Claude + MCP Apps
Claude also now supports MCP Apps (shipped last week). Same concept: tools declare a `ui://` resource, the host renders HTML in a sandboxed iframe, bidirectional communication happens via JSON-RPC over postMessage. The spec was jointly authored by Anthropic and OpenAI—same protocol, same SDK. Launch partners include Figma, Asana, Slack, Canva, monday.com.
- https://blog.modelcontextprotocol.io/posts/2026-01-26-mcp-apps/
- https://modelcontextprotocol.io/docs/extensions/apps
The convergence
Both platforms now use MCP. OpenAI adopted it in March 2025, and the protocol was donated to the Linux Foundation in December 2025. MCP Apps is the first official extension—jointly developed by Anthropic and OpenAI. Build once, deploy to both.
Key differences from Facebook:
Facebook apps had visual interfaces in an iframe wrapper around your whole app. AI apps render UI inline in conversation —small widgets, not full applications. The model decides when to invoke your tools and narrates around your UI. Your iframe talks to the host via a bridge API, not via page-level signed requests.
For us at Midpage, we can build one MCP server with tools (search, analyze, quote) and one set of UI components. That single integration works on both Claude and ChatGPT.