[{"data":1,"prerenderedAt":3098},["ShallowReactive",2],{"navigation_docs":3,"-advanced-middleware":139,"-advanced-middleware-surround":3093},[4,40,65,110],{"title":5,"path":6,"stem":7,"children":8,"page":39},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24,29,34],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-book-open",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Configuration","\u002Fgetting-started\u002Fconfiguration","1.getting-started\u002F3.configuration","i-lucide-settings",{"title":25,"path":26,"stem":27,"icon":28},"MCP Inspector","\u002Fgetting-started\u002Finspector","1.getting-started\u002F4.inspector","i-lucide-circuit-board",{"title":30,"path":31,"stem":32,"icon":33},"Connection","\u002Fgetting-started\u002Fconnection","1.getting-started\u002F5.connection","i-lucide-plug",{"title":35,"path":36,"stem":37,"icon":38},"Agent Skills","\u002Fgetting-started\u002Fagent-skills","1.getting-started\u002F6.agent-skills","i-lucide-sparkles",false,{"title":41,"path":42,"stem":43,"children":44,"page":39},"Core Concepts","\u002Fcore-concepts","2.core-concepts",[45,50,55,60],{"title":46,"path":47,"stem":48,"icon":49},"Tools","\u002Fcore-concepts\u002Ftools","2.core-concepts\u002F2.tools","i-lucide-wrench",{"title":51,"path":52,"stem":53,"icon":54},"Resources","\u002Fcore-concepts\u002Fresources","2.core-concepts\u002F3.resources","i-lucide-package",{"title":56,"path":57,"stem":58,"icon":59},"Prompts","\u002Fcore-concepts\u002Fprompts","2.core-concepts\u002F4.prompts","i-lucide-message-square",{"title":61,"path":62,"stem":63,"icon":64},"Handlers","\u002Fcore-concepts\u002Fhandlers","2.core-concepts\u002F5.handlers","i-lucide-server",{"title":66,"path":67,"stem":68,"children":69,"page":39},"Advanced Topics","\u002Fadvanced","3.advanced",[70,75,80,85,90,95,100,105],{"title":71,"path":72,"stem":73,"icon":74},"Custom Paths","\u002Fadvanced\u002Fcustom-paths","3.advanced\u002F1.custom-paths","i-lucide-folder",{"title":76,"path":77,"stem":78,"icon":79},"Middleware","\u002Fadvanced\u002Fmiddleware","3.advanced\u002F2.middleware","i-lucide-shield",{"title":81,"path":82,"stem":83,"icon":84},"TypeScript","\u002Fadvanced\u002Ftypescript","3.advanced\u002F3.typescript","i-lucide-type",{"title":86,"path":87,"stem":88,"icon":89},"Hooks","\u002Fadvanced\u002Fhooks","3.advanced\u002F4.hooks","i-lucide-webhook",{"title":91,"path":92,"stem":93,"icon":94},"MCP Evals","\u002Fadvanced\u002Fevals","3.advanced\u002F5.evals","i-lucide-flask-conical",{"title":96,"path":97,"stem":98,"icon":99},"Sessions","\u002Fadvanced\u002Fsessions","3.advanced\u002F6.sessions","i-lucide-database",{"title":101,"path":102,"stem":103,"icon":104},"Dynamic Definitions","\u002Fadvanced\u002Fdynamic-definitions","3.advanced\u002F7.dynamic-definitions","i-lucide-toggle-right",{"title":106,"path":107,"stem":108,"icon":109},"Code Mode","\u002Fadvanced\u002Fcode-mode","3.advanced\u002F8.code-mode","i-lucide-code",{"title":111,"path":112,"stem":113,"children":114,"page":39},"Examples","\u002Fexamples","4.examples",[115,120,125,130,135],{"title":116,"path":117,"stem":118,"icon":119},"Authentication","\u002Fexamples\u002Fauthentication","4.examples\u002F1.authentication","i-lucide-shield-check",{"title":121,"path":122,"stem":123,"icon":124},"API Integration","\u002Fexamples\u002Fapi-integration","4.examples\u002F2.api-integration","i-lucide-globe",{"title":126,"path":127,"stem":128,"icon":129},"Common Patterns","\u002Fexamples\u002Fcommon-patterns","4.examples\u002F3.common-patterns","i-lucide-lightbulb",{"title":131,"path":132,"stem":133,"icon":134},"File Operations","\u002Fexamples\u002Ffile-operations","4.examples\u002F4.file-operations","i-lucide-file",{"title":136,"path":137,"stem":138,"icon":59},"Prompt Examples","\u002Fexamples\u002Fprompt-examples","4.examples\u002F5.prompt-examples",{"id":140,"title":76,"body":141,"description":3084,"extension":3085,"links":3086,"meta":3087,"navigation":3088,"path":77,"seo":3089,"stem":78,"__hash__":3092},"docs\u002F3.advanced\u002F2.middleware.md",{"type":142,"value":143,"toc":3067},"minimark",[144,149,162,250,253,289,293,300,459,472,476,479,724,727,917,997,1003,1013,1231,1237,1297,1301,1665,1669,2029,2033,2044,2224,2226,2245,2506,2515,2519,2522,2733,2735,2738,2855,2858,2991,2995,3041,3045,3063],[145,146,148],"h2",{"id":147},"what-is-middleware","What is Middleware?",[150,151,152,153,157,158,161],"p",{},"Middleware allows you to run code ",[154,155,156],"strong",{},"before"," (and optionally ",[154,159,160],{},"after",") MCP requests are processed.",[163,164,165],"code-collapse",{},[166,167,173],"pre",{"className":168,"code":169,"filename":170,"language":171,"meta":172,"style":172},"language-txt shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","Add authentication middleware to my Nuxt MCP server (@nuxtjs\u002Fmcp-toolkit).\n\n- Create or edit server\u002Fmcp\u002Findex.ts with defineMcpHandler and a middleware function\n- In the middleware, validate the auth header (e.g. Bearer token or API key from getHeader(event, 'authorization'))\n- Set the authenticated user on event.context.user for tools to access\n- Do NOT throw 401 errors for missing auth — use a \"soft\" approach that sets context when auth succeeds\n- Access user context in tools via useEvent().context.user (requires nitro.experimental.asyncContext: true)\n- Use extractToolNames(event) to restrict specific tools to certain roles\n- Extend H3EventContext in server\u002Ftypes.ts for type-safe context\n- For post-handler logic (logging, timing), call next() explicitly and return its result\n\nDocs: https:\u002F\u002Fmcp-toolkit.nuxt.dev\u002Fadvanced\u002Fmiddleware\n","Prompt","txt","",[174,175,176,184,191,197,203,209,215,221,227,233,239,244],"code",{"__ignoreMap":172},[177,178,181],"span",{"class":179,"line":180},"line",1,[177,182,183],{},"Add authentication middleware to my Nuxt MCP server (@nuxtjs\u002Fmcp-toolkit).\n",[177,185,187],{"class":179,"line":186},2,[177,188,190],{"emptyLinePlaceholder":189},true,"\n",[177,192,194],{"class":179,"line":193},3,[177,195,196],{},"- Create or edit server\u002Fmcp\u002Findex.ts with defineMcpHandler and a middleware function\n",[177,198,200],{"class":179,"line":199},4,[177,201,202],{},"- In the middleware, validate the auth header (e.g. Bearer token or API key from getHeader(event, 'authorization'))\n",[177,204,206],{"class":179,"line":205},5,[177,207,208],{},"- Set the authenticated user on event.context.user for tools to access\n",[177,210,212],{"class":179,"line":211},6,[177,213,214],{},"- Do NOT throw 401 errors for missing auth — use a \"soft\" approach that sets context when auth succeeds\n",[177,216,218],{"class":179,"line":217},7,[177,219,220],{},"- Access user context in tools via useEvent().context.user (requires nitro.experimental.asyncContext: true)\n",[177,222,224],{"class":179,"line":223},8,[177,225,226],{},"- Use extractToolNames(event) to restrict specific tools to certain roles\n",[177,228,230],{"class":179,"line":229},9,[177,231,232],{},"- Extend H3EventContext in server\u002Ftypes.ts for type-safe context\n",[177,234,236],{"class":179,"line":235},10,[177,237,238],{},"- For post-handler logic (logging, timing), call next() explicitly and return its result\n",[177,240,242],{"class":179,"line":241},11,[177,243,190],{"emptyLinePlaceholder":189},[177,245,247],{"class":179,"line":246},12,[177,248,249],{},"Docs: https:\u002F\u002Fmcp-toolkit.nuxt.dev\u002Fadvanced\u002Fmiddleware\n",[150,251,252],{},"This is useful for:",[254,255,256,262,268,277,283],"ul",{},[257,258,259,261],"li",{},[154,260,116],{}," - Validate tokens and set user context",[257,263,264,267],{},[154,265,266],{},"Logging"," - Track request timing and analytics",[257,269,270,273,274],{},[154,271,272],{},"Context"," - Pass data to your tools via ",[174,275,276],{},"event.context",[257,278,279,282],{},[154,280,281],{},"Rate limiting"," - Control request frequency",[257,284,285,288],{},[154,286,287],{},"Error handling"," - Wrap handlers with try\u002Fcatch",[145,290,292],{"id":291},"basic-usage","Basic Usage",[150,294,295,296,299],{},"Add middleware to your handler using the ",[174,297,298],{},"middleware"," option:",[166,301,306],{"className":302,"code":303,"filename":304,"language":305,"meta":172,"style":172},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { defineMcpHandler } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpHandler({\n  middleware: async (event) => {\n    \u002F\u002F Set context that tools can access\n    event.context.userId = 'user-123'\n    event.context.startTime = Date.now()\n  },\n})\n","server\u002Fmcp\u002Findex.ts","typescript",[174,307,308,338,342,359,387,393,419,446,451],{"__ignoreMap":172},[177,309,310,314,318,322,325,328,331,335],{"class":179,"line":180},[177,311,313],{"class":312},"s7zQu","import",[177,315,317],{"class":316},"sMK4o"," {",[177,319,321],{"class":320},"sTEyZ"," defineMcpHandler",[177,323,324],{"class":316}," }",[177,326,327],{"class":312}," from",[177,329,330],{"class":316}," '",[177,332,334],{"class":333},"sfazB","@nuxtjs\u002Fmcp-toolkit\u002Fserver",[177,336,337],{"class":316},"'\n",[177,339,340],{"class":179,"line":186},[177,341,190],{"emptyLinePlaceholder":189},[177,343,344,347,350,353,356],{"class":179,"line":193},[177,345,346],{"class":312},"export",[177,348,349],{"class":312}," default",[177,351,321],{"class":352},"s2Zo4",[177,354,355],{"class":320},"(",[177,357,358],{"class":316},"{\n",[177,360,361,364,367,371,374,378,381,384],{"class":179,"line":199},[177,362,363],{"class":352},"  middleware",[177,365,366],{"class":316},":",[177,368,370],{"class":369},"spNyl"," async",[177,372,373],{"class":316}," (",[177,375,377],{"class":376},"sHdIc","event",[177,379,380],{"class":316},")",[177,382,383],{"class":369}," =>",[177,385,386],{"class":316}," {\n",[177,388,389],{"class":179,"line":205},[177,390,392],{"class":391},"sHwdD","    \u002F\u002F Set context that tools can access\n",[177,394,395,398,401,404,406,409,412,414,417],{"class":179,"line":211},[177,396,397],{"class":320},"    event",[177,399,400],{"class":316},".",[177,402,403],{"class":320},"context",[177,405,400],{"class":316},[177,407,408],{"class":320},"userId",[177,410,411],{"class":316}," =",[177,413,330],{"class":316},[177,415,416],{"class":333},"user-123",[177,418,337],{"class":316},[177,420,421,423,425,427,429,432,434,437,439,442],{"class":179,"line":217},[177,422,397],{"class":320},[177,424,400],{"class":316},[177,426,403],{"class":320},[177,428,400],{"class":316},[177,430,431],{"class":320},"startTime",[177,433,411],{"class":316},[177,435,436],{"class":320}," Date",[177,438,400],{"class":316},[177,440,441],{"class":352},"now",[177,443,445],{"class":444},"swJcz","()\n",[177,447,448],{"class":179,"line":223},[177,449,450],{"class":316},"  },\n",[177,452,453,456],{"class":179,"line":229},[177,454,455],{"class":316},"}",[177,457,458],{"class":320},")\n",[460,461,463,464,467,468,471],"callout",{"color":462,"icon":129},"primary","If you don't call ",[174,465,466],{},"next()",", the handler is called ",[154,469,470],{},"automatically"," after your middleware runs. This makes simple use cases straightforward.",[145,473,475],{"id":474},"simple-middleware","Simple Middleware",[150,477,478],{},"For most cases, you just need to set context or validate something before the handler runs:",[166,480,482],{"className":302,"code":481,"filename":304,"language":305,"meta":172,"style":172},"import { getHeader, createError } from 'h3'\nimport { defineMcpHandler } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpHandler({\n  middleware: async (event) => {\n    \u002F\u002F Validate API key\n    const apiKey = getHeader(event, 'x-api-key')\n    if (!apiKey) {\n      throw createError({ statusCode: 401, message: 'API key required' })\n    }\n\n    \u002F\u002F Set user context for tools to access\n    event.context.apiKey = apiKey\n    event.context.user = await validateApiKey(apiKey)\n  },\n})\n",[174,483,484,510,528,532,544,562,567,595,613,652,657,661,666,684,712,717],{"__ignoreMap":172},[177,485,486,488,490,493,496,499,501,503,505,508],{"class":179,"line":180},[177,487,313],{"class":312},[177,489,317],{"class":316},[177,491,492],{"class":320}," getHeader",[177,494,495],{"class":316},",",[177,497,498],{"class":320}," createError",[177,500,324],{"class":316},[177,502,327],{"class":312},[177,504,330],{"class":316},[177,506,507],{"class":333},"h3",[177,509,337],{"class":316},[177,511,512,514,516,518,520,522,524,526],{"class":179,"line":186},[177,513,313],{"class":312},[177,515,317],{"class":316},[177,517,321],{"class":320},[177,519,324],{"class":316},[177,521,327],{"class":312},[177,523,330],{"class":316},[177,525,334],{"class":333},[177,527,337],{"class":316},[177,529,530],{"class":179,"line":193},[177,531,190],{"emptyLinePlaceholder":189},[177,533,534,536,538,540,542],{"class":179,"line":199},[177,535,346],{"class":312},[177,537,349],{"class":312},[177,539,321],{"class":352},[177,541,355],{"class":320},[177,543,358],{"class":316},[177,545,546,548,550,552,554,556,558,560],{"class":179,"line":205},[177,547,363],{"class":352},[177,549,366],{"class":316},[177,551,370],{"class":369},[177,553,373],{"class":316},[177,555,377],{"class":376},[177,557,380],{"class":316},[177,559,383],{"class":369},[177,561,386],{"class":316},[177,563,564],{"class":179,"line":211},[177,565,566],{"class":391},"    \u002F\u002F Validate API key\n",[177,568,569,572,575,577,579,581,583,585,587,590,593],{"class":179,"line":217},[177,570,571],{"class":369},"    const",[177,573,574],{"class":320}," apiKey",[177,576,411],{"class":316},[177,578,492],{"class":352},[177,580,355],{"class":444},[177,582,377],{"class":320},[177,584,495],{"class":316},[177,586,330],{"class":316},[177,588,589],{"class":333},"x-api-key",[177,591,592],{"class":316},"'",[177,594,458],{"class":444},[177,596,597,600,602,605,608,611],{"class":179,"line":223},[177,598,599],{"class":312},"    if",[177,601,373],{"class":444},[177,603,604],{"class":316},"!",[177,606,607],{"class":320},"apiKey",[177,609,610],{"class":444},") ",[177,612,358],{"class":316},[177,614,615,618,620,622,625,628,630,634,636,639,641,643,646,648,650],{"class":179,"line":229},[177,616,617],{"class":312},"      throw",[177,619,498],{"class":352},[177,621,355],{"class":444},[177,623,624],{"class":316},"{",[177,626,627],{"class":444}," statusCode",[177,629,366],{"class":316},[177,631,633],{"class":632},"sbssI"," 401",[177,635,495],{"class":316},[177,637,638],{"class":444}," message",[177,640,366],{"class":316},[177,642,330],{"class":316},[177,644,645],{"class":333},"API key required",[177,647,592],{"class":316},[177,649,324],{"class":316},[177,651,458],{"class":444},[177,653,654],{"class":179,"line":235},[177,655,656],{"class":316},"    }\n",[177,658,659],{"class":179,"line":241},[177,660,190],{"emptyLinePlaceholder":189},[177,662,663],{"class":179,"line":246},[177,664,665],{"class":391},"    \u002F\u002F Set user context for tools to access\n",[177,667,669,671,673,675,677,679,681],{"class":179,"line":668},13,[177,670,397],{"class":320},[177,672,400],{"class":316},[177,674,403],{"class":320},[177,676,400],{"class":316},[177,678,607],{"class":320},[177,680,411],{"class":316},[177,682,683],{"class":320}," apiKey\n",[177,685,687,689,691,693,695,698,700,703,706,708,710],{"class":179,"line":686},14,[177,688,397],{"class":320},[177,690,400],{"class":316},[177,692,403],{"class":320},[177,694,400],{"class":316},[177,696,697],{"class":320},"user",[177,699,411],{"class":316},[177,701,702],{"class":312}," await",[177,704,705],{"class":352}," validateApiKey",[177,707,355],{"class":444},[177,709,607],{"class":320},[177,711,458],{"class":444},[177,713,715],{"class":179,"line":714},15,[177,716,450],{"class":316},[177,718,720,722],{"class":179,"line":719},16,[177,721,455],{"class":316},[177,723,458],{"class":320},[150,725,726],{},"Your tools can then access this context:",[166,728,731],{"className":302,"code":729,"filename":730,"language":305,"meta":172,"style":172},"import { useEvent } from 'h3'\nimport { defineMcpTool } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpTool({\n  name: 'my-tool',\n  description: 'A tool that uses middleware context',\n  inputSchema: {},\n  handler: async () => {\n    const event = useEvent()\n    const user = event.context.user\n    return `Hello, ${user.name}!`\n  },\n})\n","server\u002Fmcp\u002Ftools\u002Fmy-tool.ts",[174,732,733,752,771,775,787,804,820,830,846,859,879,907,911],{"__ignoreMap":172},[177,734,735,737,739,742,744,746,748,750],{"class":179,"line":180},[177,736,313],{"class":312},[177,738,317],{"class":316},[177,740,741],{"class":320}," useEvent",[177,743,324],{"class":316},[177,745,327],{"class":312},[177,747,330],{"class":316},[177,749,507],{"class":333},[177,751,337],{"class":316},[177,753,754,756,758,761,763,765,767,769],{"class":179,"line":186},[177,755,313],{"class":312},[177,757,317],{"class":316},[177,759,760],{"class":320}," defineMcpTool",[177,762,324],{"class":316},[177,764,327],{"class":312},[177,766,330],{"class":316},[177,768,334],{"class":333},[177,770,337],{"class":316},[177,772,773],{"class":179,"line":193},[177,774,190],{"emptyLinePlaceholder":189},[177,776,777,779,781,783,785],{"class":179,"line":199},[177,778,346],{"class":312},[177,780,349],{"class":312},[177,782,760],{"class":352},[177,784,355],{"class":320},[177,786,358],{"class":316},[177,788,789,792,794,796,799,801],{"class":179,"line":205},[177,790,791],{"class":444},"  name",[177,793,366],{"class":316},[177,795,330],{"class":316},[177,797,798],{"class":333},"my-tool",[177,800,592],{"class":316},[177,802,803],{"class":316},",\n",[177,805,806,809,811,813,816,818],{"class":179,"line":211},[177,807,808],{"class":444},"  description",[177,810,366],{"class":316},[177,812,330],{"class":316},[177,814,815],{"class":333},"A tool that uses middleware context",[177,817,592],{"class":316},[177,819,803],{"class":316},[177,821,822,825,827],{"class":179,"line":217},[177,823,824],{"class":444},"  inputSchema",[177,826,366],{"class":316},[177,828,829],{"class":316}," {},\n",[177,831,832,835,837,839,842,844],{"class":179,"line":223},[177,833,834],{"class":352},"  handler",[177,836,366],{"class":316},[177,838,370],{"class":369},[177,840,841],{"class":316}," ()",[177,843,383],{"class":369},[177,845,386],{"class":316},[177,847,848,850,853,855,857],{"class":179,"line":229},[177,849,571],{"class":369},[177,851,852],{"class":320}," event",[177,854,411],{"class":316},[177,856,741],{"class":352},[177,858,445],{"class":444},[177,860,861,863,866,868,870,872,874,876],{"class":179,"line":235},[177,862,571],{"class":369},[177,864,865],{"class":320}," user",[177,867,411],{"class":316},[177,869,852],{"class":320},[177,871,400],{"class":316},[177,873,403],{"class":320},[177,875,400],{"class":316},[177,877,878],{"class":320},"user\n",[177,880,881,884,887,890,893,895,897,900,902,904],{"class":179,"line":241},[177,882,883],{"class":312},"    return",[177,885,886],{"class":316}," `",[177,888,889],{"class":333},"Hello, ",[177,891,892],{"class":316},"${",[177,894,697],{"class":320},[177,896,400],{"class":316},[177,898,899],{"class":320},"name",[177,901,455],{"class":316},[177,903,604],{"class":333},[177,905,906],{"class":316},"`\n",[177,908,909],{"class":179,"line":246},[177,910,450],{"class":316},[177,912,913,915],{"class":179,"line":668},[177,914,455],{"class":316},[177,916,458],{"class":320},[460,918,921,932],{"color":919,"icon":920},"info","i-lucide-info",[150,922,923,924,927,928,931],{},"To use ",[174,925,926],{},"useEvent()"," in your tools, enable ",[174,929,930],{},"asyncContext"," in your Nuxt config:",[166,933,936],{"className":302,"code":934,"filename":935,"language":305,"meta":172,"style":172},"export default defineNuxtConfig({\n  nitro: {\n    experimental: {\n      asyncContext: true,\n    },\n  },\n})\n","nuxt.config.ts",[174,937,938,951,960,969,982,987,991],{"__ignoreMap":172},[177,939,940,942,944,947,949],{"class":179,"line":180},[177,941,346],{"class":312},[177,943,349],{"class":312},[177,945,946],{"class":352}," defineNuxtConfig",[177,948,355],{"class":320},[177,950,358],{"class":316},[177,952,953,956,958],{"class":179,"line":186},[177,954,955],{"class":444},"  nitro",[177,957,366],{"class":316},[177,959,386],{"class":316},[177,961,962,965,967],{"class":179,"line":193},[177,963,964],{"class":444},"    experimental",[177,966,366],{"class":316},[177,968,386],{"class":316},[177,970,971,974,976,980],{"class":179,"line":199},[177,972,973],{"class":444},"      asyncContext",[177,975,366],{"class":316},[177,977,979],{"class":978},"sfNiH"," true",[177,981,803],{"class":316},[177,983,984],{"class":179,"line":205},[177,985,986],{"class":316},"    },\n",[177,988,989],{"class":179,"line":211},[177,990,450],{"class":316},[177,992,993,995],{"class":179,"line":217},[177,994,455],{"class":316},[177,996,458],{"class":320},[145,998,1000,1001],{"id":999},"advanced-middleware-with-next","Advanced Middleware with ",[174,1002,466],{},[150,1004,1005,1006,1008,1009,1012],{},"For more control, call ",[174,1007,466],{}," explicitly to run code ",[154,1010,1011],{},"before and after"," the handler:",[166,1014,1016],{"className":302,"code":1015,"filename":304,"language":305,"meta":172,"style":172},"import { defineMcpHandler } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpHandler({\n  middleware: async (event, next) => {\n    const startTime = Date.now()\n    console.log('[MCP] Request started:', event.path)\n\n    \u002F\u002F Call the handler\n    const response = await next()\n\n    \u002F\u002F Code after the handler\n    const duration = Date.now() - startTime\n    console.log(`[MCP] Request completed in ${duration}ms`)\n\n    return response\n  },\n})\n",[174,1017,1018,1036,1040,1052,1075,1092,1122,1126,1131,1146,1150,1155,1179,1209,1213,1220,1224],{"__ignoreMap":172},[177,1019,1020,1022,1024,1026,1028,1030,1032,1034],{"class":179,"line":180},[177,1021,313],{"class":312},[177,1023,317],{"class":316},[177,1025,321],{"class":320},[177,1027,324],{"class":316},[177,1029,327],{"class":312},[177,1031,330],{"class":316},[177,1033,334],{"class":333},[177,1035,337],{"class":316},[177,1037,1038],{"class":179,"line":186},[177,1039,190],{"emptyLinePlaceholder":189},[177,1041,1042,1044,1046,1048,1050],{"class":179,"line":193},[177,1043,346],{"class":312},[177,1045,349],{"class":312},[177,1047,321],{"class":352},[177,1049,355],{"class":320},[177,1051,358],{"class":316},[177,1053,1054,1056,1058,1060,1062,1064,1066,1069,1071,1073],{"class":179,"line":199},[177,1055,363],{"class":352},[177,1057,366],{"class":316},[177,1059,370],{"class":369},[177,1061,373],{"class":316},[177,1063,377],{"class":376},[177,1065,495],{"class":316},[177,1067,1068],{"class":376}," next",[177,1070,380],{"class":316},[177,1072,383],{"class":369},[177,1074,386],{"class":316},[177,1076,1077,1079,1082,1084,1086,1088,1090],{"class":179,"line":205},[177,1078,571],{"class":369},[177,1080,1081],{"class":320}," startTime",[177,1083,411],{"class":316},[177,1085,436],{"class":320},[177,1087,400],{"class":316},[177,1089,441],{"class":352},[177,1091,445],{"class":444},[177,1093,1094,1097,1099,1102,1104,1106,1109,1111,1113,1115,1117,1120],{"class":179,"line":211},[177,1095,1096],{"class":320},"    console",[177,1098,400],{"class":316},[177,1100,1101],{"class":352},"log",[177,1103,355],{"class":444},[177,1105,592],{"class":316},[177,1107,1108],{"class":333},"[MCP] Request started:",[177,1110,592],{"class":316},[177,1112,495],{"class":316},[177,1114,852],{"class":320},[177,1116,400],{"class":316},[177,1118,1119],{"class":320},"path",[177,1121,458],{"class":444},[177,1123,1124],{"class":179,"line":217},[177,1125,190],{"emptyLinePlaceholder":189},[177,1127,1128],{"class":179,"line":223},[177,1129,1130],{"class":391},"    \u002F\u002F Call the handler\n",[177,1132,1133,1135,1138,1140,1142,1144],{"class":179,"line":229},[177,1134,571],{"class":369},[177,1136,1137],{"class":320}," response",[177,1139,411],{"class":316},[177,1141,702],{"class":312},[177,1143,1068],{"class":352},[177,1145,445],{"class":444},[177,1147,1148],{"class":179,"line":235},[177,1149,190],{"emptyLinePlaceholder":189},[177,1151,1152],{"class":179,"line":241},[177,1153,1154],{"class":391},"    \u002F\u002F Code after the handler\n",[177,1156,1157,1159,1162,1164,1166,1168,1170,1173,1176],{"class":179,"line":246},[177,1158,571],{"class":369},[177,1160,1161],{"class":320}," duration",[177,1163,411],{"class":316},[177,1165,436],{"class":320},[177,1167,400],{"class":316},[177,1169,441],{"class":352},[177,1171,1172],{"class":444},"() ",[177,1174,1175],{"class":316},"-",[177,1177,1178],{"class":320}," startTime\n",[177,1180,1181,1183,1185,1187,1189,1192,1195,1197,1200,1202,1205,1207],{"class":179,"line":668},[177,1182,1096],{"class":320},[177,1184,400],{"class":316},[177,1186,1101],{"class":352},[177,1188,355],{"class":444},[177,1190,1191],{"class":316},"`",[177,1193,1194],{"class":333},"[MCP] Request completed in ",[177,1196,892],{"class":316},[177,1198,1199],{"class":320},"duration",[177,1201,455],{"class":316},[177,1203,1204],{"class":333},"ms",[177,1206,1191],{"class":316},[177,1208,458],{"class":444},[177,1210,1211],{"class":179,"line":686},[177,1212,190],{"emptyLinePlaceholder":189},[177,1214,1215,1217],{"class":179,"line":714},[177,1216,883],{"class":312},[177,1218,1219],{"class":320}," response\n",[177,1221,1222],{"class":179,"line":719},[177,1223,450],{"class":316},[177,1225,1227,1229],{"class":179,"line":1226},17,[177,1228,455],{"class":316},[177,1230,458],{"class":320},[507,1232,1234,1235],{"id":1233},"when-to-use-next","When to use ",[174,1236,466],{},[1238,1239,1240,1256],"table",{},[1241,1242,1243],"thead",{},[1244,1245,1246,1250],"tr",{},[1247,1248,1249],"th",{},"Use Case",[1247,1251,1252,1253,1255],{},"Need ",[174,1254,466],{},"?",[1257,1258,1259,1268,1275,1283,1290],"tbody",{},[1244,1260,1261,1265],{},[1262,1263,1264],"td",{},"Set context before handler",[1262,1266,1267],{},"No",[1244,1269,1270,1273],{},[1262,1271,1272],{},"Validate auth before handler",[1262,1274,1267],{},[1244,1276,1277,1280],{},[1262,1278,1279],{},"Log request timing",[1262,1281,1282],{},"Yes",[1244,1284,1285,1288],{},[1262,1286,1287],{},"Modify response",[1262,1289,1282],{},[1244,1291,1292,1295],{},[1262,1293,1294],{},"Catch errors",[1262,1296,1282],{},[145,1298,1300],{"id":1299},"authentication-example","Authentication Example",[166,1302,1304],{"className":302,"code":1303,"filename":304,"language":305,"meta":172,"style":172},"import { getHeader, createError } from 'h3'\nimport { defineMcpHandler } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpHandler({\n  middleware: async (event) => {\n    const authHeader = getHeader(event, 'authorization')\n\n    if (!authHeader?.startsWith('Bearer ')) {\n      throw createError({\n        statusCode: 401,\n        message: 'Missing or invalid authorization header',\n      })\n    }\n\n    const token = authHeader.slice(7)\n\n    try {\n      const user = await verifyToken(token)\n      event.context.user = user\n      event.context.userId = user.id\n    }\n    catch {\n      throw createError({\n        statusCode: 401,\n        message: 'Invalid token',\n      })\n    }\n  },\n})\n",[174,1305,1306,1328,1346,1350,1362,1380,1406,1410,1441,1451,1462,1478,1485,1489,1493,1516,1520,1527,1549,1568,1590,1595,1603,1614,1625,1641,1648,1653,1658],{"__ignoreMap":172},[177,1307,1308,1310,1312,1314,1316,1318,1320,1322,1324,1326],{"class":179,"line":180},[177,1309,313],{"class":312},[177,1311,317],{"class":316},[177,1313,492],{"class":320},[177,1315,495],{"class":316},[177,1317,498],{"class":320},[177,1319,324],{"class":316},[177,1321,327],{"class":312},[177,1323,330],{"class":316},[177,1325,507],{"class":333},[177,1327,337],{"class":316},[177,1329,1330,1332,1334,1336,1338,1340,1342,1344],{"class":179,"line":186},[177,1331,313],{"class":312},[177,1333,317],{"class":316},[177,1335,321],{"class":320},[177,1337,324],{"class":316},[177,1339,327],{"class":312},[177,1341,330],{"class":316},[177,1343,334],{"class":333},[177,1345,337],{"class":316},[177,1347,1348],{"class":179,"line":193},[177,1349,190],{"emptyLinePlaceholder":189},[177,1351,1352,1354,1356,1358,1360],{"class":179,"line":199},[177,1353,346],{"class":312},[177,1355,349],{"class":312},[177,1357,321],{"class":352},[177,1359,355],{"class":320},[177,1361,358],{"class":316},[177,1363,1364,1366,1368,1370,1372,1374,1376,1378],{"class":179,"line":205},[177,1365,363],{"class":352},[177,1367,366],{"class":316},[177,1369,370],{"class":369},[177,1371,373],{"class":316},[177,1373,377],{"class":376},[177,1375,380],{"class":316},[177,1377,383],{"class":369},[177,1379,386],{"class":316},[177,1381,1382,1384,1387,1389,1391,1393,1395,1397,1399,1402,1404],{"class":179,"line":211},[177,1383,571],{"class":369},[177,1385,1386],{"class":320}," authHeader",[177,1388,411],{"class":316},[177,1390,492],{"class":352},[177,1392,355],{"class":444},[177,1394,377],{"class":320},[177,1396,495],{"class":316},[177,1398,330],{"class":316},[177,1400,1401],{"class":333},"authorization",[177,1403,592],{"class":316},[177,1405,458],{"class":444},[177,1407,1408],{"class":179,"line":217},[177,1409,190],{"emptyLinePlaceholder":189},[177,1411,1412,1414,1416,1418,1421,1424,1427,1429,1431,1434,1436,1439],{"class":179,"line":223},[177,1413,599],{"class":312},[177,1415,373],{"class":444},[177,1417,604],{"class":316},[177,1419,1420],{"class":320},"authHeader",[177,1422,1423],{"class":316},"?.",[177,1425,1426],{"class":352},"startsWith",[177,1428,355],{"class":444},[177,1430,592],{"class":316},[177,1432,1433],{"class":333},"Bearer ",[177,1435,592],{"class":316},[177,1437,1438],{"class":444},")) ",[177,1440,358],{"class":316},[177,1442,1443,1445,1447,1449],{"class":179,"line":229},[177,1444,617],{"class":312},[177,1446,498],{"class":352},[177,1448,355],{"class":444},[177,1450,358],{"class":316},[177,1452,1453,1456,1458,1460],{"class":179,"line":235},[177,1454,1455],{"class":444},"        statusCode",[177,1457,366],{"class":316},[177,1459,633],{"class":632},[177,1461,803],{"class":316},[177,1463,1464,1467,1469,1471,1474,1476],{"class":179,"line":241},[177,1465,1466],{"class":444},"        message",[177,1468,366],{"class":316},[177,1470,330],{"class":316},[177,1472,1473],{"class":333},"Missing or invalid authorization header",[177,1475,592],{"class":316},[177,1477,803],{"class":316},[177,1479,1480,1483],{"class":179,"line":246},[177,1481,1482],{"class":316},"      }",[177,1484,458],{"class":444},[177,1486,1487],{"class":179,"line":668},[177,1488,656],{"class":316},[177,1490,1491],{"class":179,"line":686},[177,1492,190],{"emptyLinePlaceholder":189},[177,1494,1495,1497,1500,1502,1504,1506,1509,1511,1514],{"class":179,"line":714},[177,1496,571],{"class":369},[177,1498,1499],{"class":320}," token",[177,1501,411],{"class":316},[177,1503,1386],{"class":320},[177,1505,400],{"class":316},[177,1507,1508],{"class":352},"slice",[177,1510,355],{"class":444},[177,1512,1513],{"class":632},"7",[177,1515,458],{"class":444},[177,1517,1518],{"class":179,"line":719},[177,1519,190],{"emptyLinePlaceholder":189},[177,1521,1522,1525],{"class":179,"line":1226},[177,1523,1524],{"class":312},"    try",[177,1526,386],{"class":316},[177,1528,1530,1533,1535,1537,1539,1542,1544,1547],{"class":179,"line":1529},18,[177,1531,1532],{"class":369},"      const",[177,1534,865],{"class":320},[177,1536,411],{"class":316},[177,1538,702],{"class":312},[177,1540,1541],{"class":352}," verifyToken",[177,1543,355],{"class":444},[177,1545,1546],{"class":320},"token",[177,1548,458],{"class":444},[177,1550,1552,1555,1557,1559,1561,1563,1565],{"class":179,"line":1551},19,[177,1553,1554],{"class":320},"      event",[177,1556,400],{"class":316},[177,1558,403],{"class":320},[177,1560,400],{"class":316},[177,1562,697],{"class":320},[177,1564,411],{"class":316},[177,1566,1567],{"class":320}," user\n",[177,1569,1571,1573,1575,1577,1579,1581,1583,1585,1587],{"class":179,"line":1570},20,[177,1572,1554],{"class":320},[177,1574,400],{"class":316},[177,1576,403],{"class":320},[177,1578,400],{"class":316},[177,1580,408],{"class":320},[177,1582,411],{"class":316},[177,1584,865],{"class":320},[177,1586,400],{"class":316},[177,1588,1589],{"class":320},"id\n",[177,1591,1593],{"class":179,"line":1592},21,[177,1594,656],{"class":316},[177,1596,1598,1601],{"class":179,"line":1597},22,[177,1599,1600],{"class":312},"    catch",[177,1602,386],{"class":316},[177,1604,1606,1608,1610,1612],{"class":179,"line":1605},23,[177,1607,617],{"class":312},[177,1609,498],{"class":352},[177,1611,355],{"class":444},[177,1613,358],{"class":316},[177,1615,1617,1619,1621,1623],{"class":179,"line":1616},24,[177,1618,1455],{"class":444},[177,1620,366],{"class":316},[177,1622,633],{"class":632},[177,1624,803],{"class":316},[177,1626,1628,1630,1632,1634,1637,1639],{"class":179,"line":1627},25,[177,1629,1466],{"class":444},[177,1631,366],{"class":316},[177,1633,330],{"class":316},[177,1635,1636],{"class":333},"Invalid token",[177,1638,592],{"class":316},[177,1640,803],{"class":316},[177,1642,1644,1646],{"class":179,"line":1643},26,[177,1645,1482],{"class":316},[177,1647,458],{"class":444},[177,1649,1651],{"class":179,"line":1650},27,[177,1652,656],{"class":316},[177,1654,1656],{"class":179,"line":1655},28,[177,1657,450],{"class":316},[177,1659,1661,1663],{"class":179,"line":1660},29,[177,1662,455],{"class":316},[177,1664,458],{"class":320},[145,1666,1668],{"id":1667},"logging-analytics-example","Logging & Analytics Example",[166,1670,1672],{"className":302,"code":1671,"filename":304,"language":305,"meta":172,"style":172},"import { defineMcpHandler } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpHandler({\n  middleware: async (event, next) => {\n    const requestId = crypto.randomUUID()\n    const startTime = Date.now()\n\n    event.context.requestId = requestId\n\n    console.log(JSON.stringify({\n      type: 'mcp_request_start',\n      requestId,\n      path: event.path,\n      method: event.method,\n      timestamp: new Date().toISOString(),\n    }))\n\n    const response = await next()\n\n    console.log(JSON.stringify({\n      type: 'mcp_request_end',\n      requestId,\n      duration: Date.now() - startTime,\n      timestamp: new Date().toISOString(),\n    }))\n\n    return response\n  },\n})\n",[174,1673,1674,1692,1696,1708,1730,1749,1765,1769,1787,1791,1813,1829,1836,1851,1867,1891,1899,1903,1917,1921,1941,1956,1962,1983,2003,2009,2013,2019,2023],{"__ignoreMap":172},[177,1675,1676,1678,1680,1682,1684,1686,1688,1690],{"class":179,"line":180},[177,1677,313],{"class":312},[177,1679,317],{"class":316},[177,1681,321],{"class":320},[177,1683,324],{"class":316},[177,1685,327],{"class":312},[177,1687,330],{"class":316},[177,1689,334],{"class":333},[177,1691,337],{"class":316},[177,1693,1694],{"class":179,"line":186},[177,1695,190],{"emptyLinePlaceholder":189},[177,1697,1698,1700,1702,1704,1706],{"class":179,"line":193},[177,1699,346],{"class":312},[177,1701,349],{"class":312},[177,1703,321],{"class":352},[177,1705,355],{"class":320},[177,1707,358],{"class":316},[177,1709,1710,1712,1714,1716,1718,1720,1722,1724,1726,1728],{"class":179,"line":199},[177,1711,363],{"class":352},[177,1713,366],{"class":316},[177,1715,370],{"class":369},[177,1717,373],{"class":316},[177,1719,377],{"class":376},[177,1721,495],{"class":316},[177,1723,1068],{"class":376},[177,1725,380],{"class":316},[177,1727,383],{"class":369},[177,1729,386],{"class":316},[177,1731,1732,1734,1737,1739,1742,1744,1747],{"class":179,"line":205},[177,1733,571],{"class":369},[177,1735,1736],{"class":320}," requestId",[177,1738,411],{"class":316},[177,1740,1741],{"class":320}," crypto",[177,1743,400],{"class":316},[177,1745,1746],{"class":352},"randomUUID",[177,1748,445],{"class":444},[177,1750,1751,1753,1755,1757,1759,1761,1763],{"class":179,"line":211},[177,1752,571],{"class":369},[177,1754,1081],{"class":320},[177,1756,411],{"class":316},[177,1758,436],{"class":320},[177,1760,400],{"class":316},[177,1762,441],{"class":352},[177,1764,445],{"class":444},[177,1766,1767],{"class":179,"line":217},[177,1768,190],{"emptyLinePlaceholder":189},[177,1770,1771,1773,1775,1777,1779,1782,1784],{"class":179,"line":223},[177,1772,397],{"class":320},[177,1774,400],{"class":316},[177,1776,403],{"class":320},[177,1778,400],{"class":316},[177,1780,1781],{"class":320},"requestId",[177,1783,411],{"class":316},[177,1785,1786],{"class":320}," requestId\n",[177,1788,1789],{"class":179,"line":229},[177,1790,190],{"emptyLinePlaceholder":189},[177,1792,1793,1795,1797,1799,1801,1804,1806,1809,1811],{"class":179,"line":235},[177,1794,1096],{"class":320},[177,1796,400],{"class":316},[177,1798,1101],{"class":352},[177,1800,355],{"class":444},[177,1802,1803],{"class":320},"JSON",[177,1805,400],{"class":316},[177,1807,1808],{"class":352},"stringify",[177,1810,355],{"class":444},[177,1812,358],{"class":316},[177,1814,1815,1818,1820,1822,1825,1827],{"class":179,"line":241},[177,1816,1817],{"class":444},"      type",[177,1819,366],{"class":316},[177,1821,330],{"class":316},[177,1823,1824],{"class":333},"mcp_request_start",[177,1826,592],{"class":316},[177,1828,803],{"class":316},[177,1830,1831,1834],{"class":179,"line":246},[177,1832,1833],{"class":320},"      requestId",[177,1835,803],{"class":316},[177,1837,1838,1841,1843,1845,1847,1849],{"class":179,"line":668},[177,1839,1840],{"class":444},"      path",[177,1842,366],{"class":316},[177,1844,852],{"class":320},[177,1846,400],{"class":316},[177,1848,1119],{"class":320},[177,1850,803],{"class":316},[177,1852,1853,1856,1858,1860,1862,1865],{"class":179,"line":686},[177,1854,1855],{"class":444},"      method",[177,1857,366],{"class":316},[177,1859,852],{"class":320},[177,1861,400],{"class":316},[177,1863,1864],{"class":320},"method",[177,1866,803],{"class":316},[177,1868,1869,1872,1874,1877,1879,1882,1884,1887,1889],{"class":179,"line":714},[177,1870,1871],{"class":444},"      timestamp",[177,1873,366],{"class":316},[177,1875,1876],{"class":316}," new",[177,1878,436],{"class":352},[177,1880,1881],{"class":444},"()",[177,1883,400],{"class":316},[177,1885,1886],{"class":352},"toISOString",[177,1888,1881],{"class":444},[177,1890,803],{"class":316},[177,1892,1893,1896],{"class":179,"line":719},[177,1894,1895],{"class":316},"    }",[177,1897,1898],{"class":444},"))\n",[177,1900,1901],{"class":179,"line":1226},[177,1902,190],{"emptyLinePlaceholder":189},[177,1904,1905,1907,1909,1911,1913,1915],{"class":179,"line":1529},[177,1906,571],{"class":369},[177,1908,1137],{"class":320},[177,1910,411],{"class":316},[177,1912,702],{"class":312},[177,1914,1068],{"class":352},[177,1916,445],{"class":444},[177,1918,1919],{"class":179,"line":1551},[177,1920,190],{"emptyLinePlaceholder":189},[177,1922,1923,1925,1927,1929,1931,1933,1935,1937,1939],{"class":179,"line":1570},[177,1924,1096],{"class":320},[177,1926,400],{"class":316},[177,1928,1101],{"class":352},[177,1930,355],{"class":444},[177,1932,1803],{"class":320},[177,1934,400],{"class":316},[177,1936,1808],{"class":352},[177,1938,355],{"class":444},[177,1940,358],{"class":316},[177,1942,1943,1945,1947,1949,1952,1954],{"class":179,"line":1592},[177,1944,1817],{"class":444},[177,1946,366],{"class":316},[177,1948,330],{"class":316},[177,1950,1951],{"class":333},"mcp_request_end",[177,1953,592],{"class":316},[177,1955,803],{"class":316},[177,1957,1958,1960],{"class":179,"line":1597},[177,1959,1833],{"class":320},[177,1961,803],{"class":316},[177,1963,1964,1967,1969,1971,1973,1975,1977,1979,1981],{"class":179,"line":1605},[177,1965,1966],{"class":444},"      duration",[177,1968,366],{"class":316},[177,1970,436],{"class":320},[177,1972,400],{"class":316},[177,1974,441],{"class":352},[177,1976,1172],{"class":444},[177,1978,1175],{"class":316},[177,1980,1081],{"class":320},[177,1982,803],{"class":316},[177,1984,1985,1987,1989,1991,1993,1995,1997,1999,2001],{"class":179,"line":1616},[177,1986,1871],{"class":444},[177,1988,366],{"class":316},[177,1990,1876],{"class":316},[177,1992,436],{"class":352},[177,1994,1881],{"class":444},[177,1996,400],{"class":316},[177,1998,1886],{"class":352},[177,2000,1881],{"class":444},[177,2002,803],{"class":316},[177,2004,2005,2007],{"class":179,"line":1627},[177,2006,1895],{"class":316},[177,2008,1898],{"class":444},[177,2010,2011],{"class":179,"line":1643},[177,2012,190],{"emptyLinePlaceholder":189},[177,2014,2015,2017],{"class":179,"line":1650},[177,2016,883],{"class":312},[177,2018,1219],{"class":320},[177,2020,2021],{"class":179,"line":1655},[177,2022,450],{"class":316},[177,2024,2025,2027],{"class":179,"line":1660},[177,2026,455],{"class":316},[177,2028,458],{"class":320},[145,2030,2032],{"id":2031},"extracting-tool-names","Extracting Tool Names",[150,2034,2035,2036,2039,2040,2043],{},"Use the ",[174,2037,2038],{},"extractToolNames"," utility to inspect which tools are being called in the current request. It parses the JSON-RPC body and returns the tool names from any ",[174,2041,2042],{},"tools\u002Fcall"," messages.",[166,2045,2047],{"className":302,"code":2046,"filename":304,"language":305,"meta":172,"style":172},"import { defineMcpHandler, extractToolNames } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpHandler({\n  middleware: async (event, next) => {\n    const toolNames = await extractToolNames(event)\n\n    if (toolNames.length > 0) {\n      console.log(`[MCP] Calling tools: ${toolNames.join(', ')}`)\n    }\n\n    return next()\n  },\n})\n",[174,2048,2049,2072,2076,2088,2110,2129,2133,2157,2198,2202,2206,2214,2218],{"__ignoreMap":172},[177,2050,2051,2053,2055,2057,2059,2062,2064,2066,2068,2070],{"class":179,"line":180},[177,2052,313],{"class":312},[177,2054,317],{"class":316},[177,2056,321],{"class":320},[177,2058,495],{"class":316},[177,2060,2061],{"class":320}," extractToolNames",[177,2063,324],{"class":316},[177,2065,327],{"class":312},[177,2067,330],{"class":316},[177,2069,334],{"class":333},[177,2071,337],{"class":316},[177,2073,2074],{"class":179,"line":186},[177,2075,190],{"emptyLinePlaceholder":189},[177,2077,2078,2080,2082,2084,2086],{"class":179,"line":193},[177,2079,346],{"class":312},[177,2081,349],{"class":312},[177,2083,321],{"class":352},[177,2085,355],{"class":320},[177,2087,358],{"class":316},[177,2089,2090,2092,2094,2096,2098,2100,2102,2104,2106,2108],{"class":179,"line":199},[177,2091,363],{"class":352},[177,2093,366],{"class":316},[177,2095,370],{"class":369},[177,2097,373],{"class":316},[177,2099,377],{"class":376},[177,2101,495],{"class":316},[177,2103,1068],{"class":376},[177,2105,380],{"class":316},[177,2107,383],{"class":369},[177,2109,386],{"class":316},[177,2111,2112,2114,2117,2119,2121,2123,2125,2127],{"class":179,"line":205},[177,2113,571],{"class":369},[177,2115,2116],{"class":320}," toolNames",[177,2118,411],{"class":316},[177,2120,702],{"class":312},[177,2122,2061],{"class":352},[177,2124,355],{"class":444},[177,2126,377],{"class":320},[177,2128,458],{"class":444},[177,2130,2131],{"class":179,"line":211},[177,2132,190],{"emptyLinePlaceholder":189},[177,2134,2135,2137,2139,2142,2144,2147,2150,2153,2155],{"class":179,"line":217},[177,2136,599],{"class":312},[177,2138,373],{"class":444},[177,2140,2141],{"class":320},"toolNames",[177,2143,400],{"class":316},[177,2145,2146],{"class":320},"length",[177,2148,2149],{"class":316}," >",[177,2151,2152],{"class":632}," 0",[177,2154,610],{"class":444},[177,2156,358],{"class":316},[177,2158,2159,2162,2164,2166,2168,2170,2173,2175,2177,2179,2182,2184,2186,2189,2191,2193,2196],{"class":179,"line":223},[177,2160,2161],{"class":320},"      console",[177,2163,400],{"class":316},[177,2165,1101],{"class":352},[177,2167,355],{"class":444},[177,2169,1191],{"class":316},[177,2171,2172],{"class":333},"[MCP] Calling tools: ",[177,2174,892],{"class":316},[177,2176,2141],{"class":320},[177,2178,400],{"class":316},[177,2180,2181],{"class":352},"join",[177,2183,355],{"class":320},[177,2185,592],{"class":316},[177,2187,2188],{"class":333},", ",[177,2190,592],{"class":316},[177,2192,380],{"class":320},[177,2194,2195],{"class":316},"}`",[177,2197,458],{"class":444},[177,2199,2200],{"class":179,"line":229},[177,2201,656],{"class":316},[177,2203,2204],{"class":179,"line":235},[177,2205,190],{"emptyLinePlaceholder":189},[177,2207,2208,2210,2212],{"class":179,"line":241},[177,2209,883],{"class":312},[177,2211,1068],{"class":352},[177,2213,445],{"class":444},[177,2215,2216],{"class":179,"line":246},[177,2217,450],{"class":316},[177,2219,2220,2222],{"class":179,"line":668},[177,2221,455],{"class":316},[177,2223,458],{"class":320},[150,2225,252],{},[254,2227,2228,2233,2239],{},[257,2229,2230,2232],{},[154,2231,266],{}," which tools are called per request",[257,2234,2235,2238],{},[154,2236,2237],{},"Monitoring"," tool usage and frequency",[257,2240,2241,2244],{},[154,2242,2243],{},"Access control"," based on tool names (e.g. restricting certain tools to admin users)",[166,2246,2248],{"className":302,"code":2247,"filename":304,"language":305,"meta":172,"style":172},"import { createError } from 'h3'\nimport { defineMcpHandler, extractToolNames } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nconst ADMIN_TOOLS = ['delete-user', 'reset-database']\n\nexport default defineMcpHandler({\n  middleware: async (event) => {\n    const toolNames = await extractToolNames(event)\n    const user = event.context.user\n\n    if (toolNames.some(name => ADMIN_TOOLS.includes(name)) && user?.role !== 'admin') {\n      throw createError({ statusCode: 403, message: 'Admin access required for this tool' })\n    }\n  },\n})\n",[174,2249,2250,2268,2290,2294,2327,2331,2343,2361,2379,2397,2401,2458,2492,2496,2500],{"__ignoreMap":172},[177,2251,2252,2254,2256,2258,2260,2262,2264,2266],{"class":179,"line":180},[177,2253,313],{"class":312},[177,2255,317],{"class":316},[177,2257,498],{"class":320},[177,2259,324],{"class":316},[177,2261,327],{"class":312},[177,2263,330],{"class":316},[177,2265,507],{"class":333},[177,2267,337],{"class":316},[177,2269,2270,2272,2274,2276,2278,2280,2282,2284,2286,2288],{"class":179,"line":186},[177,2271,313],{"class":312},[177,2273,317],{"class":316},[177,2275,321],{"class":320},[177,2277,495],{"class":316},[177,2279,2061],{"class":320},[177,2281,324],{"class":316},[177,2283,327],{"class":312},[177,2285,330],{"class":316},[177,2287,334],{"class":333},[177,2289,337],{"class":316},[177,2291,2292],{"class":179,"line":193},[177,2293,190],{"emptyLinePlaceholder":189},[177,2295,2296,2299,2302,2305,2308,2310,2313,2315,2317,2319,2322,2324],{"class":179,"line":199},[177,2297,2298],{"class":369},"const",[177,2300,2301],{"class":320}," ADMIN_TOOLS ",[177,2303,2304],{"class":316},"=",[177,2306,2307],{"class":320}," [",[177,2309,592],{"class":316},[177,2311,2312],{"class":333},"delete-user",[177,2314,592],{"class":316},[177,2316,495],{"class":316},[177,2318,330],{"class":316},[177,2320,2321],{"class":333},"reset-database",[177,2323,592],{"class":316},[177,2325,2326],{"class":320},"]\n",[177,2328,2329],{"class":179,"line":205},[177,2330,190],{"emptyLinePlaceholder":189},[177,2332,2333,2335,2337,2339,2341],{"class":179,"line":211},[177,2334,346],{"class":312},[177,2336,349],{"class":312},[177,2338,321],{"class":352},[177,2340,355],{"class":320},[177,2342,358],{"class":316},[177,2344,2345,2347,2349,2351,2353,2355,2357,2359],{"class":179,"line":217},[177,2346,363],{"class":352},[177,2348,366],{"class":316},[177,2350,370],{"class":369},[177,2352,373],{"class":316},[177,2354,377],{"class":376},[177,2356,380],{"class":316},[177,2358,383],{"class":369},[177,2360,386],{"class":316},[177,2362,2363,2365,2367,2369,2371,2373,2375,2377],{"class":179,"line":223},[177,2364,571],{"class":369},[177,2366,2116],{"class":320},[177,2368,411],{"class":316},[177,2370,702],{"class":312},[177,2372,2061],{"class":352},[177,2374,355],{"class":444},[177,2376,377],{"class":320},[177,2378,458],{"class":444},[177,2380,2381,2383,2385,2387,2389,2391,2393,2395],{"class":179,"line":229},[177,2382,571],{"class":369},[177,2384,865],{"class":320},[177,2386,411],{"class":316},[177,2388,852],{"class":320},[177,2390,400],{"class":316},[177,2392,403],{"class":320},[177,2394,400],{"class":316},[177,2396,878],{"class":320},[177,2398,2399],{"class":179,"line":235},[177,2400,190],{"emptyLinePlaceholder":189},[177,2402,2403,2405,2407,2409,2411,2414,2416,2418,2420,2423,2425,2428,2430,2432,2434,2437,2439,2441,2444,2447,2449,2452,2454,2456],{"class":179,"line":241},[177,2404,599],{"class":312},[177,2406,373],{"class":444},[177,2408,2141],{"class":320},[177,2410,400],{"class":316},[177,2412,2413],{"class":352},"some",[177,2415,355],{"class":444},[177,2417,899],{"class":376},[177,2419,383],{"class":369},[177,2421,2422],{"class":320}," ADMIN_TOOLS",[177,2424,400],{"class":316},[177,2426,2427],{"class":352},"includes",[177,2429,355],{"class":444},[177,2431,899],{"class":320},[177,2433,1438],{"class":444},[177,2435,2436],{"class":316},"&&",[177,2438,865],{"class":320},[177,2440,1423],{"class":316},[177,2442,2443],{"class":320},"role",[177,2445,2446],{"class":316}," !==",[177,2448,330],{"class":316},[177,2450,2451],{"class":333},"admin",[177,2453,592],{"class":316},[177,2455,610],{"class":444},[177,2457,358],{"class":316},[177,2459,2460,2462,2464,2466,2468,2470,2472,2475,2477,2479,2481,2483,2486,2488,2490],{"class":179,"line":246},[177,2461,617],{"class":312},[177,2463,498],{"class":352},[177,2465,355],{"class":444},[177,2467,624],{"class":316},[177,2469,627],{"class":444},[177,2471,366],{"class":316},[177,2473,2474],{"class":632}," 403",[177,2476,495],{"class":316},[177,2478,638],{"class":444},[177,2480,366],{"class":316},[177,2482,330],{"class":316},[177,2484,2485],{"class":333},"Admin access required for this tool",[177,2487,592],{"class":316},[177,2489,324],{"class":316},[177,2491,458],{"class":444},[177,2493,2494],{"class":179,"line":668},[177,2495,656],{"class":316},[177,2497,2498],{"class":179,"line":686},[177,2499,450],{"class":316},[177,2501,2502,2504],{"class":179,"line":714},[177,2503,455],{"class":316},[177,2505,458],{"class":320},[460,2507,2508,2510,2511,2514],{"color":462,"icon":129},[174,2509,2038],{}," is auto-imported in the server context — no import needed when using it in your ",[174,2512,2513],{},"server\u002F"," directory.",[145,2516,2518],{"id":2517},"middleware-with-custom-handlers","Middleware with Custom Handlers",[150,2520,2521],{},"Middleware works the same way with custom handlers:",[166,2523,2526],{"className":302,"code":2524,"filename":2525,"language":305,"meta":172,"style":172},"import { defineMcpHandler } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpHandler({\n  name: 'admin',\n  middleware: async (event) => {\n    const user = await getUser(event)\n\n    if (user?.role !== 'admin') {\n      throw createError({\n        statusCode: 403,\n        message: 'Admin access required',\n      })\n    }\n\n    event.context.user = user\n  },\n  tools: [adminTool1, adminTool2],\n})\n","server\u002Fmcp\u002Fadmin.ts",[174,2527,2528,2546,2550,2562,2576,2594,2613,2617,2641,2651,2661,2676,2682,2686,2690,2706,2710,2727],{"__ignoreMap":172},[177,2529,2530,2532,2534,2536,2538,2540,2542,2544],{"class":179,"line":180},[177,2531,313],{"class":312},[177,2533,317],{"class":316},[177,2535,321],{"class":320},[177,2537,324],{"class":316},[177,2539,327],{"class":312},[177,2541,330],{"class":316},[177,2543,334],{"class":333},[177,2545,337],{"class":316},[177,2547,2548],{"class":179,"line":186},[177,2549,190],{"emptyLinePlaceholder":189},[177,2551,2552,2554,2556,2558,2560],{"class":179,"line":193},[177,2553,346],{"class":312},[177,2555,349],{"class":312},[177,2557,321],{"class":352},[177,2559,355],{"class":320},[177,2561,358],{"class":316},[177,2563,2564,2566,2568,2570,2572,2574],{"class":179,"line":199},[177,2565,791],{"class":444},[177,2567,366],{"class":316},[177,2569,330],{"class":316},[177,2571,2451],{"class":333},[177,2573,592],{"class":316},[177,2575,803],{"class":316},[177,2577,2578,2580,2582,2584,2586,2588,2590,2592],{"class":179,"line":205},[177,2579,363],{"class":352},[177,2581,366],{"class":316},[177,2583,370],{"class":369},[177,2585,373],{"class":316},[177,2587,377],{"class":376},[177,2589,380],{"class":316},[177,2591,383],{"class":369},[177,2593,386],{"class":316},[177,2595,2596,2598,2600,2602,2604,2607,2609,2611],{"class":179,"line":211},[177,2597,571],{"class":369},[177,2599,865],{"class":320},[177,2601,411],{"class":316},[177,2603,702],{"class":312},[177,2605,2606],{"class":352}," getUser",[177,2608,355],{"class":444},[177,2610,377],{"class":320},[177,2612,458],{"class":444},[177,2614,2615],{"class":179,"line":217},[177,2616,190],{"emptyLinePlaceholder":189},[177,2618,2619,2621,2623,2625,2627,2629,2631,2633,2635,2637,2639],{"class":179,"line":223},[177,2620,599],{"class":312},[177,2622,373],{"class":444},[177,2624,697],{"class":320},[177,2626,1423],{"class":316},[177,2628,2443],{"class":320},[177,2630,2446],{"class":316},[177,2632,330],{"class":316},[177,2634,2451],{"class":333},[177,2636,592],{"class":316},[177,2638,610],{"class":444},[177,2640,358],{"class":316},[177,2642,2643,2645,2647,2649],{"class":179,"line":229},[177,2644,617],{"class":312},[177,2646,498],{"class":352},[177,2648,355],{"class":444},[177,2650,358],{"class":316},[177,2652,2653,2655,2657,2659],{"class":179,"line":235},[177,2654,1455],{"class":444},[177,2656,366],{"class":316},[177,2658,2474],{"class":632},[177,2660,803],{"class":316},[177,2662,2663,2665,2667,2669,2672,2674],{"class":179,"line":241},[177,2664,1466],{"class":444},[177,2666,366],{"class":316},[177,2668,330],{"class":316},[177,2670,2671],{"class":333},"Admin access required",[177,2673,592],{"class":316},[177,2675,803],{"class":316},[177,2677,2678,2680],{"class":179,"line":246},[177,2679,1482],{"class":316},[177,2681,458],{"class":444},[177,2683,2684],{"class":179,"line":668},[177,2685,656],{"class":316},[177,2687,2688],{"class":179,"line":686},[177,2689,190],{"emptyLinePlaceholder":189},[177,2691,2692,2694,2696,2698,2700,2702,2704],{"class":179,"line":714},[177,2693,397],{"class":320},[177,2695,400],{"class":316},[177,2697,403],{"class":320},[177,2699,400],{"class":316},[177,2701,697],{"class":320},[177,2703,411],{"class":316},[177,2705,1567],{"class":320},[177,2707,2708],{"class":179,"line":719},[177,2709,450],{"class":316},[177,2711,2712,2715,2717,2720,2722,2725],{"class":179,"line":1226},[177,2713,2714],{"class":444},"  tools",[177,2716,366],{"class":316},[177,2718,2719],{"class":320}," [adminTool1",[177,2721,495],{"class":316},[177,2723,2724],{"class":320}," adminTool2]",[177,2726,803],{"class":316},[177,2728,2729,2731],{"class":179,"line":1529},[177,2730,455],{"class":316},[177,2732,458],{"class":320},[145,2734,81],{"id":305},[150,2736,2737],{},"For type-safe context, extend the H3 context:",[166,2739,2742],{"className":302,"code":2740,"filename":2741,"language":305,"meta":172,"style":172},"declare module 'h3' {\n  interface H3EventContext {\n    user?: {\n      id: string\n      name: string\n      role: 'user' | 'admin'\n    }\n    requestId?: string\n    startTime?: number\n  }\n}\n","server\u002Ftypes.ts",[174,2743,2744,2760,2771,2781,2791,2800,2822,2826,2835,2845,2850],{"__ignoreMap":172},[177,2745,2746,2749,2752,2754,2756,2758],{"class":179,"line":180},[177,2747,2748],{"class":369},"declare",[177,2750,2751],{"class":369}," module",[177,2753,330],{"class":316},[177,2755,507],{"class":333},[177,2757,592],{"class":316},[177,2759,386],{"class":316},[177,2761,2762,2765,2769],{"class":179,"line":186},[177,2763,2764],{"class":369},"  interface",[177,2766,2768],{"class":2767},"sBMFI"," H3EventContext",[177,2770,386],{"class":316},[177,2772,2773,2776,2779],{"class":179,"line":193},[177,2774,2775],{"class":444},"    user",[177,2777,2778],{"class":316},"?:",[177,2780,386],{"class":316},[177,2782,2783,2786,2788],{"class":179,"line":199},[177,2784,2785],{"class":444},"      id",[177,2787,366],{"class":316},[177,2789,2790],{"class":2767}," string\n",[177,2792,2793,2796,2798],{"class":179,"line":205},[177,2794,2795],{"class":444},"      name",[177,2797,366],{"class":316},[177,2799,2790],{"class":2767},[177,2801,2802,2805,2807,2809,2811,2813,2816,2818,2820],{"class":179,"line":211},[177,2803,2804],{"class":444},"      role",[177,2806,366],{"class":316},[177,2808,330],{"class":316},[177,2810,697],{"class":333},[177,2812,592],{"class":316},[177,2814,2815],{"class":316}," |",[177,2817,330],{"class":316},[177,2819,2451],{"class":333},[177,2821,337],{"class":316},[177,2823,2824],{"class":179,"line":217},[177,2825,656],{"class":316},[177,2827,2828,2831,2833],{"class":179,"line":223},[177,2829,2830],{"class":444},"    requestId",[177,2832,2778],{"class":316},[177,2834,2790],{"class":2767},[177,2836,2837,2840,2842],{"class":179,"line":229},[177,2838,2839],{"class":444},"    startTime",[177,2841,2778],{"class":316},[177,2843,2844],{"class":2767}," number\n",[177,2846,2847],{"class":179,"line":235},[177,2848,2849],{"class":316},"  }\n",[177,2851,2852],{"class":179,"line":241},[177,2853,2854],{"class":316},"}\n",[150,2856,2857],{},"Now your middleware and tools will have typed context:",[166,2859,2861],{"className":302,"code":2860,"filename":304,"language":305,"meta":172,"style":172},"import { defineMcpHandler } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpHandler({\n  middleware: async (event) => {\n    event.context.user = {\n      id: 'user-123',\n      name: 'John',\n      role: 'admin', \u002F\u002F TypeScript will validate this\n    }\n  },\n})\n",[174,2862,2863,2881,2885,2897,2915,2931,2945,2960,2977,2981,2985],{"__ignoreMap":172},[177,2864,2865,2867,2869,2871,2873,2875,2877,2879],{"class":179,"line":180},[177,2866,313],{"class":312},[177,2868,317],{"class":316},[177,2870,321],{"class":320},[177,2872,324],{"class":316},[177,2874,327],{"class":312},[177,2876,330],{"class":316},[177,2878,334],{"class":333},[177,2880,337],{"class":316},[177,2882,2883],{"class":179,"line":186},[177,2884,190],{"emptyLinePlaceholder":189},[177,2886,2887,2889,2891,2893,2895],{"class":179,"line":193},[177,2888,346],{"class":312},[177,2890,349],{"class":312},[177,2892,321],{"class":352},[177,2894,355],{"class":320},[177,2896,358],{"class":316},[177,2898,2899,2901,2903,2905,2907,2909,2911,2913],{"class":179,"line":199},[177,2900,363],{"class":352},[177,2902,366],{"class":316},[177,2904,370],{"class":369},[177,2906,373],{"class":316},[177,2908,377],{"class":376},[177,2910,380],{"class":316},[177,2912,383],{"class":369},[177,2914,386],{"class":316},[177,2916,2917,2919,2921,2923,2925,2927,2929],{"class":179,"line":205},[177,2918,397],{"class":320},[177,2920,400],{"class":316},[177,2922,403],{"class":320},[177,2924,400],{"class":316},[177,2926,697],{"class":320},[177,2928,411],{"class":316},[177,2930,386],{"class":316},[177,2932,2933,2935,2937,2939,2941,2943],{"class":179,"line":211},[177,2934,2785],{"class":444},[177,2936,366],{"class":316},[177,2938,330],{"class":316},[177,2940,416],{"class":333},[177,2942,592],{"class":316},[177,2944,803],{"class":316},[177,2946,2947,2949,2951,2953,2956,2958],{"class":179,"line":217},[177,2948,2795],{"class":444},[177,2950,366],{"class":316},[177,2952,330],{"class":316},[177,2954,2955],{"class":333},"John",[177,2957,592],{"class":316},[177,2959,803],{"class":316},[177,2961,2962,2964,2966,2968,2970,2972,2974],{"class":179,"line":223},[177,2963,2804],{"class":444},[177,2965,366],{"class":316},[177,2967,330],{"class":316},[177,2969,2451],{"class":333},[177,2971,592],{"class":316},[177,2973,495],{"class":316},[177,2975,2976],{"class":391}," \u002F\u002F TypeScript will validate this\n",[177,2978,2979],{"class":179,"line":229},[177,2980,656],{"class":316},[177,2982,2983],{"class":179,"line":235},[177,2984,450],{"class":316},[177,2986,2987,2989],{"class":179,"line":241},[177,2988,455],{"class":316},[177,2990,458],{"class":320},[145,2992,2994],{"id":2993},"best-practices","Best Practices",[2996,2997,2998,3004,3013,3025,3035],"ol",{},[257,2999,3000,3003],{},[154,3001,3002],{},"Keep middleware focused"," - Do one thing well",[257,3005,3006,3012],{},[154,3007,3008,3009,3011],{},"Don't call ",[174,3010,466],{}," if you don't need it"," - Let it be called automatically",[257,3014,3015,3021,3022,3024],{},[154,3016,3017,3018,3020],{},"Always return ",[174,3019,466],{}," result"," - If you call ",[174,3023,466],{},", return its result",[257,3026,3027,3030,3031,3034],{},[154,3028,3029],{},"Handle errors gracefully"," - Use ",[174,3032,3033],{},"createError"," for HTTP errors",[257,3036,3037,3040],{},[154,3038,3039],{},"Type your context"," - Extend H3EventContext for type safety",[145,3042,3044],{"id":3043},"next-steps","Next Steps",[254,3046,3047,3053,3058],{},[257,3048,3049,3052],{},[3050,3051,61],"a",{"href":62}," - Learn about custom handlers",[257,3054,3055,3057],{},[3050,3056,81],{"href":82}," - Type-safe definitions",[257,3059,3060,3062],{},[3050,3061,46],{"href":47}," - Create tools that use middleware context",[3064,3065,3066],"style",{},"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}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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 .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":172,"searchDepth":186,"depth":186,"links":3068},[3069,3070,3071,3072,3077,3078,3079,3080,3081,3082,3083],{"id":147,"depth":186,"text":148},{"id":291,"depth":186,"text":292},{"id":474,"depth":186,"text":475},{"id":999,"depth":186,"text":3073,"children":3074},"Advanced Middleware with next()",[3075],{"id":1233,"depth":193,"text":3076},"When to use next()",{"id":1299,"depth":186,"text":1300},{"id":1667,"depth":186,"text":1668},{"id":2031,"depth":186,"text":2032},{"id":2517,"depth":186,"text":2518},{"id":305,"depth":186,"text":81},{"id":2993,"depth":186,"text":2994},{"id":3043,"depth":186,"text":3044},"Intercept MCP requests to add authentication, logging, analytics, and more.","md",null,{},{"icon":79},{"title":3090,"description":3091},"MCP Middleware","Add middleware to your MCP handlers for authentication, logging, and request interception.","M0HFVhQmju_NorTe5_m_C2PKMiN1J9s6T8YKikQH_OA",[3094,3096],{"title":71,"path":72,"stem":73,"description":3095,"icon":74,"children":-1},"Customize where the module looks for MCP definitions.",{"title":81,"path":82,"stem":83,"description":3097,"icon":84,"children":-1},"Type safety and TypeScript features in the Nuxt MCP module.",1774872605926]