[{"data":1,"prerenderedAt":2214},["ShallowReactive",2],{"navigation_docs":3,"-apps-authoring":272,"-apps-authoring-surround":2209},[4,40,70,99,122,151,184,243],{"title":5,"path":6,"stem":7,"children":8,"page":39},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24,29,34],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-book-open",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Configuration","\u002Fgetting-started\u002Fconfiguration","1.getting-started\u002F3.configuration","i-lucide-settings",{"title":25,"path":26,"stem":27,"icon":28},"MCP Inspector","\u002Fgetting-started\u002Finspector","1.getting-started\u002F4.inspector","i-lucide-circuit-board",{"title":30,"path":31,"stem":32,"icon":33},"Connection","\u002Fgetting-started\u002Fconnection","1.getting-started\u002F5.connection","i-lucide-plug",{"title":35,"path":36,"stem":37,"icon":38},"Agent Skills","\u002Fgetting-started\u002Fagent-skills","1.getting-started\u002F6.agent-skills","i-lucide-sparkles",false,{"title":41,"path":42,"stem":43,"children":44,"page":39},"Tools","\u002Ftools","2.tools",[45,50,55,60,65],{"title":46,"path":47,"stem":48,"icon":49},"Overview","\u002Ftools\u002Foverview","2.tools\u002F0.overview","i-lucide-wrench",{"title":51,"path":52,"stem":53,"icon":54},"Schema, handler & returns","\u002Ftools\u002Fschema-handler","2.tools\u002F1.schema-handler","i-lucide-braces",{"title":56,"path":57,"stem":58,"icon":59},"Annotations & input examples","\u002Ftools\u002Fannotations","2.tools\u002F2.annotations","i-lucide-badge-info",{"title":61,"path":62,"stem":63,"icon":64},"Errors & caching","\u002Ftools\u002Ferrors-caching","2.tools\u002F3.errors-caching","i-lucide-shield",{"title":66,"path":67,"stem":68,"icon":69},"Groups, files & dynamic registration","\u002Ftools\u002Fgroups-organization","2.tools\u002F4.groups-organization","i-lucide-tags",{"title":71,"path":72,"stem":73,"children":74,"page":39},"Resources","\u002Fresources","3.resources",[75,79,84,89,94],{"title":46,"path":76,"stem":77,"icon":78},"\u002Fresources\u002Foverview","3.resources\u002F0.overview","i-lucide-package",{"title":80,"path":81,"stem":82,"icon":83},"Static resources & structure","\u002Fresources\u002Fstatic-and-structure","3.resources\u002F1.static-and-structure","i-lucide-file-stack",{"title":85,"path":86,"stem":87,"icon":88},"Templates & handlers","\u002Fresources\u002Ftemplates-and-handlers","3.resources\u002F2.templates-and-handlers","i-lucide-git-branch",{"title":90,"path":91,"stem":92,"icon":93},"Metadata, content & errors","\u002Fresources\u002Fcontent-metadata-errors","3.resources\u002F3.content-metadata-errors","i-lucide-layers",{"title":95,"path":96,"stem":97,"icon":98},"Groups & organization","\u002Fresources\u002Forganization","3.resources\u002F4.organization","i-lucide-folder-tree",{"title":100,"path":101,"stem":102,"children":103,"page":39},"Prompts","\u002Fprompts","4.prompts",[104,108,113,117],{"title":46,"path":105,"stem":106,"icon":107},"\u002Fprompts\u002Foverview","4.prompts\u002F0.overview","i-lucide-message-square",{"title":109,"path":110,"stem":111,"icon":112},"Authoring & structure","\u002Fprompts\u002Fauthoring","4.prompts\u002F1.authoring","i-lucide-pen-line",{"title":114,"path":115,"stem":116,"icon":93},"Input, handler & messages","\u002Fprompts\u002Finput-handler-messages","4.prompts\u002F2.input-handler-messages",{"title":118,"path":119,"stem":120,"icon":121},"Patterns & advanced","\u002Fprompts\u002Fpatterns-advanced","4.prompts\u002F3.patterns-advanced","i-lucide-line-chart",{"title":123,"path":124,"stem":125,"children":126,"page":39},"Handlers","\u002Fhandlers","5.handlers",[127,131,136,141,146],{"title":46,"path":128,"stem":129,"icon":130},"\u002Fhandlers\u002Foverview","5.handlers\u002F0.overview","i-lucide-server",{"title":132,"path":133,"stem":134,"icon":135},"Default & custom handlers","\u002Fhandlers\u002Fdefault-and-custom","5.handlers\u002F1.default-and-custom","i-lucide-toggle-left",{"title":137,"path":138,"stem":139,"icon":140},"Structure & options","\u002Fhandlers\u002Fstructure-and-options","5.handlers\u002F2.structure-and-options","i-lucide-sliders-horizontal",{"title":142,"path":143,"stem":144,"icon":145},"Examples & routing","\u002Fhandlers\u002Fexamples-routing","5.handlers\u002F3.examples-routing","i-lucide-route",{"title":147,"path":148,"stem":149,"icon":150},"Sharing & practices","\u002Fhandlers\u002Fsharing-practices","5.handlers\u002F4.sharing-practices","i-lucide-share-2",{"title":152,"path":153,"stem":154,"children":155,"page":39},"Apps","\u002Fapps","6.apps",[156,160,165,170,174,179],{"title":46,"path":157,"stem":158,"icon":159},"\u002Fapps\u002Foverview","6.apps\u002F0.overview","i-lucide-app-window",{"title":161,"path":162,"stem":163,"icon":164},"Authoring & defineMcpApp","\u002Fapps\u002Fauthoring","6.apps\u002F1.authoring","i-lucide-code-2",{"title":166,"path":167,"stem":168,"icon":169},"useMcpApp() bridge","\u002Fapps\u002Fuse-mcp-app","6.apps\u002F2.use-mcp-app","i-lucide-message-circle",{"title":171,"path":172,"stem":173,"icon":64},"CSP & build pipeline","\u002Fapps\u002Fcsp-and-wiring","6.apps\u002F3.csp-and-wiring",{"title":175,"path":176,"stem":177,"icon":178},"Testing & publishing","\u002Fapps\u002Ftesting-publishing","6.apps\u002F4.testing-publishing","i-lucide-rocket",{"title":180,"path":181,"stem":182,"icon":183},"Patterns & limits","\u002Fapps\u002Fpatterns-reference","6.apps\u002F5.patterns-reference","i-lucide-book-marked",{"title":185,"path":186,"stem":187,"children":188,"page":39},"Advanced Topics","\u002Fadvanced","7.advanced",[189,194,199,204,208,213,218,223,228,233,238],{"title":190,"path":191,"stem":192,"icon":193},"Custom Paths","\u002Fadvanced\u002Fcustom-paths","7.advanced\u002F1.custom-paths","i-lucide-folder",{"title":195,"path":196,"stem":197,"icon":198},"Logging","\u002Fadvanced\u002Flogging","7.advanced\u002F10.logging","i-lucide-scroll-text",{"title":200,"path":201,"stem":202,"icon":203},"MCP Apps Internals","\u002Fadvanced\u002Fmcp-apps-internals","7.advanced\u002F11.mcp-apps-internals","i-lucide-cog",{"title":205,"path":206,"stem":207,"icon":64},"Middleware","\u002Fadvanced\u002Fmiddleware","7.advanced\u002F2.middleware",{"title":209,"path":210,"stem":211,"icon":212},"TypeScript","\u002Fadvanced\u002Ftypescript","7.advanced\u002F3.typescript","i-lucide-type",{"title":214,"path":215,"stem":216,"icon":217},"Hooks","\u002Fadvanced\u002Fhooks","7.advanced\u002F4.hooks","i-lucide-webhook",{"title":219,"path":220,"stem":221,"icon":222},"MCP Evals","\u002Fadvanced\u002Fevals","7.advanced\u002F5.evals","i-lucide-flask-conical",{"title":224,"path":225,"stem":226,"icon":227},"Sessions","\u002Fadvanced\u002Fsessions","7.advanced\u002F6.sessions","i-lucide-database",{"title":229,"path":230,"stem":231,"icon":232},"Dynamic Definitions","\u002Fadvanced\u002Fdynamic-definitions","7.advanced\u002F7.dynamic-definitions","i-lucide-toggle-right",{"title":234,"path":235,"stem":236,"icon":237},"Code Mode","\u002Fadvanced\u002Fcode-mode","7.advanced\u002F8.code-mode","i-lucide-code",{"title":239,"path":240,"stem":241,"icon":242},"Elicitation","\u002Fadvanced\u002Felicitation","7.advanced\u002F9.elicitation","i-lucide-message-square-quote",{"title":244,"path":245,"stem":246,"children":247,"page":39},"Examples","\u002Fexamples","8.examples",[248,253,258,263,268],{"title":249,"path":250,"stem":251,"icon":252},"Authentication","\u002Fexamples\u002Fauthentication","8.examples\u002F1.authentication","i-lucide-shield-check",{"title":254,"path":255,"stem":256,"icon":257},"API Integration","\u002Fexamples\u002Fapi-integration","8.examples\u002F2.api-integration","i-lucide-globe",{"title":259,"path":260,"stem":261,"icon":262},"Common Patterns","\u002Fexamples\u002Fcommon-patterns","8.examples\u002F3.common-patterns","i-lucide-lightbulb",{"title":264,"path":265,"stem":266,"icon":267},"File Operations","\u002Fexamples\u002Ffile-operations","8.examples\u002F4.file-operations","i-lucide-file",{"title":269,"path":270,"stem":271,"icon":107},"Prompt Examples","\u002Fexamples\u002Fprompt-examples","8.examples\u002F5.prompt-examples",{"id":273,"title":161,"body":274,"description":2200,"extension":2201,"links":2202,"meta":2203,"navigation":2204,"path":162,"seo":2205,"stem":163,"__hash__":2208},"docs\u002F6.apps\u002F1.authoring.md",{"type":275,"value":276,"toc":2190},"minimark",[277,282,286,1193,1196,1254,1258,1282,1333,1351,1356,1366,1439,1450,1455,1466,1606,1610,1625,1784,1800,1810,1814,1828,1892,2005,2184,2187],[278,279,281],"h2",{"id":280},"quick-start","Quick Start",[283,284,285],"p",{},"A complete app — schema, server handler, UI — in one file:",[287,288,294],"pre",{"className":289,"code":290,"filename":291,"language":292,"meta":293,"style":293},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript setup lang=\"ts\">\nimport { z } from 'zod'\n\ninterface PalettePayload {\n  base: string\n  swatches: { name: string, hex: string }[]\n}\n\ndefineMcpApp({\n  description: 'Pick a colour and preview a 5-tone palette.',\n  inputSchema: {\n    base: z.string().describe('Hex colour to anchor the palette, e.g. #2563eb'),\n  },\n  handler: async ({ base }): Promise\u003C{ structuredContent: PalettePayload }> => {\n    const swatches = await $fetch\u003C{ name: string, hex: string }[]>('\u002Fapi\u002Fpalette', {\n      query: { base },\n    })\n    return { structuredContent: { base, swatches } }\n  },\n})\n\nconst { data, loading, sendPrompt } = useMcpApp\u003CPalettePayload>()\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cmain class=\"picker\">\n    \u003Cp v-if=\"loading\">\n      Mixing colours…\n    \u003C\u002Fp>\n    \u003Cul v-else-if=\"data\" class=\"swatches\">\n      \u003Cli v-for=\"s in data.swatches\" :key=\"s.hex\">\n        \u003Cbutton\n          type=\"button\"\n          :style=\"{ background: s.hex }\"\n          @click=\"sendPrompt(`Use ${s.name} (${s.hex}) as the primary colour.`)\"\n        >\n          {{ s.name }}\n        \u003C\u002Fbutton>\n      \u003C\u002Fli>\n    \u003C\u002Ful>\n  \u003C\u002Fmain>\n\u003C\u002Ftemplate>\n\n\u003Cstyle scoped>\n.picker { padding: 16px; font-family: system-ui, sans-serif; }\n.swatches { display: grid; grid-template-columns: repeat(5, 1fr); gap: 8px; padding: 0; list-style: none; }\n.swatches button { width: 100%; aspect-ratio: 1; border-radius: 8px; border: 0; cursor: pointer; }\n\u003C\u002Fstyle>\n","app\u002Fmcp\u002Fcolor-picker.vue","vue","",[295,296,297,332,361,368,381,393,426,432,437,450,469,479,517,523,565,620,635,644,669,674,682,687,725,735,740,750,773,795,801,811,844,879,888,904,919,934,940,946,956,966,975,985,994,999,1012,1051,1122,1184],"code",{"__ignoreMap":293},[298,299,302,306,310,314,317,320,323,327,329],"span",{"class":300,"line":301},"line",1,[298,303,305],{"class":304},"sMK4o","\u003C",[298,307,309],{"class":308},"swJcz","script",[298,311,313],{"class":312},"spNyl"," setup",[298,315,316],{"class":312}," lang",[298,318,319],{"class":304},"=",[298,321,322],{"class":304},"\"",[298,324,326],{"class":325},"sfazB","ts",[298,328,322],{"class":304},[298,330,331],{"class":304},">\n",[298,333,335,339,342,346,349,352,355,358],{"class":300,"line":334},2,[298,336,338],{"class":337},"s7zQu","import",[298,340,341],{"class":304}," {",[298,343,345],{"class":344},"sTEyZ"," z",[298,347,348],{"class":304}," }",[298,350,351],{"class":337}," from",[298,353,354],{"class":304}," '",[298,356,357],{"class":325},"zod",[298,359,360],{"class":304},"'\n",[298,362,364],{"class":300,"line":363},3,[298,365,367],{"emptyLinePlaceholder":366},true,"\n",[298,369,371,374,378],{"class":300,"line":370},4,[298,372,373],{"class":312},"interface",[298,375,377],{"class":376},"sBMFI"," PalettePayload",[298,379,380],{"class":304}," {\n",[298,382,384,387,390],{"class":300,"line":383},5,[298,385,386],{"class":308},"  base",[298,388,389],{"class":304},":",[298,391,392],{"class":376}," string\n",[298,394,396,399,401,403,406,408,411,414,417,419,421,423],{"class":300,"line":395},6,[298,397,398],{"class":308},"  swatches",[298,400,389],{"class":304},[298,402,341],{"class":304},[298,404,405],{"class":308}," name",[298,407,389],{"class":304},[298,409,410],{"class":376}," string",[298,412,413],{"class":304},",",[298,415,416],{"class":308}," hex",[298,418,389],{"class":304},[298,420,410],{"class":376},[298,422,348],{"class":304},[298,424,425],{"class":344},"[]\n",[298,427,429],{"class":300,"line":428},7,[298,430,431],{"class":304},"}\n",[298,433,435],{"class":300,"line":434},8,[298,436,367],{"emptyLinePlaceholder":366},[298,438,440,444,447],{"class":300,"line":439},9,[298,441,443],{"class":442},"s2Zo4","defineMcpApp",[298,445,446],{"class":344},"(",[298,448,449],{"class":304},"{\n",[298,451,453,456,458,460,463,466],{"class":300,"line":452},10,[298,454,455],{"class":308},"  description",[298,457,389],{"class":304},[298,459,354],{"class":304},[298,461,462],{"class":325},"Pick a colour and preview a 5-tone palette.",[298,464,465],{"class":304},"'",[298,467,468],{"class":304},",\n",[298,470,472,475,477],{"class":300,"line":471},11,[298,473,474],{"class":308},"  inputSchema",[298,476,389],{"class":304},[298,478,380],{"class":304},[298,480,482,485,487,489,492,495,498,500,503,505,507,510,512,515],{"class":300,"line":481},12,[298,483,484],{"class":308},"    base",[298,486,389],{"class":304},[298,488,345],{"class":344},[298,490,491],{"class":304},".",[298,493,494],{"class":442},"string",[298,496,497],{"class":344},"()",[298,499,491],{"class":304},[298,501,502],{"class":442},"describe",[298,504,446],{"class":344},[298,506,465],{"class":304},[298,508,509],{"class":325},"Hex colour to anchor the palette, e.g. #2563eb",[298,511,465],{"class":304},[298,513,514],{"class":344},")",[298,516,468],{"class":304},[298,518,520],{"class":300,"line":519},13,[298,521,522],{"class":304},"  },\n",[298,524,526,529,531,534,537,541,544,547,550,553,555,557,560,563],{"class":300,"line":525},14,[298,527,528],{"class":442},"  handler",[298,530,389],{"class":304},[298,532,533],{"class":312}," async",[298,535,536],{"class":304}," ({",[298,538,540],{"class":539},"sHdIc"," base",[298,542,543],{"class":304}," }):",[298,545,546],{"class":376}," Promise",[298,548,549],{"class":304},"\u003C{",[298,551,552],{"class":308}," structuredContent",[298,554,389],{"class":304},[298,556,377],{"class":376},[298,558,559],{"class":304}," }>",[298,561,562],{"class":312}," =>",[298,564,380],{"class":304},[298,566,568,571,574,577,580,583,585,587,589,591,593,595,597,599,601,604,607,609,611,614,616,618],{"class":300,"line":567},15,[298,569,570],{"class":312},"    const",[298,572,573],{"class":344}," swatches",[298,575,576],{"class":304}," =",[298,578,579],{"class":337}," await",[298,581,582],{"class":442}," $fetch",[298,584,549],{"class":304},[298,586,405],{"class":308},[298,588,389],{"class":304},[298,590,410],{"class":376},[298,592,413],{"class":304},[298,594,416],{"class":308},[298,596,389],{"class":304},[298,598,410],{"class":376},[298,600,348],{"class":304},[298,602,603],{"class":308},"[]",[298,605,606],{"class":304},">",[298,608,446],{"class":308},[298,610,465],{"class":304},[298,612,613],{"class":325},"\u002Fapi\u002Fpalette",[298,615,465],{"class":304},[298,617,413],{"class":304},[298,619,380],{"class":304},[298,621,623,626,628,630,632],{"class":300,"line":622},16,[298,624,625],{"class":308},"      query",[298,627,389],{"class":304},[298,629,341],{"class":304},[298,631,540],{"class":344},[298,633,634],{"class":304}," },\n",[298,636,638,641],{"class":300,"line":637},17,[298,639,640],{"class":304},"    }",[298,642,643],{"class":308},")\n",[298,645,647,650,652,654,656,658,660,662,664,666],{"class":300,"line":646},18,[298,648,649],{"class":337},"    return",[298,651,341],{"class":304},[298,653,552],{"class":308},[298,655,389],{"class":304},[298,657,341],{"class":304},[298,659,540],{"class":344},[298,661,413],{"class":304},[298,663,573],{"class":344},[298,665,348],{"class":304},[298,667,668],{"class":304}," }\n",[298,670,672],{"class":300,"line":671},19,[298,673,522],{"class":304},[298,675,677,680],{"class":300,"line":676},20,[298,678,679],{"class":304},"}",[298,681,643],{"class":344},[298,683,685],{"class":300,"line":684},21,[298,686,367],{"emptyLinePlaceholder":366},[298,688,690,693,695,698,700,703,705,708,710,712,715,717,720,722],{"class":300,"line":689},22,[298,691,692],{"class":312},"const",[298,694,341],{"class":304},[298,696,697],{"class":344}," data",[298,699,413],{"class":304},[298,701,702],{"class":344}," loading",[298,704,413],{"class":304},[298,706,707],{"class":344}," sendPrompt ",[298,709,679],{"class":304},[298,711,576],{"class":304},[298,713,714],{"class":442}," useMcpApp",[298,716,305],{"class":304},[298,718,719],{"class":376},"PalettePayload",[298,721,606],{"class":304},[298,723,724],{"class":344},"()\n",[298,726,728,731,733],{"class":300,"line":727},23,[298,729,730],{"class":304},"\u003C\u002F",[298,732,309],{"class":308},[298,734,331],{"class":304},[298,736,738],{"class":300,"line":737},24,[298,739,367],{"emptyLinePlaceholder":366},[298,741,743,745,748],{"class":300,"line":742},25,[298,744,305],{"class":304},[298,746,747],{"class":308},"template",[298,749,331],{"class":304},[298,751,753,756,759,762,764,766,769,771],{"class":300,"line":752},26,[298,754,755],{"class":304},"  \u003C",[298,757,758],{"class":308},"main",[298,760,761],{"class":312}," class",[298,763,319],{"class":304},[298,765,322],{"class":304},[298,767,768],{"class":325},"picker",[298,770,322],{"class":304},[298,772,331],{"class":304},[298,774,776,779,781,784,786,788,791,793],{"class":300,"line":775},27,[298,777,778],{"class":304},"    \u003C",[298,780,283],{"class":308},[298,782,783],{"class":312}," v-if",[298,785,319],{"class":304},[298,787,322],{"class":304},[298,789,790],{"class":325},"loading",[298,792,322],{"class":304},[298,794,331],{"class":304},[298,796,798],{"class":300,"line":797},28,[298,799,800],{"class":344},"      Mixing colours…\n",[298,802,804,807,809],{"class":300,"line":803},29,[298,805,806],{"class":304},"    \u003C\u002F",[298,808,283],{"class":308},[298,810,331],{"class":304},[298,812,814,816,819,822,824,826,829,831,833,835,837,840,842],{"class":300,"line":813},30,[298,815,778],{"class":304},[298,817,818],{"class":308},"ul",[298,820,821],{"class":312}," v-else-if",[298,823,319],{"class":304},[298,825,322],{"class":304},[298,827,828],{"class":325},"data",[298,830,322],{"class":304},[298,832,761],{"class":312},[298,834,319],{"class":304},[298,836,322],{"class":304},[298,838,839],{"class":325},"swatches",[298,841,322],{"class":304},[298,843,331],{"class":304},[298,845,847,850,853,856,858,860,863,865,868,870,872,875,877],{"class":300,"line":846},31,[298,848,849],{"class":304},"      \u003C",[298,851,852],{"class":308},"li",[298,854,855],{"class":312}," v-for",[298,857,319],{"class":304},[298,859,322],{"class":304},[298,861,862],{"class":325},"s in data.swatches",[298,864,322],{"class":304},[298,866,867],{"class":312}," :key",[298,869,319],{"class":304},[298,871,322],{"class":304},[298,873,874],{"class":325},"s.hex",[298,876,322],{"class":304},[298,878,331],{"class":304},[298,880,882,885],{"class":300,"line":881},32,[298,883,884],{"class":304},"        \u003C",[298,886,887],{"class":308},"button\n",[298,889,891,894,896,898,901],{"class":300,"line":890},33,[298,892,893],{"class":312},"          type",[298,895,319],{"class":304},[298,897,322],{"class":304},[298,899,900],{"class":325},"button",[298,902,903],{"class":304},"\"\n",[298,905,907,910,912,914,917],{"class":300,"line":906},34,[298,908,909],{"class":312},"          :style",[298,911,319],{"class":304},[298,913,322],{"class":304},[298,915,916],{"class":325},"{ background: s.hex }",[298,918,903],{"class":304},[298,920,922,925,927,929,932],{"class":300,"line":921},35,[298,923,924],{"class":312},"          @click",[298,926,319],{"class":304},[298,928,322],{"class":304},[298,930,931],{"class":325},"sendPrompt(`Use ${s.name} (${s.hex}) as the primary colour.`)",[298,933,903],{"class":304},[298,935,937],{"class":300,"line":936},36,[298,938,939],{"class":304},"        >\n",[298,941,943],{"class":300,"line":942},37,[298,944,945],{"class":344},"          {{ s.name }}\n",[298,947,949,952,954],{"class":300,"line":948},38,[298,950,951],{"class":304},"        \u003C\u002F",[298,953,900],{"class":308},[298,955,331],{"class":304},[298,957,959,962,964],{"class":300,"line":958},39,[298,960,961],{"class":304},"      \u003C\u002F",[298,963,852],{"class":308},[298,965,331],{"class":304},[298,967,969,971,973],{"class":300,"line":968},40,[298,970,806],{"class":304},[298,972,818],{"class":308},[298,974,331],{"class":304},[298,976,978,981,983],{"class":300,"line":977},41,[298,979,980],{"class":304},"  \u003C\u002F",[298,982,758],{"class":308},[298,984,331],{"class":304},[298,986,988,990,992],{"class":300,"line":987},42,[298,989,730],{"class":304},[298,991,747],{"class":308},[298,993,331],{"class":304},[298,995,997],{"class":300,"line":996},43,[298,998,367],{"emptyLinePlaceholder":366},[298,1000,1002,1004,1007,1010],{"class":300,"line":1001},44,[298,1003,305],{"class":304},[298,1005,1006],{"class":308},"style",[298,1008,1009],{"class":312}," scoped",[298,1011,331],{"class":304},[298,1013,1015,1017,1019,1021,1025,1027,1031,1034,1037,1039,1042,1044,1047,1049],{"class":300,"line":1014},45,[298,1016,491],{"class":304},[298,1018,768],{"class":376},[298,1020,341],{"class":304},[298,1022,1024],{"class":1023},"sqsOY"," padding",[298,1026,389],{"class":304},[298,1028,1030],{"class":1029},"sbssI"," 16px",[298,1032,1033],{"class":304},";",[298,1035,1036],{"class":1023}," font-family",[298,1038,389],{"class":304},[298,1040,1041],{"class":344}," system-ui",[298,1043,413],{"class":304},[298,1045,1046],{"class":344}," sans-serif",[298,1048,1033],{"class":304},[298,1050,668],{"class":304},[298,1052,1054,1056,1058,1060,1063,1065,1068,1070,1073,1075,1078,1080,1083,1085,1088,1091,1094,1096,1099,1101,1103,1105,1108,1110,1113,1115,1118,1120],{"class":300,"line":1053},46,[298,1055,491],{"class":304},[298,1057,839],{"class":376},[298,1059,341],{"class":304},[298,1061,1062],{"class":1023}," display",[298,1064,389],{"class":304},[298,1066,1067],{"class":344}," grid",[298,1069,1033],{"class":304},[298,1071,1072],{"class":1023}," grid-template-columns",[298,1074,389],{"class":304},[298,1076,1077],{"class":442}," repeat",[298,1079,446],{"class":304},[298,1081,1082],{"class":1029},"5",[298,1084,413],{"class":304},[298,1086,1087],{"class":1029}," 1fr",[298,1089,1090],{"class":304},");",[298,1092,1093],{"class":1023}," gap",[298,1095,389],{"class":304},[298,1097,1098],{"class":1029}," 8px",[298,1100,1033],{"class":304},[298,1102,1024],{"class":1023},[298,1104,389],{"class":304},[298,1106,1107],{"class":1029}," 0",[298,1109,1033],{"class":304},[298,1111,1112],{"class":1023}," list-style",[298,1114,389],{"class":304},[298,1116,1117],{"class":344}," none",[298,1119,1033],{"class":304},[298,1121,668],{"class":304},[298,1123,1125,1127,1129,1132,1134,1137,1139,1142,1144,1147,1149,1152,1154,1157,1159,1161,1163,1166,1168,1170,1172,1175,1177,1180,1182],{"class":300,"line":1124},47,[298,1126,491],{"class":304},[298,1128,839],{"class":376},[298,1130,1131],{"class":376}," button",[298,1133,341],{"class":304},[298,1135,1136],{"class":1023}," width",[298,1138,389],{"class":304},[298,1140,1141],{"class":1029}," 100%",[298,1143,1033],{"class":304},[298,1145,1146],{"class":1023}," aspect-ratio",[298,1148,389],{"class":304},[298,1150,1151],{"class":1029}," 1",[298,1153,1033],{"class":304},[298,1155,1156],{"class":1023}," border-radius",[298,1158,389],{"class":304},[298,1160,1098],{"class":1029},[298,1162,1033],{"class":304},[298,1164,1165],{"class":1023}," border",[298,1167,389],{"class":304},[298,1169,1107],{"class":1029},[298,1171,1033],{"class":304},[298,1173,1174],{"class":1023}," cursor",[298,1176,389],{"class":304},[298,1178,1179],{"class":344}," pointer",[298,1181,1033],{"class":304},[298,1183,668],{"class":304},[298,1185,1187,1189,1191],{"class":300,"line":1186},48,[298,1188,730],{"class":304},[298,1190,1006],{"class":308},[298,1192,331],{"class":304},[283,1194,1195],{},"That's it. The toolkit:",[1197,1198,1199,1214,1228,1240],"ol",{},[852,1200,1201,1202,1204,1205,1209,1210,1213],{},"Detects ",[295,1203,443],{}," and ",[1206,1207,1208],"strong",{},"registers an MCP tool"," named ",[295,1211,1212],{},"color-picker"," (from the filename).",[852,1215,1216,1217,1220,1221,1224,1225,491],{},"Generates a ",[1206,1218,1219],{},"UI resource"," at ",[295,1222,1223],{},"ui:\u002F\u002Fmcp-app\u002Fcolor-picker"," exposing ",[295,1226,1227],{},"text\u002Fhtml;profile=mcp-app",[852,1229,1230,1231,491],{},"Bundles the SFC + assets into a single HTML file with ",[1232,1233,1237],"a",{"href":1234,"rel":1235},"https:\u002F\u002Fgithub.com\u002Frichardtallent\u002Fvite-plugin-singlefile",[1236],"nofollow",[295,1238,1239],{},"vite-plugin-singlefile",[852,1241,1242,1243,1246,1247,1250,1251,491],{},"Wires the ",[295,1244,1245],{},"handler","'s ",[295,1248,1249],{},"structuredContent"," into the iframe so the UI hydrates ",[1206,1252,1253],{},"without a second round-trip",[278,1255,1257],{"id":1256},"file-convention","File Convention",[283,1259,1260,1261,1266,1267,1270,1271,1274,1275,1278,1279,1281],{},"MCP Apps live in ",[1206,1262,1263],{},[295,1264,1265],{},"app\u002Fmcp\u002F"," by default (not ",[295,1268,1269],{},"server\u002Fmcp\u002F","). Change the app-side directory with ",[295,1272,1273],{},"mcp.appsDir"," in ",[295,1276,1277],{},"nuxt.config.ts",". They sit on the client side of Nuxt because they author Vue components — but the ",[295,1280,1245],{}," you declare runs server-side, just like a tool.",[287,1283,1287],{"className":1284,"code":1285,"language":1286,"meta":293,"style":293},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","app\u002F\n└── mcp\u002F\n    ├── color-picker.vue    # → tool: color-picker, resource: ui:\u002F\u002Fmcp-app\u002Fcolor-picker\n    └── admin\u002F\n        └── audit-log.vue   # → tool: audit-log\n","bash",[295,1288,1289,1294,1302,1314,1322],{"__ignoreMap":293},[298,1290,1291],{"class":300,"line":301},[298,1292,1293],{"class":376},"app\u002F\n",[298,1295,1296,1299],{"class":300,"line":334},[298,1297,1298],{"class":376},"└──",[298,1300,1301],{"class":325}," mcp\u002F\n",[298,1303,1304,1307,1310],{"class":300,"line":363},[298,1305,1306],{"class":376},"    ├──",[298,1308,1309],{"class":325}," color-picker.vue",[298,1311,1313],{"class":1312},"sHwdD","    # → tool: color-picker, resource: ui:\u002F\u002Fmcp-app\u002Fcolor-picker\n",[298,1315,1316,1319],{"class":300,"line":370},[298,1317,1318],{"class":376},"    └──",[298,1320,1321],{"class":325}," admin\u002F\n",[298,1323,1324,1327,1330],{"class":300,"line":383},[298,1325,1326],{"class":376},"        └──",[298,1328,1329],{"class":325}," audit-log.vue",[298,1331,1332],{"class":1312},"   # → tool: audit-log\n",[1334,1335,1338,1339,1342,1343,1346,1347,1350],"callout",{"color":1336,"icon":1337},"info","i-lucide-info","Co-locate helpers next to the SFC (e.g. ",[295,1340,1341],{},"format.ts",") — the bundler inlines them. Keep data generation in ",[295,1344,1345],{},"server\u002Fapi\u002F"," and call it via ",[295,1348,1349],{},"$fetch"," from the handler.",[1352,1353,1355],"h3",{"id":1354},"auto-generated-name-title","Auto-Generated Name & Title",[283,1357,1358,1359,1204,1362,1365],{},"Like tools and resources, ",[295,1360,1361],{},"name",[295,1363,1364],{},"title"," are inferred from the filename:",[1367,1368,1369,1385],"table",{},[1370,1371,1372],"thead",{},[1373,1374,1375,1379,1382],"tr",{},[1376,1377,1378],"th",{},"File",[1376,1380,1381],{},"Name",[1376,1383,1384],{},"Title",[1386,1387,1388,1405,1422],"tbody",{},[1373,1389,1390,1396,1400],{},[1391,1392,1393],"td",{},[295,1394,1395],{},"color-picker.vue",[1391,1397,1398],{},[295,1399,1212],{},[1391,1401,1402],{},[295,1403,1404],{},"Color Picker",[1373,1406,1407,1412,1417],{},[1391,1408,1409],{},[295,1410,1411],{},"weather-card.vue",[1391,1413,1414],{},[295,1415,1416],{},"weather-card",[1391,1418,1419],{},[295,1420,1421],{},"Weather Card",[1373,1423,1424,1429,1434],{},[1391,1425,1426],{},[295,1427,1428],{},"admin\u002Faudit-log.vue",[1391,1430,1431],{},[295,1432,1433],{},"audit-log",[1391,1435,1436],{},[295,1437,1438],{},"Audit Log",[283,1440,1441,1442,1444,1445,1447,1448,491],{},"Override either by passing ",[295,1443,1361],{}," \u002F ",[295,1446,1364],{}," to ",[295,1449,443],{},[278,1451,1453],{"id":1452},"definemcpapp",[295,1454,443],{},[283,1456,1457,1458,1461,1462,1465],{},"A macro — like ",[295,1459,1460],{},"definePageMeta"," — extracted at build time and ",[1206,1463,1464],{},"stripped from the browser bundle",". The fields it accepts:",[287,1467,1470],{"className":1468,"code":1469,"language":326,"meta":293,"style":293},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","defineMcpApp({\n  name?: string                          \u002F\u002F Override auto-derived name\n  title?: string                         \u002F\u002F Override auto-derived title\n  description?: string                   \u002F\u002F Shown to the LLM to help it pick this app\n  inputSchema?: ZodRawShape              \u002F\u002F Validates tool input on the server\n  handler?: (args, extra) => Result      \u002F\u002F Runs server-side; defaults to (args) => ({ structuredContent: args })\n  csp?: McpAppCsp | false                \u002F\u002F Tighten or disable iframe CSP\n  _meta?: Record\u003Cstring, unknown>        \u002F\u002F Extra _meta fields surfaced to the host\n})\n",[295,1471,1472,1480,1493,1507,1519,1531,1558,1578,1600],{"__ignoreMap":293},[298,1473,1474,1476,1478],{"class":300,"line":301},[298,1475,443],{"class":442},[298,1477,446],{"class":344},[298,1479,449],{"class":304},[298,1481,1482,1485,1487,1490],{"class":300,"line":334},[298,1483,1484],{"class":344},"  name?",[298,1486,389],{"class":304},[298,1488,1489],{"class":344}," string                          ",[298,1491,1492],{"class":1312},"\u002F\u002F Override auto-derived name\n",[298,1494,1495,1498,1501,1504],{"class":300,"line":363},[298,1496,1497],{"class":344},"  title",[298,1499,1500],{"class":304},"?:",[298,1502,1503],{"class":344}," string                         ",[298,1505,1506],{"class":1312},"\u002F\u002F Override auto-derived title\n",[298,1508,1509,1511,1513,1516],{"class":300,"line":370},[298,1510,455],{"class":344},[298,1512,1500],{"class":304},[298,1514,1515],{"class":344}," string                   ",[298,1517,1518],{"class":1312},"\u002F\u002F Shown to the LLM to help it pick this app\n",[298,1520,1521,1523,1525,1528],{"class":300,"line":383},[298,1522,474],{"class":344},[298,1524,1500],{"class":304},[298,1526,1527],{"class":344}," ZodRawShape              ",[298,1529,1530],{"class":1312},"\u002F\u002F Validates tool input on the server\n",[298,1532,1533,1535,1537,1540,1543,1545,1548,1550,1552,1555],{"class":300,"line":395},[298,1534,528],{"class":344},[298,1536,1500],{"class":304},[298,1538,1539],{"class":304}," (",[298,1541,1542],{"class":539},"args",[298,1544,413],{"class":304},[298,1546,1547],{"class":539}," extra",[298,1549,514],{"class":304},[298,1551,562],{"class":312},[298,1553,1554],{"class":344}," Result      ",[298,1556,1557],{"class":1312},"\u002F\u002F Runs server-side; defaults to (args) => ({ structuredContent: args })\n",[298,1559,1560,1563,1565,1568,1571,1575],{"class":300,"line":428},[298,1561,1562],{"class":344},"  csp",[298,1564,1500],{"class":304},[298,1566,1567],{"class":344}," McpAppCsp ",[298,1569,1570],{"class":304},"|",[298,1572,1574],{"class":1573},"sfNiH"," false",[298,1576,1577],{"class":1312},"                \u002F\u002F Tighten or disable iframe CSP\n",[298,1579,1580,1583,1585,1588,1590,1592,1594,1597],{"class":300,"line":434},[298,1581,1582],{"class":344},"  _meta",[298,1584,1500],{"class":304},[298,1586,1587],{"class":344}," Record",[298,1589,305],{"class":304},[298,1591,494],{"class":344},[298,1593,413],{"class":304},[298,1595,1596],{"class":344}," unknown>        ",[298,1598,1599],{"class":1312},"\u002F\u002F Extra _meta fields surfaced to the host\n",[298,1601,1602,1604],{"class":300,"line":439},[298,1603,679],{"class":304},[298,1605,643],{"class":344},[1352,1607,1609],{"id":1608},"server-handler","Server Handler",[283,1611,1612,1613,1615,1616,1618,1619,1622,1623,389],{},"The ",[295,1614,1245],{}," runs in your Nitro server, not in the iframe. It receives validated input and returns ",[295,1617,1249],{}," that the UI hydrates from. ",[1206,1620,1621],{},"Treat it like a tool handler"," — call APIs, query a database, hit ",[295,1624,1349],{},[287,1626,1628],{"className":1468,"code":1627,"language":326,"meta":293,"style":293},"defineMcpApp({\n  description: 'Pick a colour and preview a 5-tone palette.',\n  inputSchema: {\n    base: z.string().describe('Hex colour to anchor the palette, e.g. #2563eb'),\n  },\n  handler: async ({ base }) => {\n    const swatches = await $fetch('\u002Fapi\u002Fpalette', { query: { base } })\n    return { structuredContent: { base, swatches } }\n  },\n})\n",[295,1629,1630,1638,1652,1660,1690,1694,1713,1752,1774,1778],{"__ignoreMap":293},[298,1631,1632,1634,1636],{"class":300,"line":301},[298,1633,443],{"class":442},[298,1635,446],{"class":344},[298,1637,449],{"class":304},[298,1639,1640,1642,1644,1646,1648,1650],{"class":300,"line":334},[298,1641,455],{"class":308},[298,1643,389],{"class":304},[298,1645,354],{"class":304},[298,1647,462],{"class":325},[298,1649,465],{"class":304},[298,1651,468],{"class":304},[298,1653,1654,1656,1658],{"class":300,"line":363},[298,1655,474],{"class":308},[298,1657,389],{"class":304},[298,1659,380],{"class":304},[298,1661,1662,1664,1666,1668,1670,1672,1674,1676,1678,1680,1682,1684,1686,1688],{"class":300,"line":370},[298,1663,484],{"class":308},[298,1665,389],{"class":304},[298,1667,345],{"class":344},[298,1669,491],{"class":304},[298,1671,494],{"class":442},[298,1673,497],{"class":344},[298,1675,491],{"class":304},[298,1677,502],{"class":442},[298,1679,446],{"class":344},[298,1681,465],{"class":304},[298,1683,509],{"class":325},[298,1685,465],{"class":304},[298,1687,514],{"class":344},[298,1689,468],{"class":304},[298,1691,1692],{"class":300,"line":383},[298,1693,522],{"class":304},[298,1695,1696,1698,1700,1702,1704,1706,1709,1711],{"class":300,"line":395},[298,1697,528],{"class":442},[298,1699,389],{"class":304},[298,1701,533],{"class":312},[298,1703,536],{"class":304},[298,1705,540],{"class":539},[298,1707,1708],{"class":304}," })",[298,1710,562],{"class":312},[298,1712,380],{"class":304},[298,1714,1715,1717,1719,1721,1723,1725,1727,1729,1731,1733,1735,1737,1740,1742,1744,1746,1748,1750],{"class":300,"line":428},[298,1716,570],{"class":312},[298,1718,573],{"class":344},[298,1720,576],{"class":304},[298,1722,579],{"class":337},[298,1724,582],{"class":442},[298,1726,446],{"class":308},[298,1728,465],{"class":304},[298,1730,613],{"class":325},[298,1732,465],{"class":304},[298,1734,413],{"class":304},[298,1736,341],{"class":304},[298,1738,1739],{"class":308}," query",[298,1741,389],{"class":304},[298,1743,341],{"class":304},[298,1745,540],{"class":344},[298,1747,348],{"class":304},[298,1749,348],{"class":304},[298,1751,643],{"class":308},[298,1753,1754,1756,1758,1760,1762,1764,1766,1768,1770,1772],{"class":300,"line":434},[298,1755,649],{"class":337},[298,1757,341],{"class":304},[298,1759,552],{"class":308},[298,1761,389],{"class":304},[298,1763,341],{"class":304},[298,1765,540],{"class":344},[298,1767,413],{"class":304},[298,1769,573],{"class":344},[298,1771,348],{"class":304},[298,1773,668],{"class":304},[298,1775,1776],{"class":300,"line":439},[298,1777,522],{"class":304},[298,1779,1780,1782],{"class":300,"line":452},[298,1781,679],{"class":304},[298,1783,643],{"class":344},[1334,1785,1788,1789,1791,1792,1795,1796,1799],{"color":1786,"icon":1787},"primary","i-lucide-zap","Returning ",[295,1790,1249],{}," from the handler ",[1206,1793,1794],{},"inlines the data into the HTML"," as a ",[295,1797,1798],{},"\u003Cscript type=\"application\u002Fjson\">",". The iframe boots with full data already present — no extra fetch, no flicker.",[283,1801,1802,1803,1805,1806,1809],{},"If you omit ",[295,1804,1245],{},", the toolkit defaults to ",[295,1807,1808],{},"(args) => ({ structuredContent: args })",". Useful for stateless apps that only need the input echoed back.",[1352,1811,1813],{"id":1812},"sharing-types-between-server-ui","Sharing Types Between Server & UI",[283,1815,1816,1817,1820,1821,1824,1825,1827],{},"Place shared types in Nuxt's ",[295,1818,1819],{},"shared\u002Ftypes\u002F"," directory — they're ",[1206,1822,1823],{},"auto-imported globally"," in both the SFC and your API endpoints, no ",[295,1826,338],{}," statement required:",[287,1829,1832],{"className":1468,"code":1830,"filename":1831,"language":326,"meta":293,"style":293},"export interface Swatch { name: string, hex: string }\nexport interface PalettePayload { base: string, swatches: Swatch[] }\n","shared\u002Ftypes\u002Fpalette.ts",[295,1833,1834,1863],{"__ignoreMap":293},[298,1835,1836,1839,1842,1845,1847,1849,1851,1853,1855,1857,1859,1861],{"class":300,"line":301},[298,1837,1838],{"class":337},"export",[298,1840,1841],{"class":312}," interface",[298,1843,1844],{"class":376}," Swatch",[298,1846,341],{"class":304},[298,1848,405],{"class":308},[298,1850,389],{"class":304},[298,1852,410],{"class":376},[298,1854,413],{"class":304},[298,1856,416],{"class":308},[298,1858,389],{"class":304},[298,1860,410],{"class":376},[298,1862,668],{"class":304},[298,1864,1865,1867,1869,1871,1873,1875,1877,1879,1881,1883,1885,1887,1890],{"class":300,"line":334},[298,1866,1838],{"class":337},[298,1868,1841],{"class":312},[298,1870,377],{"class":376},[298,1872,341],{"class":304},[298,1874,540],{"class":308},[298,1876,389],{"class":304},[298,1878,410],{"class":376},[298,1880,413],{"class":304},[298,1882,573],{"class":308},[298,1884,389],{"class":304},[298,1886,1844],{"class":376},[298,1888,1889],{"class":344},"[] ",[298,1891,431],{"class":304},[287,1893,1896],{"className":1468,"code":1894,"filename":1895,"language":326,"meta":293,"style":293},"export default defineEventHandler(async (event): Promise\u003CPalettePayload> => {\n  const { base } = getQuery(event)\n  return { base: String(base), swatches: buildPalette(String(base)) }\n})\n","server\u002Fapi\u002Fpalette.get.ts",[295,1897,1898,1933,1955,1999],{"__ignoreMap":293},[298,1899,1900,1902,1905,1908,1910,1913,1915,1918,1921,1923,1925,1927,1929,1931],{"class":300,"line":301},[298,1901,1838],{"class":337},[298,1903,1904],{"class":337}," default",[298,1906,1907],{"class":442}," defineEventHandler",[298,1909,446],{"class":344},[298,1911,1912],{"class":312},"async",[298,1914,1539],{"class":304},[298,1916,1917],{"class":539},"event",[298,1919,1920],{"class":304},"):",[298,1922,546],{"class":376},[298,1924,305],{"class":304},[298,1926,719],{"class":376},[298,1928,606],{"class":304},[298,1930,562],{"class":312},[298,1932,380],{"class":304},[298,1934,1935,1938,1940,1942,1944,1946,1949,1951,1953],{"class":300,"line":334},[298,1936,1937],{"class":312},"  const",[298,1939,341],{"class":304},[298,1941,540],{"class":344},[298,1943,348],{"class":304},[298,1945,576],{"class":304},[298,1947,1948],{"class":442}," getQuery",[298,1950,446],{"class":308},[298,1952,1917],{"class":344},[298,1954,643],{"class":308},[298,1956,1957,1960,1962,1964,1966,1969,1971,1974,1976,1978,1980,1982,1985,1987,1990,1992,1994,1997],{"class":300,"line":363},[298,1958,1959],{"class":337},"  return",[298,1961,341],{"class":304},[298,1963,540],{"class":308},[298,1965,389],{"class":304},[298,1967,1968],{"class":442}," String",[298,1970,446],{"class":308},[298,1972,1973],{"class":344},"base",[298,1975,514],{"class":308},[298,1977,413],{"class":304},[298,1979,573],{"class":308},[298,1981,389],{"class":304},[298,1983,1984],{"class":442}," buildPalette",[298,1986,446],{"class":308},[298,1988,1989],{"class":442},"String",[298,1991,446],{"class":308},[298,1993,1973],{"class":344},[298,1995,1996],{"class":308},")) ",[298,1998,431],{"class":304},[298,2000,2001,2003],{"class":300,"line":370},[298,2002,679],{"class":304},[298,2004,643],{"class":344},[287,2006,2008],{"className":289,"code":2007,"filename":291,"language":292,"meta":293,"style":293},"\u003Cscript setup lang=\"ts\">\ndefineMcpApp({\n  inputSchema: { base: z.string() },\n  handler: async ({ base }): Promise\u003C{ structuredContent: PalettePayload }> => ({\n    structuredContent: await $fetch('\u002Fapi\u002Fpalette', { query: { base } }),\n  }),\n})\n\nconst { data } = useMcpApp\u003CPalettePayload>()\n\u003C\u002Fscript>\n",[295,2009,2010,2030,2038,2062,2094,2134,2143,2149,2153,2176],{"__ignoreMap":293},[298,2011,2012,2014,2016,2018,2020,2022,2024,2026,2028],{"class":300,"line":301},[298,2013,305],{"class":304},[298,2015,309],{"class":308},[298,2017,313],{"class":312},[298,2019,316],{"class":312},[298,2021,319],{"class":304},[298,2023,322],{"class":304},[298,2025,326],{"class":325},[298,2027,322],{"class":304},[298,2029,331],{"class":304},[298,2031,2032,2034,2036],{"class":300,"line":334},[298,2033,443],{"class":442},[298,2035,446],{"class":344},[298,2037,449],{"class":304},[298,2039,2040,2042,2044,2046,2048,2050,2052,2054,2056,2059],{"class":300,"line":363},[298,2041,474],{"class":308},[298,2043,389],{"class":304},[298,2045,341],{"class":304},[298,2047,540],{"class":308},[298,2049,389],{"class":304},[298,2051,345],{"class":344},[298,2053,491],{"class":304},[298,2055,494],{"class":442},[298,2057,2058],{"class":344},"() ",[298,2060,2061],{"class":304},"},\n",[298,2063,2064,2066,2068,2070,2072,2074,2076,2078,2080,2082,2084,2086,2088,2090,2092],{"class":300,"line":370},[298,2065,528],{"class":442},[298,2067,389],{"class":304},[298,2069,533],{"class":312},[298,2071,536],{"class":304},[298,2073,540],{"class":539},[298,2075,543],{"class":304},[298,2077,546],{"class":376},[298,2079,549],{"class":304},[298,2081,552],{"class":308},[298,2083,389],{"class":304},[298,2085,377],{"class":376},[298,2087,559],{"class":304},[298,2089,562],{"class":312},[298,2091,1539],{"class":344},[298,2093,449],{"class":304},[298,2095,2096,2099,2101,2103,2105,2107,2109,2111,2113,2115,2117,2119,2121,2123,2126,2128,2130,2132],{"class":300,"line":383},[298,2097,2098],{"class":308},"    structuredContent",[298,2100,389],{"class":304},[298,2102,579],{"class":337},[298,2104,582],{"class":442},[298,2106,446],{"class":344},[298,2108,465],{"class":304},[298,2110,613],{"class":325},[298,2112,465],{"class":304},[298,2114,413],{"class":304},[298,2116,341],{"class":304},[298,2118,1739],{"class":308},[298,2120,389],{"class":304},[298,2122,341],{"class":304},[298,2124,2125],{"class":344}," base ",[298,2127,679],{"class":304},[298,2129,348],{"class":304},[298,2131,514],{"class":344},[298,2133,468],{"class":304},[298,2135,2136,2139,2141],{"class":300,"line":395},[298,2137,2138],{"class":304},"  }",[298,2140,514],{"class":344},[298,2142,468],{"class":304},[298,2144,2145,2147],{"class":300,"line":428},[298,2146,679],{"class":304},[298,2148,643],{"class":344},[298,2150,2151],{"class":300,"line":434},[298,2152,367],{"emptyLinePlaceholder":366},[298,2154,2155,2157,2159,2162,2164,2166,2168,2170,2172,2174],{"class":300,"line":439},[298,2156,692],{"class":312},[298,2158,341],{"class":304},[298,2160,2161],{"class":344}," data ",[298,2163,679],{"class":304},[298,2165,576],{"class":304},[298,2167,714],{"class":442},[298,2169,305],{"class":304},[298,2171,719],{"class":376},[298,2173,606],{"class":304},[298,2175,724],{"class":344},[298,2177,2178,2180,2182],{"class":300,"line":452},[298,2179,730],{"class":304},[298,2181,309],{"class":308},[298,2183,331],{"class":304},[283,2185,2186],{},"Type-only references are stripped from the browser bundle by esbuild — nothing has to resolve inside the iframe at runtime.",[1006,2188,2189],{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sqsOY, html code.shiki .sqsOY{--shiki-light:#8796B0;--shiki-default:#B2CCD6;--shiki-dark:#B2CCD6}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":293,"searchDepth":334,"depth":334,"links":2191},[2192,2193,2196],{"id":280,"depth":334,"text":281},{"id":1256,"depth":334,"text":1257,"children":2194},[2195],{"id":1354,"depth":363,"text":1355},{"id":1452,"depth":334,"text":443,"children":2197},[2198,2199],{"id":1608,"depth":363,"text":1609},{"id":1812,"depth":363,"text":1813},"SFC location, quick start, the defineMcpApp macro, server handler, and shared types.","md",null,{},{"icon":164},{"title":2206,"description":2207},"MCP Apps — Authoring","Quick start, file convention, defineMcpApp, and sharing types for MCP UI apps.","fv_Ymm5HmAxBeFyrNu76UwuEOy1bz_tTV8Kys1x447Q",[2210,2212],{"title":46,"path":157,"stem":158,"description":2211,"icon":159,"children":-1},"Build interactive UI widgets that AI hosts render alongside chat — written as Vue SFCs, served as MCP UI resources.",{"title":166,"path":167,"stem":168,"description":2213,"icon":169,"children":-1},"data, hostContext, sendPrompt, callTool, and openLink from inside the iframe.",1777306544426]