[{"data":1,"prerenderedAt":2270},["ShallowReactive",2],{"navigation_docs":3,"-advanced-hooks":282,"-advanced-hooks-surround":2265},[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":284,"body":285,"description":2256,"extension":2257,"links":2258,"meta":2259,"navigation":2260,"path":225,"seo":2261,"stem":226,"__hash__":2264},"docs\u002F7.advanced\u002F4.hooks.md","Extend the module with hooks",{"type":286,"value":287,"toc":2245},"minimark",[288,292,333,344,348,355,358,363,496,503,716,720,873,877,947,954,989,992,1008,1097,1100,1108,1114,1143,1147,1278,1282,1458,1462,1631,1636,1652,1667,1670,1788,1792,2012,2016,2170,2178,2182,2189,2195,2208,2212,2241],[289,290,291],"p",{},"The toolkit exposes two flavours of hooks:",[293,294,295,316],"ul",{},[296,297,298,302,303,307,308,311,312,315],"li",{},[299,300,301],"strong",{},"Build-time hooks"," on ",[304,305,306],"code",{},"NuxtHooks"," — fire during ",[304,309,310],{},"nuxt build"," \u002F ",[304,313,314],{},"nuxt prepare",", useful to register additional definition directories.",[296,317,318,302,321,324,325,328,329,332],{},[299,319,320],{},"Runtime hooks",[304,322,323],{},"NitroRuntimeHooks"," — fire ",[299,326,327],{},"per request",", inside Nitro plugins, to mutate the resolved config or reach the SDK ",[304,330,331],{},"McpServer"," instance.",[289,334,335,336,343],{},"User listeners are best-effort: a hook that throws is logged via ",[337,338,342],"a",{"href":339,"rel":340},"https:\u002F\u002Fgithub.com\u002Funjs\u002Fconsola",[341],"nofollow","consola"," and the MCP request continues.",[345,346,301],"h2",{"id":347},"build-time-hooks",[349,350,352],"h3",{"id":351},"mcpdefinitionspaths",[304,353,354],{},"mcp:definitions:paths",[289,356,357],{},"Add additional directories to scan for tool \u002F resource \u002F prompt \u002F handler definitions. Useful for sharing definitions across Nuxt layers or shipping them from a custom module.",[359,360,362],"h4",{"id":361},"hook-signature","Hook Signature",[364,365,370],"pre",{"className":366,"code":367,"language":368,"meta":369,"style":369},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","nuxt.hook('mcp:definitions:paths', (paths: {\n  tools: string[]\n  resources: string[]\n  prompts: string[]\n  handlers: string[]\n}) => {\n  \u002F\u002F Mutate paths in place\n})\n","typescript","",[304,371,372,416,432,444,456,468,480,487],{"__ignoreMap":369},[373,374,377,381,385,389,392,395,398,400,403,406,410,413],"span",{"class":375,"line":376},"line",1,[373,378,380],{"class":379},"sTEyZ","nuxt",[373,382,384],{"class":383},"sMK4o",".",[373,386,388],{"class":387},"s2Zo4","hook",[373,390,391],{"class":379},"(",[373,393,394],{"class":383},"'",[373,396,354],{"class":397},"sfazB",[373,399,394],{"class":383},[373,401,402],{"class":383},",",[373,404,405],{"class":383}," (",[373,407,409],{"class":408},"sHdIc","paths",[373,411,412],{"class":383},":",[373,414,415],{"class":383}," {\n",[373,417,419,423,425,429],{"class":375,"line":418},2,[373,420,422],{"class":421},"swJcz","  tools",[373,424,412],{"class":383},[373,426,428],{"class":427},"sBMFI"," string",[373,430,431],{"class":379},"[]\n",[373,433,435,438,440,442],{"class":375,"line":434},3,[373,436,437],{"class":421},"  resources",[373,439,412],{"class":383},[373,441,428],{"class":427},[373,443,431],{"class":379},[373,445,447,450,452,454],{"class":375,"line":446},4,[373,448,449],{"class":421},"  prompts",[373,451,412],{"class":383},[373,453,428],{"class":427},[373,455,431],{"class":379},[373,457,459,462,464,466],{"class":375,"line":458},5,[373,460,461],{"class":421},"  handlers",[373,463,412],{"class":383},[373,465,428],{"class":427},[373,467,431],{"class":379},[373,469,471,474,478],{"class":375,"line":470},6,[373,472,473],{"class":383},"})",[373,475,477],{"class":476},"spNyl"," =>",[373,479,415],{"class":383},[373,481,483],{"class":375,"line":482},7,[373,484,486],{"class":485},"sHwdD","  \u002F\u002F Mutate paths in place\n",[373,488,490,493],{"class":375,"line":489},8,[373,491,492],{"class":383},"}",[373,494,495],{"class":379},")\n",[359,497,499,500],{"id":498},"usage-in-nuxtconfigts","Usage in ",[304,501,502],{},"nuxt.config.ts",[364,504,506],{"className":366,"code":505,"filename":502,"language":368,"meta":369,"style":369},"export default defineNuxtConfig({\n  modules: ['@nuxtjs\u002Fmcp-toolkit'],\n  hooks: {\n    'mcp:definitions:paths'(paths) {\n      paths.tools.push('shared\u002Ftools')\n      paths.tools.push('legacy\u002Ftools')\n      paths.resources.push('shared\u002Fresources')\n      paths.prompts.push('shared\u002Fprompts')\n      paths.handlers.push('custom\u002Fhandlers')\n    },\n  },\n})\n",[304,507,508,525,548,557,575,601,624,648,672,697,703,709],{"__ignoreMap":369},[373,509,510,514,517,520,522],{"class":375,"line":376},[373,511,513],{"class":512},"s7zQu","export",[373,515,516],{"class":512}," default",[373,518,519],{"class":387}," defineNuxtConfig",[373,521,391],{"class":379},[373,523,524],{"class":383},"{\n",[373,526,527,530,532,535,537,540,542,545],{"class":375,"line":418},[373,528,529],{"class":421},"  modules",[373,531,412],{"class":383},[373,533,534],{"class":379}," [",[373,536,394],{"class":383},[373,538,539],{"class":397},"@nuxtjs\u002Fmcp-toolkit",[373,541,394],{"class":383},[373,543,544],{"class":379},"]",[373,546,547],{"class":383},",\n",[373,549,550,553,555],{"class":375,"line":434},[373,551,552],{"class":421},"  hooks",[373,554,412],{"class":383},[373,556,415],{"class":383},[373,558,559,562,564,566,568,570,573],{"class":375,"line":446},[373,560,561],{"class":383},"    '",[373,563,354],{"class":397},[373,565,394],{"class":383},[373,567,391],{"class":383},[373,569,409],{"class":408},[373,571,572],{"class":383},")",[373,574,415],{"class":383},[373,576,577,580,582,585,587,590,592,594,597,599],{"class":375,"line":458},[373,578,579],{"class":379},"      paths",[373,581,384],{"class":383},[373,583,584],{"class":379},"tools",[373,586,384],{"class":383},[373,588,589],{"class":387},"push",[373,591,391],{"class":421},[373,593,394],{"class":383},[373,595,596],{"class":397},"shared\u002Ftools",[373,598,394],{"class":383},[373,600,495],{"class":421},[373,602,603,605,607,609,611,613,615,617,620,622],{"class":375,"line":470},[373,604,579],{"class":379},[373,606,384],{"class":383},[373,608,584],{"class":379},[373,610,384],{"class":383},[373,612,589],{"class":387},[373,614,391],{"class":421},[373,616,394],{"class":383},[373,618,619],{"class":397},"legacy\u002Ftools",[373,621,394],{"class":383},[373,623,495],{"class":421},[373,625,626,628,630,633,635,637,639,641,644,646],{"class":375,"line":482},[373,627,579],{"class":379},[373,629,384],{"class":383},[373,631,632],{"class":379},"resources",[373,634,384],{"class":383},[373,636,589],{"class":387},[373,638,391],{"class":421},[373,640,394],{"class":383},[373,642,643],{"class":397},"shared\u002Fresources",[373,645,394],{"class":383},[373,647,495],{"class":421},[373,649,650,652,654,657,659,661,663,665,668,670],{"class":375,"line":489},[373,651,579],{"class":379},[373,653,384],{"class":383},[373,655,656],{"class":379},"prompts",[373,658,384],{"class":383},[373,660,589],{"class":387},[373,662,391],{"class":421},[373,664,394],{"class":383},[373,666,667],{"class":397},"shared\u002Fprompts",[373,669,394],{"class":383},[373,671,495],{"class":421},[373,673,675,677,679,682,684,686,688,690,693,695],{"class":375,"line":674},9,[373,676,579],{"class":379},[373,678,384],{"class":383},[373,680,681],{"class":379},"handlers",[373,683,384],{"class":383},[373,685,589],{"class":387},[373,687,391],{"class":421},[373,689,394],{"class":383},[373,691,692],{"class":397},"custom\u002Fhandlers",[373,694,394],{"class":383},[373,696,495],{"class":421},[373,698,700],{"class":375,"line":699},10,[373,701,702],{"class":383},"    },\n",[373,704,706],{"class":375,"line":705},11,[373,707,708],{"class":383},"  },\n",[373,710,712,714],{"class":375,"line":711},12,[373,713,492],{"class":383},[373,715,495],{"class":379},[359,717,719],{"id":718},"usage-in-a-custom-module","Usage in a Custom Module",[364,721,724],{"className":366,"code":722,"filename":723,"language":368,"meta":369,"style":369},"export default defineNuxtModule({\n  setup(options, nuxt) {\n    nuxt.hook('mcp:definitions:paths', (paths) => {\n      paths.tools.push('my-module\u002Ftools')\n      paths.resources.push('my-module\u002Fresources')\n      paths.prompts.push('my-module\u002Fprompts')\n    })\n  },\n})\n","my-module.ts",[304,725,726,739,758,787,810,833,856,863,867],{"__ignoreMap":369},[373,727,728,730,732,735,737],{"class":375,"line":376},[373,729,513],{"class":512},[373,731,516],{"class":512},[373,733,734],{"class":387}," defineNuxtModule",[373,736,391],{"class":379},[373,738,524],{"class":383},[373,740,741,744,746,749,751,754,756],{"class":375,"line":418},[373,742,743],{"class":421},"  setup",[373,745,391],{"class":383},[373,747,748],{"class":408},"options",[373,750,402],{"class":383},[373,752,753],{"class":408}," nuxt",[373,755,572],{"class":383},[373,757,415],{"class":383},[373,759,760,763,765,767,769,771,773,775,777,779,781,783,785],{"class":375,"line":434},[373,761,762],{"class":379},"    nuxt",[373,764,384],{"class":383},[373,766,388],{"class":387},[373,768,391],{"class":421},[373,770,394],{"class":383},[373,772,354],{"class":397},[373,774,394],{"class":383},[373,776,402],{"class":383},[373,778,405],{"class":383},[373,780,409],{"class":408},[373,782,572],{"class":383},[373,784,477],{"class":476},[373,786,415],{"class":383},[373,788,789,791,793,795,797,799,801,803,806,808],{"class":375,"line":446},[373,790,579],{"class":379},[373,792,384],{"class":383},[373,794,584],{"class":379},[373,796,384],{"class":383},[373,798,589],{"class":387},[373,800,391],{"class":421},[373,802,394],{"class":383},[373,804,805],{"class":397},"my-module\u002Ftools",[373,807,394],{"class":383},[373,809,495],{"class":421},[373,811,812,814,816,818,820,822,824,826,829,831],{"class":375,"line":458},[373,813,579],{"class":379},[373,815,384],{"class":383},[373,817,632],{"class":379},[373,819,384],{"class":383},[373,821,589],{"class":387},[373,823,391],{"class":421},[373,825,394],{"class":383},[373,827,828],{"class":397},"my-module\u002Fresources",[373,830,394],{"class":383},[373,832,495],{"class":421},[373,834,835,837,839,841,843,845,847,849,852,854],{"class":375,"line":470},[373,836,579],{"class":379},[373,838,384],{"class":383},[373,840,656],{"class":379},[373,842,384],{"class":383},[373,844,589],{"class":387},[373,846,391],{"class":421},[373,848,394],{"class":383},[373,850,851],{"class":397},"my-module\u002Fprompts",[373,853,394],{"class":383},[373,855,495],{"class":421},[373,857,858,861],{"class":375,"line":482},[373,859,860],{"class":383},"    }",[373,862,495],{"class":421},[373,864,865],{"class":375,"line":489},[373,866,708],{"class":383},[373,868,869,871],{"class":375,"line":674},[373,870,492],{"class":383},[373,872,495],{"class":379},[359,874,876],{"id":875},"path-structure","Path Structure",[364,878,880],{"className":366,"code":879,"language":368,"meta":369,"style":369},"{\n  tools: string[]      \u002F\u002F Directories to scan for tools\n  resources: string[]  \u002F\u002F Directories to scan for resources\n  prompts: string[]    \u002F\u002F Directories to scan for prompts\n  handlers: string[]   \u002F\u002F Directories to scan for handlers\n}\n",[304,881,882,886,900,914,928,942],{"__ignoreMap":369},[373,883,884],{"class":375,"line":376},[373,885,524],{"class":383},[373,887,888,890,892,894,897],{"class":375,"line":418},[373,889,422],{"class":427},[373,891,412],{"class":383},[373,893,428],{"class":379},[373,895,896],{"class":421},"[]      ",[373,898,899],{"class":485},"\u002F\u002F Directories to scan for tools\n",[373,901,902,904,906,908,911],{"class":375,"line":434},[373,903,437],{"class":427},[373,905,412],{"class":383},[373,907,428],{"class":379},[373,909,910],{"class":421},"[]  ",[373,912,913],{"class":485},"\u002F\u002F Directories to scan for resources\n",[373,915,916,918,920,922,925],{"class":375,"line":446},[373,917,449],{"class":427},[373,919,412],{"class":383},[373,921,428],{"class":379},[373,923,924],{"class":421},"[]    ",[373,926,927],{"class":485},"\u002F\u002F Directories to scan for prompts\n",[373,929,930,932,934,936,939],{"class":375,"line":458},[373,931,461],{"class":427},[373,933,412],{"class":383},[373,935,428],{"class":379},[373,937,938],{"class":421},"[]   ",[373,940,941],{"class":485},"\u002F\u002F Directories to scan for handlers\n",[373,943,944],{"class":375,"line":470},[373,945,946],{"class":383},"}\n",[289,948,949,950,953],{},"All paths are relative to the ",[304,951,952],{},"server\u002F"," directory of each Nuxt layer:",[955,956,957,970,980],"ol",{},[296,958,959,962,963,966,967,384],{},[299,960,961],{},"Relative paths"," like ",[304,964,965],{},"'tools'"," resolve to ",[304,968,969],{},"server\u002Ftools\u002F",[296,971,972,975,976,979],{},[299,973,974],{},"Absolute paths"," starting with ",[304,977,978],{},"\u002F"," resolve from project root.",[296,981,982,985,986,988],{},[299,983,984],{},"Layer-specific"," — each Nuxt layer resolves paths relative to its own ",[304,987,952],{}," directory.",[345,990,320],{"id":991},"runtime-hooks",[289,993,994,995,998,999,1004,1005,384],{},"Runtime hooks fire ",[299,996,997],{},"per MCP request",", from inside the Nitro server. Subscribe to them from a ",[337,1000,1003],{"href":1001,"rel":1002},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002Fguide\u002Fdirectory-structure\u002Fserver#server-plugins",[341],"Nitro plugin"," at ",[304,1006,1007],{},"server\u002Fplugins\u002F",[364,1009,1012],{"className":366,"code":1010,"filename":1011,"language":368,"meta":369,"style":369},"export default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('mcp:server:created', ({ server, event }) => {\n    \u002F\u002F ...\n  })\n})\n","server\u002Fplugins\u002Fmcp.ts",[304,1013,1014,1036,1079,1084,1091],{"__ignoreMap":369},[373,1015,1016,1018,1020,1023,1025,1027,1030,1032,1034],{"class":375,"line":376},[373,1017,513],{"class":512},[373,1019,516],{"class":512},[373,1021,1022],{"class":387}," defineNitroPlugin",[373,1024,391],{"class":379},[373,1026,391],{"class":383},[373,1028,1029],{"class":408},"nitroApp",[373,1031,572],{"class":383},[373,1033,477],{"class":476},[373,1035,415],{"class":383},[373,1037,1038,1041,1043,1046,1048,1050,1052,1054,1057,1059,1061,1064,1067,1069,1072,1075,1077],{"class":375,"line":418},[373,1039,1040],{"class":379},"  nitroApp",[373,1042,384],{"class":383},[373,1044,1045],{"class":379},"hooks",[373,1047,384],{"class":383},[373,1049,388],{"class":387},[373,1051,391],{"class":421},[373,1053,394],{"class":383},[373,1055,1056],{"class":397},"mcp:server:created",[373,1058,394],{"class":383},[373,1060,402],{"class":383},[373,1062,1063],{"class":383}," ({",[373,1065,1066],{"class":408}," server",[373,1068,402],{"class":383},[373,1070,1071],{"class":408}," event",[373,1073,1074],{"class":383}," })",[373,1076,477],{"class":476},[373,1078,415],{"class":383},[373,1080,1081],{"class":375,"line":434},[373,1082,1083],{"class":485},"    \u002F\u002F ...\n",[373,1085,1086,1089],{"class":375,"line":446},[373,1087,1088],{"class":383},"  }",[373,1090,495],{"class":421},[373,1092,1093,1095],{"class":375,"line":458},[373,1094,492],{"class":383},[373,1096,495],{"class":379},[289,1098,1099],{},"The hooks run in this order:",[364,1101,1106],{"className":1102,"code":1104,"language":1105},[1103],"language-text","H3 Event\n   │\n   ▼\ndefineMcpHandler middleware (if any)\n   │\n   ▼\nresolveDynamicDefinitions  ──►  mcp:config:resolved\n   │\n   ▼\nX-MCP-Tools allowlist (if the header is present)\n   │\n   ▼\ncreateMcpServer            ──►  mcp:server:created\n   │\n   ▼\ntransport.handleRequest\n","text",[304,1107,1104],{"__ignoreMap":369},[349,1109,1111],{"id":1110},"mcpconfigresolved",[304,1112,1113],{},"mcp:config:resolved",[289,1115,1116,1117,311,1119,311,1121,1123,1124,1127,1128,1131,1132,1135,1136,1138,1139,1142],{},"Fired after dynamic ",[304,1118,584],{},[304,1120,632],{},[304,1122,656],{}," resolvers and ",[304,1125,1126],{},"enabled(event)"," guards have run, ",[299,1129,1130],{},"before"," the ",[304,1133,1134],{},"X-MCP-Tools"," allowlist and the per-request ",[304,1137,331],{}," is built. Mutate ",[304,1140,1141],{},"ctx.config"," in place to add, remove or transform definitions for this request only.",[359,1144,1146],{"id":1145},"hook-signature-1","Hook signature",[364,1148,1150],{"className":366,"code":1149,"language":368,"meta":369,"style":369},"import type { McpResolvedConfig } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\nimport type { H3Event } from 'h3'\n\nnitroApp.hooks.hook('mcp:config:resolved', (ctx: {\n  config: McpResolvedConfig\n  event: H3Event\n}) => {\n  \u002F\u002F Mutate ctx.config in place\n})\n",[304,1151,1152,1181,1202,1208,1239,1249,1259,1267,1272],{"__ignoreMap":369},[373,1153,1154,1157,1160,1163,1166,1169,1172,1175,1178],{"class":375,"line":376},[373,1155,1156],{"class":512},"import",[373,1158,1159],{"class":512}," type",[373,1161,1162],{"class":383}," {",[373,1164,1165],{"class":379}," McpResolvedConfig",[373,1167,1168],{"class":383}," }",[373,1170,1171],{"class":512}," from",[373,1173,1174],{"class":383}," '",[373,1176,1177],{"class":397},"@nuxtjs\u002Fmcp-toolkit\u002Fserver",[373,1179,1180],{"class":383},"'\n",[373,1182,1183,1185,1187,1189,1192,1194,1196,1198,1200],{"class":375,"line":418},[373,1184,1156],{"class":512},[373,1186,1159],{"class":512},[373,1188,1162],{"class":383},[373,1190,1191],{"class":379}," H3Event",[373,1193,1168],{"class":383},[373,1195,1171],{"class":512},[373,1197,1174],{"class":383},[373,1199,349],{"class":397},[373,1201,1180],{"class":383},[373,1203,1204],{"class":375,"line":434},[373,1205,1207],{"emptyLinePlaceholder":1206},true,"\n",[373,1209,1210,1212,1214,1216,1218,1220,1222,1224,1226,1228,1230,1232,1235,1237],{"class":375,"line":446},[373,1211,1029],{"class":379},[373,1213,384],{"class":383},[373,1215,1045],{"class":379},[373,1217,384],{"class":383},[373,1219,388],{"class":387},[373,1221,391],{"class":379},[373,1223,394],{"class":383},[373,1225,1113],{"class":397},[373,1227,394],{"class":383},[373,1229,402],{"class":383},[373,1231,405],{"class":383},[373,1233,1234],{"class":408},"ctx",[373,1236,412],{"class":383},[373,1238,415],{"class":383},[373,1240,1241,1244,1246],{"class":375,"line":458},[373,1242,1243],{"class":421},"  config",[373,1245,412],{"class":383},[373,1247,1248],{"class":427}," McpResolvedConfig\n",[373,1250,1251,1254,1256],{"class":375,"line":470},[373,1252,1253],{"class":421},"  event",[373,1255,412],{"class":383},[373,1257,1258],{"class":427}," H3Event\n",[373,1260,1261,1263,1265],{"class":375,"line":482},[373,1262,473],{"class":383},[373,1264,477],{"class":476},[373,1266,415],{"class":383},[373,1268,1269],{"class":375,"line":489},[373,1270,1271],{"class":485},"  \u002F\u002F Mutate ctx.config in place\n",[373,1273,1274,1276],{"class":375,"line":674},[373,1275,492],{"class":383},[373,1277,495],{"class":379},[359,1279,1281],{"id":1280},"example-hide-admin-tools-from-anonymous-clients","Example: hide admin tools from anonymous clients",[364,1283,1286],{"className":366,"code":1284,"filename":1285,"language":368,"meta":369,"style":369},"export default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('mcp:config:resolved', ({ config, event }) => {\n    if (!event.context.user) {\n      config.tools = config.tools.filter(\n        tool => !tool.tags?.includes('admin'),\n      )\n    }\n  })\n})\n","server\u002Fplugins\u002Fmcp-auth.ts",[304,1287,1288,1308,1345,1373,1399,1436,1441,1446,1452],{"__ignoreMap":369},[373,1289,1290,1292,1294,1296,1298,1300,1302,1304,1306],{"class":375,"line":376},[373,1291,513],{"class":512},[373,1293,516],{"class":512},[373,1295,1022],{"class":387},[373,1297,391],{"class":379},[373,1299,391],{"class":383},[373,1301,1029],{"class":408},[373,1303,572],{"class":383},[373,1305,477],{"class":476},[373,1307,415],{"class":383},[373,1309,1310,1312,1314,1316,1318,1320,1322,1324,1326,1328,1330,1332,1335,1337,1339,1341,1343],{"class":375,"line":418},[373,1311,1040],{"class":379},[373,1313,384],{"class":383},[373,1315,1045],{"class":379},[373,1317,384],{"class":383},[373,1319,388],{"class":387},[373,1321,391],{"class":421},[373,1323,394],{"class":383},[373,1325,1113],{"class":397},[373,1327,394],{"class":383},[373,1329,402],{"class":383},[373,1331,1063],{"class":383},[373,1333,1334],{"class":408}," config",[373,1336,402],{"class":383},[373,1338,1071],{"class":408},[373,1340,1074],{"class":383},[373,1342,477],{"class":476},[373,1344,415],{"class":383},[373,1346,1347,1350,1352,1355,1358,1360,1363,1365,1368,1371],{"class":375,"line":434},[373,1348,1349],{"class":512},"    if",[373,1351,405],{"class":421},[373,1353,1354],{"class":383},"!",[373,1356,1357],{"class":379},"event",[373,1359,384],{"class":383},[373,1361,1362],{"class":379},"context",[373,1364,384],{"class":383},[373,1366,1367],{"class":379},"user",[373,1369,1370],{"class":421},") ",[373,1372,524],{"class":383},[373,1374,1375,1378,1380,1382,1385,1387,1389,1391,1393,1396],{"class":375,"line":446},[373,1376,1377],{"class":379},"      config",[373,1379,384],{"class":383},[373,1381,584],{"class":379},[373,1383,1384],{"class":383}," =",[373,1386,1334],{"class":379},[373,1388,384],{"class":383},[373,1390,584],{"class":379},[373,1392,384],{"class":383},[373,1394,1395],{"class":387},"filter",[373,1397,1398],{"class":421},"(\n",[373,1400,1401,1404,1406,1409,1412,1414,1417,1420,1423,1425,1427,1430,1432,1434],{"class":375,"line":458},[373,1402,1403],{"class":408},"        tool",[373,1405,477],{"class":476},[373,1407,1408],{"class":383}," !",[373,1410,1411],{"class":379},"tool",[373,1413,384],{"class":383},[373,1415,1416],{"class":379},"tags",[373,1418,1419],{"class":383},"?.",[373,1421,1422],{"class":387},"includes",[373,1424,391],{"class":421},[373,1426,394],{"class":383},[373,1428,1429],{"class":397},"admin",[373,1431,394],{"class":383},[373,1433,572],{"class":421},[373,1435,547],{"class":383},[373,1437,1438],{"class":375,"line":470},[373,1439,1440],{"class":421},"      )\n",[373,1442,1443],{"class":375,"line":482},[373,1444,1445],{"class":383},"    }\n",[373,1447,1448,1450],{"class":375,"line":489},[373,1449,1088],{"class":383},[373,1451,495],{"class":421},[373,1453,1454,1456],{"class":375,"line":674},[373,1455,492],{"class":383},[373,1457,495],{"class":379},[359,1459,1461],{"id":1460},"example-rebrand-the-server-per-request","Example: rebrand the server per request",[364,1463,1466],{"className":366,"code":1464,"filename":1465,"language":368,"meta":369,"style":369},"export default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('mcp:config:resolved', ({ config, event }) => {\n    const tenant = event.context.tenant?.name\n    if (tenant) {\n      config.name = `${tenant} MCP`\n      config.instructions = `You are connected to ${tenant}'s MCP server.`\n    }\n  })\n})\n","server\u002Fplugins\u002Fmcp-rebrand.ts",[304,1467,1468,1488,1524,1550,1562,1586,1615,1619,1625],{"__ignoreMap":369},[373,1469,1470,1472,1474,1476,1478,1480,1482,1484,1486],{"class":375,"line":376},[373,1471,513],{"class":512},[373,1473,516],{"class":512},[373,1475,1022],{"class":387},[373,1477,391],{"class":379},[373,1479,391],{"class":383},[373,1481,1029],{"class":408},[373,1483,572],{"class":383},[373,1485,477],{"class":476},[373,1487,415],{"class":383},[373,1489,1490,1492,1494,1496,1498,1500,1502,1504,1506,1508,1510,1512,1514,1516,1518,1520,1522],{"class":375,"line":418},[373,1491,1040],{"class":379},[373,1493,384],{"class":383},[373,1495,1045],{"class":379},[373,1497,384],{"class":383},[373,1499,388],{"class":387},[373,1501,391],{"class":421},[373,1503,394],{"class":383},[373,1505,1113],{"class":397},[373,1507,394],{"class":383},[373,1509,402],{"class":383},[373,1511,1063],{"class":383},[373,1513,1334],{"class":408},[373,1515,402],{"class":383},[373,1517,1071],{"class":408},[373,1519,1074],{"class":383},[373,1521,477],{"class":476},[373,1523,415],{"class":383},[373,1525,1526,1529,1532,1534,1536,1538,1540,1542,1545,1547],{"class":375,"line":434},[373,1527,1528],{"class":476},"    const",[373,1530,1531],{"class":379}," tenant",[373,1533,1384],{"class":383},[373,1535,1071],{"class":379},[373,1537,384],{"class":383},[373,1539,1362],{"class":379},[373,1541,384],{"class":383},[373,1543,1544],{"class":379},"tenant",[373,1546,1419],{"class":383},[373,1548,1549],{"class":379},"name\n",[373,1551,1552,1554,1556,1558,1560],{"class":375,"line":446},[373,1553,1349],{"class":512},[373,1555,405],{"class":421},[373,1557,1544],{"class":379},[373,1559,1370],{"class":421},[373,1561,524],{"class":383},[373,1563,1564,1566,1568,1571,1573,1576,1578,1580,1583],{"class":375,"line":458},[373,1565,1377],{"class":379},[373,1567,384],{"class":383},[373,1569,1570],{"class":379},"name",[373,1572,1384],{"class":383},[373,1574,1575],{"class":383}," `${",[373,1577,1544],{"class":379},[373,1579,492],{"class":383},[373,1581,1582],{"class":397}," MCP",[373,1584,1585],{"class":383},"`\n",[373,1587,1588,1590,1592,1595,1597,1600,1603,1606,1608,1610,1613],{"class":375,"line":470},[373,1589,1377],{"class":379},[373,1591,384],{"class":383},[373,1593,1594],{"class":379},"instructions",[373,1596,1384],{"class":383},[373,1598,1599],{"class":383}," `",[373,1601,1602],{"class":397},"You are connected to ",[373,1604,1605],{"class":383},"${",[373,1607,1544],{"class":379},[373,1609,492],{"class":383},[373,1611,1612],{"class":397},"'s MCP server.",[373,1614,1585],{"class":383},[373,1616,1617],{"class":375,"line":482},[373,1618,1445],{"class":383},[373,1620,1621,1623],{"class":375,"line":489},[373,1622,1088],{"class":383},[373,1624,495],{"class":421},[373,1626,1627,1629],{"class":375,"line":674},[373,1628,492],{"class":383},[373,1630,495],{"class":379},[349,1632,1634],{"id":1633},"mcpservercreated",[304,1635,1056],{},[289,1637,1638,1639,1642,1643,1645,1646,332],{},"Fired after ",[304,1640,1641],{},"createMcpServer"," has registered every tool \u002F resource \u002F prompt and ",[299,1644,1130],{}," the server is connected to the transport. Receives the SDK ",[337,1647,1650],{"href":1648,"rel":1649},"https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Ftypescript-sdk\u002Fblob\u002Fmain\u002Fsrc\u002Fserver\u002Fmcp.ts",[341],[304,1651,331],{},[289,1653,1654,1655,1662,1663,1666],{},"Use it to register definitions late or reach the underlying low-level ",[337,1656,1659],{"href":1657,"rel":1658},"https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Ftypescript-sdk\u002Fblob\u002Fmain\u002Fsrc\u002Fserver\u002Findex.ts",[341],[304,1660,1661],{},"Server"," via ",[304,1664,1665],{},"getSdkServer(ctx.server)"," to install custom JSON-RPC handlers.",[359,1668,1146],{"id":1669},"hook-signature-2",[364,1671,1673],{"className":366,"code":1672,"language":368,"meta":369,"style":369},"import type { McpServer } from '@modelcontextprotocol\u002Fsdk\u002Fserver\u002Fmcp.js'\nimport type { H3Event } from 'h3'\n\nnitroApp.hooks.hook('mcp:server:created', (ctx: {\n  server: McpServer\n  event: H3Event\n}) => {\n  \u002F\u002F Reach into the SDK\n})\n",[304,1674,1675,1697,1717,1721,1751,1761,1769,1777,1782],{"__ignoreMap":369},[373,1676,1677,1679,1681,1683,1686,1688,1690,1692,1695],{"class":375,"line":376},[373,1678,1156],{"class":512},[373,1680,1159],{"class":512},[373,1682,1162],{"class":383},[373,1684,1685],{"class":379}," McpServer",[373,1687,1168],{"class":383},[373,1689,1171],{"class":512},[373,1691,1174],{"class":383},[373,1693,1694],{"class":397},"@modelcontextprotocol\u002Fsdk\u002Fserver\u002Fmcp.js",[373,1696,1180],{"class":383},[373,1698,1699,1701,1703,1705,1707,1709,1711,1713,1715],{"class":375,"line":418},[373,1700,1156],{"class":512},[373,1702,1159],{"class":512},[373,1704,1162],{"class":383},[373,1706,1191],{"class":379},[373,1708,1168],{"class":383},[373,1710,1171],{"class":512},[373,1712,1174],{"class":383},[373,1714,349],{"class":397},[373,1716,1180],{"class":383},[373,1718,1719],{"class":375,"line":434},[373,1720,1207],{"emptyLinePlaceholder":1206},[373,1722,1723,1725,1727,1729,1731,1733,1735,1737,1739,1741,1743,1745,1747,1749],{"class":375,"line":446},[373,1724,1029],{"class":379},[373,1726,384],{"class":383},[373,1728,1045],{"class":379},[373,1730,384],{"class":383},[373,1732,388],{"class":387},[373,1734,391],{"class":379},[373,1736,394],{"class":383},[373,1738,1056],{"class":397},[373,1740,394],{"class":383},[373,1742,402],{"class":383},[373,1744,405],{"class":383},[373,1746,1234],{"class":408},[373,1748,412],{"class":383},[373,1750,415],{"class":383},[373,1752,1753,1756,1758],{"class":375,"line":458},[373,1754,1755],{"class":421},"  server",[373,1757,412],{"class":383},[373,1759,1760],{"class":427}," McpServer\n",[373,1762,1763,1765,1767],{"class":375,"line":470},[373,1764,1253],{"class":421},[373,1766,412],{"class":383},[373,1768,1258],{"class":427},[373,1770,1771,1773,1775],{"class":375,"line":482},[373,1772,473],{"class":383},[373,1774,477],{"class":476},[373,1776,415],{"class":383},[373,1778,1779],{"class":375,"line":489},[373,1780,1781],{"class":485},"  \u002F\u002F Reach into the SDK\n",[373,1783,1784,1786],{"class":375,"line":674},[373,1785,492],{"class":383},[373,1787,495],{"class":379},[359,1789,1791],{"id":1790},"example-register-a-tool-dynamically","Example: register a tool dynamically",[364,1793,1796],{"className":366,"code":1794,"filename":1795,"language":368,"meta":369,"style":369},"export default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('mcp:server:created', ({ server, event }) => {\n    server.registerTool(\n      'whoami',\n      { description: 'Return the current user id' },\n      async () => ({\n        content: [{\n          type: 'text',\n          text: String(event.context.userId ?? 'anonymous'),\n        }],\n      }),\n    )\n  })\n})\n","server\u002Fplugins\u002Fmcp-whoami.ts",[304,1797,1798,1818,1854,1866,1878,1898,1912,1923,1938,1975,1984,1993,1998,2005],{"__ignoreMap":369},[373,1799,1800,1802,1804,1806,1808,1810,1812,1814,1816],{"class":375,"line":376},[373,1801,513],{"class":512},[373,1803,516],{"class":512},[373,1805,1022],{"class":387},[373,1807,391],{"class":379},[373,1809,391],{"class":383},[373,1811,1029],{"class":408},[373,1813,572],{"class":383},[373,1815,477],{"class":476},[373,1817,415],{"class":383},[373,1819,1820,1822,1824,1826,1828,1830,1832,1834,1836,1838,1840,1842,1844,1846,1848,1850,1852],{"class":375,"line":418},[373,1821,1040],{"class":379},[373,1823,384],{"class":383},[373,1825,1045],{"class":379},[373,1827,384],{"class":383},[373,1829,388],{"class":387},[373,1831,391],{"class":421},[373,1833,394],{"class":383},[373,1835,1056],{"class":397},[373,1837,394],{"class":383},[373,1839,402],{"class":383},[373,1841,1063],{"class":383},[373,1843,1066],{"class":408},[373,1845,402],{"class":383},[373,1847,1071],{"class":408},[373,1849,1074],{"class":383},[373,1851,477],{"class":476},[373,1853,415],{"class":383},[373,1855,1856,1859,1861,1864],{"class":375,"line":434},[373,1857,1858],{"class":379},"    server",[373,1860,384],{"class":383},[373,1862,1863],{"class":387},"registerTool",[373,1865,1398],{"class":421},[373,1867,1868,1871,1874,1876],{"class":375,"line":446},[373,1869,1870],{"class":383},"      '",[373,1872,1873],{"class":397},"whoami",[373,1875,394],{"class":383},[373,1877,547],{"class":383},[373,1879,1880,1883,1886,1888,1890,1893,1895],{"class":375,"line":458},[373,1881,1882],{"class":383},"      {",[373,1884,1885],{"class":421}," description",[373,1887,412],{"class":383},[373,1889,1174],{"class":383},[373,1891,1892],{"class":397},"Return the current user id",[373,1894,394],{"class":383},[373,1896,1897],{"class":383}," },\n",[373,1899,1900,1903,1906,1908,1910],{"class":375,"line":470},[373,1901,1902],{"class":476},"      async",[373,1904,1905],{"class":383}," ()",[373,1907,477],{"class":476},[373,1909,405],{"class":421},[373,1911,524],{"class":383},[373,1913,1914,1917,1919,1921],{"class":375,"line":482},[373,1915,1916],{"class":421},"        content",[373,1918,412],{"class":383},[373,1920,534],{"class":421},[373,1922,524],{"class":383},[373,1924,1925,1928,1930,1932,1934,1936],{"class":375,"line":489},[373,1926,1927],{"class":421},"          type",[373,1929,412],{"class":383},[373,1931,1174],{"class":383},[373,1933,1105],{"class":397},[373,1935,394],{"class":383},[373,1937,547],{"class":383},[373,1939,1940,1943,1945,1948,1950,1952,1954,1956,1958,1961,1964,1966,1969,1971,1973],{"class":375,"line":674},[373,1941,1942],{"class":421},"          text",[373,1944,412],{"class":383},[373,1946,1947],{"class":387}," String",[373,1949,391],{"class":421},[373,1951,1357],{"class":379},[373,1953,384],{"class":383},[373,1955,1362],{"class":379},[373,1957,384],{"class":383},[373,1959,1960],{"class":379},"userId",[373,1962,1963],{"class":383}," ??",[373,1965,1174],{"class":383},[373,1967,1968],{"class":397},"anonymous",[373,1970,394],{"class":383},[373,1972,572],{"class":421},[373,1974,547],{"class":383},[373,1976,1977,1980,1982],{"class":375,"line":699},[373,1978,1979],{"class":383},"        }",[373,1981,544],{"class":421},[373,1983,547],{"class":383},[373,1985,1986,1989,1991],{"class":375,"line":705},[373,1987,1988],{"class":383},"      }",[373,1990,572],{"class":421},[373,1992,547],{"class":383},[373,1994,1995],{"class":375,"line":711},[373,1996,1997],{"class":421},"    )\n",[373,1999,2001,2003],{"class":375,"line":2000},13,[373,2002,1088],{"class":383},[373,2004,495],{"class":421},[373,2006,2008,2010],{"class":375,"line":2007},14,[373,2009,492],{"class":383},[373,2011,495],{"class":379},[359,2013,2015],{"id":2014},"example-instrument-the-low-level-sdk-server","Example: instrument the low-level SDK server",[364,2017,2020],{"className":366,"code":2018,"filename":2019,"language":368,"meta":369,"style":369},"import { getSdkServer } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('mcp:server:created', ({ server }) => {\n    const sdkServer = getSdkServer(server)\n    sdkServer.oninitialized = () => {\n      console.log('Client initialized')\n    }\n  })\n})\n","server\u002Fplugins\u002Fmcp-instrument.ts",[304,2021,2022,2041,2045,2065,2097,2115,2133,2154,2158,2164],{"__ignoreMap":369},[373,2023,2024,2026,2028,2031,2033,2035,2037,2039],{"class":375,"line":376},[373,2025,1156],{"class":512},[373,2027,1162],{"class":383},[373,2029,2030],{"class":379}," getSdkServer",[373,2032,1168],{"class":383},[373,2034,1171],{"class":512},[373,2036,1174],{"class":383},[373,2038,1177],{"class":397},[373,2040,1180],{"class":383},[373,2042,2043],{"class":375,"line":418},[373,2044,1207],{"emptyLinePlaceholder":1206},[373,2046,2047,2049,2051,2053,2055,2057,2059,2061,2063],{"class":375,"line":434},[373,2048,513],{"class":512},[373,2050,516],{"class":512},[373,2052,1022],{"class":387},[373,2054,391],{"class":379},[373,2056,391],{"class":383},[373,2058,1029],{"class":408},[373,2060,572],{"class":383},[373,2062,477],{"class":476},[373,2064,415],{"class":383},[373,2066,2067,2069,2071,2073,2075,2077,2079,2081,2083,2085,2087,2089,2091,2093,2095],{"class":375,"line":446},[373,2068,1040],{"class":379},[373,2070,384],{"class":383},[373,2072,1045],{"class":379},[373,2074,384],{"class":383},[373,2076,388],{"class":387},[373,2078,391],{"class":421},[373,2080,394],{"class":383},[373,2082,1056],{"class":397},[373,2084,394],{"class":383},[373,2086,402],{"class":383},[373,2088,1063],{"class":383},[373,2090,1066],{"class":408},[373,2092,1074],{"class":383},[373,2094,477],{"class":476},[373,2096,415],{"class":383},[373,2098,2099,2101,2104,2106,2108,2110,2113],{"class":375,"line":458},[373,2100,1528],{"class":476},[373,2102,2103],{"class":379}," sdkServer",[373,2105,1384],{"class":383},[373,2107,2030],{"class":387},[373,2109,391],{"class":421},[373,2111,2112],{"class":379},"server",[373,2114,495],{"class":421},[373,2116,2117,2120,2122,2125,2127,2129,2131],{"class":375,"line":470},[373,2118,2119],{"class":379},"    sdkServer",[373,2121,384],{"class":383},[373,2123,2124],{"class":387},"oninitialized",[373,2126,1384],{"class":383},[373,2128,1905],{"class":383},[373,2130,477],{"class":476},[373,2132,415],{"class":383},[373,2134,2135,2138,2140,2143,2145,2147,2150,2152],{"class":375,"line":482},[373,2136,2137],{"class":379},"      console",[373,2139,384],{"class":383},[373,2141,2142],{"class":387},"log",[373,2144,391],{"class":421},[373,2146,394],{"class":383},[373,2148,2149],{"class":397},"Client initialized",[373,2151,394],{"class":383},[373,2153,495],{"class":421},[373,2155,2156],{"class":375,"line":489},[373,2157,1445],{"class":383},[373,2159,2160,2162],{"class":375,"line":674},[373,2161,1088],{"class":383},[373,2163,495],{"class":421},[373,2165,2166,2168],{"class":375,"line":699},[373,2167,492],{"class":383},[373,2169,495],{"class":379},[2171,2172,2173,2174,2177],"tip",{},"Need request- or session-scoped state? Pull it from ",[304,2175,2176],{},"event.context"," inside the hook — middleware (and any auth layer that runs before the MCP handler) has already populated it.",[345,2179,2181],{"id":2180},"error-handling","Error handling",[289,2183,2184,2185,2188],{},"Listeners that throw are caught and reported via consola (tag ",[304,2186,2187],{},"mcp-toolkit","):",[364,2190,2193],{"className":2191,"code":2192,"language":1105},[1103],"[error] [mcp-toolkit] Hook \"mcp:server:created\" threw — request continues\n",[304,2194,2192],{"__ignoreMap":369},[289,2196,2197,2198,2203,2204,2207],{},"The MCP request always proceeds. If you need an error to surface to the client, throw inside the corresponding tool \u002F resource \u002F prompt handler instead — the toolkit converts thrown errors (including ",[337,2199,2202],{"href":2200,"rel":2201},"https:\u002F\u002Fh3.unjs.io\u002Futils\u002Fresponse#createerror",[341],"H3 errors",") into MCP-compliant ",[304,2205,2206],{},"isError"," results.",[345,2209,2211],{"id":2210},"next-steps","Next Steps",[293,2213,2214,2223,2231,2236],{},[296,2215,2216,2218,2219,2222],{},[337,2217,215],{"href":216}," - Run code per MCP request, including ",[304,2220,2221],{},"next()"," interception.",[296,2224,2225,2227,2228,384],{},[337,2226,239],{"href":240}," - Pick tools \u002F resources \u002F prompts dynamically from ",[304,2229,2230],{},"defineMcpHandler",[296,2232,2233,2235],{},[337,2234,195],{"href":196}," - Customize where definitions are scanned from.",[296,2237,2238,2240],{},[337,2239,123],{"href":128}," - Create multiple MCP endpoints.",[2242,2243,2244],"style",{},"html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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 .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 .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}",{"title":369,"searchDepth":418,"depth":418,"links":2246},[2247,2250,2254,2255],{"id":347,"depth":418,"text":301,"children":2248},[2249],{"id":351,"depth":434,"text":354},{"id":991,"depth":418,"text":320,"children":2251},[2252,2253],{"id":1110,"depth":434,"text":1113},{"id":1633,"depth":434,"text":1056},{"id":2180,"depth":418,"text":2181},{"id":2210,"depth":418,"text":2211},"Use Nuxt and Nitro hooks to extend and customize the MCP module.","md",null,{},{"title":224,"icon":227},{"title":2262,"description":2263},"Extend the toolkit with Nuxt and Nitro hooks","Use build-time Nuxt hooks and runtime Nitro hooks to scan additional directories, mutate the resolved server config per request, and reach the underlying MCP SDK server.","jecPJp_wcokzycLMF4Zi1bwoVCL092crHUmEtBRhvh8",[2266,2268],{"title":219,"path":220,"stem":221,"description":2267,"icon":222,"children":-1},"Type safety and TypeScript features in the Nuxt MCP module.",{"title":229,"path":230,"stem":231,"description":2269,"icon":232,"children":-1},"Evaluate MCP tools and workflows with Evalite and the AI SDK MCP client.",1787148246469]