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