What problem does it solve? Plain MCP tools return only text or JSON, which falls short when a user must pick from a large list, confirm a destructive action, or view spatial data like charts and diffs. This Skill guides you through adding interactive UI widgets to an MCP server so tools can render pickers, forms, dashboards, and confirmation dialogs directly inside Claude, ChatGPT, or any host implementing the apps surface. ## Core Features & Use Cases - Widget-enabled tool registration: Attach a ui:// HTML resource to any tool via _meta.ui.resourceUri using registerAppTool and registerAppResource from @modelcontextprotocol/ext-apps, with automatic graceful degradation on hosts without the apps surface. - Bidirectional widget runtime: Use the App class inside the sandboxed iframe to receive tool results, send messages into the conversation, call server tools, open links, and adapt to host theme and display mode. - Production guidance: Reference docs cover iframe CSP/sandbox constraints, payload size budgeting, authless abuse protection with rate limiting, widget HTML templates, and the connector-directory submission checklist. - Use Case: You are building a contacts MCP server and want users to pick a contact from a searchable list instead of typing an ID. This Skill walks you through registering a picker tool, serving the widget HTML with the inlined ext-apps bundle, and piping the selection back into the conversation. ## Quick Start Ask the AI to use the build-mcp-app skill to add an interactive contact picker widget to your MCP server.