useViewState and ModelContext update it as the user interacts.
Choose the right channel
Keep structured choices in view state
UseuseViewState for selections, filters, drafts, and progress that future model turns should understand.
window.openai.widgetState. Other MCP Apps hosts keep it for the current iframe lifetime until the protocol provides a restoration channel.
Describe visible UI
UseModelContext for natural-language descriptions that follow the React component lifecycle.
Understand the merged snapshot
The runtime merges structured state and the serialized context tree into one complete object:_uiContext is a reserved model-visible field. useViewState filters it from application state and rejects developer state containing the same key.
Every write sends the complete snapshot. On MCP Apps hosts, mcp-use sends the object as structuredContent and a JSON text block as content through ui/update-model-context. On ChatGPT, mcp-use writes the object to modelContent with window.openai.setWidgetState.
Keep ephemeral values local
Use ReactuseState for transient details that the model does not need, such as hover state, open tooltips, or animation progress.
Next steps
- Read the
useViewStateAPI reference for signatures, errors, and host behavior. - Read the
ModelContextAPI reference for lifecycle and nesting. - Use Interactivity for tool calls and follow-up messages.