What problem does it solve? Plain MCP tools return only text or JSON, which falls short when users need to pick from large lists, confirm destructive actions, or view charts and previews. This Skill guides you through adding interactive UI widgets to an MCP server so tools can render forms, pickers, dialogs, and displays directly inside the chat surface. ## Core Features & Use Cases - Widget-enabled tools: Register tools with _meta.ui.resourceUri and serve HTML resources via registerAppResource using the @modelcontextprotocol/ext-apps package. - Bidirectional widget runtime: Use the App class inside the sandboxed iframe to receive tool results, send messages to the conversation, call server tools, and follow host theme changes. - Decision guidance: Determine when a widget beats plain text, and when spec-native elicitation covers the need without any UI code. - Use Case: Build a contact picker tool where Claude calls pick_contact, the host renders a searchable list widget in an iframe, and the user's selection is injected back into the conversation as a message. ## Quick Start Ask Claude to add an interactive picker widget to your MCP server tool using the ext-apps SDK.