add-app-to-server
This skill should be used when the user asks to "add an app to my MCP server", "add UI to my MCP server", "add a view to my MCP…
This skill should be used when the user asks to "create an MCP App", "add a UI to an MCP tool", "build an interactive MCP View", "scaffold an MCP App", or needs guidance on MCP Apps SDK patterns, UI-resource registration, MCP App lifecycle, or host integration. Provides
Claude Code
$ npx -y skills add modelcontextprotocol/ext-apps --skill create-mcp-app --agent claude-code
Codex
$ npx skills add modelcontextprotocol/ext-apps --skill create-mcp-app -a codex -y
Cursor
$ npx skills add modelcontextprotocol/ext-apps --skill create-mcp-app -a cursor -y
Gemini CLI
$ npx skills add modelcontextprotocol/ext-apps --skill create-mcp-app -a gemini-cli -y
GitHub Copilot
$ npx skills add modelcontextprotocol/ext-apps --skill create-mcp-app -a github-copilot -y
OpenCode
$ npx skills add modelcontextprotocol/ext-apps --skill create-mcp-app -a opencode -y
Windsurf
$ npx skills add modelcontextprotocol/ext-apps --skill create-mcp-app -a windsurf -y
name: create-mcp-app description: This skill should be used when the user asks to "create an MCP App", "add a UI to an MCP tool", "build an interactive MCP View", "scaffold an MCP App", or needs guidance on MCP Apps SDK patterns, UI-resource registration, MCP App lifecycle, or host integration. Provides comprehensive guidance for building MCP Apps with interactive UIs.
Build interactive UIs that run inside MCP-enabled hosts like Claude Desktop. An MCP App combines an MCP tool with an HTML resource to display rich, interactive content.
Every MCP App requires two parts linked together:
1. **Tool** - Called by the LLM/host, returns data 2. **Resource** - Serves the bundled HTML UI that displays the data
The tool's `_meta.ui.resourceUri` references the resource's URI.
Host calls tool → Host renders resource UI → Server returns result → UI receives result.
| Framework | SDK Support | Best For | |-----------|-------------|----------| | React | `useApp` hook provided | Teams familiar with React | | Vanilla JS | Manual lifecycle | Simple apps, no build complexity | | Vue/Svelte/Preact/Solid | Manual lifecycle | Framework preference |
**Adding to existing MCP server:**
**Creating new MCP server:**
Clone the SDK repository for working examples and API documentation:
git clone --branch "v$(npm view @modelcontextprotocol/ext-apps version)" --depth 1 https://github.com/modelcontextprotocol/ext-apps.git /tmp/mcp-ext-apps
Learn and adapt from `/tmp/mcp-ext-apps/examples/basic-server-{framework}/`:
| Template | Key Files | |----------|-----------| | `basic-server-vanillajs/` | `server.ts`, `src/mcp-app.ts`, `mcp-app.html` | | `basic-server-react/` | `server.ts`, `src/mcp-app.tsx` (uses `useApp` hook) | | `basic-server-vue/` | `server.ts`, `src/App.vue` | | `basic-server-svelte/` | `server.ts`, `src/App.svelte` | | `basic-server-preact/` | `server.ts`, `src/mcp-app.tsx` | | `basic-server-solid/` | `server.ts`, `src/mcp-app.tsx` |
Each template includes:
Read JSDoc documentation directly from `/tmp/mcp-ext-apps/src/`:
| File | Contents | |------|----------| | `src/app.ts` | `App` class, handlers (`ontoolinput`, `ontoolresult`, `onhostcontextchanged`, `onteardown`, etc.), lifecycle | | `src/server/index.ts` | `registerAppTool`, `registerAppResource`, helper functions | | `src/spec.types.ts` | All type definitions: `McpUiHostContext`, `McpUiStyleVariableKey` (CSS variable names), `McpUiResourceCsp` (CSP configuration), etc. | | `src/styles.ts` | `applyDocumentTheme`, `applyHostStyleVariables`, `applyHostFonts` | | `src/react/useApp.tsx` | `useApp` hook for React apps |
See `/tmp/mcp-ext-apps/docs/patterns.md` for detailed recipes:
`/tmp/mcp-ext-apps/examples/basic-host/` shows one way an MCP Apps-capable host could be implemented. Real-world hosts like Claude Desktop are more sophisticated—use basic-host for local testing and protocol understanding, not as a guarantee of host behavior.
**Always** use `npm install` to add dependencies rather than manually writing version numbers:
npm install @modelcontextprotocol/ext-apps @modelcontextprotocol/client@^2.0.0 @modelcontextprotocol/server@^2.0.0 @modelcontextprotocol/node@^2.0.0 @modelcontextprotocol/express@^2.0.0 zod@^4.2.0 express cors npm install -D typescript vite vite-plugin-singlefile concurrently cross-env @types/node @types/express @types/cors
ext-apps 2.x requires the split base MCP SDK packages (`@modelcontextprotocol/client`, `server`, `node`, `express`) at `^2.0.0`; `@modelcontextprotocol/core` comes in transitively. Do not add the legacy `@modelcontextprotocol/sdk` v1 package or substitute unpublished local packages.
Unless the user has specified otherwise, use `tsx` for running TypeScript server files. For example:
npm install -D tsx npm pkg set scripts.dev="cross-env NODE_ENV=development concurrently 'cross-env INPUT=mcp-app.html vite build --watch' 'tsx --watch main.ts'"
> [!NOTE] > The SDK examples use `bun` but generated projects should default to `tsx` for broader compatib
Official repo for spec & SDK of MCP Apps protocol - standard for UIs embedded AI chatbots, served by MCP servers
This skill should be used when the user asks to "add an app to my MCP server", "add UI to my MCP server", "add a view to my MCP…
This skill should be used when the user asks to "add MCP App support to my web app", "turn my web app into a hybrid MCP App",…
This skill should be used when the user asks to "migrate from OpenAI Apps SDK", "convert OpenAI App to MCP", "port from…
Migrates React projects and components from Radix UI to Base UI. Use when asked to migrate from radix, move to base-ui, convert…
tasteskill v2, the anti-slop frontend skill. Art direction for websites, distilled from a study of 247 curated gallery sites (One…