[{"data":1,"prerenderedAt":3578},["ShallowReactive",2],{"navigation_docs":3,"-advanced-dynamic-definitions":282,"-advanced-dynamic-definitions-surround":3573},[4,40,70,99,122,156,189,253],{"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},"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,151],{"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,"icon":155},"Multi-handler organization","\u002Fhandlers\u002Forganization","5.handlers\u002F5.organization","i-lucide-network",{"title":157,"path":158,"stem":159,"children":160,"page":39},"Apps","\u002Fapps","6.apps",[161,165,170,175,179,184],{"title":46,"path":162,"stem":163,"icon":164},"\u002Fapps\u002Foverview","6.apps\u002F0.overview","i-lucide-app-window",{"title":166,"path":167,"stem":168,"icon":169},"Authoring & defineMcpApp","\u002Fapps\u002Fauthoring","6.apps\u002F1.authoring","i-lucide-code-2",{"title":171,"path":172,"stem":173,"icon":174},"useMcpApp() bridge","\u002Fapps\u002Fuse-mcp-app","6.apps\u002F2.use-mcp-app","i-lucide-message-circle",{"title":176,"path":177,"stem":178,"icon":64},"CSP & build pipeline","\u002Fapps\u002Fcsp-and-wiring","6.apps\u002F3.csp-and-wiring",{"title":180,"path":181,"stem":182,"icon":183},"Testing & publishing","\u002Fapps\u002Ftesting-publishing","6.apps\u002F4.testing-publishing","i-lucide-rocket",{"title":185,"path":186,"stem":187,"icon":188},"Patterns & limits","\u002Fapps\u002Fpatterns-reference","6.apps\u002F5.patterns-reference","i-lucide-book-marked",{"title":190,"path":191,"stem":192,"children":193,"page":39},"Advanced Topics","\u002Fadvanced","7.advanced",[194,199,204,209,214,218,223,228,233,238,243,248],{"title":195,"path":196,"stem":197,"icon":198},"Custom Paths","\u002Fadvanced\u002Fcustom-paths","7.advanced\u002F1.custom-paths","i-lucide-folder",{"title":200,"path":201,"stem":202,"icon":203},"Logging","\u002Fadvanced\u002Flogging","7.advanced\u002F10.logging","i-lucide-scroll-text",{"title":205,"path":206,"stem":207,"icon":208},"MCP Apps Internals","\u002Fadvanced\u002Fmcp-apps-internals","7.advanced\u002F11.mcp-apps-internals","i-lucide-cog",{"title":210,"path":211,"stem":212,"icon":213},"Listing Definitions","\u002Fadvanced\u002Flisting-definitions","7.advanced\u002F12.listing-definitions","i-lucide-list",{"title":215,"path":216,"stem":217,"icon":64},"Middleware","\u002Fadvanced\u002Fmiddleware","7.advanced\u002F2.middleware",{"title":219,"path":220,"stem":221,"icon":222},"TypeScript","\u002Fadvanced\u002Ftypescript","7.advanced\u002F3.typescript","i-lucide-type",{"title":224,"path":225,"stem":226,"icon":227},"Hooks","\u002Fadvanced\u002Fhooks","7.advanced\u002F4.hooks","i-lucide-webhook",{"title":229,"path":230,"stem":231,"icon":232},"MCP Evals","\u002Fadvanced\u002Fevals","7.advanced\u002F5.evals","i-lucide-flask-conical",{"title":234,"path":235,"stem":236,"icon":237},"Sessions","\u002Fadvanced\u002Fsessions","7.advanced\u002F6.sessions","i-lucide-database",{"title":239,"path":240,"stem":241,"icon":242},"Dynamic Definitions","\u002Fadvanced\u002Fdynamic-definitions","7.advanced\u002F7.dynamic-definitions","i-lucide-toggle-right",{"title":244,"path":245,"stem":246,"icon":247},"Code Mode","\u002Fadvanced\u002Fcode-mode","7.advanced\u002F8.code-mode","i-lucide-code",{"title":249,"path":250,"stem":251,"icon":252},"Elicitation","\u002Fadvanced\u002Felicitation","7.advanced\u002F9.elicitation","i-lucide-message-square-quote",{"title":254,"path":255,"stem":256,"children":257,"page":39},"Examples","\u002Fexamples","8.examples",[258,263,268,273,278],{"title":259,"path":260,"stem":261,"icon":262},"Authentication","\u002Fexamples\u002Fauthentication","8.examples\u002F1.authentication","i-lucide-shield-check",{"title":264,"path":265,"stem":266,"icon":267},"API Integration","\u002Fexamples\u002Fapi-integration","8.examples\u002F2.api-integration","i-lucide-globe",{"title":269,"path":270,"stem":271,"icon":272},"Common Patterns","\u002Fexamples\u002Fcommon-patterns","8.examples\u002F3.common-patterns","i-lucide-lightbulb",{"title":274,"path":275,"stem":276,"icon":277},"File Operations","\u002Fexamples\u002Ffile-operations","8.examples\u002F4.file-operations","i-lucide-file",{"title":279,"path":280,"stem":281,"icon":107},"Prompt Examples","\u002Fexamples\u002Fprompt-examples","8.examples\u002F5.prompt-examples",{"id":283,"title":239,"body":284,"description":3564,"extension":3565,"links":3566,"meta":3567,"navigation":3568,"path":240,"seo":3569,"stem":241,"__hash__":3572},"docs\u002F7.advanced\u002F7.dynamic-definitions.md",{"type":285,"value":286,"toc":3542},"minimark",[287,291,305,308,331,342,371,378,388,392,710,713,921,924,1200,1204,1209,1388,1466,1470,1488,1805,1808,1820,1824,1832,1968,2084,2097,2101,2113,2116,2127,2130,2134,2151,2160,2164,2276,2280,2635,2638,2642,2648,3203,3207,3216,3369,3380,3384,3407,3415,3417,3420,3517,3521,3538],[288,289,46],"h2",{"id":290},"overview",[292,293,294,295,299,300,304],"p",{},"By default, every tool, resource, and prompt defined in ",[296,297,298],"code",{},"server\u002Fmcp\u002F"," is registered for all clients. Dynamic definitions let you control ",[301,302,303],"strong",{},"which definitions are visible"," based on request context — for example, showing admin-only tools to authenticated admins while hiding them from regular users.",[292,306,307],{},"There are two complementary mechanisms:",[309,310,311,321],"ol",{},[312,313,314,320],"li",{},[301,315,316,319],{},[296,317,318],{},"enabled"," guard"," — A per-definition callback that controls visibility",[312,322,323,326,327,330],{},[301,324,325],{},"Dynamic handler definitions"," — A function in ",[296,328,329],{},"defineMcpHandler"," that returns definitions based on context",[292,332,333,334,337,338,341],{},"Both mechanisms run ",[301,335,336],{},"after middleware",", so ",[296,339,340],{},"event.context"," (e.g. authentication data) is available.",[343,344,347,348,351,352,354,355,358,359,362,363,366,367,370],"callout",{"color":345,"icon":346},"info","i-lucide-info","If you only need to change tool\u002Fprompt ",[301,349,350],{},"behavior"," (not visibility), you can already do that by reading ",[296,353,340],{}," inside your handler via ",[296,356,357],{},"useEvent()",". Dynamic definitions are for controlling which definitions appear in ",[296,360,361],{},"tools\u002Flist",", ",[296,364,365],{},"prompts\u002Flist",", and ",[296,368,369],{},"resources\u002Flist",".",[288,372,374,375,377],{"id":373},"the-enabled-guard","The ",[296,376,318],{}," Guard",[292,379,380,381,383,384,387],{},"Add an ",[296,382,318],{}," callback to any tool, resource, or prompt definition. When the callback returns ",[296,385,386],{},"false",", the definition is hidden from the client.",[389,390,41],"h3",{"id":391},"tools",[393,394,400],"pre",{"className":395,"code":396,"filename":397,"language":398,"meta":399,"style":399},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { z } from 'zod'\nimport { defineMcpTool } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpTool({\n  name: 'delete-all',\n  description: 'Delete all records (admin only)',\n  inputSchema: {\n    confirm: z.boolean().describe('Confirm deletion'),\n  },\n  enabled: event => event.context.user?.role === 'admin',\n  handler: async ({ confirm }) => {\n    if (!confirm) return 'Deletion cancelled'\n    await deleteAllRecords()\n    return 'All records deleted'\n  },\n})\n","server\u002Fmcp\u002Ftools\u002Fdelete-all.ts","typescript","",[296,401,402,435,456,463,481,502,519,530,567,573,619,643,671,683,696,701],{"__ignoreMap":399},[403,404,407,411,415,419,422,425,428,432],"span",{"class":405,"line":406},"line",1,[403,408,410],{"class":409},"s7zQu","import",[403,412,414],{"class":413},"sMK4o"," {",[403,416,418],{"class":417},"sTEyZ"," z",[403,420,421],{"class":413}," }",[403,423,424],{"class":409}," from",[403,426,427],{"class":413}," '",[403,429,431],{"class":430},"sfazB","zod",[403,433,434],{"class":413},"'\n",[403,436,438,440,442,445,447,449,451,454],{"class":405,"line":437},2,[403,439,410],{"class":409},[403,441,414],{"class":413},[403,443,444],{"class":417}," defineMcpTool",[403,446,421],{"class":413},[403,448,424],{"class":409},[403,450,427],{"class":413},[403,452,453],{"class":430},"@nuxtjs\u002Fmcp-toolkit\u002Fserver",[403,455,434],{"class":413},[403,457,459],{"class":405,"line":458},3,[403,460,462],{"emptyLinePlaceholder":461},true,"\n",[403,464,466,469,472,475,478],{"class":405,"line":465},4,[403,467,468],{"class":409},"export",[403,470,471],{"class":409}," default",[403,473,444],{"class":474},"s2Zo4",[403,476,477],{"class":417},"(",[403,479,480],{"class":413},"{\n",[403,482,484,488,491,493,496,499],{"class":405,"line":483},5,[403,485,487],{"class":486},"swJcz","  name",[403,489,490],{"class":413},":",[403,492,427],{"class":413},[403,494,495],{"class":430},"delete-all",[403,497,498],{"class":413},"'",[403,500,501],{"class":413},",\n",[403,503,505,508,510,512,515,517],{"class":405,"line":504},6,[403,506,507],{"class":486},"  description",[403,509,490],{"class":413},[403,511,427],{"class":413},[403,513,514],{"class":430},"Delete all records (admin only)",[403,516,498],{"class":413},[403,518,501],{"class":413},[403,520,522,525,527],{"class":405,"line":521},7,[403,523,524],{"class":486},"  inputSchema",[403,526,490],{"class":413},[403,528,529],{"class":413}," {\n",[403,531,533,536,538,540,542,545,548,550,553,555,557,560,562,565],{"class":405,"line":532},8,[403,534,535],{"class":486},"    confirm",[403,537,490],{"class":413},[403,539,418],{"class":417},[403,541,370],{"class":413},[403,543,544],{"class":474},"boolean",[403,546,547],{"class":417},"()",[403,549,370],{"class":413},[403,551,552],{"class":474},"describe",[403,554,477],{"class":417},[403,556,498],{"class":413},[403,558,559],{"class":430},"Confirm deletion",[403,561,498],{"class":413},[403,563,564],{"class":417},")",[403,566,501],{"class":413},[403,568,570],{"class":405,"line":569},9,[403,571,572],{"class":413},"  },\n",[403,574,576,579,581,585,589,591,593,596,598,601,604,607,610,612,615,617],{"class":405,"line":575},10,[403,577,578],{"class":474},"  enabled",[403,580,490],{"class":413},[403,582,584],{"class":583},"sHdIc"," event",[403,586,588],{"class":587},"spNyl"," =>",[403,590,584],{"class":417},[403,592,370],{"class":413},[403,594,595],{"class":417},"context",[403,597,370],{"class":413},[403,599,600],{"class":417},"user",[403,602,603],{"class":413},"?.",[403,605,606],{"class":417},"role ",[403,608,609],{"class":413},"===",[403,611,427],{"class":413},[403,613,614],{"class":430},"admin",[403,616,498],{"class":413},[403,618,501],{"class":413},[403,620,622,625,627,630,633,636,639,641],{"class":405,"line":621},11,[403,623,624],{"class":474},"  handler",[403,626,490],{"class":413},[403,628,629],{"class":587}," async",[403,631,632],{"class":413}," ({",[403,634,635],{"class":583}," confirm",[403,637,638],{"class":413}," })",[403,640,588],{"class":587},[403,642,529],{"class":413},[403,644,646,649,652,655,658,661,664,666,669],{"class":405,"line":645},12,[403,647,648],{"class":409},"    if",[403,650,651],{"class":486}," (",[403,653,654],{"class":413},"!",[403,656,657],{"class":417},"confirm",[403,659,660],{"class":486},") ",[403,662,663],{"class":409},"return",[403,665,427],{"class":413},[403,667,668],{"class":430},"Deletion cancelled",[403,670,434],{"class":413},[403,672,674,677,680],{"class":405,"line":673},13,[403,675,676],{"class":409},"    await",[403,678,679],{"class":474}," deleteAllRecords",[403,681,682],{"class":486},"()\n",[403,684,686,689,691,694],{"class":405,"line":685},14,[403,687,688],{"class":409},"    return",[403,690,427],{"class":413},[403,692,693],{"class":430},"All records deleted",[403,695,434],{"class":413},[403,697,699],{"class":405,"line":698},15,[403,700,572],{"class":413},[403,702,704,707],{"class":405,"line":703},16,[403,705,706],{"class":413},"}",[403,708,709],{"class":417},")\n",[389,711,71],{"id":712},"resources",[393,714,717],{"className":395,"code":715,"filename":716,"language":398,"meta":399,"style":399},"import { defineMcpResource } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpResource({\n  name: 'internal-logs',\n  description: 'Application logs (admin only)',\n  uri: 'app:\u002F\u002Flogs',\n  enabled: event => event.context.user?.role === 'admin',\n  handler: async (uri) => ({\n    contents: [{ uri: uri.toString(), text: await readLogs() }],\n  }),\n})\n","server\u002Fmcp\u002Fresources\u002Finternal-logs.ts",[296,718,719,738,742,754,769,784,800,834,855,906,915],{"__ignoreMap":399},[403,720,721,723,725,728,730,732,734,736],{"class":405,"line":406},[403,722,410],{"class":409},[403,724,414],{"class":413},[403,726,727],{"class":417}," defineMcpResource",[403,729,421],{"class":413},[403,731,424],{"class":409},[403,733,427],{"class":413},[403,735,453],{"class":430},[403,737,434],{"class":413},[403,739,740],{"class":405,"line":437},[403,741,462],{"emptyLinePlaceholder":461},[403,743,744,746,748,750,752],{"class":405,"line":458},[403,745,468],{"class":409},[403,747,471],{"class":409},[403,749,727],{"class":474},[403,751,477],{"class":417},[403,753,480],{"class":413},[403,755,756,758,760,762,765,767],{"class":405,"line":465},[403,757,487],{"class":486},[403,759,490],{"class":413},[403,761,427],{"class":413},[403,763,764],{"class":430},"internal-logs",[403,766,498],{"class":413},[403,768,501],{"class":413},[403,770,771,773,775,777,780,782],{"class":405,"line":483},[403,772,507],{"class":486},[403,774,490],{"class":413},[403,776,427],{"class":413},[403,778,779],{"class":430},"Application logs (admin only)",[403,781,498],{"class":413},[403,783,501],{"class":413},[403,785,786,789,791,793,796,798],{"class":405,"line":504},[403,787,788],{"class":486},"  uri",[403,790,490],{"class":413},[403,792,427],{"class":413},[403,794,795],{"class":430},"app:\u002F\u002Flogs",[403,797,498],{"class":413},[403,799,501],{"class":413},[403,801,802,804,806,808,810,812,814,816,818,820,822,824,826,828,830,832],{"class":405,"line":521},[403,803,578],{"class":474},[403,805,490],{"class":413},[403,807,584],{"class":583},[403,809,588],{"class":587},[403,811,584],{"class":417},[403,813,370],{"class":413},[403,815,595],{"class":417},[403,817,370],{"class":413},[403,819,600],{"class":417},[403,821,603],{"class":413},[403,823,606],{"class":417},[403,825,609],{"class":413},[403,827,427],{"class":413},[403,829,614],{"class":430},[403,831,498],{"class":413},[403,833,501],{"class":413},[403,835,836,838,840,842,844,847,849,851,853],{"class":405,"line":532},[403,837,624],{"class":474},[403,839,490],{"class":413},[403,841,629],{"class":587},[403,843,651],{"class":413},[403,845,846],{"class":583},"uri",[403,848,564],{"class":413},[403,850,588],{"class":587},[403,852,651],{"class":417},[403,854,480],{"class":413},[403,856,857,860,862,865,868,871,873,875,877,880,882,885,888,890,893,896,899,901,904],{"class":405,"line":569},[403,858,859],{"class":486},"    contents",[403,861,490],{"class":413},[403,863,864],{"class":417}," [",[403,866,867],{"class":413},"{",[403,869,870],{"class":486}," uri",[403,872,490],{"class":413},[403,874,870],{"class":417},[403,876,370],{"class":413},[403,878,879],{"class":474},"toString",[403,881,547],{"class":417},[403,883,884],{"class":413},",",[403,886,887],{"class":486}," text",[403,889,490],{"class":413},[403,891,892],{"class":409}," await",[403,894,895],{"class":474}," readLogs",[403,897,898],{"class":417},"() ",[403,900,706],{"class":413},[403,902,903],{"class":417},"]",[403,905,501],{"class":413},[403,907,908,911,913],{"class":405,"line":575},[403,909,910],{"class":413},"  }",[403,912,564],{"class":417},[403,914,501],{"class":413},[403,916,917,919],{"class":405,"line":621},[403,918,706],{"class":413},[403,920,709],{"class":417},[389,922,100],{"id":923},"prompts",[393,925,928],{"className":395,"code":926,"filename":927,"language":398,"meta":399,"style":399},"import { useEvent } from 'h3'\nimport { defineMcpPrompt } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpPrompt({\n  name: 'onboarding',\n  description: 'Personalized onboarding (authenticated users only)',\n  enabled: event => !!event.context.user,\n  handler: async () => {\n    const event = useEvent()\n    return {\n      messages: [{\n        role: 'user',\n        content: {\n          type: 'text',\n          text: `Welcome ${event.context.user.name}! Here's how to get started...`,\n        },\n      }],\n    }\n  },\n})\n","server\u002Fmcp\u002Fprompts\u002Fonboarding.ts",[296,929,930,949,968,972,984,999,1014,1040,1055,1069,1075,1086,1101,1110,1126,1167,1172,1182,1188,1193],{"__ignoreMap":399},[403,931,932,934,936,939,941,943,945,947],{"class":405,"line":406},[403,933,410],{"class":409},[403,935,414],{"class":413},[403,937,938],{"class":417}," useEvent",[403,940,421],{"class":413},[403,942,424],{"class":409},[403,944,427],{"class":413},[403,946,389],{"class":430},[403,948,434],{"class":413},[403,950,951,953,955,958,960,962,964,966],{"class":405,"line":437},[403,952,410],{"class":409},[403,954,414],{"class":413},[403,956,957],{"class":417}," defineMcpPrompt",[403,959,421],{"class":413},[403,961,424],{"class":409},[403,963,427],{"class":413},[403,965,453],{"class":430},[403,967,434],{"class":413},[403,969,970],{"class":405,"line":458},[403,971,462],{"emptyLinePlaceholder":461},[403,973,974,976,978,980,982],{"class":405,"line":465},[403,975,468],{"class":409},[403,977,471],{"class":409},[403,979,957],{"class":474},[403,981,477],{"class":417},[403,983,480],{"class":413},[403,985,986,988,990,992,995,997],{"class":405,"line":483},[403,987,487],{"class":486},[403,989,490],{"class":413},[403,991,427],{"class":413},[403,993,994],{"class":430},"onboarding",[403,996,498],{"class":413},[403,998,501],{"class":413},[403,1000,1001,1003,1005,1007,1010,1012],{"class":405,"line":504},[403,1002,507],{"class":486},[403,1004,490],{"class":413},[403,1006,427],{"class":413},[403,1008,1009],{"class":430},"Personalized onboarding (authenticated users only)",[403,1011,498],{"class":413},[403,1013,501],{"class":413},[403,1015,1016,1018,1020,1022,1024,1027,1030,1032,1034,1036,1038],{"class":405,"line":521},[403,1017,578],{"class":474},[403,1019,490],{"class":413},[403,1021,584],{"class":583},[403,1023,588],{"class":587},[403,1025,1026],{"class":413}," !!",[403,1028,1029],{"class":417},"event",[403,1031,370],{"class":413},[403,1033,595],{"class":417},[403,1035,370],{"class":413},[403,1037,600],{"class":417},[403,1039,501],{"class":413},[403,1041,1042,1044,1046,1048,1051,1053],{"class":405,"line":532},[403,1043,624],{"class":474},[403,1045,490],{"class":413},[403,1047,629],{"class":587},[403,1049,1050],{"class":413}," ()",[403,1052,588],{"class":587},[403,1054,529],{"class":413},[403,1056,1057,1060,1062,1065,1067],{"class":405,"line":569},[403,1058,1059],{"class":587},"    const",[403,1061,584],{"class":417},[403,1063,1064],{"class":413}," =",[403,1066,938],{"class":474},[403,1068,682],{"class":486},[403,1070,1071,1073],{"class":405,"line":575},[403,1072,688],{"class":409},[403,1074,529],{"class":413},[403,1076,1077,1080,1082,1084],{"class":405,"line":621},[403,1078,1079],{"class":486},"      messages",[403,1081,490],{"class":413},[403,1083,864],{"class":486},[403,1085,480],{"class":413},[403,1087,1088,1091,1093,1095,1097,1099],{"class":405,"line":645},[403,1089,1090],{"class":486},"        role",[403,1092,490],{"class":413},[403,1094,427],{"class":413},[403,1096,600],{"class":430},[403,1098,498],{"class":413},[403,1100,501],{"class":413},[403,1102,1103,1106,1108],{"class":405,"line":673},[403,1104,1105],{"class":486},"        content",[403,1107,490],{"class":413},[403,1109,529],{"class":413},[403,1111,1112,1115,1117,1119,1122,1124],{"class":405,"line":685},[403,1113,1114],{"class":486},"          type",[403,1116,490],{"class":413},[403,1118,427],{"class":413},[403,1120,1121],{"class":430},"text",[403,1123,498],{"class":413},[403,1125,501],{"class":413},[403,1127,1128,1131,1133,1136,1139,1142,1144,1146,1148,1150,1152,1154,1157,1159,1162,1165],{"class":405,"line":698},[403,1129,1130],{"class":486},"          text",[403,1132,490],{"class":413},[403,1134,1135],{"class":413}," `",[403,1137,1138],{"class":430},"Welcome ",[403,1140,1141],{"class":413},"${",[403,1143,1029],{"class":417},[403,1145,370],{"class":413},[403,1147,595],{"class":417},[403,1149,370],{"class":413},[403,1151,600],{"class":417},[403,1153,370],{"class":413},[403,1155,1156],{"class":417},"name",[403,1158,706],{"class":413},[403,1160,1161],{"class":430},"! Here's how to get started...",[403,1163,1164],{"class":413},"`",[403,1166,501],{"class":413},[403,1168,1169],{"class":405,"line":703},[403,1170,1171],{"class":413},"        },\n",[403,1173,1175,1178,1180],{"class":405,"line":1174},17,[403,1176,1177],{"class":413},"      }",[403,1179,903],{"class":486},[403,1181,501],{"class":413},[403,1183,1185],{"class":405,"line":1184},18,[403,1186,1187],{"class":413},"    }\n",[403,1189,1191],{"class":405,"line":1190},19,[403,1192,572],{"class":413},[403,1194,1196,1198],{"class":405,"line":1195},20,[403,1197,706],{"class":413},[403,1199,709],{"class":417},[389,1201,1203],{"id":1202},"middleware-setup","Middleware Setup",[292,1205,374,1206,1208],{},[296,1207,318],{}," guard runs after middleware, so set up your auth context in middleware:",[393,1210,1213],{"className":395,"code":1211,"filename":1212,"language":398,"meta":399,"style":399},"import { getHeader } from 'h3'\nimport { defineMcpHandler } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpHandler({\n  middleware: async (event) => {\n    const token = getHeader(event, 'authorization')?.replace('Bearer ', '')\n    if (token) {\n      event.context.user = await verifyToken(token)\n    }\n  },\n})\n","server\u002Fmcp\u002Findex.ts",[296,1214,1215,1234,1253,1257,1269,1288,1335,1348,1374,1378,1382],{"__ignoreMap":399},[403,1216,1217,1219,1221,1224,1226,1228,1230,1232],{"class":405,"line":406},[403,1218,410],{"class":409},[403,1220,414],{"class":413},[403,1222,1223],{"class":417}," getHeader",[403,1225,421],{"class":413},[403,1227,424],{"class":409},[403,1229,427],{"class":413},[403,1231,389],{"class":430},[403,1233,434],{"class":413},[403,1235,1236,1238,1240,1243,1245,1247,1249,1251],{"class":405,"line":437},[403,1237,410],{"class":409},[403,1239,414],{"class":413},[403,1241,1242],{"class":417}," defineMcpHandler",[403,1244,421],{"class":413},[403,1246,424],{"class":409},[403,1248,427],{"class":413},[403,1250,453],{"class":430},[403,1252,434],{"class":413},[403,1254,1255],{"class":405,"line":458},[403,1256,462],{"emptyLinePlaceholder":461},[403,1258,1259,1261,1263,1265,1267],{"class":405,"line":465},[403,1260,468],{"class":409},[403,1262,471],{"class":409},[403,1264,1242],{"class":474},[403,1266,477],{"class":417},[403,1268,480],{"class":413},[403,1270,1271,1274,1276,1278,1280,1282,1284,1286],{"class":405,"line":483},[403,1272,1273],{"class":474},"  middleware",[403,1275,490],{"class":413},[403,1277,629],{"class":587},[403,1279,651],{"class":413},[403,1281,1029],{"class":583},[403,1283,564],{"class":413},[403,1285,588],{"class":587},[403,1287,529],{"class":413},[403,1289,1290,1292,1295,1297,1299,1301,1303,1305,1307,1310,1312,1314,1316,1319,1321,1323,1326,1328,1330,1333],{"class":405,"line":504},[403,1291,1059],{"class":587},[403,1293,1294],{"class":417}," token",[403,1296,1064],{"class":413},[403,1298,1223],{"class":474},[403,1300,477],{"class":486},[403,1302,1029],{"class":417},[403,1304,884],{"class":413},[403,1306,427],{"class":413},[403,1308,1309],{"class":430},"authorization",[403,1311,498],{"class":413},[403,1313,564],{"class":486},[403,1315,603],{"class":413},[403,1317,1318],{"class":474},"replace",[403,1320,477],{"class":486},[403,1322,498],{"class":413},[403,1324,1325],{"class":430},"Bearer ",[403,1327,498],{"class":413},[403,1329,884],{"class":413},[403,1331,1332],{"class":413}," ''",[403,1334,709],{"class":486},[403,1336,1337,1339,1341,1344,1346],{"class":405,"line":521},[403,1338,648],{"class":409},[403,1340,651],{"class":486},[403,1342,1343],{"class":417},"token",[403,1345,660],{"class":486},[403,1347,480],{"class":413},[403,1349,1350,1353,1355,1357,1359,1361,1363,1365,1368,1370,1372],{"class":405,"line":532},[403,1351,1352],{"class":417},"      event",[403,1354,370],{"class":413},[403,1356,595],{"class":417},[403,1358,370],{"class":413},[403,1360,600],{"class":417},[403,1362,1064],{"class":413},[403,1364,892],{"class":409},[403,1366,1367],{"class":474}," verifyToken",[403,1369,477],{"class":486},[403,1371,1343],{"class":417},[403,1373,709],{"class":486},[403,1375,1376],{"class":405,"line":569},[403,1377,1187],{"class":413},[403,1379,1380],{"class":405,"line":575},[403,1381,572],{"class":413},[403,1383,1384,1386],{"class":405,"line":621},[403,1385,706],{"class":413},[403,1387,709],{"class":417},[343,1389,1391,1401],{"color":1390,"icon":272},"primary",[292,1392,1393,1394,1396,1397,1400],{},"To use ",[296,1395,357],{}," inside handlers, enable ",[296,1398,1399],{},"asyncContext"," in your Nuxt config:",[393,1402,1405],{"className":395,"code":1403,"filename":1404,"language":398,"meta":399,"style":399},"export default defineNuxtConfig({\n  nitro: {\n    experimental: {\n      asyncContext: true,\n    },\n  },\n})\n","nuxt.config.ts",[296,1406,1407,1420,1429,1438,1451,1456,1460],{"__ignoreMap":399},[403,1408,1409,1411,1413,1416,1418],{"class":405,"line":406},[403,1410,468],{"class":409},[403,1412,471],{"class":409},[403,1414,1415],{"class":474}," defineNuxtConfig",[403,1417,477],{"class":417},[403,1419,480],{"class":413},[403,1421,1422,1425,1427],{"class":405,"line":437},[403,1423,1424],{"class":486},"  nitro",[403,1426,490],{"class":413},[403,1428,529],{"class":413},[403,1430,1431,1434,1436],{"class":405,"line":458},[403,1432,1433],{"class":486},"    experimental",[403,1435,490],{"class":413},[403,1437,529],{"class":413},[403,1439,1440,1443,1445,1449],{"class":405,"line":465},[403,1441,1442],{"class":486},"      asyncContext",[403,1444,490],{"class":413},[403,1446,1448],{"class":1447},"sfNiH"," true",[403,1450,501],{"class":413},[403,1452,1453],{"class":405,"line":483},[403,1454,1455],{"class":413},"    },\n",[403,1457,1458],{"class":405,"line":504},[403,1459,572],{"class":413},[403,1461,1462,1464],{"class":405,"line":521},[403,1463,706],{"class":413},[403,1465,709],{"class":417},[288,1467,1469],{"id":1468},"dynamic-handler-definitions","Dynamic Handler Definitions",[292,1471,1472,1473,1476,1477,362,1479,1481,1482,1484,1485,1487],{},"For more control, pass a ",[301,1474,1475],{},"function"," as ",[296,1478,391],{},[296,1480,712],{},", or ",[296,1483,923],{}," in ",[296,1486,329],{},". The function receives the H3 event and returns an array of definitions.",[393,1489,1491],{"className":395,"code":1490,"filename":1212,"language":398,"meta":399,"style":399},"import { defineMcpHandler } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\nimport { adminTools } from '.\u002Fadmin-tools'\nimport { publicTools } from '.\u002Fpublic-tools'\n\nexport default defineMcpHandler({\n  middleware: async (event) => {\n    event.context.user = await getUser(event)\n  },\n  tools: async (event) => {\n    const base = [...publicTools]\n    if (event.context.user?.role === 'admin') {\n      base.push(...adminTools)\n    }\n    return base\n  },\n  prompts: async (event) => {\n    if (event.context.user) {\n      return [authenticatedPrompt, dashboardPrompt]\n    }\n    return [guestPrompt]\n  },\n})\n",[296,1492,1493,1511,1531,1551,1555,1567,1585,1611,1615,1634,1654,1688,1707,1711,1718,1722,1741,1761,1778,1782,1793,1798],{"__ignoreMap":399},[403,1494,1495,1497,1499,1501,1503,1505,1507,1509],{"class":405,"line":406},[403,1496,410],{"class":409},[403,1498,414],{"class":413},[403,1500,1242],{"class":417},[403,1502,421],{"class":413},[403,1504,424],{"class":409},[403,1506,427],{"class":413},[403,1508,453],{"class":430},[403,1510,434],{"class":413},[403,1512,1513,1515,1517,1520,1522,1524,1526,1529],{"class":405,"line":437},[403,1514,410],{"class":409},[403,1516,414],{"class":413},[403,1518,1519],{"class":417}," adminTools",[403,1521,421],{"class":413},[403,1523,424],{"class":409},[403,1525,427],{"class":413},[403,1527,1528],{"class":430},".\u002Fadmin-tools",[403,1530,434],{"class":413},[403,1532,1533,1535,1537,1540,1542,1544,1546,1549],{"class":405,"line":458},[403,1534,410],{"class":409},[403,1536,414],{"class":413},[403,1538,1539],{"class":417}," publicTools",[403,1541,421],{"class":413},[403,1543,424],{"class":409},[403,1545,427],{"class":413},[403,1547,1548],{"class":430},".\u002Fpublic-tools",[403,1550,434],{"class":413},[403,1552,1553],{"class":405,"line":465},[403,1554,462],{"emptyLinePlaceholder":461},[403,1556,1557,1559,1561,1563,1565],{"class":405,"line":483},[403,1558,468],{"class":409},[403,1560,471],{"class":409},[403,1562,1242],{"class":474},[403,1564,477],{"class":417},[403,1566,480],{"class":413},[403,1568,1569,1571,1573,1575,1577,1579,1581,1583],{"class":405,"line":504},[403,1570,1273],{"class":474},[403,1572,490],{"class":413},[403,1574,629],{"class":587},[403,1576,651],{"class":413},[403,1578,1029],{"class":583},[403,1580,564],{"class":413},[403,1582,588],{"class":587},[403,1584,529],{"class":413},[403,1586,1587,1590,1592,1594,1596,1598,1600,1602,1605,1607,1609],{"class":405,"line":521},[403,1588,1589],{"class":417},"    event",[403,1591,370],{"class":413},[403,1593,595],{"class":417},[403,1595,370],{"class":413},[403,1597,600],{"class":417},[403,1599,1064],{"class":413},[403,1601,892],{"class":409},[403,1603,1604],{"class":474}," getUser",[403,1606,477],{"class":486},[403,1608,1029],{"class":417},[403,1610,709],{"class":486},[403,1612,1613],{"class":405,"line":532},[403,1614,572],{"class":413},[403,1616,1617,1620,1622,1624,1626,1628,1630,1632],{"class":405,"line":569},[403,1618,1619],{"class":474},"  tools",[403,1621,490],{"class":413},[403,1623,629],{"class":587},[403,1625,651],{"class":413},[403,1627,1029],{"class":583},[403,1629,564],{"class":413},[403,1631,588],{"class":587},[403,1633,529],{"class":413},[403,1635,1636,1638,1641,1643,1645,1648,1651],{"class":405,"line":575},[403,1637,1059],{"class":587},[403,1639,1640],{"class":417}," base",[403,1642,1064],{"class":413},[403,1644,864],{"class":486},[403,1646,1647],{"class":413},"...",[403,1649,1650],{"class":417},"publicTools",[403,1652,1653],{"class":486},"]\n",[403,1655,1656,1658,1660,1662,1664,1666,1668,1670,1672,1675,1678,1680,1682,1684,1686],{"class":405,"line":621},[403,1657,648],{"class":409},[403,1659,651],{"class":486},[403,1661,1029],{"class":417},[403,1663,370],{"class":413},[403,1665,595],{"class":417},[403,1667,370],{"class":413},[403,1669,600],{"class":417},[403,1671,603],{"class":413},[403,1673,1674],{"class":417},"role",[403,1676,1677],{"class":413}," ===",[403,1679,427],{"class":413},[403,1681,614],{"class":430},[403,1683,498],{"class":413},[403,1685,660],{"class":486},[403,1687,480],{"class":413},[403,1689,1690,1693,1695,1698,1700,1702,1705],{"class":405,"line":645},[403,1691,1692],{"class":417},"      base",[403,1694,370],{"class":413},[403,1696,1697],{"class":474},"push",[403,1699,477],{"class":486},[403,1701,1647],{"class":413},[403,1703,1704],{"class":417},"adminTools",[403,1706,709],{"class":486},[403,1708,1709],{"class":405,"line":673},[403,1710,1187],{"class":413},[403,1712,1713,1715],{"class":405,"line":685},[403,1714,688],{"class":409},[403,1716,1717],{"class":417}," base\n",[403,1719,1720],{"class":405,"line":698},[403,1721,572],{"class":413},[403,1723,1724,1727,1729,1731,1733,1735,1737,1739],{"class":405,"line":703},[403,1725,1726],{"class":474},"  prompts",[403,1728,490],{"class":413},[403,1730,629],{"class":587},[403,1732,651],{"class":413},[403,1734,1029],{"class":583},[403,1736,564],{"class":413},[403,1738,588],{"class":587},[403,1740,529],{"class":413},[403,1742,1743,1745,1747,1749,1751,1753,1755,1757,1759],{"class":405,"line":1174},[403,1744,648],{"class":409},[403,1746,651],{"class":486},[403,1748,1029],{"class":417},[403,1750,370],{"class":413},[403,1752,595],{"class":417},[403,1754,370],{"class":413},[403,1756,600],{"class":417},[403,1758,660],{"class":486},[403,1760,480],{"class":413},[403,1762,1763,1766,1768,1771,1773,1776],{"class":405,"line":1184},[403,1764,1765],{"class":409},"      return",[403,1767,864],{"class":486},[403,1769,1770],{"class":417},"authenticatedPrompt",[403,1772,884],{"class":413},[403,1774,1775],{"class":417}," dashboardPrompt",[403,1777,1653],{"class":486},[403,1779,1780],{"class":405,"line":1190},[403,1781,1187],{"class":413},[403,1783,1784,1786,1788,1791],{"class":405,"line":1195},[403,1785,688],{"class":409},[403,1787,864],{"class":486},[403,1789,1790],{"class":417},"guestPrompt",[403,1792,1653],{"class":486},[403,1794,1796],{"class":405,"line":1795},21,[403,1797,572],{"class":413},[403,1799,1801,1803],{"class":405,"line":1800},22,[403,1802,706],{"class":413},[403,1804,709],{"class":417},[292,1806,1807],{},"This is useful when you need to:",[1809,1810,1811,1814,1817],"ul",{},[312,1812,1813],{},"Build the tool list programmatically from a database or config",[312,1815,1816],{},"Compose definitions from multiple modules",[312,1818,1819],{},"Apply complex filtering logic",[288,1821,1823],{"id":1822},"combining-both-approaches","Combining Both Approaches",[292,1825,374,1826,1828,1829,1831],{},[296,1827,318],{}," guard and dynamic handler definitions work together. When you use dynamic handler definitions, each returned definition's ",[296,1830,318],{}," guard is still evaluated:",[393,1833,1835],{"className":395,"code":1834,"filename":1212,"language":398,"meta":399,"style":399},"import { defineMcpHandler } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpHandler({\n  middleware: async (event) => {\n    event.context.user = await getUser(event)\n  },\n  tools: async (event) => {\n    const allTools = await loadToolsFromConfig()\n    return allTools\n  },\n})\n",[296,1836,1837,1855,1859,1871,1889,1913,1917,1935,1951,1958,1962],{"__ignoreMap":399},[403,1838,1839,1841,1843,1845,1847,1849,1851,1853],{"class":405,"line":406},[403,1840,410],{"class":409},[403,1842,414],{"class":413},[403,1844,1242],{"class":417},[403,1846,421],{"class":413},[403,1848,424],{"class":409},[403,1850,427],{"class":413},[403,1852,453],{"class":430},[403,1854,434],{"class":413},[403,1856,1857],{"class":405,"line":437},[403,1858,462],{"emptyLinePlaceholder":461},[403,1860,1861,1863,1865,1867,1869],{"class":405,"line":458},[403,1862,468],{"class":409},[403,1864,471],{"class":409},[403,1866,1242],{"class":474},[403,1868,477],{"class":417},[403,1870,480],{"class":413},[403,1872,1873,1875,1877,1879,1881,1883,1885,1887],{"class":405,"line":465},[403,1874,1273],{"class":474},[403,1876,490],{"class":413},[403,1878,629],{"class":587},[403,1880,651],{"class":413},[403,1882,1029],{"class":583},[403,1884,564],{"class":413},[403,1886,588],{"class":587},[403,1888,529],{"class":413},[403,1890,1891,1893,1895,1897,1899,1901,1903,1905,1907,1909,1911],{"class":405,"line":483},[403,1892,1589],{"class":417},[403,1894,370],{"class":413},[403,1896,595],{"class":417},[403,1898,370],{"class":413},[403,1900,600],{"class":417},[403,1902,1064],{"class":413},[403,1904,892],{"class":409},[403,1906,1604],{"class":474},[403,1908,477],{"class":486},[403,1910,1029],{"class":417},[403,1912,709],{"class":486},[403,1914,1915],{"class":405,"line":504},[403,1916,572],{"class":413},[403,1918,1919,1921,1923,1925,1927,1929,1931,1933],{"class":405,"line":521},[403,1920,1619],{"class":474},[403,1922,490],{"class":413},[403,1924,629],{"class":587},[403,1926,651],{"class":413},[403,1928,1029],{"class":583},[403,1930,564],{"class":413},[403,1932,588],{"class":587},[403,1934,529],{"class":413},[403,1936,1937,1939,1942,1944,1946,1949],{"class":405,"line":532},[403,1938,1059],{"class":587},[403,1940,1941],{"class":417}," allTools",[403,1943,1064],{"class":413},[403,1945,892],{"class":409},[403,1947,1948],{"class":474}," loadToolsFromConfig",[403,1950,682],{"class":486},[403,1952,1953,1955],{"class":405,"line":569},[403,1954,688],{"class":409},[403,1956,1957],{"class":417}," allTools\n",[403,1959,1960],{"class":405,"line":575},[403,1961,572],{"class":413},[403,1963,1964,1966],{"class":405,"line":621},[403,1965,706],{"class":413},[403,1967,709],{"class":417},[393,1969,1972],{"className":395,"code":1970,"filename":1971,"language":398,"meta":399,"style":399},"import { defineMcpTool } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpTool({\n  name: 'admin-delete',\n  enabled: event => event.context.user?.role === 'admin',\n  handler: async () => { \u002F* ... *\u002F },\n})\n","server\u002Fmcp\u002Ftools\u002Fadmin-delete.ts",[296,1973,1974,1992,1996,2008,2023,2057,2078],{"__ignoreMap":399},[403,1975,1976,1978,1980,1982,1984,1986,1988,1990],{"class":405,"line":406},[403,1977,410],{"class":409},[403,1979,414],{"class":413},[403,1981,444],{"class":417},[403,1983,421],{"class":413},[403,1985,424],{"class":409},[403,1987,427],{"class":413},[403,1989,453],{"class":430},[403,1991,434],{"class":413},[403,1993,1994],{"class":405,"line":437},[403,1995,462],{"emptyLinePlaceholder":461},[403,1997,1998,2000,2002,2004,2006],{"class":405,"line":458},[403,1999,468],{"class":409},[403,2001,471],{"class":409},[403,2003,444],{"class":474},[403,2005,477],{"class":417},[403,2007,480],{"class":413},[403,2009,2010,2012,2014,2016,2019,2021],{"class":405,"line":465},[403,2011,487],{"class":486},[403,2013,490],{"class":413},[403,2015,427],{"class":413},[403,2017,2018],{"class":430},"admin-delete",[403,2020,498],{"class":413},[403,2022,501],{"class":413},[403,2024,2025,2027,2029,2031,2033,2035,2037,2039,2041,2043,2045,2047,2049,2051,2053,2055],{"class":405,"line":483},[403,2026,578],{"class":474},[403,2028,490],{"class":413},[403,2030,584],{"class":583},[403,2032,588],{"class":587},[403,2034,584],{"class":417},[403,2036,370],{"class":413},[403,2038,595],{"class":417},[403,2040,370],{"class":413},[403,2042,600],{"class":417},[403,2044,603],{"class":413},[403,2046,606],{"class":417},[403,2048,609],{"class":413},[403,2050,427],{"class":413},[403,2052,614],{"class":430},[403,2054,498],{"class":413},[403,2056,501],{"class":413},[403,2058,2059,2061,2063,2065,2067,2069,2071,2075],{"class":405,"line":504},[403,2060,624],{"class":474},[403,2062,490],{"class":413},[403,2064,629],{"class":587},[403,2066,1050],{"class":413},[403,2068,588],{"class":587},[403,2070,414],{"class":413},[403,2072,2074],{"class":2073},"sHwdD"," \u002F* ... *\u002F",[403,2076,2077],{"class":413}," },\n",[403,2079,2080,2082],{"class":405,"line":521},[403,2081,706],{"class":413},[403,2083,709],{"class":417},[292,2085,2086,2087,2089,2090,2093,2094,2096],{},"In this case, ",[296,2088,2018],{}," is loaded by auto-discovery (or dynamically) ",[301,2091,2092],{},"and"," filtered by its ",[296,2095,318],{}," guard.",[288,2098,2100],{"id":2099},"session-behavior","Session Behavior",[292,2102,2103,2104,2108,2109,2112],{},"When ",[2105,2106,2107],"a",{"href":235},"sessions"," are enabled, the MCP server is created on the ",[301,2110,2111],{},"first request"," of a session. Dynamic definitions are resolved at that point, and the same tool set persists for the session's lifetime.",[292,2114,2115],{},"This means:",[1809,2117,2118,2121,2124],{},[312,2119,2120],{},"An admin who connects gets admin tools for the entire session",[312,2122,2123],{},"A regular user who connects never sees admin tools, even if they gain admin access mid-session",[312,2125,2126],{},"Different sessions can have different tool sets",[292,2128,2129],{},"Without sessions, a new server is created per request, so definitions can vary per request.",[288,2131,2133],{"id":2132},"mid-session-mutations","Mid-Session Mutations",[292,2135,374,2136,2138,2139,2142,2143,2146,2147,2150],{},[296,2137,318],{}," guard and dynamic handler definitions control which definitions are registered ",[301,2140,2141],{},"when the session starts",". For cases where you need to add, remove, or update definitions ",[301,2144,2145],{},"during"," an active session, use the ",[296,2148,2149],{},"useMcpServer()"," composable.",[292,2152,2153,2155,2156,2159],{},[296,2154,2149],{}," returns a helper with methods to register, remove, and manage tools, prompts, and resources. The SDK automatically sends ",[296,2157,2158],{},"notifications\u002Ftools\u002Flist_changed"," (or the equivalent for prompts\u002Fresources) to the client, prompting it to re-fetch the list.",[389,2161,2163],{"id":2162},"api","API",[2165,2166,2167,2180],"table",{},[2168,2169,2170],"thead",{},[2171,2172,2173,2177],"tr",{},[2174,2175,2176],"th",{},"Method",[2174,2178,2179],{},"Description",[2181,2182,2183,2198,2211,2224,2238,2250,2262],"tbody",{},[2171,2184,2185,2191],{},[2186,2187,2188],"td",{},[296,2189,2190],{},"registerTool(name, config, handler)",[2186,2192,2193,2194,2197],{},"Register a new tool. Returns a ",[296,2195,2196],{},"RegisteredTool"," handle.",[2171,2199,2200,2205],{},[2186,2201,2202],{},[296,2203,2204],{},"registerPrompt(name, config, handler)",[2186,2206,2207,2208,2197],{},"Register a new prompt. Returns a ",[296,2209,2210],{},"RegisteredPrompt",[2171,2212,2213,2218],{},[2186,2214,2215],{},[296,2216,2217],{},"registerResource(name, uri, config, handler)",[2186,2219,2220,2221,2197],{},"Register a new resource. Returns a ",[296,2222,2223],{},"RegisteredResource",[2171,2225,2226,2231],{},[2186,2227,2228],{},[296,2229,2230],{},"removeTool(name)",[2186,2232,2233,2234,2237],{},"Remove a tool by name. Returns ",[296,2235,2236],{},"true"," if found.",[2171,2239,2240,2245],{},[2186,2241,2242],{},[296,2243,2244],{},"removePrompt(name)",[2186,2246,2247,2248,2237],{},"Remove a prompt by name. Returns ",[296,2249,2236],{},[2171,2251,2252,2257],{},[2186,2253,2254],{},[296,2255,2256],{},"removeResource(name)",[2186,2258,2259,2260,2237],{},"Remove a resource by name. Returns ",[296,2261,2236],{},[2171,2263,2264,2269],{},[2186,2265,2266],{},[296,2267,2268],{},"server",[2186,2270,2271,2272,2275],{},"The underlying ",[296,2273,2274],{},"McpServer"," instance for advanced SDK operations.",[389,2277,2279],{"id":2278},"registering-a-tool-mid-session","Registering a Tool Mid-Session",[393,2281,2284],{"className":395,"code":2282,"filename":2283,"language":398,"meta":399,"style":399},"import { z } from 'zod'\nimport { defineMcpTool } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpTool({\n  description: 'Create a shortcut tool for a specific query',\n  inputSchema: {\n    name: z.string().describe('Name for the shortcut tool'),\n    query: z.string().describe('The query this shortcut runs'),\n  },\n  handler: async ({ name, query }) => {\n    const mcp = useMcpServer()\n    mcp.registerTool(name, {\n      description: `Shortcut: ${query}`,\n    }, async () => {\n      const result = await runQuery(query)\n      return { content: [{ type: 'text', text: JSON.stringify(result) }] }\n    })\n    return `Shortcut \"${name}\" created`\n  },\n})\n","server\u002Fmcp\u002Ftools\u002Fcreate-shortcut.ts",[296,2285,2286,2304,2322,2326,2338,2353,2361,2394,2426,2430,2454,2468,2486,2508,2521,2542,2597,2604,2625,2629],{"__ignoreMap":399},[403,2287,2288,2290,2292,2294,2296,2298,2300,2302],{"class":405,"line":406},[403,2289,410],{"class":409},[403,2291,414],{"class":413},[403,2293,418],{"class":417},[403,2295,421],{"class":413},[403,2297,424],{"class":409},[403,2299,427],{"class":413},[403,2301,431],{"class":430},[403,2303,434],{"class":413},[403,2305,2306,2308,2310,2312,2314,2316,2318,2320],{"class":405,"line":437},[403,2307,410],{"class":409},[403,2309,414],{"class":413},[403,2311,444],{"class":417},[403,2313,421],{"class":413},[403,2315,424],{"class":409},[403,2317,427],{"class":413},[403,2319,453],{"class":430},[403,2321,434],{"class":413},[403,2323,2324],{"class":405,"line":458},[403,2325,462],{"emptyLinePlaceholder":461},[403,2327,2328,2330,2332,2334,2336],{"class":405,"line":465},[403,2329,468],{"class":409},[403,2331,471],{"class":409},[403,2333,444],{"class":474},[403,2335,477],{"class":417},[403,2337,480],{"class":413},[403,2339,2340,2342,2344,2346,2349,2351],{"class":405,"line":483},[403,2341,507],{"class":486},[403,2343,490],{"class":413},[403,2345,427],{"class":413},[403,2347,2348],{"class":430},"Create a shortcut tool for a specific query",[403,2350,498],{"class":413},[403,2352,501],{"class":413},[403,2354,2355,2357,2359],{"class":405,"line":504},[403,2356,524],{"class":486},[403,2358,490],{"class":413},[403,2360,529],{"class":413},[403,2362,2363,2366,2368,2370,2372,2375,2377,2379,2381,2383,2385,2388,2390,2392],{"class":405,"line":521},[403,2364,2365],{"class":486},"    name",[403,2367,490],{"class":413},[403,2369,418],{"class":417},[403,2371,370],{"class":413},[403,2373,2374],{"class":474},"string",[403,2376,547],{"class":417},[403,2378,370],{"class":413},[403,2380,552],{"class":474},[403,2382,477],{"class":417},[403,2384,498],{"class":413},[403,2386,2387],{"class":430},"Name for the shortcut tool",[403,2389,498],{"class":413},[403,2391,564],{"class":417},[403,2393,501],{"class":413},[403,2395,2396,2399,2401,2403,2405,2407,2409,2411,2413,2415,2417,2420,2422,2424],{"class":405,"line":532},[403,2397,2398],{"class":486},"    query",[403,2400,490],{"class":413},[403,2402,418],{"class":417},[403,2404,370],{"class":413},[403,2406,2374],{"class":474},[403,2408,547],{"class":417},[403,2410,370],{"class":413},[403,2412,552],{"class":474},[403,2414,477],{"class":417},[403,2416,498],{"class":413},[403,2418,2419],{"class":430},"The query this shortcut runs",[403,2421,498],{"class":413},[403,2423,564],{"class":417},[403,2425,501],{"class":413},[403,2427,2428],{"class":405,"line":569},[403,2429,572],{"class":413},[403,2431,2432,2434,2436,2438,2440,2443,2445,2448,2450,2452],{"class":405,"line":575},[403,2433,624],{"class":474},[403,2435,490],{"class":413},[403,2437,629],{"class":587},[403,2439,632],{"class":413},[403,2441,2442],{"class":583}," name",[403,2444,884],{"class":413},[403,2446,2447],{"class":583}," query",[403,2449,638],{"class":413},[403,2451,588],{"class":587},[403,2453,529],{"class":413},[403,2455,2456,2458,2461,2463,2466],{"class":405,"line":621},[403,2457,1059],{"class":587},[403,2459,2460],{"class":417}," mcp",[403,2462,1064],{"class":413},[403,2464,2465],{"class":474}," useMcpServer",[403,2467,682],{"class":486},[403,2469,2470,2473,2475,2478,2480,2482,2484],{"class":405,"line":645},[403,2471,2472],{"class":417},"    mcp",[403,2474,370],{"class":413},[403,2476,2477],{"class":474},"registerTool",[403,2479,477],{"class":486},[403,2481,1156],{"class":417},[403,2483,884],{"class":413},[403,2485,529],{"class":413},[403,2487,2488,2491,2493,2495,2498,2500,2503,2506],{"class":405,"line":673},[403,2489,2490],{"class":486},"      description",[403,2492,490],{"class":413},[403,2494,1135],{"class":413},[403,2496,2497],{"class":430},"Shortcut: ",[403,2499,1141],{"class":413},[403,2501,2502],{"class":417},"query",[403,2504,2505],{"class":413},"}`",[403,2507,501],{"class":413},[403,2509,2510,2513,2515,2517,2519],{"class":405,"line":685},[403,2511,2512],{"class":413},"    },",[403,2514,629],{"class":587},[403,2516,1050],{"class":413},[403,2518,588],{"class":587},[403,2520,529],{"class":413},[403,2522,2523,2526,2529,2531,2533,2536,2538,2540],{"class":405,"line":698},[403,2524,2525],{"class":587},"      const",[403,2527,2528],{"class":417}," result",[403,2530,1064],{"class":413},[403,2532,892],{"class":409},[403,2534,2535],{"class":474}," runQuery",[403,2537,477],{"class":486},[403,2539,2502],{"class":417},[403,2541,709],{"class":486},[403,2543,2544,2546,2548,2551,2553,2555,2557,2560,2562,2564,2566,2568,2570,2572,2574,2577,2579,2582,2584,2587,2589,2591,2594],{"class":405,"line":703},[403,2545,1765],{"class":409},[403,2547,414],{"class":413},[403,2549,2550],{"class":486}," content",[403,2552,490],{"class":413},[403,2554,864],{"class":486},[403,2556,867],{"class":413},[403,2558,2559],{"class":486}," type",[403,2561,490],{"class":413},[403,2563,427],{"class":413},[403,2565,1121],{"class":430},[403,2567,498],{"class":413},[403,2569,884],{"class":413},[403,2571,887],{"class":486},[403,2573,490],{"class":413},[403,2575,2576],{"class":417}," JSON",[403,2578,370],{"class":413},[403,2580,2581],{"class":474},"stringify",[403,2583,477],{"class":486},[403,2585,2586],{"class":417},"result",[403,2588,660],{"class":486},[403,2590,706],{"class":413},[403,2592,2593],{"class":486},"] ",[403,2595,2596],{"class":413},"}\n",[403,2598,2599,2602],{"class":405,"line":1174},[403,2600,2601],{"class":413},"    }",[403,2603,709],{"class":486},[403,2605,2606,2608,2610,2613,2615,2617,2619,2622],{"class":405,"line":1184},[403,2607,688],{"class":409},[403,2609,1135],{"class":413},[403,2611,2612],{"class":430},"Shortcut \"",[403,2614,1141],{"class":413},[403,2616,1156],{"class":417},[403,2618,706],{"class":413},[403,2620,2621],{"class":430},"\" created",[403,2623,2624],{"class":413},"`\n",[403,2626,2627],{"class":405,"line":1190},[403,2628,572],{"class":413},[403,2630,2631,2633],{"class":405,"line":1195},[403,2632,706],{"class":413},[403,2634,709],{"class":417},[292,2636,2637],{},"After calling this tool, the client's tool list refreshes and includes the new shortcut.",[389,2639,2641],{"id":2640},"removing-a-tool-mid-session","Removing a Tool Mid-Session",[292,2643,2644,2645,2647],{},"Use ",[296,2646,2230],{}," to remove a tool by name -- no need to store handles:",[393,2649,2652],{"className":395,"code":2650,"filename":2651,"language":398,"meta":399,"style":399},"import { z } from 'zod'\nimport { createError } from 'h3'\nimport { defineMcpTool } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport const registerAgent = defineMcpTool({\n  name: 'register-agent',\n  inputSchema: {\n    agentId: z.string(),\n    agentName: z.string(),\n  },\n  handler: async ({ agentId, agentName }) => {\n    const mcp = useMcpServer()\n    mcp.registerTool(`call-${agentId}`, {\n      description: `Call agent: ${agentName}`,\n    }, async () => {\n      const response = await callAgent(agentId)\n      return { content: [{ type: 'text', text: response }] }\n    })\n    return `Agent \"${agentName}\" registered`\n  },\n})\n\nexport const unregisterAgent = defineMcpTool({\n  name: 'unregister-agent',\n  inputSchema: {\n    agentId: z.string(),\n  },\n  handler: async ({ agentId }) => {\n    const mcp = useMcpServer()\n    const removed = mcp.removeTool(`call-${agentId}`)\n    if (!removed) throw createError({ statusCode: 404, message: `Agent \"${agentId}\" not found` })\n    return `Agent \"${agentId}\" unregistered`\n  },\n})\n","server\u002Fmcp\u002Ftools\u002Fmanage-agents.ts",[296,2653,2654,2672,2691,2709,2713,2732,2747,2755,2772,2789,2793,2817,2829,2855,2875,2887,2907,2945,2951,2971,2975,2981,2985,3003,3019,3028,3045,3050,3069,3082,3113,3171,3191,3196],{"__ignoreMap":399},[403,2655,2656,2658,2660,2662,2664,2666,2668,2670],{"class":405,"line":406},[403,2657,410],{"class":409},[403,2659,414],{"class":413},[403,2661,418],{"class":417},[403,2663,421],{"class":413},[403,2665,424],{"class":409},[403,2667,427],{"class":413},[403,2669,431],{"class":430},[403,2671,434],{"class":413},[403,2673,2674,2676,2678,2681,2683,2685,2687,2689],{"class":405,"line":437},[403,2675,410],{"class":409},[403,2677,414],{"class":413},[403,2679,2680],{"class":417}," createError",[403,2682,421],{"class":413},[403,2684,424],{"class":409},[403,2686,427],{"class":413},[403,2688,389],{"class":430},[403,2690,434],{"class":413},[403,2692,2693,2695,2697,2699,2701,2703,2705,2707],{"class":405,"line":458},[403,2694,410],{"class":409},[403,2696,414],{"class":413},[403,2698,444],{"class":417},[403,2700,421],{"class":413},[403,2702,424],{"class":409},[403,2704,427],{"class":413},[403,2706,453],{"class":430},[403,2708,434],{"class":413},[403,2710,2711],{"class":405,"line":465},[403,2712,462],{"emptyLinePlaceholder":461},[403,2714,2715,2717,2720,2723,2726,2728,2730],{"class":405,"line":483},[403,2716,468],{"class":409},[403,2718,2719],{"class":587}," const",[403,2721,2722],{"class":417}," registerAgent ",[403,2724,2725],{"class":413},"=",[403,2727,444],{"class":474},[403,2729,477],{"class":417},[403,2731,480],{"class":413},[403,2733,2734,2736,2738,2740,2743,2745],{"class":405,"line":504},[403,2735,487],{"class":486},[403,2737,490],{"class":413},[403,2739,427],{"class":413},[403,2741,2742],{"class":430},"register-agent",[403,2744,498],{"class":413},[403,2746,501],{"class":413},[403,2748,2749,2751,2753],{"class":405,"line":521},[403,2750,524],{"class":486},[403,2752,490],{"class":413},[403,2754,529],{"class":413},[403,2756,2757,2760,2762,2764,2766,2768,2770],{"class":405,"line":532},[403,2758,2759],{"class":486},"    agentId",[403,2761,490],{"class":413},[403,2763,418],{"class":417},[403,2765,370],{"class":413},[403,2767,2374],{"class":474},[403,2769,547],{"class":417},[403,2771,501],{"class":413},[403,2773,2774,2777,2779,2781,2783,2785,2787],{"class":405,"line":569},[403,2775,2776],{"class":486},"    agentName",[403,2778,490],{"class":413},[403,2780,418],{"class":417},[403,2782,370],{"class":413},[403,2784,2374],{"class":474},[403,2786,547],{"class":417},[403,2788,501],{"class":413},[403,2790,2791],{"class":405,"line":575},[403,2792,572],{"class":413},[403,2794,2795,2797,2799,2801,2803,2806,2808,2811,2813,2815],{"class":405,"line":621},[403,2796,624],{"class":474},[403,2798,490],{"class":413},[403,2800,629],{"class":587},[403,2802,632],{"class":413},[403,2804,2805],{"class":583}," agentId",[403,2807,884],{"class":413},[403,2809,2810],{"class":583}," agentName",[403,2812,638],{"class":413},[403,2814,588],{"class":587},[403,2816,529],{"class":413},[403,2818,2819,2821,2823,2825,2827],{"class":405,"line":645},[403,2820,1059],{"class":587},[403,2822,2460],{"class":417},[403,2824,1064],{"class":413},[403,2826,2465],{"class":474},[403,2828,682],{"class":486},[403,2830,2831,2833,2835,2837,2839,2841,2844,2846,2849,2851,2853],{"class":405,"line":673},[403,2832,2472],{"class":417},[403,2834,370],{"class":413},[403,2836,2477],{"class":474},[403,2838,477],{"class":486},[403,2840,1164],{"class":413},[403,2842,2843],{"class":430},"call-",[403,2845,1141],{"class":413},[403,2847,2848],{"class":417},"agentId",[403,2850,2505],{"class":413},[403,2852,884],{"class":413},[403,2854,529],{"class":413},[403,2856,2857,2859,2861,2863,2866,2868,2871,2873],{"class":405,"line":685},[403,2858,2490],{"class":486},[403,2860,490],{"class":413},[403,2862,1135],{"class":413},[403,2864,2865],{"class":430},"Call agent: ",[403,2867,1141],{"class":413},[403,2869,2870],{"class":417},"agentName",[403,2872,2505],{"class":413},[403,2874,501],{"class":413},[403,2876,2877,2879,2881,2883,2885],{"class":405,"line":698},[403,2878,2512],{"class":413},[403,2880,629],{"class":587},[403,2882,1050],{"class":413},[403,2884,588],{"class":587},[403,2886,529],{"class":413},[403,2888,2889,2891,2894,2896,2898,2901,2903,2905],{"class":405,"line":703},[403,2890,2525],{"class":587},[403,2892,2893],{"class":417}," response",[403,2895,1064],{"class":413},[403,2897,892],{"class":409},[403,2899,2900],{"class":474}," callAgent",[403,2902,477],{"class":486},[403,2904,2848],{"class":417},[403,2906,709],{"class":486},[403,2908,2909,2911,2913,2915,2917,2919,2921,2923,2925,2927,2929,2931,2933,2935,2937,2939,2941,2943],{"class":405,"line":1174},[403,2910,1765],{"class":409},[403,2912,414],{"class":413},[403,2914,2550],{"class":486},[403,2916,490],{"class":413},[403,2918,864],{"class":486},[403,2920,867],{"class":413},[403,2922,2559],{"class":486},[403,2924,490],{"class":413},[403,2926,427],{"class":413},[403,2928,1121],{"class":430},[403,2930,498],{"class":413},[403,2932,884],{"class":413},[403,2934,887],{"class":486},[403,2936,490],{"class":413},[403,2938,2893],{"class":417},[403,2940,421],{"class":413},[403,2942,2593],{"class":486},[403,2944,2596],{"class":413},[403,2946,2947,2949],{"class":405,"line":1184},[403,2948,2601],{"class":413},[403,2950,709],{"class":486},[403,2952,2953,2955,2957,2960,2962,2964,2966,2969],{"class":405,"line":1190},[403,2954,688],{"class":409},[403,2956,1135],{"class":413},[403,2958,2959],{"class":430},"Agent \"",[403,2961,1141],{"class":413},[403,2963,2870],{"class":417},[403,2965,706],{"class":413},[403,2967,2968],{"class":430},"\" registered",[403,2970,2624],{"class":413},[403,2972,2973],{"class":405,"line":1195},[403,2974,572],{"class":413},[403,2976,2977,2979],{"class":405,"line":1795},[403,2978,706],{"class":413},[403,2980,709],{"class":417},[403,2982,2983],{"class":405,"line":1800},[403,2984,462],{"emptyLinePlaceholder":461},[403,2986,2988,2990,2992,2995,2997,2999,3001],{"class":405,"line":2987},23,[403,2989,468],{"class":409},[403,2991,2719],{"class":587},[403,2993,2994],{"class":417}," unregisterAgent ",[403,2996,2725],{"class":413},[403,2998,444],{"class":474},[403,3000,477],{"class":417},[403,3002,480],{"class":413},[403,3004,3006,3008,3010,3012,3015,3017],{"class":405,"line":3005},24,[403,3007,487],{"class":486},[403,3009,490],{"class":413},[403,3011,427],{"class":413},[403,3013,3014],{"class":430},"unregister-agent",[403,3016,498],{"class":413},[403,3018,501],{"class":413},[403,3020,3022,3024,3026],{"class":405,"line":3021},25,[403,3023,524],{"class":486},[403,3025,490],{"class":413},[403,3027,529],{"class":413},[403,3029,3031,3033,3035,3037,3039,3041,3043],{"class":405,"line":3030},26,[403,3032,2759],{"class":486},[403,3034,490],{"class":413},[403,3036,418],{"class":417},[403,3038,370],{"class":413},[403,3040,2374],{"class":474},[403,3042,547],{"class":417},[403,3044,501],{"class":413},[403,3046,3048],{"class":405,"line":3047},27,[403,3049,572],{"class":413},[403,3051,3053,3055,3057,3059,3061,3063,3065,3067],{"class":405,"line":3052},28,[403,3054,624],{"class":474},[403,3056,490],{"class":413},[403,3058,629],{"class":587},[403,3060,632],{"class":413},[403,3062,2805],{"class":583},[403,3064,638],{"class":413},[403,3066,588],{"class":587},[403,3068,529],{"class":413},[403,3070,3072,3074,3076,3078,3080],{"class":405,"line":3071},29,[403,3073,1059],{"class":587},[403,3075,2460],{"class":417},[403,3077,1064],{"class":413},[403,3079,2465],{"class":474},[403,3081,682],{"class":486},[403,3083,3085,3087,3090,3092,3094,3096,3099,3101,3103,3105,3107,3109,3111],{"class":405,"line":3084},30,[403,3086,1059],{"class":587},[403,3088,3089],{"class":417}," removed",[403,3091,1064],{"class":413},[403,3093,2460],{"class":417},[403,3095,370],{"class":413},[403,3097,3098],{"class":474},"removeTool",[403,3100,477],{"class":486},[403,3102,1164],{"class":413},[403,3104,2843],{"class":430},[403,3106,1141],{"class":413},[403,3108,2848],{"class":417},[403,3110,2505],{"class":413},[403,3112,709],{"class":486},[403,3114,3116,3118,3120,3122,3125,3127,3130,3132,3134,3136,3139,3141,3145,3147,3150,3152,3154,3156,3158,3160,3162,3165,3167,3169],{"class":405,"line":3115},31,[403,3117,648],{"class":409},[403,3119,651],{"class":486},[403,3121,654],{"class":413},[403,3123,3124],{"class":417},"removed",[403,3126,660],{"class":486},[403,3128,3129],{"class":409},"throw",[403,3131,2680],{"class":474},[403,3133,477],{"class":486},[403,3135,867],{"class":413},[403,3137,3138],{"class":486}," statusCode",[403,3140,490],{"class":413},[403,3142,3144],{"class":3143},"sbssI"," 404",[403,3146,884],{"class":413},[403,3148,3149],{"class":486}," message",[403,3151,490],{"class":413},[403,3153,1135],{"class":413},[403,3155,2959],{"class":430},[403,3157,1141],{"class":413},[403,3159,2848],{"class":417},[403,3161,706],{"class":413},[403,3163,3164],{"class":430},"\" not found",[403,3166,1164],{"class":413},[403,3168,421],{"class":413},[403,3170,709],{"class":486},[403,3172,3174,3176,3178,3180,3182,3184,3186,3189],{"class":405,"line":3173},32,[403,3175,688],{"class":409},[403,3177,1135],{"class":413},[403,3179,2959],{"class":430},[403,3181,1141],{"class":413},[403,3183,2848],{"class":417},[403,3185,706],{"class":413},[403,3187,3188],{"class":430},"\" unregistered",[403,3190,2624],{"class":413},[403,3192,3194],{"class":405,"line":3193},33,[403,3195,572],{"class":413},[403,3197,3199,3201],{"class":405,"line":3198},34,[403,3200,706],{"class":413},[403,3202,709],{"class":417},[389,3204,3206],{"id":3205},"updating-and-toggling-definitions","Updating and Toggling Definitions",[292,3208,3209,3210,3212,3213,490],{},"For in-place updates, use the ",[296,3211,2196],{}," handle returned by ",[296,3214,3215],{},"registerTool()",[393,3217,3219],{"className":395,"code":3218,"language":398,"meta":399,"style":399},"const mcp = useMcpServer()\nconst registered = mcp.registerTool('my-tool', { description: 'v1' }, handler)\n\n\u002F\u002F Update the description and handler\nregistered.update({ description: 'v2', callback: newHandler })\n\n\u002F\u002F Temporarily hide from the client\nregistered.disable()\n\n\u002F\u002F Re-enable\nregistered.enable()\n",[296,3220,3221,3235,3281,3285,3290,3329,3333,3338,3349,3353,3358],{"__ignoreMap":399},[403,3222,3223,3226,3229,3231,3233],{"class":405,"line":406},[403,3224,3225],{"class":587},"const",[403,3227,3228],{"class":417}," mcp ",[403,3230,2725],{"class":413},[403,3232,2465],{"class":474},[403,3234,682],{"class":417},[403,3236,3237,3239,3242,3244,3246,3248,3250,3252,3254,3257,3259,3261,3263,3266,3268,3270,3273,3275,3278],{"class":405,"line":437},[403,3238,3225],{"class":587},[403,3240,3241],{"class":417}," registered ",[403,3243,2725],{"class":413},[403,3245,2460],{"class":417},[403,3247,370],{"class":413},[403,3249,2477],{"class":474},[403,3251,477],{"class":417},[403,3253,498],{"class":413},[403,3255,3256],{"class":430},"my-tool",[403,3258,498],{"class":413},[403,3260,884],{"class":413},[403,3262,414],{"class":413},[403,3264,3265],{"class":486}," description",[403,3267,490],{"class":413},[403,3269,427],{"class":413},[403,3271,3272],{"class":430},"v1",[403,3274,498],{"class":413},[403,3276,3277],{"class":413}," },",[403,3279,3280],{"class":417}," handler)\n",[403,3282,3283],{"class":405,"line":458},[403,3284,462],{"emptyLinePlaceholder":461},[403,3286,3287],{"class":405,"line":465},[403,3288,3289],{"class":2073},"\u002F\u002F Update the description and handler\n",[403,3291,3292,3295,3297,3300,3302,3304,3306,3308,3310,3313,3315,3317,3320,3322,3325,3327],{"class":405,"line":483},[403,3293,3294],{"class":417},"registered",[403,3296,370],{"class":413},[403,3298,3299],{"class":474},"update",[403,3301,477],{"class":417},[403,3303,867],{"class":413},[403,3305,3265],{"class":486},[403,3307,490],{"class":413},[403,3309,427],{"class":413},[403,3311,3312],{"class":430},"v2",[403,3314,498],{"class":413},[403,3316,884],{"class":413},[403,3318,3319],{"class":486}," callback",[403,3321,490],{"class":413},[403,3323,3324],{"class":417}," newHandler ",[403,3326,706],{"class":413},[403,3328,709],{"class":417},[403,3330,3331],{"class":405,"line":504},[403,3332,462],{"emptyLinePlaceholder":461},[403,3334,3335],{"class":405,"line":521},[403,3336,3337],{"class":2073},"\u002F\u002F Temporarily hide from the client\n",[403,3339,3340,3342,3344,3347],{"class":405,"line":532},[403,3341,3294],{"class":417},[403,3343,370],{"class":413},[403,3345,3346],{"class":474},"disable",[403,3348,682],{"class":417},[403,3350,3351],{"class":405,"line":569},[403,3352,462],{"emptyLinePlaceholder":461},[403,3354,3355],{"class":405,"line":575},[403,3356,3357],{"class":2073},"\u002F\u002F Re-enable\n",[403,3359,3360,3362,3364,3367],{"class":405,"line":621},[403,3361,3294],{"class":417},[403,3363,370],{"class":413},[403,3365,3366],{"class":474},"enable",[403,3368,682],{"class":417},[292,3370,3371,3372,3375,3376,3379],{},"The same pattern applies to ",[296,3373,3374],{},"registerPrompt()"," and ",[296,3377,3378],{},"registerResource()",", which return handles with the same methods.",[389,3381,3383],{"id":3382},"requirements","Requirements",[1809,3385,3386,3400],{},[312,3387,3388,3393,3394,3396,3397,3399],{},[301,3389,3390],{},[296,3391,3392],{},"nitro.experimental.asyncContext"," must be ",[296,3395,2236],{}," in your Nuxt config (required for ",[296,3398,2149],{}," to access the request context)",[312,3401,3402,3403,3406],{},"Mid-session mutations are most useful with ",[301,3404,3405],{},"sessions enabled",", since the server instance persists across requests. Without sessions, each request creates a fresh server, so mutations only last for a single request.",[343,3408,3411,3412,3414],{"color":3409,"icon":3410},"warning","i-lucide-triangle-alert","Not all MCP clients support ",[296,3413,2158],{},". If a client doesn't support it, the user may need to reconnect to see updated definitions. Check your client's documentation for compatibility.",[288,3416,219],{"id":398},[292,3418,3419],{},"For type-safe context, extend the H3 event context:",[393,3421,3424],{"className":395,"code":3422,"filename":3423,"language":398,"meta":399,"style":399},"declare module 'h3' {\n  interface H3EventContext {\n    user?: {\n      id: string\n      name: string\n      role: 'user' | 'admin'\n    }\n  }\n}\n","server\u002Ftypes.ts",[296,3425,3426,3442,3453,3463,3473,3482,3504,3508,3513],{"__ignoreMap":399},[403,3427,3428,3431,3434,3436,3438,3440],{"class":405,"line":406},[403,3429,3430],{"class":587},"declare",[403,3432,3433],{"class":587}," module",[403,3435,427],{"class":413},[403,3437,389],{"class":430},[403,3439,498],{"class":413},[403,3441,529],{"class":413},[403,3443,3444,3447,3451],{"class":405,"line":437},[403,3445,3446],{"class":587},"  interface",[403,3448,3450],{"class":3449},"sBMFI"," H3EventContext",[403,3452,529],{"class":413},[403,3454,3455,3458,3461],{"class":405,"line":458},[403,3456,3457],{"class":486},"    user",[403,3459,3460],{"class":413},"?:",[403,3462,529],{"class":413},[403,3464,3465,3468,3470],{"class":405,"line":465},[403,3466,3467],{"class":486},"      id",[403,3469,490],{"class":413},[403,3471,3472],{"class":3449}," string\n",[403,3474,3475,3478,3480],{"class":405,"line":483},[403,3476,3477],{"class":486},"      name",[403,3479,490],{"class":413},[403,3481,3472],{"class":3449},[403,3483,3484,3487,3489,3491,3493,3495,3498,3500,3502],{"class":405,"line":504},[403,3485,3486],{"class":486},"      role",[403,3488,490],{"class":413},[403,3490,427],{"class":413},[403,3492,600],{"class":430},[403,3494,498],{"class":413},[403,3496,3497],{"class":413}," |",[403,3499,427],{"class":413},[403,3501,614],{"class":430},[403,3503,434],{"class":413},[403,3505,3506],{"class":405,"line":521},[403,3507,1187],{"class":413},[403,3509,3510],{"class":405,"line":532},[403,3511,3512],{"class":413},"  }\n",[403,3514,3515],{"class":405,"line":569},[403,3516,2596],{"class":413},[288,3518,3520],{"id":3519},"next-steps","Next Steps",[1809,3522,3523,3528,3533],{},[312,3524,3525,3527],{},[2105,3526,215],{"href":216}," — Set up authentication context",[312,3529,3530,3532],{},[2105,3531,234],{"href":235}," — Enable per-session state",[312,3534,3535,3537],{},[2105,3536,123],{"href":128}," — Create custom MCP endpoints",[3539,3540,3541],"style",{},"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":399,"searchDepth":437,"depth":437,"links":3543},[3544,3545,3552,3553,3554,3555,3562,3563],{"id":290,"depth":437,"text":46},{"id":373,"depth":437,"text":3546,"children":3547},"The enabled Guard",[3548,3549,3550,3551],{"id":391,"depth":458,"text":41},{"id":712,"depth":458,"text":71},{"id":923,"depth":458,"text":100},{"id":1202,"depth":458,"text":1203},{"id":1468,"depth":437,"text":1469},{"id":1822,"depth":437,"text":1823},{"id":2099,"depth":437,"text":2100},{"id":2132,"depth":437,"text":2133,"children":3556},[3557,3558,3559,3560,3561],{"id":2162,"depth":458,"text":2163},{"id":2278,"depth":458,"text":2279},{"id":2640,"depth":458,"text":2641},{"id":3205,"depth":458,"text":3206},{"id":3382,"depth":458,"text":3383},{"id":398,"depth":437,"text":219},{"id":3519,"depth":437,"text":3520},"Conditionally register tools, resources, and prompts based on authentication, roles, or request context.","md",null,{},{"icon":242},{"title":3570,"description":3571},"Dynamic MCP Definitions","Control which MCP tools, resources, and prompts are visible per session using enabled guards and dynamic handlers.","w-CNUE-SI7mNvWgQleBDO6GBvRtJU2ohBbzoD7fM8Uo",[3574,3576],{"title":234,"path":235,"stem":236,"description":3575,"icon":237,"children":-1},"Persist per-session state across tool calls with useMcpSession().",{"title":244,"path":245,"stem":246,"description":3577,"icon":247,"children":-1},"Let LLMs orchestrate multiple tool calls in a single JavaScript execution.",1779072101407]