[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-aws-labs-cao-mcp-apps":3,"mdc--bu30fj-key":36,"related-repo-aws-labs-cao-mcp-apps":1351,"related-org-aws-labs-cao-mcp-apps":1444},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":32,"sourceUrl":34,"mdContent":35},"cao-mcp-apps","operate CAO MCP application surfaces","Enable, operate, and extend CAO's MCP Apps surface — the host-rendered fleet dashboard visible inside MCP App hosts (Claude Desktop, ChatGPT, VS Code Copilot, Goose, Postman). Use when the user says \"enable MCP Apps in CAO\", \"the ui:\u002F\u002Fcao views aren't rendering\", \"rebuild MCP Apps bundles\", \"add a new ui:\u002F\u002Fcao\u002F* view\", or \"configure the MCP Apps OAuth scope layer\". Operates on the CAO_MCP_APPS_ENABLED surface and cao_mcp_apps\u002F build system. Not for the localhost:9889 browser dashboard, not for plugins, providers, or session management.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"aws-labs","AWS Labs","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Faws-labs.png","awslabs",[13,17,20,23],{"name":14,"slug":15,"type":16},"CLI","cli","tag",{"name":18,"slug":19,"type":16},"MCP","mcp",{"name":21,"slug":22,"type":16},"Agents","agents",{"name":24,"slug":25,"type":16},"UI Components","ui-components",871,"https:\u002F\u002Fgithub.com\u002Fawslabs\u002Fcli-agent-orchestrator","2026-07-22T05:35:52.952289",null,164,[],{"repoUrl":27,"stars":26,"forks":30,"topics":33,"description":29},[],"https:\u002F\u002Fgithub.com\u002Fawslabs\u002Fcli-agent-orchestrator\u002Ftree\u002FHEAD\u002Fskills\u002Fcao-mcp-apps","---\nname: cao-mcp-apps\ndescription: Enable, operate, and extend CAO's MCP Apps surface — the host-rendered fleet dashboard visible inside MCP App hosts (Claude Desktop, ChatGPT, VS Code Copilot, Goose, Postman). Use when the user says \"enable MCP Apps in CAO\", \"the ui:\u002F\u002Fcao views aren't rendering\", \"rebuild MCP Apps bundles\", \"add a new ui:\u002F\u002Fcao\u002F* view\", or \"configure the MCP Apps OAuth scope layer\". Operates on the CAO_MCP_APPS_ENABLED surface and cao_mcp_apps\u002F build system. Not for the localhost:9889 browser dashboard, not for plugins, providers, or session management.\ncompatibility: Requires CAO_MCP_APPS_ENABLED=true, cao-server running, and an MCP App-capable host (SEP-1865).\n---\n\n# CAO MCP Apps\n\nOperator + developer playbook for CAO's host-rendered fleet UI. Reference docs:\n[`docs\u002Fmcp-apps.md`](..\u002F..\u002Fdocs\u002Fmcp-apps.md); example: [`examples\u002Fmcp-apps\u002F`](..\u002F..\u002Fexamples\u002Fmcp-apps\u002F).\n\n**Authoritative spec & sources of truth:**\n[MCP Apps Overview](https:\u002F\u002Fmodelcontextprotocol.io\u002Fextensions\u002Fapps\u002Foverview) ·\n[Build an MCP App](https:\u002F\u002Fmodelcontextprotocol.io\u002Fextensions\u002Fapps\u002Fbuild) ·\n[capability negotiation](https:\u002F\u002Fmodelcontextprotocol.io\u002Fextensions\u002Foverview#negotiation) ·\n[client matrix](https:\u002F\u002Fmodelcontextprotocol.io\u002Fextensions\u002Fclient-matrix) ·\nstable spec [`2026-01-26\u002Fapps.mdx`](https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fext-apps\u002Fblob\u002Fmain\u002Fspecification\u002F2026-01-26\u002Fapps.mdx)\n(SEP-1865, Status: Stable) ·\nSDK [`@modelcontextprotocol\u002Fext-apps`](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@modelcontextprotocol\u002Fext-apps) v1.7.4\n([API ref](https:\u002F\u002Fapps.extensions.modelcontextprotocol.io\u002Fapi\u002Findex.html) ·\n[repo](https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fext-apps)) ·\nprovenance [PR #1865](https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fmodelcontextprotocol\u002Fpull\u002F1865).\n\n## Turn it on\n\nThe surface is **default-off**. Enable and run:\n\n```bash\nexport CAO_MCP_APPS_ENABLED=true\nuv run cao-server        # :9889 (REST + SSE \u002Fevents)\nuv run cao-mcp-server    # registers tools\u002Fresources via the mcp_apps plugin\n```\n\nIt is packaged as the built-in `mcp_apps` plugin (`cao.plugins` entry-point). The\nplugin's `on_mcp_server` hook registers the `ui:\u002F\u002Fcao\u002F*` resources, the five app\ntools, the topology widget, and advertises the `io.modelcontextprotocol\u002Fui`\ncapability — best-effort and default-off, so nothing changes when the flag is unset.\n\n## What the operator gets\n\n- `ui:\u002F\u002Fcao\u002Fdashboard` — fleet overview + the mutation entry point.\n- `ui:\u002F\u002Fcao\u002Fagent` — one terminal's status, output tail, inbox, sub-agents.\n- `ui:\u002F\u002Fcao\u002Fevent-stream` — live governance ticker (app-only).\n- `cao:\u002F\u002Fwidget\u002Ftopology` + `\u002Fwidgets\u002Ftopology\u002F` — build-free live event view.\n\nAll mutations flow through `submit_command(kind, payload)` — kinds:\n`send_message`, `assign`, `create_session` (standard); `interrupt`, `pause`,\n`resume` (lifecycle); `shutdown_session` (destructive).\nFor full payload schemas and scope requirements per kind, see [references\u002Fsubmit-command-kinds.md](references\u002Fsubmit-command-kinds.md).\n\n## Full capability scope (what the views use)\n\nBeyond `tools\u002Fcall`, the views exercise the spec's bidirectional channel:\n\n- **Host-delegated open-link** (`ui\u002Fopen-link`) — the dashboard shows\n  \"Open full Web UI ↗\" → `http:\u002F\u002F127.0.0.1:9889` **only when** the host\n  advertises `hostCapabilities.openLinks` (gate on `app.canOpenLinks()`; the\n  sandbox forbids `window.open`).\n- **Display modes** (`ui\u002Frequest-display-mode`) — views declare\n  `availableDisplayModes: [\"inline\",\"fullscreen\"]` at `ui\u002Finitialize`.\n- **Streamed tool input** (`ui\u002Fnotifications\u002Ftool-input` \u002F `-partial`) — render\n  before the result lands.\n- **Model-context notes** (`ui\u002Fupdate-model-context`) — body-free gesture\n  summaries keep the agent aware without leaking message contents.\n\n`preferredFrameSize` and `requiredScopes` are CAO additions, **not** spec\n`_meta.ui` fields (the spec sizes via `containerDimensions` +\n`ui\u002Fnotifications\u002Fsize-changed`); CAO requests **no** elevated `permissions`.\n\nSee [assets\u002Fmcp-apps-example.md](assets\u002Fmcp-apps-example.md) for a worked MCP Apps integration example.\n\n## Gotchas\n\n- **Host doesn't offer the views** → confirm `CAO_MCP_APPS_ENABLED=true` and that\n  `initialize` advertises `io.modelcontextprotocol\u002Fui` (the host must speak\n  SEP-1865). Non-SEP-1865 hosts still get text-only tool results.\n- **Views are blank \u002F fail to load** → the React bundles aren't built. Run\n  `cd cao_mcp_apps && npm ci && npm run build:all`. The topology widget needs no\n  build and is the quickest smoke test (`curl \u002Fwidgets\u002Ftopology\u002Ftopology.html`).\n- **Mutations rejected with 403** → the auth layer is enabled and the token lacks\n  `cao:write`\u002F`cao:admin` (`cao:admin` for `delete_session`). Unset\n  `AUTH0_DOMAIN`\u002F`CAO_AUTH_JWKS_URI` to disable enforcement.\n- **Events don't stream** → check `GET \u002Fevents` (SSE) directly; the bus is\n  drop-on-slow, so a stalled consumer silently loses events — re-hydrate via\n  `cao_fetch_history`.\n\n## Extending the surface\n\n- **Agents emitting UI intents into this surface?** Load the **`agui-author`** skill\n  — it teaches how to call `emit_ui` with the six allow-listed components. Your\n  `emit_ui` intents feed the L2 constructs that these views render.\n- **Building or migrating an MCP App? Load the `mcp-apps-builder` skill first.**\n  It equips the official ext-apps Agent Skills (`create-mcp-app`,\n  `add-app-to-server`, `migrate-oai-app`, `convert-web-app`) and the build guide.\n  Use `add-app-to-server` when adding a new `ui:\u002F\u002Fcao\u002F\u003Cname>` view.\n- **New command kind** → add it to `submit_command`'s classifier + router in\n  `mcp_server\u002Fapp_tools.py` (map to a real Backplane HTTP endpoint; never bypass\n  the HTTP-only boundary) and to the scope pre-check.\n- **New view** → add a `ui:\u002F\u002Fcao\u002F\u003Cname>` resource in `ext_apps\u002Fapps.py` + an entry\n  point under `cao_mcp_apps\u002F`, build it, and tag the rendering tool with\n  `ui_meta(...)`.\n  For the full step-by-step view creation procedure, see [references\u002Fextending-views.md](references\u002Fextending-views.md).\n- **New host-delegated action** → add a thin method on the `McpApp` bridge\n  (`cao_mcp_apps\u002Fsrc\u002Fshared\u002FmcpApp.ts`) that issues the spec `ui\u002F*` request\n  (e.g. `openLink` → `ui\u002Fopen-link`, `requestDisplayMode` →\n  `ui\u002Frequest-display-mode`); gate UI on the matching `hostCapabilities` flag and\n  cover it with a `mockHost` test.\n- **Keep the boundary** → `mcp_server\u002F*` must reach state only over HTTP; the AST\n  guard test (`test\u002Ftest_http_only_boundary.py`) enforces it.\n- **Keep bundles JIT-free** → no `eval`\u002F`new Function` (host CSP forbids it); the\n  CI scan fails the build otherwise.\n\n## Recording & Verification\n\nAfter building or modifying views, regenerate the demo media:\n\n```bash\ncd cao_mcp_apps && npm run build:all && npm run demo\n```\n\nThis runs `scripts\u002Frecord-demo.mjs` which:\n1. Boots the E2E harness server (serves built bundles in a real MCP-host iframe)\n2. Drives Chromium through: dashboard → agent detail → unified → event-stream\n3. Records video (`docs\u002Fmedia\u002Fmcp-apps-demo.webm`)\n4. Captures screenshots (`docs\u002Fmedia\u002Fmcp-apps-{dashboard,agent,unified,event-stream}.png`)\n5. Generates an optimized GIF (`docs\u002Fmedia\u002Fmcp-apps-demo.gif`) when ffmpeg is available\n\nThe GIF is referenced in `README.md` and `docs\u002Fmcp-apps.md` — always regenerate after\nview changes so docs stay current.\n\n**Env overrides:** `CHROMIUM_BIN` (path to Chrome), `FFMPEG_BIN` (for GIF), `DEMO_PORT`.\n\nFor a worked example of the full MCP Apps surface in action, see [assets\u002Fmcp-apps-example.md](assets\u002Fmcp-apps-example.md).\n",{"data":37,"body":39},{"name":4,"description":6,"compatibility":38},"Requires CAO_MCP_APPS_ENABLED=true, cao-server running, and an MCP App-capable host (SEP-1865).",{"type":40,"children":41},"root",[42,50,82,177,184,196,285,330,336,393,466,472,485,619,683,695,701,842,848,1151,1157,1162,1219,1232,1284,1303,1335,1345],{"type":43,"tag":44,"props":45,"children":46},"element","h1",{"id":4},[47],{"type":48,"value":49},"text","CAO MCP Apps",{"type":43,"tag":51,"props":52,"children":53},"p",{},[54,56,68,70,80],{"type":48,"value":55},"Operator + developer playbook for CAO's host-rendered fleet UI. Reference docs:\n",{"type":43,"tag":57,"props":58,"children":60},"a",{"href":59},"..\u002F..\u002Fdocs\u002Fmcp-apps.md",[61],{"type":43,"tag":62,"props":63,"children":65},"code",{"className":64},[],[66],{"type":48,"value":67},"docs\u002Fmcp-apps.md",{"type":48,"value":69},"; example: ",{"type":43,"tag":57,"props":71,"children":73},{"href":72},"..\u002F..\u002Fexamples\u002Fmcp-apps\u002F",[74],{"type":43,"tag":62,"props":75,"children":77},{"className":76},[],[78],{"type":48,"value":79},"examples\u002Fmcp-apps\u002F",{"type":48,"value":81},".",{"type":43,"tag":51,"props":83,"children":84},{},[85,91,99,101,108,109,116,117,124,126,137,139,150,152,159,160,167,169,176],{"type":43,"tag":86,"props":87,"children":88},"strong",{},[89],{"type":48,"value":90},"Authoritative spec & sources of truth:",{"type":43,"tag":57,"props":92,"children":96},{"href":93,"rel":94},"https:\u002F\u002Fmodelcontextprotocol.io\u002Fextensions\u002Fapps\u002Foverview",[95],"nofollow",[97],{"type":48,"value":98},"MCP Apps Overview",{"type":48,"value":100}," ·\n",{"type":43,"tag":57,"props":102,"children":105},{"href":103,"rel":104},"https:\u002F\u002Fmodelcontextprotocol.io\u002Fextensions\u002Fapps\u002Fbuild",[95],[106],{"type":48,"value":107},"Build an MCP App",{"type":48,"value":100},{"type":43,"tag":57,"props":110,"children":113},{"href":111,"rel":112},"https:\u002F\u002Fmodelcontextprotocol.io\u002Fextensions\u002Foverview#negotiation",[95],[114],{"type":48,"value":115},"capability negotiation",{"type":48,"value":100},{"type":43,"tag":57,"props":118,"children":121},{"href":119,"rel":120},"https:\u002F\u002Fmodelcontextprotocol.io\u002Fextensions\u002Fclient-matrix",[95],[122],{"type":48,"value":123},"client matrix",{"type":48,"value":125}," ·\nstable spec ",{"type":43,"tag":57,"props":127,"children":130},{"href":128,"rel":129},"https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fext-apps\u002Fblob\u002Fmain\u002Fspecification\u002F2026-01-26\u002Fapps.mdx",[95],[131],{"type":43,"tag":62,"props":132,"children":134},{"className":133},[],[135],{"type":48,"value":136},"2026-01-26\u002Fapps.mdx",{"type":48,"value":138},"\n(SEP-1865, Status: Stable) ·\nSDK ",{"type":43,"tag":57,"props":140,"children":143},{"href":141,"rel":142},"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@modelcontextprotocol\u002Fext-apps",[95],[144],{"type":43,"tag":62,"props":145,"children":147},{"className":146},[],[148],{"type":48,"value":149},"@modelcontextprotocol\u002Fext-apps",{"type":48,"value":151}," v1.7.4\n(",{"type":43,"tag":57,"props":153,"children":156},{"href":154,"rel":155},"https:\u002F\u002Fapps.extensions.modelcontextprotocol.io\u002Fapi\u002Findex.html",[95],[157],{"type":48,"value":158},"API ref",{"type":48,"value":100},{"type":43,"tag":57,"props":161,"children":164},{"href":162,"rel":163},"https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fext-apps",[95],[165],{"type":48,"value":166},"repo",{"type":48,"value":168},") ·\nprovenance ",{"type":43,"tag":57,"props":170,"children":173},{"href":171,"rel":172},"https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fmodelcontextprotocol\u002Fpull\u002F1865",[95],[174],{"type":48,"value":175},"PR #1865",{"type":48,"value":81},{"type":43,"tag":178,"props":179,"children":181},"h2",{"id":180},"turn-it-on",[182],{"type":48,"value":183},"Turn it on",{"type":43,"tag":51,"props":185,"children":186},{},[187,189,194],{"type":48,"value":188},"The surface is ",{"type":43,"tag":86,"props":190,"children":191},{},[192],{"type":48,"value":193},"default-off",{"type":48,"value":195},". Enable and run:",{"type":43,"tag":197,"props":198,"children":203},"pre",{"className":199,"code":200,"language":201,"meta":202,"style":202},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export CAO_MCP_APPS_ENABLED=true\nuv run cao-server        # :9889 (REST + SSE \u002Fevents)\nuv run cao-mcp-server    # registers tools\u002Fresources via the mcp_apps plugin\n","bash","",[204],{"type":43,"tag":62,"props":205,"children":206},{"__ignoreMap":202},[207,236,263],{"type":43,"tag":208,"props":209,"children":212},"span",{"class":210,"line":211},"line",1,[213,219,225,231],{"type":43,"tag":208,"props":214,"children":216},{"style":215},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[217],{"type":48,"value":218},"export",{"type":43,"tag":208,"props":220,"children":222},{"style":221},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[223],{"type":48,"value":224}," CAO_MCP_APPS_ENABLED",{"type":43,"tag":208,"props":226,"children":228},{"style":227},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[229],{"type":48,"value":230},"=",{"type":43,"tag":208,"props":232,"children":233},{"style":221},[234],{"type":48,"value":235},"true\n",{"type":43,"tag":208,"props":237,"children":239},{"class":210,"line":238},2,[240,246,252,257],{"type":43,"tag":208,"props":241,"children":243},{"style":242},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[244],{"type":48,"value":245},"uv",{"type":43,"tag":208,"props":247,"children":249},{"style":248},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[250],{"type":48,"value":251}," run",{"type":43,"tag":208,"props":253,"children":254},{"style":248},[255],{"type":48,"value":256}," cao-server",{"type":43,"tag":208,"props":258,"children":260},{"style":259},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[261],{"type":48,"value":262},"        # :9889 (REST + SSE \u002Fevents)\n",{"type":43,"tag":208,"props":264,"children":266},{"class":210,"line":265},3,[267,271,275,280],{"type":43,"tag":208,"props":268,"children":269},{"style":242},[270],{"type":48,"value":245},{"type":43,"tag":208,"props":272,"children":273},{"style":248},[274],{"type":48,"value":251},{"type":43,"tag":208,"props":276,"children":277},{"style":248},[278],{"type":48,"value":279}," cao-mcp-server",{"type":43,"tag":208,"props":281,"children":282},{"style":259},[283],{"type":48,"value":284},"    # registers tools\u002Fresources via the mcp_apps plugin\n",{"type":43,"tag":51,"props":286,"children":287},{},[288,290,296,298,304,306,312,314,320,322,328],{"type":48,"value":289},"It is packaged as the built-in ",{"type":43,"tag":62,"props":291,"children":293},{"className":292},[],[294],{"type":48,"value":295},"mcp_apps",{"type":48,"value":297}," plugin (",{"type":43,"tag":62,"props":299,"children":301},{"className":300},[],[302],{"type":48,"value":303},"cao.plugins",{"type":48,"value":305}," entry-point). The\nplugin's ",{"type":43,"tag":62,"props":307,"children":309},{"className":308},[],[310],{"type":48,"value":311},"on_mcp_server",{"type":48,"value":313}," hook registers the ",{"type":43,"tag":62,"props":315,"children":317},{"className":316},[],[318],{"type":48,"value":319},"ui:\u002F\u002Fcao\u002F*",{"type":48,"value":321}," resources, the five app\ntools, the topology widget, and advertises the ",{"type":43,"tag":62,"props":323,"children":325},{"className":324},[],[326],{"type":48,"value":327},"io.modelcontextprotocol\u002Fui",{"type":48,"value":329},"\ncapability — best-effort and default-off, so nothing changes when the flag is unset.",{"type":43,"tag":178,"props":331,"children":333},{"id":332},"what-the-operator-gets",[334],{"type":48,"value":335},"What the operator gets",{"type":43,"tag":337,"props":338,"children":339},"ul",{},[340,352,363,374],{"type":43,"tag":341,"props":342,"children":343},"li",{},[344,350],{"type":43,"tag":62,"props":345,"children":347},{"className":346},[],[348],{"type":48,"value":349},"ui:\u002F\u002Fcao\u002Fdashboard",{"type":48,"value":351}," — fleet overview + the mutation entry point.",{"type":43,"tag":341,"props":353,"children":354},{},[355,361],{"type":43,"tag":62,"props":356,"children":358},{"className":357},[],[359],{"type":48,"value":360},"ui:\u002F\u002Fcao\u002Fagent",{"type":48,"value":362}," — one terminal's status, output tail, inbox, sub-agents.",{"type":43,"tag":341,"props":364,"children":365},{},[366,372],{"type":43,"tag":62,"props":367,"children":369},{"className":368},[],[370],{"type":48,"value":371},"ui:\u002F\u002Fcao\u002Fevent-stream",{"type":48,"value":373}," — live governance ticker (app-only).",{"type":43,"tag":341,"props":375,"children":376},{},[377,383,385,391],{"type":43,"tag":62,"props":378,"children":380},{"className":379},[],[381],{"type":48,"value":382},"cao:\u002F\u002Fwidget\u002Ftopology",{"type":48,"value":384}," + ",{"type":43,"tag":62,"props":386,"children":388},{"className":387},[],[389],{"type":48,"value":390},"\u002Fwidgets\u002Ftopology\u002F",{"type":48,"value":392}," — build-free live event view.",{"type":43,"tag":51,"props":394,"children":395},{},[396,398,404,406,412,414,420,421,427,429,435,436,442,444,450,452,458,460,465],{"type":48,"value":397},"All mutations flow through ",{"type":43,"tag":62,"props":399,"children":401},{"className":400},[],[402],{"type":48,"value":403},"submit_command(kind, payload)",{"type":48,"value":405}," — kinds:\n",{"type":43,"tag":62,"props":407,"children":409},{"className":408},[],[410],{"type":48,"value":411},"send_message",{"type":48,"value":413},", ",{"type":43,"tag":62,"props":415,"children":417},{"className":416},[],[418],{"type":48,"value":419},"assign",{"type":48,"value":413},{"type":43,"tag":62,"props":422,"children":424},{"className":423},[],[425],{"type":48,"value":426},"create_session",{"type":48,"value":428}," (standard); ",{"type":43,"tag":62,"props":430,"children":432},{"className":431},[],[433],{"type":48,"value":434},"interrupt",{"type":48,"value":413},{"type":43,"tag":62,"props":437,"children":439},{"className":438},[],[440],{"type":48,"value":441},"pause",{"type":48,"value":443},",\n",{"type":43,"tag":62,"props":445,"children":447},{"className":446},[],[448],{"type":48,"value":449},"resume",{"type":48,"value":451}," (lifecycle); ",{"type":43,"tag":62,"props":453,"children":455},{"className":454},[],[456],{"type":48,"value":457},"shutdown_session",{"type":48,"value":459}," (destructive).\nFor full payload schemas and scope requirements per kind, see ",{"type":43,"tag":57,"props":461,"children":463},{"href":462},"references\u002Fsubmit-command-kinds.md",[464],{"type":48,"value":462},{"type":48,"value":81},{"type":43,"tag":178,"props":467,"children":469},{"id":468},"full-capability-scope-what-the-views-use",[470],{"type":48,"value":471},"Full capability scope (what the views use)",{"type":43,"tag":51,"props":473,"children":474},{},[475,477,483],{"type":48,"value":476},"Beyond ",{"type":43,"tag":62,"props":478,"children":480},{"className":479},[],[481],{"type":48,"value":482},"tools\u002Fcall",{"type":48,"value":484},", the views exercise the spec's bidirectional channel:",{"type":43,"tag":337,"props":486,"children":487},{},[488,545,577,602],{"type":43,"tag":341,"props":489,"children":490},{},[491,496,498,504,506,512,514,519,521,527,529,535,537,543],{"type":43,"tag":86,"props":492,"children":493},{},[494],{"type":48,"value":495},"Host-delegated open-link",{"type":48,"value":497}," (",{"type":43,"tag":62,"props":499,"children":501},{"className":500},[],[502],{"type":48,"value":503},"ui\u002Fopen-link",{"type":48,"value":505},") — the dashboard shows\n\"Open full Web UI ↗\" → ",{"type":43,"tag":62,"props":507,"children":509},{"className":508},[],[510],{"type":48,"value":511},"http:\u002F\u002F127.0.0.1:9889",{"type":48,"value":513}," ",{"type":43,"tag":86,"props":515,"children":516},{},[517],{"type":48,"value":518},"only when",{"type":48,"value":520}," the host\nadvertises ",{"type":43,"tag":62,"props":522,"children":524},{"className":523},[],[525],{"type":48,"value":526},"hostCapabilities.openLinks",{"type":48,"value":528}," (gate on ",{"type":43,"tag":62,"props":530,"children":532},{"className":531},[],[533],{"type":48,"value":534},"app.canOpenLinks()",{"type":48,"value":536},"; the\nsandbox forbids ",{"type":43,"tag":62,"props":538,"children":540},{"className":539},[],[541],{"type":48,"value":542},"window.open",{"type":48,"value":544},").",{"type":43,"tag":341,"props":546,"children":547},{},[548,553,554,560,562,568,570,576],{"type":43,"tag":86,"props":549,"children":550},{},[551],{"type":48,"value":552},"Display modes",{"type":48,"value":497},{"type":43,"tag":62,"props":555,"children":557},{"className":556},[],[558],{"type":48,"value":559},"ui\u002Frequest-display-mode",{"type":48,"value":561},") — views declare\n",{"type":43,"tag":62,"props":563,"children":565},{"className":564},[],[566],{"type":48,"value":567},"availableDisplayModes: [\"inline\",\"fullscreen\"]",{"type":48,"value":569}," at ",{"type":43,"tag":62,"props":571,"children":573},{"className":572},[],[574],{"type":48,"value":575},"ui\u002Finitialize",{"type":48,"value":81},{"type":43,"tag":341,"props":578,"children":579},{},[580,585,586,592,594,600],{"type":43,"tag":86,"props":581,"children":582},{},[583],{"type":48,"value":584},"Streamed tool input",{"type":48,"value":497},{"type":43,"tag":62,"props":587,"children":589},{"className":588},[],[590],{"type":48,"value":591},"ui\u002Fnotifications\u002Ftool-input",{"type":48,"value":593}," \u002F ",{"type":43,"tag":62,"props":595,"children":597},{"className":596},[],[598],{"type":48,"value":599},"-partial",{"type":48,"value":601},") — render\nbefore the result lands.",{"type":43,"tag":341,"props":603,"children":604},{},[605,610,611,617],{"type":43,"tag":86,"props":606,"children":607},{},[608],{"type":48,"value":609},"Model-context notes",{"type":48,"value":497},{"type":43,"tag":62,"props":612,"children":614},{"className":613},[],[615],{"type":48,"value":616},"ui\u002Fupdate-model-context",{"type":48,"value":618},") — body-free gesture\nsummaries keep the agent aware without leaking message contents.",{"type":43,"tag":51,"props":620,"children":621},{},[622,628,630,636,638,643,645,651,653,659,661,667,669,674,676,682],{"type":43,"tag":62,"props":623,"children":625},{"className":624},[],[626],{"type":48,"value":627},"preferredFrameSize",{"type":48,"value":629}," and ",{"type":43,"tag":62,"props":631,"children":633},{"className":632},[],[634],{"type":48,"value":635},"requiredScopes",{"type":48,"value":637}," are CAO additions, ",{"type":43,"tag":86,"props":639,"children":640},{},[641],{"type":48,"value":642},"not",{"type":48,"value":644}," spec\n",{"type":43,"tag":62,"props":646,"children":648},{"className":647},[],[649],{"type":48,"value":650},"_meta.ui",{"type":48,"value":652}," fields (the spec sizes via ",{"type":43,"tag":62,"props":654,"children":656},{"className":655},[],[657],{"type":48,"value":658},"containerDimensions",{"type":48,"value":660}," +\n",{"type":43,"tag":62,"props":662,"children":664},{"className":663},[],[665],{"type":48,"value":666},"ui\u002Fnotifications\u002Fsize-changed",{"type":48,"value":668},"); CAO requests ",{"type":43,"tag":86,"props":670,"children":671},{},[672],{"type":48,"value":673},"no",{"type":48,"value":675}," elevated ",{"type":43,"tag":62,"props":677,"children":679},{"className":678},[],[680],{"type":48,"value":681},"permissions",{"type":48,"value":81},{"type":43,"tag":51,"props":684,"children":685},{},[686,688,693],{"type":48,"value":687},"See ",{"type":43,"tag":57,"props":689,"children":691},{"href":690},"assets\u002Fmcp-apps-example.md",[692],{"type":48,"value":690},{"type":48,"value":694}," for a worked MCP Apps integration example.",{"type":43,"tag":178,"props":696,"children":698},{"id":697},"gotchas",[699],{"type":48,"value":700},"Gotchas",{"type":43,"tag":337,"props":702,"children":703},{},[704,737,762,817],{"type":43,"tag":341,"props":705,"children":706},{},[707,712,714,720,722,728,730,735],{"type":43,"tag":86,"props":708,"children":709},{},[710],{"type":48,"value":711},"Host doesn't offer the views",{"type":48,"value":713}," → confirm ",{"type":43,"tag":62,"props":715,"children":717},{"className":716},[],[718],{"type":48,"value":719},"CAO_MCP_APPS_ENABLED=true",{"type":48,"value":721}," and that\n",{"type":43,"tag":62,"props":723,"children":725},{"className":724},[],[726],{"type":48,"value":727},"initialize",{"type":48,"value":729}," advertises ",{"type":43,"tag":62,"props":731,"children":733},{"className":732},[],[734],{"type":48,"value":327},{"type":48,"value":736}," (the host must speak\nSEP-1865). Non-SEP-1865 hosts still get text-only tool results.",{"type":43,"tag":341,"props":738,"children":739},{},[740,745,747,753,755,761],{"type":43,"tag":86,"props":741,"children":742},{},[743],{"type":48,"value":744},"Views are blank \u002F fail to load",{"type":48,"value":746}," → the React bundles aren't built. Run\n",{"type":43,"tag":62,"props":748,"children":750},{"className":749},[],[751],{"type":48,"value":752},"cd cao_mcp_apps && npm ci && npm run build:all",{"type":48,"value":754},". The topology widget needs no\nbuild and is the quickest smoke test (",{"type":43,"tag":62,"props":756,"children":758},{"className":757},[],[759],{"type":48,"value":760},"curl \u002Fwidgets\u002Ftopology\u002Ftopology.html",{"type":48,"value":544},{"type":43,"tag":341,"props":763,"children":764},{},[765,770,772,778,780,786,787,792,794,800,802,808,809,815],{"type":43,"tag":86,"props":766,"children":767},{},[768],{"type":48,"value":769},"Mutations rejected with 403",{"type":48,"value":771}," → the auth layer is enabled and the token lacks\n",{"type":43,"tag":62,"props":773,"children":775},{"className":774},[],[776],{"type":48,"value":777},"cao:write",{"type":48,"value":779},"\u002F",{"type":43,"tag":62,"props":781,"children":783},{"className":782},[],[784],{"type":48,"value":785},"cao:admin",{"type":48,"value":497},{"type":43,"tag":62,"props":788,"children":790},{"className":789},[],[791],{"type":48,"value":785},{"type":48,"value":793}," for ",{"type":43,"tag":62,"props":795,"children":797},{"className":796},[],[798],{"type":48,"value":799},"delete_session",{"type":48,"value":801},"). Unset\n",{"type":43,"tag":62,"props":803,"children":805},{"className":804},[],[806],{"type":48,"value":807},"AUTH0_DOMAIN",{"type":48,"value":779},{"type":43,"tag":62,"props":810,"children":812},{"className":811},[],[813],{"type":48,"value":814},"CAO_AUTH_JWKS_URI",{"type":48,"value":816}," to disable enforcement.",{"type":43,"tag":341,"props":818,"children":819},{},[820,825,827,833,835,841],{"type":43,"tag":86,"props":821,"children":822},{},[823],{"type":48,"value":824},"Events don't stream",{"type":48,"value":826}," → check ",{"type":43,"tag":62,"props":828,"children":830},{"className":829},[],[831],{"type":48,"value":832},"GET \u002Fevents",{"type":48,"value":834}," (SSE) directly; the bus is\ndrop-on-slow, so a stalled consumer silently loses events — re-hydrate via\n",{"type":43,"tag":62,"props":836,"children":838},{"className":837},[],[839],{"type":48,"value":840},"cao_fetch_history",{"type":48,"value":81},{"type":43,"tag":178,"props":843,"children":845},{"id":844},"extending-the-surface",[846],{"type":48,"value":847},"Extending the surface",{"type":43,"tag":337,"props":849,"children":850},{},[851,887,949,975,1022,1101,1126],{"type":43,"tag":341,"props":852,"children":853},{},[854,859,861,870,872,878,880,885],{"type":43,"tag":86,"props":855,"children":856},{},[857],{"type":48,"value":858},"Agents emitting UI intents into this surface?",{"type":48,"value":860}," Load the ",{"type":43,"tag":86,"props":862,"children":863},{},[864],{"type":43,"tag":62,"props":865,"children":867},{"className":866},[],[868],{"type":48,"value":869},"agui-author",{"type":48,"value":871}," skill\n— it teaches how to call ",{"type":43,"tag":62,"props":873,"children":875},{"className":874},[],[876],{"type":48,"value":877},"emit_ui",{"type":48,"value":879}," with the six allow-listed components. Your\n",{"type":43,"tag":62,"props":881,"children":883},{"className":882},[],[884],{"type":48,"value":877},{"type":48,"value":886}," intents feed the L2 constructs that these views render.",{"type":43,"tag":341,"props":888,"children":889},{},[890,903,905,911,912,918,919,925,926,932,934,939,941,947],{"type":43,"tag":86,"props":891,"children":892},{},[893,895,901],{"type":48,"value":894},"Building or migrating an MCP App? Load the ",{"type":43,"tag":62,"props":896,"children":898},{"className":897},[],[899],{"type":48,"value":900},"mcp-apps-builder",{"type":48,"value":902}," skill first.",{"type":48,"value":904},"\nIt equips the official ext-apps Agent Skills (",{"type":43,"tag":62,"props":906,"children":908},{"className":907},[],[909],{"type":48,"value":910},"create-mcp-app",{"type":48,"value":443},{"type":43,"tag":62,"props":913,"children":915},{"className":914},[],[916],{"type":48,"value":917},"add-app-to-server",{"type":48,"value":413},{"type":43,"tag":62,"props":920,"children":922},{"className":921},[],[923],{"type":48,"value":924},"migrate-oai-app",{"type":48,"value":413},{"type":43,"tag":62,"props":927,"children":929},{"className":928},[],[930],{"type":48,"value":931},"convert-web-app",{"type":48,"value":933},") and the build guide.\nUse ",{"type":43,"tag":62,"props":935,"children":937},{"className":936},[],[938],{"type":48,"value":917},{"type":48,"value":940}," when adding a new ",{"type":43,"tag":62,"props":942,"children":944},{"className":943},[],[945],{"type":48,"value":946},"ui:\u002F\u002Fcao\u002F\u003Cname>",{"type":48,"value":948}," view.",{"type":43,"tag":341,"props":950,"children":951},{},[952,957,959,965,967,973],{"type":43,"tag":86,"props":953,"children":954},{},[955],{"type":48,"value":956},"New command kind",{"type":48,"value":958}," → add it to ",{"type":43,"tag":62,"props":960,"children":962},{"className":961},[],[963],{"type":48,"value":964},"submit_command",{"type":48,"value":966},"'s classifier + router in\n",{"type":43,"tag":62,"props":968,"children":970},{"className":969},[],[971],{"type":48,"value":972},"mcp_server\u002Fapp_tools.py",{"type":48,"value":974}," (map to a real Backplane HTTP endpoint; never bypass\nthe HTTP-only boundary) and to the scope pre-check.",{"type":43,"tag":341,"props":976,"children":977},{},[978,983,985,990,992,998,1000,1006,1008,1014,1016,1021],{"type":43,"tag":86,"props":979,"children":980},{},[981],{"type":48,"value":982},"New view",{"type":48,"value":984}," → add a ",{"type":43,"tag":62,"props":986,"children":988},{"className":987},[],[989],{"type":48,"value":946},{"type":48,"value":991}," resource in ",{"type":43,"tag":62,"props":993,"children":995},{"className":994},[],[996],{"type":48,"value":997},"ext_apps\u002Fapps.py",{"type":48,"value":999}," + an entry\npoint under ",{"type":43,"tag":62,"props":1001,"children":1003},{"className":1002},[],[1004],{"type":48,"value":1005},"cao_mcp_apps\u002F",{"type":48,"value":1007},", build it, and tag the rendering tool with\n",{"type":43,"tag":62,"props":1009,"children":1011},{"className":1010},[],[1012],{"type":48,"value":1013},"ui_meta(...)",{"type":48,"value":1015},".\nFor the full step-by-step view creation procedure, see ",{"type":43,"tag":57,"props":1017,"children":1019},{"href":1018},"references\u002Fextending-views.md",[1020],{"type":48,"value":1018},{"type":48,"value":81},{"type":43,"tag":341,"props":1023,"children":1024},{},[1025,1030,1032,1038,1040,1046,1048,1054,1056,1062,1064,1069,1070,1076,1078,1083,1085,1091,1093,1099],{"type":43,"tag":86,"props":1026,"children":1027},{},[1028],{"type":48,"value":1029},"New host-delegated action",{"type":48,"value":1031}," → add a thin method on the ",{"type":43,"tag":62,"props":1033,"children":1035},{"className":1034},[],[1036],{"type":48,"value":1037},"McpApp",{"type":48,"value":1039}," bridge\n(",{"type":43,"tag":62,"props":1041,"children":1043},{"className":1042},[],[1044],{"type":48,"value":1045},"cao_mcp_apps\u002Fsrc\u002Fshared\u002FmcpApp.ts",{"type":48,"value":1047},") that issues the spec ",{"type":43,"tag":62,"props":1049,"children":1051},{"className":1050},[],[1052],{"type":48,"value":1053},"ui\u002F*",{"type":48,"value":1055}," request\n(e.g. ",{"type":43,"tag":62,"props":1057,"children":1059},{"className":1058},[],[1060],{"type":48,"value":1061},"openLink",{"type":48,"value":1063}," → ",{"type":43,"tag":62,"props":1065,"children":1067},{"className":1066},[],[1068],{"type":48,"value":503},{"type":48,"value":413},{"type":43,"tag":62,"props":1071,"children":1073},{"className":1072},[],[1074],{"type":48,"value":1075},"requestDisplayMode",{"type":48,"value":1077}," →\n",{"type":43,"tag":62,"props":1079,"children":1081},{"className":1080},[],[1082],{"type":48,"value":559},{"type":48,"value":1084},"); gate UI on the matching ",{"type":43,"tag":62,"props":1086,"children":1088},{"className":1087},[],[1089],{"type":48,"value":1090},"hostCapabilities",{"type":48,"value":1092}," flag and\ncover it with a ",{"type":43,"tag":62,"props":1094,"children":1096},{"className":1095},[],[1097],{"type":48,"value":1098},"mockHost",{"type":48,"value":1100}," test.",{"type":43,"tag":341,"props":1102,"children":1103},{},[1104,1109,1110,1116,1118,1124],{"type":43,"tag":86,"props":1105,"children":1106},{},[1107],{"type":48,"value":1108},"Keep the boundary",{"type":48,"value":1063},{"type":43,"tag":62,"props":1111,"children":1113},{"className":1112},[],[1114],{"type":48,"value":1115},"mcp_server\u002F*",{"type":48,"value":1117}," must reach state only over HTTP; the AST\nguard test (",{"type":43,"tag":62,"props":1119,"children":1121},{"className":1120},[],[1122],{"type":48,"value":1123},"test\u002Ftest_http_only_boundary.py",{"type":48,"value":1125},") enforces it.",{"type":43,"tag":341,"props":1127,"children":1128},{},[1129,1134,1136,1142,1143,1149],{"type":43,"tag":86,"props":1130,"children":1131},{},[1132],{"type":48,"value":1133},"Keep bundles JIT-free",{"type":48,"value":1135}," → no ",{"type":43,"tag":62,"props":1137,"children":1139},{"className":1138},[],[1140],{"type":48,"value":1141},"eval",{"type":48,"value":779},{"type":43,"tag":62,"props":1144,"children":1146},{"className":1145},[],[1147],{"type":48,"value":1148},"new Function",{"type":48,"value":1150}," (host CSP forbids it); the\nCI scan fails the build otherwise.",{"type":43,"tag":178,"props":1152,"children":1154},{"id":1153},"recording-verification",[1155],{"type":48,"value":1156},"Recording & Verification",{"type":43,"tag":51,"props":1158,"children":1159},{},[1160],{"type":48,"value":1161},"After building or modifying views, regenerate the demo media:",{"type":43,"tag":197,"props":1163,"children":1165},{"className":199,"code":1164,"language":201,"meta":202,"style":202},"cd cao_mcp_apps && npm run build:all && npm run demo\n",[1166],{"type":43,"tag":62,"props":1167,"children":1168},{"__ignoreMap":202},[1169],{"type":43,"tag":208,"props":1170,"children":1171},{"class":210,"line":211},[1172,1178,1183,1188,1193,1197,1202,1206,1210,1214],{"type":43,"tag":208,"props":1173,"children":1175},{"style":1174},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[1176],{"type":48,"value":1177},"cd",{"type":43,"tag":208,"props":1179,"children":1180},{"style":248},[1181],{"type":48,"value":1182}," cao_mcp_apps",{"type":43,"tag":208,"props":1184,"children":1185},{"style":227},[1186],{"type":48,"value":1187}," &&",{"type":43,"tag":208,"props":1189,"children":1190},{"style":242},[1191],{"type":48,"value":1192}," npm",{"type":43,"tag":208,"props":1194,"children":1195},{"style":248},[1196],{"type":48,"value":251},{"type":43,"tag":208,"props":1198,"children":1199},{"style":248},[1200],{"type":48,"value":1201}," build:all",{"type":43,"tag":208,"props":1203,"children":1204},{"style":227},[1205],{"type":48,"value":1187},{"type":43,"tag":208,"props":1207,"children":1208},{"style":242},[1209],{"type":48,"value":1192},{"type":43,"tag":208,"props":1211,"children":1212},{"style":248},[1213],{"type":48,"value":251},{"type":43,"tag":208,"props":1215,"children":1216},{"style":248},[1217],{"type":48,"value":1218}," demo\n",{"type":43,"tag":51,"props":1220,"children":1221},{},[1222,1224,1230],{"type":48,"value":1223},"This runs ",{"type":43,"tag":62,"props":1225,"children":1227},{"className":1226},[],[1228],{"type":48,"value":1229},"scripts\u002Frecord-demo.mjs",{"type":48,"value":1231}," which:",{"type":43,"tag":1233,"props":1234,"children":1235},"ol",{},[1236,1241,1246,1259,1271],{"type":43,"tag":341,"props":1237,"children":1238},{},[1239],{"type":48,"value":1240},"Boots the E2E harness server (serves built bundles in a real MCP-host iframe)",{"type":43,"tag":341,"props":1242,"children":1243},{},[1244],{"type":48,"value":1245},"Drives Chromium through: dashboard → agent detail → unified → event-stream",{"type":43,"tag":341,"props":1247,"children":1248},{},[1249,1251,1257],{"type":48,"value":1250},"Records video (",{"type":43,"tag":62,"props":1252,"children":1254},{"className":1253},[],[1255],{"type":48,"value":1256},"docs\u002Fmedia\u002Fmcp-apps-demo.webm",{"type":48,"value":1258},")",{"type":43,"tag":341,"props":1260,"children":1261},{},[1262,1264,1270],{"type":48,"value":1263},"Captures screenshots (",{"type":43,"tag":62,"props":1265,"children":1267},{"className":1266},[],[1268],{"type":48,"value":1269},"docs\u002Fmedia\u002Fmcp-apps-{dashboard,agent,unified,event-stream}.png",{"type":48,"value":1258},{"type":43,"tag":341,"props":1272,"children":1273},{},[1274,1276,1282],{"type":48,"value":1275},"Generates an optimized GIF (",{"type":43,"tag":62,"props":1277,"children":1279},{"className":1278},[],[1280],{"type":48,"value":1281},"docs\u002Fmedia\u002Fmcp-apps-demo.gif",{"type":48,"value":1283},") when ffmpeg is available",{"type":43,"tag":51,"props":1285,"children":1286},{},[1287,1289,1295,1296,1301],{"type":48,"value":1288},"The GIF is referenced in ",{"type":43,"tag":62,"props":1290,"children":1292},{"className":1291},[],[1293],{"type":48,"value":1294},"README.md",{"type":48,"value":629},{"type":43,"tag":62,"props":1297,"children":1299},{"className":1298},[],[1300],{"type":48,"value":67},{"type":48,"value":1302}," — always regenerate after\nview changes so docs stay current.",{"type":43,"tag":51,"props":1304,"children":1305},{},[1306,1311,1312,1318,1320,1326,1328,1334],{"type":43,"tag":86,"props":1307,"children":1308},{},[1309],{"type":48,"value":1310},"Env overrides:",{"type":48,"value":513},{"type":43,"tag":62,"props":1313,"children":1315},{"className":1314},[],[1316],{"type":48,"value":1317},"CHROMIUM_BIN",{"type":48,"value":1319}," (path to Chrome), ",{"type":43,"tag":62,"props":1321,"children":1323},{"className":1322},[],[1324],{"type":48,"value":1325},"FFMPEG_BIN",{"type":48,"value":1327}," (for GIF), ",{"type":43,"tag":62,"props":1329,"children":1331},{"className":1330},[],[1332],{"type":48,"value":1333},"DEMO_PORT",{"type":48,"value":81},{"type":43,"tag":51,"props":1336,"children":1337},{},[1338,1340,1344],{"type":48,"value":1339},"For a worked example of the full MCP Apps surface in action, see ",{"type":43,"tag":57,"props":1341,"children":1342},{"href":690},[1343],{"type":48,"value":690},{"type":48,"value":81},{"type":43,"tag":1346,"props":1347,"children":1348},"style",{},[1349],{"type":48,"value":1350},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1352,"total":1443},[1353,1367,1379,1393,1409,1416,1430],{"slug":917,"name":917,"fn":1354,"description":1355,"org":1356,"tags":1357,"stars":26,"repoUrl":27,"updatedAt":1366},"add interactive UI to 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 tool\", \"enrich MCP tools with UI\", \"add interactive UI to existing server\", \"add MCP Apps to my server\", or needs to add interactive UI capabilities to an existing MCP server that already has tools. Provides guidance for analyzing existing tools and adding MCP Apps UI resources.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1358,1361,1362,1365],{"name":1359,"slug":1360,"type":16},"Frontend","frontend",{"name":18,"slug":19,"type":16},{"name":1363,"slug":1364,"type":16},"Plugin Development","plugin-development",{"name":24,"slug":25,"type":16},"2026-07-12T08:41:40.4008",{"slug":869,"name":869,"fn":1368,"description":1369,"org":1370,"tags":1371,"stars":26,"repoUrl":27,"updatedAt":1378},"emit interactive dashboard UI components","Author live dashboard UI from an agent via the `emit_ui` MCP tool. Emit one of six allow-listed components (approval_card, choice_prompt, diff_summary, progress, metric, agent_card) with JSON props and it renders in any AG-UI client watching the fleet. Use when you want the operator to see a decision, a diff, or a status readout instead of scrolling terminal text. Arbitrary HTML\u002Fmarkup is refused.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1372,1373,1376,1377],{"name":21,"slug":22,"type":16},{"name":1374,"slug":1375,"type":16},"Dashboards","dashboards",{"name":18,"slug":19,"type":16},{"name":24,"slug":25,"type":16},"2026-07-22T05:35:50.851108",{"slug":1380,"name":1380,"fn":1381,"description":1382,"org":1383,"tags":1384,"stars":26,"repoUrl":27,"updatedAt":1392},"cao-agent-routing","route tasks to appropriate CAO agents","Find and select the best installed CAO agent profile for a task before delegating with assign or handoff. Use when a supervisor needs to route coding, documentation, infrastructure, review, research, or other specialist work and the user has not already chosen an agent profile.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1385,1386,1389],{"name":21,"slug":22,"type":16},{"name":1387,"slug":1388,"type":16},"AWS","aws",{"name":1390,"slug":1391,"type":16},"Orchestration","orchestration","2026-07-25T05:56:34.255071",{"slug":1394,"name":1394,"fn":1395,"description":1396,"org":1397,"tags":1398,"stars":26,"repoUrl":27,"updatedAt":1408},"cao-learning","report task outcomes and distill lessons","Report task outcomes and distill lessons so the team improves across runs — report_outcome after each unit of work, retrospector handoffs at natural boundaries, and applying injected lessons. Use in workflows that run repeatedly over similar work items. Requires memory.learning_enabled; degrade silently when the tools report disabled.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1399,1402,1405],{"name":1400,"slug":1401,"type":16},"Best Practices","best-practices",{"name":1403,"slug":1404,"type":16},"Engineering","engineering",{"name":1406,"slug":1407,"type":16},"Operations","operations","2026-07-29T06:00:28.147989",{"slug":4,"name":4,"fn":5,"description":6,"org":1410,"tags":1411,"stars":26,"repoUrl":27,"updatedAt":28},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1412,1413,1414,1415],{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},{"name":18,"slug":19,"type":16},{"name":24,"slug":25,"type":16},{"slug":1417,"name":1417,"fn":1418,"description":1419,"org":1420,"tags":1421,"stars":26,"repoUrl":27,"updatedAt":1429},"cao-memory","manage durable agent memory and preferences","Store, recall, and forget durable facts with CAO memory — user preferences, project conventions, decisions, and corrections that should persist across sessions and agents. Use proactively to check memory before asking the user, and to save anything worth remembering. Distinct from any provider-native memory.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1422,1423,1426],{"name":21,"slug":22,"type":16},{"name":1424,"slug":1425,"type":16},"Memory","memory",{"name":1427,"slug":1428,"type":16},"Productivity","productivity","2026-07-12T08:37:03.180421",{"slug":1431,"name":1431,"fn":1432,"description":1433,"org":1434,"tags":1435,"stars":26,"repoUrl":27,"updatedAt":1442},"cao-plugin","scaffold CAO agent plugins","Create a new CAO (CLI Agent Orchestrator) plugin. Use this skill whenever the user wants to add a plugin that reacts to CAO lifecycle or messaging events, scaffold a plugin package, understand plugin requirements, or integrate an external system (Discord, Slack, dashboards, logging, metrics) with CAO. Also use when the user asks what plugin events are available, how plugin discovery works, or how to install a plugin into a CAO environment.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1436,1437,1440,1441],{"name":21,"slug":22,"type":16},{"name":1438,"slug":1439,"type":16},"Automation","automation",{"name":14,"slug":15,"type":16},{"name":1363,"slug":1364,"type":16},"2026-07-12T08:36:49.784639",16,{"items":1445,"total":1621},[1446,1465,1486,1496,1509,1522,1532,1542,1563,1578,1593,1606],{"slug":1447,"name":1447,"fn":1448,"description":1449,"org":1450,"tags":1451,"stars":1462,"repoUrl":1463,"updatedAt":1464},"agentcore-investigation","investigate Bedrock AgentCore runtime sessions","Investigate Bedrock AgentCore runtime sessions via CloudWatch Logs Insights — resolve session\u002Ftrace IDs, query OTEL spans, filter noise, build timelines. Use when debugging AgentCore agent sessions, tracing tool calls, or analyzing latency.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1452,1453,1456,1459],{"name":1387,"slug":1388,"type":16},{"name":1454,"slug":1455,"type":16},"Debugging","debugging",{"name":1457,"slug":1458,"type":16},"Logs","logs",{"name":1460,"slug":1461,"type":16},"Observability","observability",9427,"https:\u002F\u002Fgithub.com\u002Fawslabs\u002Fmcp","2026-07-12T08:37:22.601527",{"slug":1466,"name":1467,"fn":1468,"description":1469,"org":1470,"tags":1471,"stars":1462,"repoUrl":1463,"updatedAt":1485},"amazon-aurora-dsql","amazon aurora dsql","build applications with Aurora DSQL","Build with Aurora DSQL — manage schemas, execute queries, handle migrations, diagnose query plans, load data, and develop applications with a serverless, distributed SQL database. Covers IAM auth, multi-tenant patterns, MySQL-to-DSQL and PostgreSQL-to-DSQL schema conversion, FK replacement code generation, OCC retry patterns, ORM migration (Django\u002FHibernate\u002FRails), DDL operations, query plan explainability, SQL compatibility validation, and bulk data loading. Triggers on phrases like: DSQL, Aurora DSQL, create DSQL table, DSQL schema, migrate to DSQL, distributed SQL database, serverless PostgreSQL-compatible database, DSQL query plan, DSQL EXPLAIN ANALYZE, why is my DSQL query slow, DSQL foreign key, DSQL OCC retry, DSQL multi-region, load into DSQL, load CSV into DSQL, bulk load DSQL, aurora-dsql-loader.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1472,1475,1476,1479,1482],{"name":1473,"slug":1474,"type":16},"Aurora","aurora",{"name":1387,"slug":1388,"type":16},{"name":1477,"slug":1478,"type":16},"Database","database",{"name":1480,"slug":1481,"type":16},"Serverless","serverless",{"name":1483,"slug":1484,"type":16},"SQL","sql","2026-07-12T08:36:45.053393",{"slug":1487,"name":1488,"fn":1468,"description":1469,"org":1489,"tags":1490,"stars":1462,"repoUrl":1463,"updatedAt":1495},"aurora-dsql","aurora dsql",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1491,1492,1493,1494],{"name":1387,"slug":1388,"type":16},{"name":1477,"slug":1478,"type":16},{"name":1480,"slug":1481,"type":16},{"name":1483,"slug":1484,"type":16},"2026-07-12T08:36:42.694299",{"slug":1497,"name":1498,"fn":1468,"description":1469,"org":1499,"tags":1500,"stars":1462,"repoUrl":1463,"updatedAt":1508},"aws-dsql","aws dsql",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1501,1502,1503,1506,1507],{"name":1387,"slug":1388,"type":16},{"name":1477,"slug":1478,"type":16},{"name":1504,"slug":1505,"type":16},"Migration","migration",{"name":1480,"slug":1481,"type":16},{"name":1483,"slug":1484,"type":16},"2026-07-12T08:36:38.584057",{"slug":1510,"name":1511,"fn":1468,"description":1469,"org":1512,"tags":1513,"stars":1462,"repoUrl":1463,"updatedAt":1521},"distributed-postgres","distributed postgres",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1514,1515,1516,1519,1520],{"name":1387,"slug":1388,"type":16},{"name":1477,"slug":1478,"type":16},{"name":1517,"slug":1518,"type":16},"PostgreSQL","postgresql",{"name":1480,"slug":1481,"type":16},{"name":1483,"slug":1484,"type":16},"2026-07-12T08:36:46.530743",{"slug":1523,"name":1524,"fn":1468,"description":1469,"org":1525,"tags":1526,"stars":1462,"repoUrl":1463,"updatedAt":1531},"distributed-sql","distributed sql",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1527,1528,1529,1530],{"name":1387,"slug":1388,"type":16},{"name":1477,"slug":1478,"type":16},{"name":1480,"slug":1481,"type":16},{"name":1483,"slug":1484,"type":16},"2026-07-12T08:36:48.104182",{"slug":1533,"name":1533,"fn":1468,"description":1469,"org":1534,"tags":1535,"stars":1462,"repoUrl":1463,"updatedAt":1541},"dsql",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1536,1537,1538,1539,1540],{"name":1387,"slug":1388,"type":16},{"name":1477,"slug":1478,"type":16},{"name":1504,"slug":1505,"type":16},{"name":1480,"slug":1481,"type":16},{"name":1483,"slug":1484,"type":16},"2026-07-12T08:36:36.374512",{"slug":1543,"name":1543,"fn":1544,"description":1545,"org":1546,"tags":1547,"stars":1560,"repoUrl":1561,"updatedAt":1562},"cost-efficiency-analyzer","analyze cost efficiency and expenses","Analyzes cost structure, cost efficiency, and expense management from P&L data. Use when the user asks about costs, expenses, COGS, operating expenses, cost ratios, cost control, spending efficiency, margin compression from cost side, or wants to understand where money is going. Also use for \"are we spending too much\", \"cost breakdown\", \"expense analysis\", or \"how efficient are our operations\". NOT for revenue or top-line analysis.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1548,1551,1554,1557],{"name":1549,"slug":1550,"type":16},"Accounting","accounting",{"name":1552,"slug":1553,"type":16},"Analytics","analytics",{"name":1555,"slug":1556,"type":16},"Cost Optimization","cost-optimization",{"name":1558,"slug":1559,"type":16},"Finance","finance",3176,"https:\u002F\u002Fgithub.com\u002Fawslabs\u002Fagentcore-samples","2026-07-12T08:40:03.29555",{"slug":1564,"name":1564,"fn":1565,"description":1566,"org":1567,"tags":1568,"stars":1560,"repoUrl":1561,"updatedAt":1577},"executive-financial-briefing","generate executive financial briefings","Generates a concise executive-level financial briefing or summary suitable for a CEO, CFO, or board presentation. Use when the user asks for a summary, briefing, executive summary, board update, financial overview, financial health check, or \"how is the business doing\". Covers the full P&L picture in one page. Also use for \"give me the highlights\", \"what do I need to know\", or \"quick financial update\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1569,1570,1571,1574],{"name":1387,"slug":1388,"type":16},{"name":1558,"slug":1559,"type":16},{"name":1572,"slug":1573,"type":16},"Management","management",{"name":1575,"slug":1576,"type":16},"Reporting","reporting","2026-07-12T08:40:02.066471",{"slug":1579,"name":1579,"fn":1580,"description":1581,"org":1582,"tags":1583,"stars":1560,"repoUrl":1561,"updatedAt":1592},"multi-quarter-trend-analysis","analyze multi-quarter financial trends","Analyzes financial trends across multiple quarters by comparing P&L metrics over time. Use when the user wants to see trends, patterns, trajectories, or directional movement across 3 or more quarters. Also use for \"how are we trending\", \"show me the trend\", \"track performance over time\", \"quarter over quarter comparison across all quarters\", or any multi-period longitudinal analysis.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1584,1585,1586,1589],{"name":1552,"slug":1553,"type":16},{"name":1558,"slug":1559,"type":16},{"name":1587,"slug":1588,"type":16},"Financial Statements","financial-statements",{"name":1590,"slug":1591,"type":16},"Variance Analysis","variance-analysis","2026-07-12T08:40:00.79141",{"slug":1594,"name":1594,"fn":1595,"description":1596,"org":1597,"tags":1598,"stars":1560,"repoUrl":1561,"updatedAt":1605},"pdf","process and manipulate PDF documents","Use this skill whenever the user wants to do anything with PDF files. This includes reading or extracting text\u002Ftables from PDFs, combining or merging multiple PDFs into one, splitting PDFs apart, rotating pages, adding watermarks, creating new PDFs, filling PDF forms, encrypting\u002Fdecrypting PDFs, extracting images, and OCR on scanned PDFs to make them searchable. If the user mentions a .pdf file or asks to produce one, use this skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1599,1600,1603],{"name":1438,"slug":1439,"type":16},{"name":1601,"slug":1602,"type":16},"Documents","documents",{"name":1604,"slug":1594,"type":16},"PDF","2026-07-12T08:41:44.135656",{"slug":1607,"name":1607,"fn":1608,"description":1609,"org":1610,"tags":1611,"stars":1560,"repoUrl":1561,"updatedAt":1620},"quarterly-kpi-calculator","calculate quarterly financial KPIs","Calculates quarterly financial KPIs from P&L data. P&L figures can be provided directly by the user or fetched from the financial data MCP server. Use when the user wants KPI calculations such as Gross Margin %, EBITDA Margin %, Operating Expense Ratio, or Revenue Growth % QoQ. Also use for quarterly performance review, P&L analysis, or interpreting financial ratios against benchmarks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1612,1613,1616,1617],{"name":1549,"slug":1550,"type":16},{"name":1614,"slug":1615,"type":16},"Data Analysis","data-analysis",{"name":1558,"slug":1559,"type":16},{"name":1618,"slug":1619,"type":16},"KPI","kpi","2026-07-12T08:39:59.54971",150]