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

# Apps SDK compatibility

> Understand how MCP Apps run in ChatGPT and how mcp-use handles Apps SDK compatibility.

ChatGPT supports MCP Apps. That means a widget built with the MCP Apps bridge can run in ChatGPT and in other MCP Apps-compatible hosts.

`mcp-use` handles the compatibility details for you. Build the widget with the standard `mcp-use` server and React APIs; `mcp-use` emits the metadata ChatGPT needs and maps host behavior through the same hooks you use everywhere else.

## How ChatGPT fits in

OpenAI's Apps SDK remains supported, and ChatGPT also implements the MCP Apps UI standard. `mcp-use` generates MCP Apps metadata and ChatGPT compatibility metadata from the same widget definitions.

In practice:

* Bind the tool with `view: { name }`, declare `outputSchema`, and return raw `content` plus `structuredContent`.
* Use `useToolContext()`, `useViewState()`, and `useCallTool()` in React views.
* Let `mcp-use` translate compatibility metadata for ChatGPT.
* Reach for Apps SDK extensions only when a ChatGPT-specific capability has no shared MCP Apps equivalent yet.

## What mcp-use abstracts

The same widget code should work across supported hosts:

| Widget behavior                                           | mcp-use API         |
| --------------------------------------------------------- | ------------------- |
| Read tool input, structured output, content, and metadata | `useToolContext()`  |
| Read host environment data                                | `useHostContext()`  |
| Call MCP tools from the widget                            | `useCallTool()`     |
| Update model-visible view state                           | `useViewState()`    |
| Describe visible UI                                       | `ModelContext`      |
| Send a follow-up user message                             | `useSendFollowUp()` |
| Request inline, fullscreen, or picture-in-picture display | `useDisplayMode()`  |

These APIs keep widget code focused on behavior instead of host-specific bridge details.

## Next steps

* Use [Build widgets](/typescript/mcp-apps/widgets) for the normal MCP Apps workflow.
* Use [Model context](/typescript/mcp-apps/model-context) to decide what the model and widget should see.
* Use [Interactivity](/typescript/mcp-apps/interactivity) for tool calls, state, follow-up messages, and display controls.
