agui-author
Author live dashboard UI from an agent via the `emit_ui` MCP tool. Emit
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 awslabs/cli-agent-orchestrator --skill create-mcp-app --agent claude-code
Codex
$ npx skills add awslabs/cli-agent-orchestrator --skill create-mcp-app -a codex -y
Cursor
$ npx skills add awslabs/cli-agent-orchestrator --skill create-mcp-app -a cursor -y
Gemini CLI
$ npx skills add awslabs/cli-agent-orchestrator --skill create-mcp-app -a gemini-cli -y
GitHub Copilot
$ npx skills add awslabs/cli-agent-orchestrator --skill create-mcp-app -a github-copilot -y
OpenCode
$ npx skills add awslabs/cli-agent-orchestrator --skill create-mcp-app -a opencode -y
Windsurf
$ npx skills add awslabs/cli-agent-orchestrator --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/sdk zod express cors npm install -D typescript vite vite-plugin-singlefile concurrently cross-env @types/node @types/express @types/cors
This lets npm resolve the latest compatible versions. **Never** specify version numbers from memory.
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 compatibility.
Register ALL handlers BEFORE calling `app.connect()`:
const app = new App({ name: "My App", version: "1.0.0" });
// Register handlers first
app.ontoolinput = (params) => { /* handle input */ };
app.ontoolresult = (result) => { /* handle result */ };
aCLI Agent Orchestrator (CAO) coordinates multiple AI coding CLIs so a supervisor can delegate work to specialist agents in parallel or sequence. π Documentation β guides, reference, and two interactive courses.
Author live dashboard UI from an agent via the `emit_ui` MCP tool. Emit
Audit an existing Agent Plugins 1.0.0 package - check its plugin.json manifest and mcp.json against CAO's vendored schemas, andβ¦
Author a new Agent Plugins 1.0.0 package from an empty directory - write the plugin.json manifest, lay out skills/, optionallyβ¦
Contribute changes to the CAO (CLI Agent Orchestrator) codebase β the local
Create a new CAO (CLI Agent Orchestrator) plugin. Use this skill whenever the user wants to add a plugin that reacts to CAOβ¦
Create a new CLI agent provider for CAO (CLI Agent Orchestrator). Use this skill whenever the user wants to add support for a newβ¦
Direct browser control via CDP for web interaction: automation, scraping, testing, screenshots, and site/app work. Also coversβ¦
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, fillingβ¦