[{"data":1,"prerenderedAt":2266},["ShallowReactive",2],{"navigation_docs":3,"-advanced-hooks":282,"-advanced-hooks-surround":2261},[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":2252,"extension":2253,"links":2254,"meta":2255,"navigation":2256,"path":225,"seo":2257,"stem":226,"__hash__":2260},"docs\u002F7.advanced\u002F4.hooks.md","Extend the module with hooks",{"type":286,"value":287,"toc":2241},"minimark",[288,292,333,344,348,355,358,363,496,503,716,720,873,877,947,954,989,992,1008,1097,1100,1108,1114,1139,1143,1274,1278,1454,1458,1627,1632,1648,1663,1666,1784,1788,2008,2012,2166,2174,2178,2185,2191,2204,2208,2237],[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   ▼\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,1134,1135,1138],{},"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 per-request ",[304,1133,331],{}," is built. Mutate ",[304,1136,1137],{},"ctx.config"," in place to add, remove or transform definitions for this request only.",[359,1140,1142],{"id":1141},"hook-signature-1","Hook signature",[364,1144,1146],{"className":366,"code":1145,"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,1147,1148,1177,1198,1204,1235,1245,1255,1263,1268],{"__ignoreMap":369},[373,1149,1150,1153,1156,1159,1162,1165,1168,1171,1174],{"class":375,"line":376},[373,1151,1152],{"class":512},"import",[373,1154,1155],{"class":512}," type",[373,1157,1158],{"class":383}," {",[373,1160,1161],{"class":379}," McpResolvedConfig",[373,1163,1164],{"class":383}," }",[373,1166,1167],{"class":512}," from",[373,1169,1170],{"class":383}," '",[373,1172,1173],{"class":397},"@nuxtjs\u002Fmcp-toolkit\u002Fserver",[373,1175,1176],{"class":383},"'\n",[373,1178,1179,1181,1183,1185,1188,1190,1192,1194,1196],{"class":375,"line":418},[373,1180,1152],{"class":512},[373,1182,1155],{"class":512},[373,1184,1158],{"class":383},[373,1186,1187],{"class":379}," H3Event",[373,1189,1164],{"class":383},[373,1191,1167],{"class":512},[373,1193,1170],{"class":383},[373,1195,349],{"class":397},[373,1197,1176],{"class":383},[373,1199,1200],{"class":375,"line":434},[373,1201,1203],{"emptyLinePlaceholder":1202},true,"\n",[373,1205,1206,1208,1210,1212,1214,1216,1218,1220,1222,1224,1226,1228,1231,1233],{"class":375,"line":446},[373,1207,1029],{"class":379},[373,1209,384],{"class":383},[373,1211,1045],{"class":379},[373,1213,384],{"class":383},[373,1215,388],{"class":387},[373,1217,391],{"class":379},[373,1219,394],{"class":383},[373,1221,1113],{"class":397},[373,1223,394],{"class":383},[373,1225,402],{"class":383},[373,1227,405],{"class":383},[373,1229,1230],{"class":408},"ctx",[373,1232,412],{"class":383},[373,1234,415],{"class":383},[373,1236,1237,1240,1242],{"class":375,"line":458},[373,1238,1239],{"class":421},"  config",[373,1241,412],{"class":383},[373,1243,1244],{"class":427}," McpResolvedConfig\n",[373,1246,1247,1250,1252],{"class":375,"line":470},[373,1248,1249],{"class":421},"  event",[373,1251,412],{"class":383},[373,1253,1254],{"class":427}," H3Event\n",[373,1256,1257,1259,1261],{"class":375,"line":482},[373,1258,473],{"class":383},[373,1260,477],{"class":476},[373,1262,415],{"class":383},[373,1264,1265],{"class":375,"line":489},[373,1266,1267],{"class":485},"  \u002F\u002F Mutate ctx.config in place\n",[373,1269,1270,1272],{"class":375,"line":674},[373,1271,492],{"class":383},[373,1273,495],{"class":379},[359,1275,1277],{"id":1276},"example-hide-admin-tools-from-anonymous-clients","Example: hide admin tools from anonymous clients",[364,1279,1282],{"className":366,"code":1280,"filename":1281,"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,1283,1284,1304,1341,1369,1395,1432,1437,1442,1448],{"__ignoreMap":369},[373,1285,1286,1288,1290,1292,1294,1296,1298,1300,1302],{"class":375,"line":376},[373,1287,513],{"class":512},[373,1289,516],{"class":512},[373,1291,1022],{"class":387},[373,1293,391],{"class":379},[373,1295,391],{"class":383},[373,1297,1029],{"class":408},[373,1299,572],{"class":383},[373,1301,477],{"class":476},[373,1303,415],{"class":383},[373,1305,1306,1308,1310,1312,1314,1316,1318,1320,1322,1324,1326,1328,1331,1333,1335,1337,1339],{"class":375,"line":418},[373,1307,1040],{"class":379},[373,1309,384],{"class":383},[373,1311,1045],{"class":379},[373,1313,384],{"class":383},[373,1315,388],{"class":387},[373,1317,391],{"class":421},[373,1319,394],{"class":383},[373,1321,1113],{"class":397},[373,1323,394],{"class":383},[373,1325,402],{"class":383},[373,1327,1063],{"class":383},[373,1329,1330],{"class":408}," config",[373,1332,402],{"class":383},[373,1334,1071],{"class":408},[373,1336,1074],{"class":383},[373,1338,477],{"class":476},[373,1340,415],{"class":383},[373,1342,1343,1346,1348,1351,1354,1356,1359,1361,1364,1367],{"class":375,"line":434},[373,1344,1345],{"class":512},"    if",[373,1347,405],{"class":421},[373,1349,1350],{"class":383},"!",[373,1352,1353],{"class":379},"event",[373,1355,384],{"class":383},[373,1357,1358],{"class":379},"context",[373,1360,384],{"class":383},[373,1362,1363],{"class":379},"user",[373,1365,1366],{"class":421},") ",[373,1368,524],{"class":383},[373,1370,1371,1374,1376,1378,1381,1383,1385,1387,1389,1392],{"class":375,"line":446},[373,1372,1373],{"class":379},"      config",[373,1375,384],{"class":383},[373,1377,584],{"class":379},[373,1379,1380],{"class":383}," =",[373,1382,1330],{"class":379},[373,1384,384],{"class":383},[373,1386,584],{"class":379},[373,1388,384],{"class":383},[373,1390,1391],{"class":387},"filter",[373,1393,1394],{"class":421},"(\n",[373,1396,1397,1400,1402,1405,1408,1410,1413,1416,1419,1421,1423,1426,1428,1430],{"class":375,"line":458},[373,1398,1399],{"class":408},"        tool",[373,1401,477],{"class":476},[373,1403,1404],{"class":383}," !",[373,1406,1407],{"class":379},"tool",[373,1409,384],{"class":383},[373,1411,1412],{"class":379},"tags",[373,1414,1415],{"class":383},"?.",[373,1417,1418],{"class":387},"includes",[373,1420,391],{"class":421},[373,1422,394],{"class":383},[373,1424,1425],{"class":397},"admin",[373,1427,394],{"class":383},[373,1429,572],{"class":421},[373,1431,547],{"class":383},[373,1433,1434],{"class":375,"line":470},[373,1435,1436],{"class":421},"      )\n",[373,1438,1439],{"class":375,"line":482},[373,1440,1441],{"class":383},"    }\n",[373,1443,1444,1446],{"class":375,"line":489},[373,1445,1088],{"class":383},[373,1447,495],{"class":421},[373,1449,1450,1452],{"class":375,"line":674},[373,1451,492],{"class":383},[373,1453,495],{"class":379},[359,1455,1457],{"id":1456},"example-rebrand-the-server-per-request","Example: rebrand the server per request",[364,1459,1462],{"className":366,"code":1460,"filename":1461,"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,1463,1464,1484,1520,1546,1558,1582,1611,1615,1621],{"__ignoreMap":369},[373,1465,1466,1468,1470,1472,1474,1476,1478,1480,1482],{"class":375,"line":376},[373,1467,513],{"class":512},[373,1469,516],{"class":512},[373,1471,1022],{"class":387},[373,1473,391],{"class":379},[373,1475,391],{"class":383},[373,1477,1029],{"class":408},[373,1479,572],{"class":383},[373,1481,477],{"class":476},[373,1483,415],{"class":383},[373,1485,1486,1488,1490,1492,1494,1496,1498,1500,1502,1504,1506,1508,1510,1512,1514,1516,1518],{"class":375,"line":418},[373,1487,1040],{"class":379},[373,1489,384],{"class":383},[373,1491,1045],{"class":379},[373,1493,384],{"class":383},[373,1495,388],{"class":387},[373,1497,391],{"class":421},[373,1499,394],{"class":383},[373,1501,1113],{"class":397},[373,1503,394],{"class":383},[373,1505,402],{"class":383},[373,1507,1063],{"class":383},[373,1509,1330],{"class":408},[373,1511,402],{"class":383},[373,1513,1071],{"class":408},[373,1515,1074],{"class":383},[373,1517,477],{"class":476},[373,1519,415],{"class":383},[373,1521,1522,1525,1528,1530,1532,1534,1536,1538,1541,1543],{"class":375,"line":434},[373,1523,1524],{"class":476},"    const",[373,1526,1527],{"class":379}," tenant",[373,1529,1380],{"class":383},[373,1531,1071],{"class":379},[373,1533,384],{"class":383},[373,1535,1358],{"class":379},[373,1537,384],{"class":383},[373,1539,1540],{"class":379},"tenant",[373,1542,1415],{"class":383},[373,1544,1545],{"class":379},"name\n",[373,1547,1548,1550,1552,1554,1556],{"class":375,"line":446},[373,1549,1345],{"class":512},[373,1551,405],{"class":421},[373,1553,1540],{"class":379},[373,1555,1366],{"class":421},[373,1557,524],{"class":383},[373,1559,1560,1562,1564,1567,1569,1572,1574,1576,1579],{"class":375,"line":458},[373,1561,1373],{"class":379},[373,1563,384],{"class":383},[373,1565,1566],{"class":379},"name",[373,1568,1380],{"class":383},[373,1570,1571],{"class":383}," `${",[373,1573,1540],{"class":379},[373,1575,492],{"class":383},[373,1577,1578],{"class":397}," MCP",[373,1580,1581],{"class":383},"`\n",[373,1583,1584,1586,1588,1591,1593,1596,1599,1602,1604,1606,1609],{"class":375,"line":470},[373,1585,1373],{"class":379},[373,1587,384],{"class":383},[373,1589,1590],{"class":379},"instructions",[373,1592,1380],{"class":383},[373,1594,1595],{"class":383}," `",[373,1597,1598],{"class":397},"You are connected to ",[373,1600,1601],{"class":383},"${",[373,1603,1540],{"class":379},[373,1605,492],{"class":383},[373,1607,1608],{"class":397},"'s MCP server.",[373,1610,1581],{"class":383},[373,1612,1613],{"class":375,"line":482},[373,1614,1441],{"class":383},[373,1616,1617,1619],{"class":375,"line":489},[373,1618,1088],{"class":383},[373,1620,495],{"class":421},[373,1622,1623,1625],{"class":375,"line":674},[373,1624,492],{"class":383},[373,1626,495],{"class":379},[349,1628,1630],{"id":1629},"mcpservercreated",[304,1631,1056],{},[289,1633,1634,1635,1638,1639,1641,1642,332],{},"Fired after ",[304,1636,1637],{},"createMcpServer"," has registered every tool \u002F resource \u002F prompt and ",[299,1640,1130],{}," the server is connected to the transport. Receives the SDK ",[337,1643,1646],{"href":1644,"rel":1645},"https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Ftypescript-sdk\u002Fblob\u002Fmain\u002Fsrc\u002Fserver\u002Fmcp.ts",[341],[304,1647,331],{},[289,1649,1650,1651,1658,1659,1662],{},"Use it to register definitions late or reach the underlying low-level ",[337,1652,1655],{"href":1653,"rel":1654},"https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Ftypescript-sdk\u002Fblob\u002Fmain\u002Fsrc\u002Fserver\u002Findex.ts",[341],[304,1656,1657],{},"Server"," via ",[304,1660,1661],{},"getSdkServer(ctx.server)"," to install custom JSON-RPC handlers.",[359,1664,1142],{"id":1665},"hook-signature-2",[364,1667,1669],{"className":366,"code":1668,"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,1670,1671,1693,1713,1717,1747,1757,1765,1773,1778],{"__ignoreMap":369},[373,1672,1673,1675,1677,1679,1682,1684,1686,1688,1691],{"class":375,"line":376},[373,1674,1152],{"class":512},[373,1676,1155],{"class":512},[373,1678,1158],{"class":383},[373,1680,1681],{"class":379}," McpServer",[373,1683,1164],{"class":383},[373,1685,1167],{"class":512},[373,1687,1170],{"class":383},[373,1689,1690],{"class":397},"@modelcontextprotocol\u002Fsdk\u002Fserver\u002Fmcp.js",[373,1692,1176],{"class":383},[373,1694,1695,1697,1699,1701,1703,1705,1707,1709,1711],{"class":375,"line":418},[373,1696,1152],{"class":512},[373,1698,1155],{"class":512},[373,1700,1158],{"class":383},[373,1702,1187],{"class":379},[373,1704,1164],{"class":383},[373,1706,1167],{"class":512},[373,1708,1170],{"class":383},[373,1710,349],{"class":397},[373,1712,1176],{"class":383},[373,1714,1715],{"class":375,"line":434},[373,1716,1203],{"emptyLinePlaceholder":1202},[373,1718,1719,1721,1723,1725,1727,1729,1731,1733,1735,1737,1739,1741,1743,1745],{"class":375,"line":446},[373,1720,1029],{"class":379},[373,1722,384],{"class":383},[373,1724,1045],{"class":379},[373,1726,384],{"class":383},[373,1728,388],{"class":387},[373,1730,391],{"class":379},[373,1732,394],{"class":383},[373,1734,1056],{"class":397},[373,1736,394],{"class":383},[373,1738,402],{"class":383},[373,1740,405],{"class":383},[373,1742,1230],{"class":408},[373,1744,412],{"class":383},[373,1746,415],{"class":383},[373,1748,1749,1752,1754],{"class":375,"line":458},[373,1750,1751],{"class":421},"  server",[373,1753,412],{"class":383},[373,1755,1756],{"class":427}," McpServer\n",[373,1758,1759,1761,1763],{"class":375,"line":470},[373,1760,1249],{"class":421},[373,1762,412],{"class":383},[373,1764,1254],{"class":427},[373,1766,1767,1769,1771],{"class":375,"line":482},[373,1768,473],{"class":383},[373,1770,477],{"class":476},[373,1772,415],{"class":383},[373,1774,1775],{"class":375,"line":489},[373,1776,1777],{"class":485},"  \u002F\u002F Reach into the SDK\n",[373,1779,1780,1782],{"class":375,"line":674},[373,1781,492],{"class":383},[373,1783,495],{"class":379},[359,1785,1787],{"id":1786},"example-register-a-tool-dynamically","Example: register a tool dynamically",[364,1789,1792],{"className":366,"code":1790,"filename":1791,"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,1793,1794,1814,1850,1862,1874,1894,1908,1919,1934,1971,1980,1989,1994,2001],{"__ignoreMap":369},[373,1795,1796,1798,1800,1802,1804,1806,1808,1810,1812],{"class":375,"line":376},[373,1797,513],{"class":512},[373,1799,516],{"class":512},[373,1801,1022],{"class":387},[373,1803,391],{"class":379},[373,1805,391],{"class":383},[373,1807,1029],{"class":408},[373,1809,572],{"class":383},[373,1811,477],{"class":476},[373,1813,415],{"class":383},[373,1815,1816,1818,1820,1822,1824,1826,1828,1830,1832,1834,1836,1838,1840,1842,1844,1846,1848],{"class":375,"line":418},[373,1817,1040],{"class":379},[373,1819,384],{"class":383},[373,1821,1045],{"class":379},[373,1823,384],{"class":383},[373,1825,388],{"class":387},[373,1827,391],{"class":421},[373,1829,394],{"class":383},[373,1831,1056],{"class":397},[373,1833,394],{"class":383},[373,1835,402],{"class":383},[373,1837,1063],{"class":383},[373,1839,1066],{"class":408},[373,1841,402],{"class":383},[373,1843,1071],{"class":408},[373,1845,1074],{"class":383},[373,1847,477],{"class":476},[373,1849,415],{"class":383},[373,1851,1852,1855,1857,1860],{"class":375,"line":434},[373,1853,1854],{"class":379},"    server",[373,1856,384],{"class":383},[373,1858,1859],{"class":387},"registerTool",[373,1861,1394],{"class":421},[373,1863,1864,1867,1870,1872],{"class":375,"line":446},[373,1865,1866],{"class":383},"      '",[373,1868,1869],{"class":397},"whoami",[373,1871,394],{"class":383},[373,1873,547],{"class":383},[373,1875,1876,1879,1882,1884,1886,1889,1891],{"class":375,"line":458},[373,1877,1878],{"class":383},"      {",[373,1880,1881],{"class":421}," description",[373,1883,412],{"class":383},[373,1885,1170],{"class":383},[373,1887,1888],{"class":397},"Return the current user id",[373,1890,394],{"class":383},[373,1892,1893],{"class":383}," },\n",[373,1895,1896,1899,1902,1904,1906],{"class":375,"line":470},[373,1897,1898],{"class":476},"      async",[373,1900,1901],{"class":383}," ()",[373,1903,477],{"class":476},[373,1905,405],{"class":421},[373,1907,524],{"class":383},[373,1909,1910,1913,1915,1917],{"class":375,"line":482},[373,1911,1912],{"class":421},"        content",[373,1914,412],{"class":383},[373,1916,534],{"class":421},[373,1918,524],{"class":383},[373,1920,1921,1924,1926,1928,1930,1932],{"class":375,"line":489},[373,1922,1923],{"class":421},"          type",[373,1925,412],{"class":383},[373,1927,1170],{"class":383},[373,1929,1105],{"class":397},[373,1931,394],{"class":383},[373,1933,547],{"class":383},[373,1935,1936,1939,1941,1944,1946,1948,1950,1952,1954,1957,1960,1962,1965,1967,1969],{"class":375,"line":674},[373,1937,1938],{"class":421},"          text",[373,1940,412],{"class":383},[373,1942,1943],{"class":387}," String",[373,1945,391],{"class":421},[373,1947,1353],{"class":379},[373,1949,384],{"class":383},[373,1951,1358],{"class":379},[373,1953,384],{"class":383},[373,1955,1956],{"class":379},"userId",[373,1958,1959],{"class":383}," ??",[373,1961,1170],{"class":383},[373,1963,1964],{"class":397},"anonymous",[373,1966,394],{"class":383},[373,1968,572],{"class":421},[373,1970,547],{"class":383},[373,1972,1973,1976,1978],{"class":375,"line":699},[373,1974,1975],{"class":383},"        }",[373,1977,544],{"class":421},[373,1979,547],{"class":383},[373,1981,1982,1985,1987],{"class":375,"line":705},[373,1983,1984],{"class":383},"      }",[373,1986,572],{"class":421},[373,1988,547],{"class":383},[373,1990,1991],{"class":375,"line":711},[373,1992,1993],{"class":421},"    )\n",[373,1995,1997,1999],{"class":375,"line":1996},13,[373,1998,1088],{"class":383},[373,2000,495],{"class":421},[373,2002,2004,2006],{"class":375,"line":2003},14,[373,2005,492],{"class":383},[373,2007,495],{"class":379},[359,2009,2011],{"id":2010},"example-instrument-the-low-level-sdk-server","Example: instrument the low-level SDK server",[364,2013,2016],{"className":366,"code":2014,"filename":2015,"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,2017,2018,2037,2041,2061,2093,2111,2129,2150,2154,2160],{"__ignoreMap":369},[373,2019,2020,2022,2024,2027,2029,2031,2033,2035],{"class":375,"line":376},[373,2021,1152],{"class":512},[373,2023,1158],{"class":383},[373,2025,2026],{"class":379}," getSdkServer",[373,2028,1164],{"class":383},[373,2030,1167],{"class":512},[373,2032,1170],{"class":383},[373,2034,1173],{"class":397},[373,2036,1176],{"class":383},[373,2038,2039],{"class":375,"line":418},[373,2040,1203],{"emptyLinePlaceholder":1202},[373,2042,2043,2045,2047,2049,2051,2053,2055,2057,2059],{"class":375,"line":434},[373,2044,513],{"class":512},[373,2046,516],{"class":512},[373,2048,1022],{"class":387},[373,2050,391],{"class":379},[373,2052,391],{"class":383},[373,2054,1029],{"class":408},[373,2056,572],{"class":383},[373,2058,477],{"class":476},[373,2060,415],{"class":383},[373,2062,2063,2065,2067,2069,2071,2073,2075,2077,2079,2081,2083,2085,2087,2089,2091],{"class":375,"line":446},[373,2064,1040],{"class":379},[373,2066,384],{"class":383},[373,2068,1045],{"class":379},[373,2070,384],{"class":383},[373,2072,388],{"class":387},[373,2074,391],{"class":421},[373,2076,394],{"class":383},[373,2078,1056],{"class":397},[373,2080,394],{"class":383},[373,2082,402],{"class":383},[373,2084,1063],{"class":383},[373,2086,1066],{"class":408},[373,2088,1074],{"class":383},[373,2090,477],{"class":476},[373,2092,415],{"class":383},[373,2094,2095,2097,2100,2102,2104,2106,2109],{"class":375,"line":458},[373,2096,1524],{"class":476},[373,2098,2099],{"class":379}," sdkServer",[373,2101,1380],{"class":383},[373,2103,2026],{"class":387},[373,2105,391],{"class":421},[373,2107,2108],{"class":379},"server",[373,2110,495],{"class":421},[373,2112,2113,2116,2118,2121,2123,2125,2127],{"class":375,"line":470},[373,2114,2115],{"class":379},"    sdkServer",[373,2117,384],{"class":383},[373,2119,2120],{"class":387},"oninitialized",[373,2122,1380],{"class":383},[373,2124,1901],{"class":383},[373,2126,477],{"class":476},[373,2128,415],{"class":383},[373,2130,2131,2134,2136,2139,2141,2143,2146,2148],{"class":375,"line":482},[373,2132,2133],{"class":379},"      console",[373,2135,384],{"class":383},[373,2137,2138],{"class":387},"log",[373,2140,391],{"class":421},[373,2142,394],{"class":383},[373,2144,2145],{"class":397},"Client initialized",[373,2147,394],{"class":383},[373,2149,495],{"class":421},[373,2151,2152],{"class":375,"line":489},[373,2153,1441],{"class":383},[373,2155,2156,2158],{"class":375,"line":674},[373,2157,1088],{"class":383},[373,2159,495],{"class":421},[373,2161,2162,2164],{"class":375,"line":699},[373,2163,492],{"class":383},[373,2165,495],{"class":379},[2167,2168,2169,2170,2173],"tip",{},"Need request- or session-scoped state? Pull it from ",[304,2171,2172],{},"event.context"," inside the hook — middleware (and any auth layer that runs before the MCP handler) has already populated it.",[345,2175,2177],{"id":2176},"error-handling","Error handling",[289,2179,2180,2181,2184],{},"Listeners that throw are caught and reported via consola (tag ",[304,2182,2183],{},"mcp-toolkit","):",[364,2186,2189],{"className":2187,"code":2188,"language":1105},[1103],"[error] [mcp-toolkit] Hook \"mcp:server:created\" threw — request continues\n",[304,2190,2188],{"__ignoreMap":369},[289,2192,2193,2194,2199,2200,2203],{},"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,2195,2198],{"href":2196,"rel":2197},"https:\u002F\u002Fh3.unjs.io\u002Futils\u002Fresponse#createerror",[341],"H3 errors",") into MCP-compliant ",[304,2201,2202],{},"isError"," results.",[345,2205,2207],{"id":2206},"next-steps","Next Steps",[293,2209,2210,2219,2227,2232],{},[296,2211,2212,2214,2215,2218],{},[337,2213,215],{"href":216}," - Run code per MCP request, including ",[304,2216,2217],{},"next()"," interception.",[296,2220,2221,2223,2224,384],{},[337,2222,239],{"href":240}," - Pick tools \u002F resources \u002F prompts dynamically from ",[304,2225,2226],{},"defineMcpHandler",[296,2228,2229,2231],{},[337,2230,195],{"href":196}," - Customize where definitions are scanned from.",[296,2233,2234,2236],{},[337,2235,123],{"href":128}," - Create multiple MCP endpoints.",[2238,2239,2240],"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":2242},[2243,2246,2250,2251],{"id":347,"depth":418,"text":301,"children":2244},[2245],{"id":351,"depth":434,"text":354},{"id":991,"depth":418,"text":320,"children":2247},[2248,2249],{"id":1110,"depth":434,"text":1113},{"id":1629,"depth":434,"text":1056},{"id":2176,"depth":418,"text":2177},{"id":2206,"depth":418,"text":2207},"Use Nuxt and Nitro hooks to extend and customize the MCP module.","md",null,{},{"title":224,"icon":227},{"title":2258,"description":2259},"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.","HdTQokzaLq_7xUYR_qL9xCPtoo08hZzDVCgsB62H1Ro",[2262,2264],{"title":219,"path":220,"stem":221,"description":2263,"icon":222,"children":-1},"Type safety and TypeScript features in the Nuxt MCP module.",{"title":229,"path":230,"stem":231,"description":2265,"icon":232,"children":-1},"Evaluate MCP tools and workflows with Evalite and the AI SDK MCP client.",1778486584474]