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