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