> ## Documentation Index
> Fetch the complete documentation index at: https://docs.skybridge.tech/llms.txt
> Use this file to discover all available pages before exploring further.

# ChatGPT Plugins and MCP Apps

> How ChatGPT and other hosts run your views, and what Skybridge unifies

![ChatGPT Plugins and MCP Apps](/images/mcp-apps.webp)

MCP Apps is the open contract for rendering interactive views inside an AI client. ChatGPT implements it and adds `window.openai` on top: ChatGPT-specific APIs and compatibility aliases for its own capabilities. Skybridge targets the MCP Apps baseline and reaches for `window.openai` only where you opt into a ChatGPT feature, so one server and one set of views run on both.

## MCP Apps

MCP Apps extends the [Model Context Protocol](https://modelcontextprotocol.io) with a UI contract: a tool result can carry a view, and the view talks to the host over a JSON-RPC `ui/*` bridge to read the tool's data, call other tools, sync state, and request layout. It is the portable baseline, so a view built against it runs on any host that implements the spec. The full contract is in the [MCP Apps specification](https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/2026-01-26/apps.mdx).

## ChatGPT (`window.openai`)

ChatGPT implements MCP Apps and adds `window.openai` on top: ChatGPT-specific APIs and compatibility aliases for capabilities such as [file params](/api-reference/file-ref.md) and the [open-in-app URL](/api-reference/use-set-open-in-app-url.md). OpenAI's guidance is to use the MCP Apps `ui/*` bridge by default and reach for `window.openai` only for those extras. The [plugin reference](https://developers.openai.com/plugins/reference) documents the surface, and [Add UI to your MCP server](https://developers.openai.com/plugins/build/chatgpt-ui) covers how the two fit together.

## In Skybridge

You write one MCP server and one set of views. Skybridge detects the runtime when the view loads and routes each call to the right layer: the MCP Apps bridge everywhere, `window.openai` only for ChatGPT features. Where a capability exists on one host and not the other, it surfaces as ChatGPT versus Claude in the [compatibility overview](/api-reference/overview.md). When you need a raw value the cross-host hooks don't expose, [`useAppsSdkContext`](/api-reference/use-apps-sdk-context) and [`useMcpAppContext`](/api-reference/use-mcp-app-context) are the escape hatches to each layer.

### Feature Mapping

Each hook, and the host API it routes to on either runtime.

| Skybridge | ChatGPT (`window.openai`) | MCP Apps (`ext-apps`) |
| - | - | - |
| [`useToolInfo`](/api-reference/use-tool-info) | `toolInput`, `toolOutput`, `toolResponseMetadata` | `ui/notifications/tool-input`, `ui/notifications/tool-result` |
| [`useViewState`](/api-reference/use-view-state) | `viewState`, `setViewState()` | `ui/update-model-context` |
| [`useCallTool`](/api-reference/use-call-tool) | `callTool()` | `tools/call` |
| [`useSendFollowUpMessage`](/api-reference/use-send-follow-up-message) | `sendFollowUpMessage()` | `ui/message` |
| [`useOpenExternal`](/api-reference/use-open-external) | `openExternal()` | `ui/open-link` |
| [`useDisplayMode`](/api-reference/use-display-mode) | `displayMode`, `requestDisplayMode()` | `ui/request-display-mode` |
| [`useUser`](/api-reference/use-user) | `theme`, `locale`, `userAgent` | `ui/notifications/host-context-changed` |
| [`useViewport`](/api-reference/use-viewport) | `maxHeight`, `safeArea` | `ui/notifications/host-context-changed` |
| [`useRequestModal`](/api-reference/use-request-modal) | `requestModal()` | Polyfilled in-iframe |
| [`useRequestClose`](/api-reference/use-request-close) | `requestClose()` | `ui/notifications/request-teardown` |
| [`useRequestSize`](/api-reference/use-request-size) | Not supported | `ui/notifications/size-changed` |
| [`useFiles`](/api-reference/use-files) | `uploadFile()`, `getFileDownloadUrl()` | Not supported |
| [`useSetOpenInAppUrl`](/api-reference/use-set-open-in-app-url) | `setOpenInAppUrl()` | Not supported |

> **[Compatibility](/api-reference/overview.md)**
>
> Which hosts each API runs on

> **[useAppsSdkContext](/api-reference/use-apps-sdk-context.md)**
>
> Read a raw ChatGPT (`window.openai`) value

> **[useMcpAppContext](/api-reference/use-mcp-app-context.md)**
>
> Read a raw MCP Apps value


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.