What problem does it solve? Plain MCP tools return only text or JSON, which falls short when a tool needs structured input, visual output, or explicit user confirmation. This Skill guides you through adding interactive UI widgets (pickers, forms, charts, confirm dialogs) to an MCP server so they render inline in hosts like Codex and ChatGPT. ## Core Features & Use Cases - Widget-enabled tools: Register tools that declare a UI resource via _meta.ui.resourceUri while returning plain data, with the HTML served as a separate resource using the text/html;profile=mcp-app MIME type. - Bidirectional widget runtime: Use the App class from @modelcontextprotocol/ext-apps inside the iframe to receive tool results, send messages back to the conversation, call server tools, and follow host theme. - Decision guidance: Route correctly between spec-native elicitation and full widgets, and choose between remote streamable-HTTP deployment and local MCPB-packaged apps. - Use Case: Build a contact picker tool where Codex calls pick_contact, the host renders a searchable list widget in an iframe, and the user's click sends the selected contact back into the conversation. ## Quick Start Ask the AI to scaffold an MCP app with an interactive picker widget using the ext-apps SDK, including the tool registration, HTML resource, and bundle inlining.