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:
- Use
widget: { name }andwidget({ props, output })on the server. - Use
useWidget()anduseCallTool()in React widgets. - Let
mcp-usetranslate 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, result props, metadata, host context, and state | useWidget() |
| Call MCP tools from the widget | useCallTool() |
| Update model-visible widget state | useWidget().setState or ModelContext |
| Send a follow-up user message | useWidget().sendFollowUpMessage |
| Request inline, fullscreen, or picture-in-picture display | useWidget().requestDisplayMode |
Next steps
- Use Build widgets for the normal MCP Apps workflow.
- Use Model context to decide what the model and widget should see.
- Use Interactivity for tool calls, state, follow-up messages, and display controls.