[{"data":1,"prerenderedAt":2791},["ShallowReactive",2],{"navigation_docs":3,"-advanced-sessions":139,"-advanced-sessions-surround":2786},[4,40,65,110],{"title":5,"path":6,"stem":7,"children":8,"page":39},"入门指南","\u002Fgetting-started","1.getting-started",[9,14,19,24,29,34],{"title":10,"path":11,"stem":12,"icon":13},"简介","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-book-open",{"title":15,"path":16,"stem":17,"icon":18},"安装","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"配置","\u002Fgetting-started\u002Fconfiguration","1.getting-started\u002F3.configuration","i-lucide-settings",{"title":25,"path":26,"stem":27,"icon":28},"MCP Inspector","\u002Fgetting-started\u002Finspector","1.getting-started\u002F4.inspector","i-lucide-circuit-board",{"title":30,"path":31,"stem":32,"icon":33},"连接","\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},"核心概念","\u002Fcore-concepts","2.core-concepts",[45,50,55,60],{"title":46,"path":47,"stem":48,"icon":49},"工具","\u002Fcore-concepts\u002Ftools","2.core-concepts\u002F2.tools","i-lucide-wrench",{"title":51,"path":52,"stem":53,"icon":54},"资源","\u002Fcore-concepts\u002Fresources","2.core-concepts\u002F3.resources","i-lucide-package",{"title":56,"path":57,"stem":58,"icon":59},"提示词 (Prompts)","\u002Fcore-concepts\u002Fprompts","2.core-concepts\u002F4.prompts","i-lucide-message-square",{"title":61,"path":62,"stem":63,"icon":64},"处理器 (Handlers)","\u002Fcore-concepts\u002Fhandlers","2.core-concepts\u002F5.handlers","i-lucide-server",{"title":66,"path":67,"stem":68,"children":69,"page":39},"进阶主题","\u002Fadvanced","3.advanced",[70,75,80,85,90,95,100,105],{"title":71,"path":72,"stem":73,"icon":74},"自定义路径","\u002Fadvanced\u002Fcustom-paths","3.advanced\u002F1.custom-paths","i-lucide-folder",{"title":76,"path":77,"stem":78,"icon":79},"中间件","\u002Fadvanced\u002Fmiddleware","3.advanced\u002F2.middleware","i-lucide-shield",{"title":81,"path":82,"stem":83,"icon":84},"TypeScript","\u002Fadvanced\u002Ftypescript","3.advanced\u002F3.typescript","i-lucide-type",{"title":86,"path":87,"stem":88,"icon":89},"钩子","\u002Fadvanced\u002Fhooks","3.advanced\u002F4.hooks","i-lucide-webhook",{"title":91,"path":92,"stem":93,"icon":94},"MCP 评估","\u002Fadvanced\u002Fevals","3.advanced\u002F5.evals","i-lucide-flask-conical",{"title":96,"path":97,"stem":98,"icon":99},"会话 (Sessions)","\u002Fadvanced\u002Fsessions","3.advanced\u002F6.sessions","i-lucide-database",{"title":101,"path":102,"stem":103,"icon":104},"动态定义","\u002Fadvanced\u002Fdynamic-definitions","3.advanced\u002F7.dynamic-definitions","i-lucide-toggle-right",{"title":106,"path":107,"stem":108,"icon":109},"代码模式 (Code Mode)","\u002Fadvanced\u002Fcode-mode","3.advanced\u002F8.code-mode","i-lucide-code",{"title":111,"path":112,"stem":113,"children":114,"page":39},"示例","\u002Fexamples","4.examples",[115,120,125,130,135],{"title":116,"path":117,"stem":118,"icon":119},"身份验证","\u002Fexamples\u002Fauthentication","4.examples\u002F1.authentication","i-lucide-shield-check",{"title":121,"path":122,"stem":123,"icon":124},"API 集成","\u002Fexamples\u002Fapi-integration","4.examples\u002F2.api-integration","i-lucide-globe",{"title":126,"path":127,"stem":128,"icon":129},"常见模式","\u002Fexamples\u002Fcommon-patterns","4.examples\u002F3.common-patterns","i-lucide-lightbulb",{"title":131,"path":132,"stem":133,"icon":134},"文件操作","\u002Fexamples\u002Ffile-operations","4.examples\u002F4.file-operations","i-lucide-file",{"title":136,"path":137,"stem":138,"icon":59},"提示词示例","\u002Fexamples\u002Fprompt-examples","4.examples\u002F5.prompt-examples",{"id":140,"title":96,"body":141,"description":2777,"extension":2778,"links":2779,"meta":2780,"navigation":2781,"path":97,"seo":2782,"stem":98,"__hash__":2785},"docs\u002F3.advanced\u002F6.sessions.md",{"type":142,"value":143,"toc":2759},"minimark",[144,149,158,240,247,269,272,275,344,350,353,360,451,454,559,565,578,583,586,851,854,876,879,882,969,973,1061,1071,1073,1076,1079,1452,1675,1678,1681,2198,2201,2204,2554,2557,2564,2570,2688,2697,2700,2707,2722,2725,2728,2755],[145,146,148],"h2",{"id":147},"什么是会话-sessions","什么是会话 (Sessions)？",[150,151,152,153,157],"p",{},"默认情况下，MCP 服务器是",[154,155,156],"strong",{},"无状态的","——每次请求都会创建一个全新的服务器实例。这对于简单的请求\u002F响应工具来说没问题，但某些场景要求服务器在多次工具调用之间记住上下文。",[159,160,161],"code-collapse",{},[162,163,169],"pre",{"className":164,"code":165,"filename":166,"language":167,"meta":168,"style":168},"language-txt shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","为我的 Nuxt MCP 服务器 (@nuxtjs\u002Fmcp-toolkit) 添加会话支持。\n\n- 在 nuxt.config.ts 中启用会话：mcp: { sessions: true }\n- 在工具处理程序中使用 useMcpSession\u003CT>()（自动导入）来获取\u002F设置每个会话的状态\n- await session.get(key) 和 await session.set(key, value) 可在同一会话的工具调用之间持久化数据\n- 为你的会话数据定义一个 TypeScript 接口，并将其作为泛型参数传递给 useMcpSession\u003CMySession>()\n- 会话由自动分配的 MCP-Session-Id 请求头标识\n- 自定义超时设置：mcp: { sessions: { enabled: true, maxDuration: 3600000 } }\n- 会话还支持 SSE 流式传输和可恢复性\n\n文档：https:\u002F\u002Fmcp-toolkit.nuxt.dev\u002Fadvanced\u002Fsessions\n","提示词","txt","",[170,171,172,180,187,193,199,205,211,217,223,229,234],"code",{"__ignoreMap":168},[173,174,177],"span",{"class":175,"line":176},"line",1,[173,178,179],{},"为我的 Nuxt MCP 服务器 (@nuxtjs\u002Fmcp-toolkit) 添加会话支持。\n",[173,181,183],{"class":175,"line":182},2,[173,184,186],{"emptyLinePlaceholder":185},true,"\n",[173,188,190],{"class":175,"line":189},3,[173,191,192],{},"- 在 nuxt.config.ts 中启用会话：mcp: { sessions: true }\n",[173,194,196],{"class":175,"line":195},4,[173,197,198],{},"- 在工具处理程序中使用 useMcpSession\u003CT>()（自动导入）来获取\u002F设置每个会话的状态\n",[173,200,202],{"class":175,"line":201},5,[173,203,204],{},"- await session.get(key) 和 await session.set(key, value) 可在同一会话的工具调用之间持久化数据\n",[173,206,208],{"class":175,"line":207},6,[173,209,210],{},"- 为你的会话数据定义一个 TypeScript 接口，并将其作为泛型参数传递给 useMcpSession\u003CMySession>()\n",[173,212,214],{"class":175,"line":213},7,[173,215,216],{},"- 会话由自动分配的 MCP-Session-Id 请求头标识\n",[173,218,220],{"class":175,"line":219},8,[173,221,222],{},"- 自定义超时设置：mcp: { sessions: { enabled: true, maxDuration: 3600000 } }\n",[173,224,226],{"class":175,"line":225},9,[173,227,228],{},"- 会话还支持 SSE 流式传输和可恢复性\n",[173,230,232],{"class":175,"line":231},10,[173,233,186],{"emptyLinePlaceholder":185},[173,235,237],{"class":175,"line":236},11,[173,238,239],{},"文档：https:\u002F\u002Fmcp-toolkit.nuxt.dev\u002Fadvanced\u002Fsessions\n",[150,241,242,243,246],{},"启用会话后，服务器会为每个客户端连接分配一个唯一的 ",[170,244,245],{},"MCP-Session-Id","。该 ID 会包含在后续的每个请求中，从而使服务器能够：",[248,249,250,257,263],"ul",{},[251,252,253,254],"li",{},"在同一对话的多次工具调用之间",[154,255,256],{},"保持状态",[251,258,259,262],{},[154,260,261],{},"启用 SSE 流式传输","以实现服务器到客户端的实时通信",[251,264,265,268],{},[154,266,267],{},"支持可恢复性","，以便客户端可以重新连接到现有会话",[145,270,271],{"id":271},"何时使用会话",[150,273,274],{},"当你的 MCP 工具需要以下功能时，会话将非常有用：",[276,277,278,290],"table",{},[279,280,281],"thead",{},[282,283,284,288],"tr",{},[285,286,287],"th",{},"使用场景",[285,289,111],{},[291,292,293,304,314,324,334],"tbody",{},[282,294,295,301],{},[296,297,298],"td",{},[154,299,300],{},"跟踪对话上下文",[296,302,303],{},"在会话中记住用户偏好、语言或之前的回答",[282,305,306,311],{},[296,307,308],{},[154,309,310],{},"累积数据",[296,312,313],{},"在多次工具调用中构建购物车、笔记列表或一组选项",[282,315,316,321],{},[296,317,318],{},[154,319,320],{},"多步骤工作流",[296,322,323],{},"引导用户完成向导（例如表单构建器、部署流水线），其中每个步骤都依赖于之前的输入",[282,325,326,331],{},[296,327,328],{},[154,329,330],{},"按会话计数器",[296,332,333],{},"跟踪会话内的 API 使用量、速率限制或进度",[282,335,336,341],{},[296,337,338],{},[154,339,340],{},"临时缓存",[296,342,343],{},"缓存仅与当前会话相关的昂贵计算结果",[345,346,349],"callout",{"color":347,"icon":348},"info","i-lucide-info","如果你的工具完全是无状态的（例如获取数据、执行计算、读取文件），则不需要会话。仅当跨工具调用的状态能带来实际价值时才启用它们。",[145,351,352],{"id":352},"设置",[150,354,355,356,359],{},"在你的 ",[170,357,358],{},"nuxt.config.ts"," 中启用会话：",[162,361,365],{"className":362,"code":363,"filename":358,"language":364,"meta":168,"style":168},"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",[170,366,367,388,415,425,438,443],{"__ignoreMap":168},[173,368,369,373,376,380,384],{"class":175,"line":176},[173,370,372],{"class":371},"s7zQu","export",[173,374,375],{"class":371}," default",[173,377,379],{"class":378},"s2Zo4"," defineNuxtConfig",[173,381,383],{"class":382},"sTEyZ","(",[173,385,387],{"class":386},"sMK4o","{\n",[173,389,390,394,397,400,403,407,409,412],{"class":175,"line":182},[173,391,393],{"class":392},"swJcz","  modules",[173,395,396],{"class":386},":",[173,398,399],{"class":382}," [",[173,401,402],{"class":386},"'",[173,404,406],{"class":405},"sfazB","@nuxtjs\u002Fmcp-toolkit",[173,408,402],{"class":386},[173,410,411],{"class":382},"]",[173,413,414],{"class":386},",\n",[173,416,417,420,422],{"class":175,"line":189},[173,418,419],{"class":392},"  mcp",[173,421,396],{"class":386},[173,423,424],{"class":386}," {\n",[173,426,427,430,432,436],{"class":175,"line":195},[173,428,429],{"class":392},"    sessions",[173,431,396],{"class":386},[173,433,435],{"class":434},"sfNiH"," true",[173,437,414],{"class":386},[173,439,440],{"class":175,"line":201},[173,441,442],{"class":386},"  },\n",[173,444,445,448],{"class":175,"line":207},[173,446,447],{"class":386},"}",[173,449,450],{"class":382},")\n",[150,452,453],{},"你还可以配置会话超时时间：",[162,455,457],{"className":362,"code":456,"filename":358,"language":364,"meta":168,"style":168},"export default defineNuxtConfig({\n  modules: ['@nuxtjs\u002Fmcp-toolkit'],\n  mcp: {\n    sessions: {\n      enabled: true,\n      maxDuration: 60 * 60 * 1000, \u002F\u002F 1 小时（默认：30 分钟）\n    },\n  },\n})\n",[170,458,459,471,489,497,505,516,544,549,553],{"__ignoreMap":168},[173,460,461,463,465,467,469],{"class":175,"line":176},[173,462,372],{"class":371},[173,464,375],{"class":371},[173,466,379],{"class":378},[173,468,383],{"class":382},[173,470,387],{"class":386},[173,472,473,475,477,479,481,483,485,487],{"class":175,"line":182},[173,474,393],{"class":392},[173,476,396],{"class":386},[173,478,399],{"class":382},[173,480,402],{"class":386},[173,482,406],{"class":405},[173,484,402],{"class":386},[173,486,411],{"class":382},[173,488,414],{"class":386},[173,490,491,493,495],{"class":175,"line":189},[173,492,419],{"class":392},[173,494,396],{"class":386},[173,496,424],{"class":386},[173,498,499,501,503],{"class":175,"line":195},[173,500,429],{"class":392},[173,502,396],{"class":386},[173,504,424],{"class":386},[173,506,507,510,512,514],{"class":175,"line":201},[173,508,509],{"class":392},"      enabled",[173,511,396],{"class":386},[173,513,435],{"class":434},[173,515,414],{"class":386},[173,517,518,521,523,527,530,532,534,537,540],{"class":175,"line":207},[173,519,520],{"class":392},"      maxDuration",[173,522,396],{"class":386},[173,524,526],{"class":525},"sbssI"," 60",[173,528,529],{"class":386}," *",[173,531,526],{"class":525},[173,533,529],{"class":386},[173,535,536],{"class":525}," 1000",[173,538,539],{"class":386},",",[173,541,543],{"class":542},"sHwdD"," \u002F\u002F 1 小时（默认：30 分钟）\n",[173,545,546],{"class":175,"line":213},[173,547,548],{"class":386},"    },\n",[173,550,551],{"class":175,"line":219},[173,552,442],{"class":386},[173,554,555,557],{"class":175,"line":225},[173,556,447],{"class":386},[173,558,450],{"class":382},[145,560,562],{"id":561},"usemcpsession",[170,563,564],{},"useMcpSession()",[150,566,567,569,570,577],{},[170,568,564],{}," 服务器工具函数提供了一个类型安全的、按会话划分的键值存储。它支持自动导入，并由 ",[571,572,576],"a",{"href":573,"rel":574},"https:\u002F\u002Funstorage.unjs.io",[575],"nofollow","unstorage"," 提供支持，因此开箱即可与任何存储驱动配合使用。",[579,580,582],"h3",{"id":581},"类型化会话推荐","类型化会话（推荐）",[150,584,585],{},"为你的会话数据定义一个接口并将其作为泛型传入。键和值将进行完整的类型检查：",[162,587,590],{"className":362,"code":588,"filename":589,"language":364,"meta":168,"style":168},"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",[170,591,592,618,622,634,644,649,653,665,681,697,715,741,780,813,839,844],{"__ignoreMap":168},[173,593,594,597,600,603,606,609,612,615],{"class":175,"line":176},[173,595,596],{"class":371},"import",[173,598,599],{"class":386}," {",[173,601,602],{"class":382}," defineMcpTool",[173,604,605],{"class":386}," }",[173,607,608],{"class":371}," from",[173,610,611],{"class":386}," '",[173,613,614],{"class":405},"@nuxtjs\u002Fmcp-toolkit\u002Fserver",[173,616,617],{"class":386},"'\n",[173,619,620],{"class":175,"line":182},[173,621,186],{"emptyLinePlaceholder":185},[173,623,624,628,632],{"class":175,"line":189},[173,625,627],{"class":626},"spNyl","interface",[173,629,631],{"class":630},"sBMFI"," CounterSession",[173,633,424],{"class":386},[173,635,636,639,641],{"class":175,"line":195},[173,637,638],{"class":392},"  counter",[173,640,396],{"class":386},[173,642,643],{"class":630}," number\n",[173,645,646],{"class":175,"line":201},[173,647,648],{"class":386},"}\n",[173,650,651],{"class":175,"line":207},[173,652,186],{"emptyLinePlaceholder":185},[173,654,655,657,659,661,663],{"class":175,"line":213},[173,656,372],{"class":371},[173,658,375],{"class":371},[173,660,602],{"class":378},[173,662,383],{"class":382},[173,664,387],{"class":386},[173,666,667,670,672,674,677,679],{"class":175,"line":219},[173,668,669],{"class":392},"  name",[173,671,396],{"class":386},[173,673,611],{"class":386},[173,675,676],{"class":405},"increment",[173,678,402],{"class":386},[173,680,414],{"class":386},[173,682,683,686,688,690,693,695],{"class":175,"line":225},[173,684,685],{"class":392},"  description",[173,687,396],{"class":386},[173,689,611],{"class":386},[173,691,692],{"class":405},"Increment a per-session counter",[173,694,402],{"class":386},[173,696,414],{"class":386},[173,698,699,702,704,707,710,713],{"class":175,"line":231},[173,700,701],{"class":378},"  handler",[173,703,396],{"class":386},[173,705,706],{"class":626}," async",[173,708,709],{"class":386}," ()",[173,711,712],{"class":626}," =>",[173,714,424],{"class":386},[173,716,717,720,723,726,729,732,735,738],{"class":175,"line":236},[173,718,719],{"class":626},"    const",[173,721,722],{"class":382}," session",[173,724,725],{"class":386}," =",[173,727,728],{"class":378}," useMcpSession",[173,730,731],{"class":386},"\u003C",[173,733,734],{"class":630},"CounterSession",[173,736,737],{"class":386},">",[173,739,740],{"class":392},"()\n",[173,742,744,746,749,751,754,756,759,762,764,766,769,771,774,777],{"class":175,"line":743},12,[173,745,719],{"class":626},[173,747,748],{"class":382}," count",[173,750,725],{"class":386},[173,752,753],{"class":371}," await",[173,755,722],{"class":382},[173,757,758],{"class":386},".",[173,760,761],{"class":378},"get",[173,763,383],{"class":392},[173,765,402],{"class":386},[173,767,768],{"class":405},"counter",[173,770,402],{"class":386},[173,772,773],{"class":392},") ",[173,775,776],{"class":386},"??",[173,778,779],{"class":525}," 0\n",[173,781,783,786,788,790,793,795,797,799,801,803,805,808,811],{"class":175,"line":782},13,[173,784,785],{"class":371},"    await",[173,787,722],{"class":382},[173,789,758],{"class":386},[173,791,792],{"class":378},"set",[173,794,383],{"class":392},[173,796,402],{"class":386},[173,798,768],{"class":405},[173,800,402],{"class":386},[173,802,539],{"class":386},[173,804,748],{"class":382},[173,806,807],{"class":386}," +",[173,809,810],{"class":525}," 1",[173,812,450],{"class":392},[173,814,816,819,822,825,828,831,834,836],{"class":175,"line":815},14,[173,817,818],{"class":371},"    return",[173,820,821],{"class":386}," `",[173,823,824],{"class":405},"Counter: ",[173,826,827],{"class":386},"${",[173,829,830],{"class":382},"count ",[173,832,833],{"class":386},"+",[173,835,810],{"class":525},[173,837,838],{"class":386},"}`\n",[173,840,842],{"class":175,"line":841},15,[173,843,442],{"class":386},[173,845,847,849],{"class":175,"line":846},16,[173,848,447],{"class":386},[173,850,450],{"class":382},[150,852,853],{},"TypeScript 将强制执行以下规则：",[248,855,856,865,871],{},[251,857,858,861,862],{},[170,859,860],{},"session.get('counter')"," 返回 ",[170,863,864],{},"number | null",[251,866,867,870],{},[170,868,869],{},"session.set('counter', 'wrong')"," 会导致编译错误",[251,872,873,870],{},[170,874,875],{},"session.get('unknown_key')",[579,877,878],{"id":878},"非类型化会话",[150,880,881],{},"不使用泛型时，存储接受任何字符串键和未类型化的值：",[162,883,885],{"className":362,"code":884,"language":364,"meta":168,"style":168},"const session = useMcpSession()\nawait session.set('key', { any: 'value' })\nconst data = await session.get('key')\n",[170,886,887,902,942],{"__ignoreMap":168},[173,888,889,892,895,898,900],{"class":175,"line":176},[173,890,891],{"class":626},"const",[173,893,894],{"class":382}," session ",[173,896,897],{"class":386},"=",[173,899,728],{"class":378},[173,901,740],{"class":382},[173,903,904,907,909,911,913,915,917,920,922,924,926,929,931,933,936,938,940],{"class":175,"line":182},[173,905,906],{"class":371},"await",[173,908,722],{"class":382},[173,910,758],{"class":386},[173,912,792],{"class":378},[173,914,383],{"class":382},[173,916,402],{"class":386},[173,918,919],{"class":405},"key",[173,921,402],{"class":386},[173,923,539],{"class":386},[173,925,599],{"class":386},[173,927,928],{"class":392}," any",[173,930,396],{"class":386},[173,932,611],{"class":386},[173,934,935],{"class":405},"value",[173,937,402],{"class":386},[173,939,605],{"class":386},[173,941,450],{"class":382},[173,943,944,946,949,951,953,955,957,959,961,963,965,967],{"class":175,"line":189},[173,945,891],{"class":626},[173,947,948],{"class":382}," data ",[173,950,897],{"class":386},[173,952,753],{"class":371},[173,954,722],{"class":382},[173,956,758],{"class":386},[173,958,761],{"class":378},[173,960,383],{"class":382},[173,962,402],{"class":386},[173,964,919],{"class":405},[173,966,402],{"class":386},[173,968,450],{"class":382},[579,970,972],{"id":971},"api-参考","API 参考",[276,974,975,985],{},[279,976,977],{},[282,978,979,982],{},[285,980,981],{},"方法",[285,983,984],{},"描述",[291,986,987,1001,1011,1021,1031,1041,1051],{},[282,988,989,994],{},[296,990,991],{},[170,992,993],{},"get(key)",[296,995,996,997,1000],{},"按键检索值（如果不存在则返回 ",[170,998,999],{},"null","）",[282,1002,1003,1008],{},[296,1004,1005],{},[170,1006,1007],{},"set(key, value)",[296,1009,1010],{},"为指定键存储一个值",[282,1012,1013,1018],{},[296,1014,1015],{},[170,1016,1017],{},"remove(key)",[296,1019,1020],{},"从会话中删除一个键",[282,1022,1023,1028],{},[296,1024,1025],{},[170,1026,1027],{},"has(key)",[296,1029,1030],{},"检查键是否存在",[282,1032,1033,1038],{},[296,1034,1035],{},[170,1036,1037],{},"keys()",[296,1039,1040],{},"列出会话中的所有键",[282,1042,1043,1048],{},[296,1044,1045],{},[170,1046,1047],{},"clear()",[296,1049,1050],{},"移除会话中的所有数据",[282,1052,1053,1058],{},[296,1054,1055],{},[170,1056,1057],{},"storage",[296,1059,1060],{},"访问底层的 unstorage 实例",[150,1062,1063,1064,1066,1067,1070],{},"除 ",[170,1065,1057],{}," 外，所有方法均为异步方法并返回一个 ",[170,1068,1069],{},"Promise","。",[145,1072,111],{"id":111},[579,1074,1075],{"id":1075},"记事本",[150,1077,1078],{},"一对工具，允许 AI 在对话期间做笔记并在稍后检索它们：",[162,1080,1083],{"className":362,"code":1081,"filename":1082,"language":364,"meta":168,"style":168},"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",[170,1084,1085,1105,1123,1127,1136,1167,1171,1175,1187,1202,1217,1226,1262,1266,1288,1307,1340,1388,1413,1440,1445],{"__ignoreMap":168},[173,1086,1087,1089,1091,1094,1096,1098,1100,1103],{"class":175,"line":176},[173,1088,596],{"class":371},[173,1090,599],{"class":386},[173,1092,1093],{"class":382}," z",[173,1095,605],{"class":386},[173,1097,608],{"class":371},[173,1099,611],{"class":386},[173,1101,1102],{"class":405},"zod",[173,1104,617],{"class":386},[173,1106,1107,1109,1111,1113,1115,1117,1119,1121],{"class":175,"line":182},[173,1108,596],{"class":371},[173,1110,599],{"class":386},[173,1112,602],{"class":382},[173,1114,605],{"class":386},[173,1116,608],{"class":371},[173,1118,611],{"class":386},[173,1120,614],{"class":405},[173,1122,617],{"class":386},[173,1124,1125],{"class":175,"line":189},[173,1126,186],{"emptyLinePlaceholder":185},[173,1128,1129,1131,1134],{"class":175,"line":195},[173,1130,627],{"class":626},[173,1132,1133],{"class":630}," NotesSession",[173,1135,424],{"class":386},[173,1137,1138,1141,1143,1145,1148,1150,1153,1155,1158,1160,1162,1164],{"class":175,"line":201},[173,1139,1140],{"class":392},"  notes",[173,1142,396],{"class":386},[173,1144,599],{"class":386},[173,1146,1147],{"class":392}," text",[173,1149,396],{"class":386},[173,1151,1152],{"class":630}," string",[173,1154,539],{"class":386},[173,1156,1157],{"class":392}," createdAt",[173,1159,396],{"class":386},[173,1161,1152],{"class":630},[173,1163,605],{"class":386},[173,1165,1166],{"class":382},"[]\n",[173,1168,1169],{"class":175,"line":207},[173,1170,648],{"class":386},[173,1172,1173],{"class":175,"line":213},[173,1174,186],{"emptyLinePlaceholder":185},[173,1176,1177,1179,1181,1183,1185],{"class":175,"line":219},[173,1178,372],{"class":371},[173,1180,375],{"class":371},[173,1182,602],{"class":378},[173,1184,383],{"class":382},[173,1186,387],{"class":386},[173,1188,1189,1191,1193,1195,1198,1200],{"class":175,"line":225},[173,1190,669],{"class":392},[173,1192,396],{"class":386},[173,1194,611],{"class":386},[173,1196,1197],{"class":405},"add_note",[173,1199,402],{"class":386},[173,1201,414],{"class":386},[173,1203,1204,1206,1208,1210,1213,1215],{"class":175,"line":231},[173,1205,685],{"class":392},[173,1207,396],{"class":386},[173,1209,611],{"class":386},[173,1211,1212],{"class":405},"Add a note to the session notepad",[173,1214,402],{"class":386},[173,1216,414],{"class":386},[173,1218,1219,1222,1224],{"class":175,"line":236},[173,1220,1221],{"class":392},"  inputSchema",[173,1223,396],{"class":386},[173,1225,424],{"class":386},[173,1227,1228,1231,1233,1235,1237,1240,1243,1245,1248,1250,1252,1255,1257,1260],{"class":175,"line":743},[173,1229,1230],{"class":392},"    note",[173,1232,396],{"class":386},[173,1234,1093],{"class":382},[173,1236,758],{"class":386},[173,1238,1239],{"class":378},"string",[173,1241,1242],{"class":382},"()",[173,1244,758],{"class":386},[173,1246,1247],{"class":378},"describe",[173,1249,383],{"class":382},[173,1251,402],{"class":386},[173,1253,1254],{"class":405},"The note content",[173,1256,402],{"class":386},[173,1258,1259],{"class":382},")",[173,1261,414],{"class":386},[173,1263,1264],{"class":175,"line":782},[173,1265,442],{"class":386},[173,1267,1268,1270,1272,1274,1277,1281,1284,1286],{"class":175,"line":815},[173,1269,701],{"class":378},[173,1271,396],{"class":386},[173,1273,706],{"class":626},[173,1275,1276],{"class":386}," ({",[173,1278,1280],{"class":1279},"sHdIc"," note",[173,1282,1283],{"class":386}," })",[173,1285,712],{"class":626},[173,1287,424],{"class":386},[173,1289,1290,1292,1294,1296,1298,1300,1303,1305],{"class":175,"line":841},[173,1291,719],{"class":626},[173,1293,722],{"class":382},[173,1295,725],{"class":386},[173,1297,728],{"class":378},[173,1299,731],{"class":386},[173,1301,1302],{"class":630},"NotesSession",[173,1304,737],{"class":386},[173,1306,740],{"class":392},[173,1308,1309,1311,1314,1316,1318,1320,1322,1324,1326,1328,1331,1333,1335,1337],{"class":175,"line":846},[173,1310,719],{"class":626},[173,1312,1313],{"class":382}," notes",[173,1315,725],{"class":386},[173,1317,753],{"class":371},[173,1319,722],{"class":382},[173,1321,758],{"class":386},[173,1323,761],{"class":378},[173,1325,383],{"class":392},[173,1327,402],{"class":386},[173,1329,1330],{"class":405},"notes",[173,1332,402],{"class":386},[173,1334,773],{"class":392},[173,1336,776],{"class":386},[173,1338,1339],{"class":392}," []\n",[173,1341,1343,1346,1348,1351,1353,1356,1358,1360,1362,1364,1366,1368,1371,1374,1376,1378,1381,1384,1386],{"class":175,"line":1342},17,[173,1344,1345],{"class":382},"    notes",[173,1347,758],{"class":386},[173,1349,1350],{"class":378},"push",[173,1352,383],{"class":392},[173,1354,1355],{"class":386},"{",[173,1357,1147],{"class":392},[173,1359,396],{"class":386},[173,1361,1280],{"class":382},[173,1363,539],{"class":386},[173,1365,1157],{"class":392},[173,1367,396],{"class":386},[173,1369,1370],{"class":386}," new",[173,1372,1373],{"class":378}," Date",[173,1375,1242],{"class":392},[173,1377,758],{"class":386},[173,1379,1380],{"class":378},"toISOString",[173,1382,1383],{"class":392},"() ",[173,1385,447],{"class":386},[173,1387,450],{"class":392},[173,1389,1391,1393,1395,1397,1399,1401,1403,1405,1407,1409,1411],{"class":175,"line":1390},18,[173,1392,785],{"class":371},[173,1394,722],{"class":382},[173,1396,758],{"class":386},[173,1398,792],{"class":378},[173,1400,383],{"class":392},[173,1402,402],{"class":386},[173,1404,1330],{"class":405},[173,1406,402],{"class":386},[173,1408,539],{"class":386},[173,1410,1313],{"class":382},[173,1412,450],{"class":392},[173,1414,1416,1418,1420,1423,1425,1427,1429,1432,1434,1437],{"class":175,"line":1415},19,[173,1417,818],{"class":371},[173,1419,821],{"class":386},[173,1421,1422],{"class":405},"Note added (",[173,1424,827],{"class":386},[173,1426,1330],{"class":382},[173,1428,758],{"class":386},[173,1430,1431],{"class":382},"length",[173,1433,447],{"class":386},[173,1435,1436],{"class":405}," total).",[173,1438,1439],{"class":386},"`\n",[173,1441,1443],{"class":175,"line":1442},20,[173,1444,442],{"class":386},[173,1446,1448,1450],{"class":175,"line":1447},21,[173,1449,447],{"class":386},[173,1451,450],{"class":382},[162,1453,1456],{"className":362,"code":1454,"filename":1455,"language":364,"meta":168,"style":168},"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",[170,1457,1458,1476,1480,1488,1514,1518,1522,1534,1549,1564,1578,1596,1626,1658,1665,1669],{"__ignoreMap":168},[173,1459,1460,1462,1464,1466,1468,1470,1472,1474],{"class":175,"line":176},[173,1461,596],{"class":371},[173,1463,599],{"class":386},[173,1465,602],{"class":382},[173,1467,605],{"class":386},[173,1469,608],{"class":371},[173,1471,611],{"class":386},[173,1473,614],{"class":405},[173,1475,617],{"class":386},[173,1477,1478],{"class":175,"line":182},[173,1479,186],{"emptyLinePlaceholder":185},[173,1481,1482,1484,1486],{"class":175,"line":189},[173,1483,627],{"class":626},[173,1485,1133],{"class":630},[173,1487,424],{"class":386},[173,1489,1490,1492,1494,1496,1498,1500,1502,1504,1506,1508,1510,1512],{"class":175,"line":195},[173,1491,1140],{"class":392},[173,1493,396],{"class":386},[173,1495,599],{"class":386},[173,1497,1147],{"class":392},[173,1499,396],{"class":386},[173,1501,1152],{"class":630},[173,1503,539],{"class":386},[173,1505,1157],{"class":392},[173,1507,396],{"class":386},[173,1509,1152],{"class":630},[173,1511,605],{"class":386},[173,1513,1166],{"class":382},[173,1515,1516],{"class":175,"line":201},[173,1517,648],{"class":386},[173,1519,1520],{"class":175,"line":207},[173,1521,186],{"emptyLinePlaceholder":185},[173,1523,1524,1526,1528,1530,1532],{"class":175,"line":213},[173,1525,372],{"class":371},[173,1527,375],{"class":371},[173,1529,602],{"class":378},[173,1531,383],{"class":382},[173,1533,387],{"class":386},[173,1535,1536,1538,1540,1542,1545,1547],{"class":175,"line":219},[173,1537,669],{"class":392},[173,1539,396],{"class":386},[173,1541,611],{"class":386},[173,1543,1544],{"class":405},"get_notes",[173,1546,402],{"class":386},[173,1548,414],{"class":386},[173,1550,1551,1553,1555,1557,1560,1562],{"class":175,"line":225},[173,1552,685],{"class":392},[173,1554,396],{"class":386},[173,1556,611],{"class":386},[173,1558,1559],{"class":405},"Retrieve all notes from the session notepad",[173,1561,402],{"class":386},[173,1563,414],{"class":386},[173,1565,1566,1568,1570,1572,1574,1576],{"class":175,"line":231},[173,1567,701],{"class":378},[173,1569,396],{"class":386},[173,1571,706],{"class":626},[173,1573,709],{"class":386},[173,1575,712],{"class":626},[173,1577,424],{"class":386},[173,1579,1580,1582,1584,1586,1588,1590,1592,1594],{"class":175,"line":236},[173,1581,719],{"class":626},[173,1583,722],{"class":382},[173,1585,725],{"class":386},[173,1587,728],{"class":378},[173,1589,731],{"class":386},[173,1591,1302],{"class":630},[173,1593,737],{"class":386},[173,1595,740],{"class":392},[173,1597,1598,1600,1602,1604,1606,1608,1610,1612,1614,1616,1618,1620,1622,1624],{"class":175,"line":743},[173,1599,719],{"class":626},[173,1601,1313],{"class":382},[173,1603,725],{"class":386},[173,1605,753],{"class":371},[173,1607,722],{"class":382},[173,1609,758],{"class":386},[173,1611,761],{"class":378},[173,1613,383],{"class":392},[173,1615,402],{"class":386},[173,1617,1330],{"class":405},[173,1619,402],{"class":386},[173,1621,773],{"class":392},[173,1623,776],{"class":386},[173,1625,1339],{"class":392},[173,1627,1628,1631,1634,1636,1638,1640,1643,1646,1648,1651,1653,1656],{"class":175,"line":782},[173,1629,1630],{"class":371},"    if",[173,1632,1633],{"class":392}," (",[173,1635,1330],{"class":382},[173,1637,758],{"class":386},[173,1639,1431],{"class":382},[173,1641,1642],{"class":386}," ===",[173,1644,1645],{"class":525}," 0",[173,1647,773],{"class":392},[173,1649,1650],{"class":371},"return",[173,1652,611],{"class":386},[173,1654,1655],{"class":405},"No notes yet.",[173,1657,617],{"class":386},[173,1659,1660,1662],{"class":175,"line":815},[173,1661,818],{"class":371},[173,1663,1664],{"class":382}," notes\n",[173,1666,1667],{"class":175,"line":841},[173,1668,442],{"class":386},[173,1670,1671,1673],{"class":175,"line":846},[173,1672,447],{"class":386},[173,1674,450],{"class":382},[579,1676,1677],{"id":1677},"多步骤向导",[150,1679,1680],{},"引导用户完成多步骤表单，其中每个步骤都依赖于上一步：",[162,1682,1685],{"className":362,"code":1683,"filename":1684,"language":364,"meta":168,"style":168},"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",[170,1686,1687,1705,1723,1727,1736,1745,1755,1764,1768,1772,1784,1799,1814,1822,1854,1858,1877,1896,1929,1933,1949,1975,2001,2024,2030,2035,2052,2078,2104,2133,2164,2169,2174,2186,2191],{"__ignoreMap":168},[173,1688,1689,1691,1693,1695,1697,1699,1701,1703],{"class":175,"line":176},[173,1690,596],{"class":371},[173,1692,599],{"class":386},[173,1694,1093],{"class":382},[173,1696,605],{"class":386},[173,1698,608],{"class":371},[173,1700,611],{"class":386},[173,1702,1102],{"class":405},[173,1704,617],{"class":386},[173,1706,1707,1709,1711,1713,1715,1717,1719,1721],{"class":175,"line":182},[173,1708,596],{"class":371},[173,1710,599],{"class":386},[173,1712,602],{"class":382},[173,1714,605],{"class":386},[173,1716,608],{"class":371},[173,1718,611],{"class":386},[173,1720,614],{"class":405},[173,1722,617],{"class":386},[173,1724,1725],{"class":175,"line":189},[173,1726,186],{"emptyLinePlaceholder":185},[173,1728,1729,1731,1734],{"class":175,"line":195},[173,1730,627],{"class":626},[173,1732,1733],{"class":630}," WizardSession",[173,1735,424],{"class":386},[173,1737,1738,1741,1743],{"class":175,"line":201},[173,1739,1740],{"class":392},"  step",[173,1742,396],{"class":386},[173,1744,643],{"class":630},[173,1746,1747,1750,1752],{"class":175,"line":207},[173,1748,1749],{"class":392},"  projectName",[173,1751,396],{"class":386},[173,1753,1754],{"class":630}," string\n",[173,1756,1757,1760,1762],{"class":175,"line":213},[173,1758,1759],{"class":392},"  framework",[173,1761,396],{"class":386},[173,1763,1754],{"class":630},[173,1765,1766],{"class":175,"line":219},[173,1767,648],{"class":386},[173,1769,1770],{"class":175,"line":225},[173,1771,186],{"emptyLinePlaceholder":185},[173,1773,1774,1776,1778,1780,1782],{"class":175,"line":231},[173,1775,372],{"class":371},[173,1777,375],{"class":371},[173,1779,602],{"class":378},[173,1781,383],{"class":382},[173,1783,387],{"class":386},[173,1785,1786,1788,1790,1792,1795,1797],{"class":175,"line":236},[173,1787,669],{"class":392},[173,1789,396],{"class":386},[173,1791,611],{"class":386},[173,1793,1794],{"class":405},"wizard_next",[173,1796,402],{"class":386},[173,1798,414],{"class":386},[173,1800,1801,1803,1805,1807,1810,1812],{"class":175,"line":743},[173,1802,685],{"class":392},[173,1804,396],{"class":386},[173,1806,611],{"class":386},[173,1808,1809],{"class":405},"Advance to the next step of the project setup wizard",[173,1811,402],{"class":386},[173,1813,414],{"class":386},[173,1815,1816,1818,1820],{"class":175,"line":782},[173,1817,1221],{"class":392},[173,1819,396],{"class":386},[173,1821,424],{"class":386},[173,1823,1824,1827,1829,1831,1833,1835,1837,1839,1841,1843,1845,1848,1850,1852],{"class":175,"line":815},[173,1825,1826],{"class":392},"    answer",[173,1828,396],{"class":386},[173,1830,1093],{"class":382},[173,1832,758],{"class":386},[173,1834,1239],{"class":378},[173,1836,1242],{"class":382},[173,1838,758],{"class":386},[173,1840,1247],{"class":378},[173,1842,383],{"class":382},[173,1844,402],{"class":386},[173,1846,1847],{"class":405},"Answer for the current step",[173,1849,402],{"class":386},[173,1851,1259],{"class":382},[173,1853,414],{"class":386},[173,1855,1856],{"class":175,"line":841},[173,1857,442],{"class":386},[173,1859,1860,1862,1864,1866,1868,1871,1873,1875],{"class":175,"line":846},[173,1861,701],{"class":378},[173,1863,396],{"class":386},[173,1865,706],{"class":626},[173,1867,1276],{"class":386},[173,1869,1870],{"class":1279}," answer",[173,1872,1283],{"class":386},[173,1874,712],{"class":626},[173,1876,424],{"class":386},[173,1878,1879,1881,1883,1885,1887,1889,1892,1894],{"class":175,"line":1342},[173,1880,719],{"class":626},[173,1882,722],{"class":382},[173,1884,725],{"class":386},[173,1886,728],{"class":378},[173,1888,731],{"class":386},[173,1890,1891],{"class":630},"WizardSession",[173,1893,737],{"class":386},[173,1895,740],{"class":392},[173,1897,1898,1900,1903,1905,1907,1909,1911,1913,1915,1917,1920,1922,1924,1926],{"class":175,"line":1390},[173,1899,719],{"class":626},[173,1901,1902],{"class":382}," step",[173,1904,725],{"class":386},[173,1906,753],{"class":371},[173,1908,722],{"class":382},[173,1910,758],{"class":386},[173,1912,761],{"class":378},[173,1914,383],{"class":392},[173,1916,402],{"class":386},[173,1918,1919],{"class":405},"step",[173,1921,402],{"class":386},[173,1923,773],{"class":392},[173,1925,776],{"class":386},[173,1927,1928],{"class":525}," 1\n",[173,1930,1931],{"class":175,"line":1415},[173,1932,186],{"emptyLinePlaceholder":185},[173,1934,1935,1937,1939,1941,1943,1945,1947],{"class":175,"line":1442},[173,1936,1630],{"class":371},[173,1938,1633],{"class":392},[173,1940,1919],{"class":382},[173,1942,1642],{"class":386},[173,1944,810],{"class":525},[173,1946,773],{"class":392},[173,1948,387],{"class":386},[173,1950,1951,1954,1956,1958,1960,1962,1964,1967,1969,1971,1973],{"class":175,"line":1447},[173,1952,1953],{"class":371},"      await",[173,1955,722],{"class":382},[173,1957,758],{"class":386},[173,1959,792],{"class":378},[173,1961,383],{"class":392},[173,1963,402],{"class":386},[173,1965,1966],{"class":405},"projectName",[173,1968,402],{"class":386},[173,1970,539],{"class":386},[173,1972,1870],{"class":382},[173,1974,450],{"class":392},[173,1976,1978,1980,1982,1984,1986,1988,1990,1992,1994,1996,1999],{"class":175,"line":1977},22,[173,1979,1953],{"class":371},[173,1981,722],{"class":382},[173,1983,758],{"class":386},[173,1985,792],{"class":378},[173,1987,383],{"class":392},[173,1989,402],{"class":386},[173,1991,1919],{"class":405},[173,1993,402],{"class":386},[173,1995,539],{"class":386},[173,1997,1998],{"class":525}," 2",[173,2000,450],{"class":392},[173,2002,2004,2007,2009,2012,2014,2017,2019,2022],{"class":175,"line":2003},23,[173,2005,2006],{"class":371},"      return",[173,2008,821],{"class":386},[173,2010,2011],{"class":405},"Project name set to \"",[173,2013,827],{"class":386},[173,2015,2016],{"class":382},"answer",[173,2018,447],{"class":386},[173,2020,2021],{"class":405},"\". Step 2: Choose a framework (nuxt, next, svelte).",[173,2023,1439],{"class":386},[173,2025,2027],{"class":175,"line":2026},24,[173,2028,2029],{"class":386},"    }\n",[173,2031,2033],{"class":175,"line":2032},25,[173,2034,186],{"emptyLinePlaceholder":185},[173,2036,2038,2040,2042,2044,2046,2048,2050],{"class":175,"line":2037},26,[173,2039,1630],{"class":371},[173,2041,1633],{"class":392},[173,2043,1919],{"class":382},[173,2045,1642],{"class":386},[173,2047,1998],{"class":525},[173,2049,773],{"class":392},[173,2051,387],{"class":386},[173,2053,2055,2057,2059,2061,2063,2065,2067,2070,2072,2074,2076],{"class":175,"line":2054},27,[173,2056,1953],{"class":371},[173,2058,722],{"class":382},[173,2060,758],{"class":386},[173,2062,792],{"class":378},[173,2064,383],{"class":392},[173,2066,402],{"class":386},[173,2068,2069],{"class":405},"framework",[173,2071,402],{"class":386},[173,2073,539],{"class":386},[173,2075,1870],{"class":382},[173,2077,450],{"class":392},[173,2079,2081,2083,2085,2087,2089,2091,2093,2095,2097,2099,2102],{"class":175,"line":2080},28,[173,2082,1953],{"class":371},[173,2084,722],{"class":382},[173,2086,758],{"class":386},[173,2088,792],{"class":378},[173,2090,383],{"class":392},[173,2092,402],{"class":386},[173,2094,1919],{"class":405},[173,2096,402],{"class":386},[173,2098,539],{"class":386},[173,2100,2101],{"class":525}," 3",[173,2103,450],{"class":392},[173,2105,2107,2110,2113,2115,2117,2119,2121,2123,2125,2127,2129,2131],{"class":175,"line":2106},29,[173,2108,2109],{"class":626},"      const",[173,2111,2112],{"class":382}," name",[173,2114,725],{"class":386},[173,2116,753],{"class":371},[173,2118,722],{"class":382},[173,2120,758],{"class":386},[173,2122,761],{"class":378},[173,2124,383],{"class":392},[173,2126,402],{"class":386},[173,2128,1966],{"class":405},[173,2130,402],{"class":386},[173,2132,450],{"class":392},[173,2134,2136,2138,2140,2143,2145,2148,2150,2153,2155,2157,2159,2162],{"class":175,"line":2135},30,[173,2137,2006],{"class":371},[173,2139,821],{"class":386},[173,2141,2142],{"class":405},"Creating \"",[173,2144,827],{"class":386},[173,2146,2147],{"class":382},"name",[173,2149,447],{"class":386},[173,2151,2152],{"class":405},"\" with ",[173,2154,827],{"class":386},[173,2156,2016],{"class":382},[173,2158,447],{"class":386},[173,2160,2161],{"class":405},". Setup complete!",[173,2163,1439],{"class":386},[173,2165,2167],{"class":175,"line":2166},31,[173,2168,2029],{"class":386},[173,2170,2172],{"class":175,"line":2171},32,[173,2173,186],{"emptyLinePlaceholder":185},[173,2175,2177,2179,2181,2184],{"class":175,"line":2176},33,[173,2178,818],{"class":371},[173,2180,611],{"class":386},[173,2182,2183],{"class":405},"Wizard already completed. Use session.clear() to restart.",[173,2185,617],{"class":386},[173,2187,2189],{"class":175,"line":2188},34,[173,2190,442],{"class":386},[173,2192,2194,2196],{"class":175,"line":2193},35,[173,2195,447],{"class":386},[173,2197,450],{"class":382},[579,2199,2200],{"id":2200},"用户偏好",[150,2202,2203],{},"在会话持续期间记住用户偏好：",[162,2205,2208],{"className":362,"code":2206,"filename":2207,"language":364,"meta":168,"style":168},"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",[170,2209,2210,2228,2246,2250,2259,2268,2278,2282,2286,2298,2313,2328,2336,2375,2414,2418,2442,2461,2494,2533,2544,2548],{"__ignoreMap":168},[173,2211,2212,2214,2216,2218,2220,2222,2224,2226],{"class":175,"line":176},[173,2213,596],{"class":371},[173,2215,599],{"class":386},[173,2217,1093],{"class":382},[173,2219,605],{"class":386},[173,2221,608],{"class":371},[173,2223,611],{"class":386},[173,2225,1102],{"class":405},[173,2227,617],{"class":386},[173,2229,2230,2232,2234,2236,2238,2240,2242,2244],{"class":175,"line":182},[173,2231,596],{"class":371},[173,2233,599],{"class":386},[173,2235,602],{"class":382},[173,2237,605],{"class":386},[173,2239,608],{"class":371},[173,2241,611],{"class":386},[173,2243,614],{"class":405},[173,2245,617],{"class":386},[173,2247,2248],{"class":175,"line":189},[173,2249,186],{"emptyLinePlaceholder":185},[173,2251,2252,2254,2257],{"class":175,"line":195},[173,2253,627],{"class":626},[173,2255,2256],{"class":630}," PreferencesSession",[173,2258,424],{"class":386},[173,2260,2261,2264,2266],{"class":175,"line":201},[173,2262,2263],{"class":392},"  language",[173,2265,396],{"class":386},[173,2267,1754],{"class":630},[173,2269,2270,2273,2275],{"class":175,"line":207},[173,2271,2272],{"class":392},"  verbose",[173,2274,396],{"class":386},[173,2276,2277],{"class":630}," boolean\n",[173,2279,2280],{"class":175,"line":213},[173,2281,648],{"class":386},[173,2283,2284],{"class":175,"line":219},[173,2285,186],{"emptyLinePlaceholder":185},[173,2287,2288,2290,2292,2294,2296],{"class":175,"line":225},[173,2289,372],{"class":371},[173,2291,375],{"class":371},[173,2293,602],{"class":378},[173,2295,383],{"class":382},[173,2297,387],{"class":386},[173,2299,2300,2302,2304,2306,2309,2311],{"class":175,"line":231},[173,2301,669],{"class":392},[173,2303,396],{"class":386},[173,2305,611],{"class":386},[173,2307,2308],{"class":405},"set_preference",[173,2310,402],{"class":386},[173,2312,414],{"class":386},[173,2314,2315,2317,2319,2321,2324,2326],{"class":175,"line":236},[173,2316,685],{"class":392},[173,2318,396],{"class":386},[173,2320,611],{"class":386},[173,2322,2323],{"class":405},"Set a user preference for this session",[173,2325,402],{"class":386},[173,2327,414],{"class":386},[173,2329,2330,2332,2334],{"class":175,"line":743},[173,2331,1221],{"class":392},[173,2333,396],{"class":386},[173,2335,424],{"class":386},[173,2337,2338,2341,2343,2345,2347,2349,2351,2353,2356,2358,2360,2362,2364,2366,2369,2371,2373],{"class":175,"line":782},[173,2339,2340],{"class":392},"    language",[173,2342,396],{"class":386},[173,2344,1093],{"class":382},[173,2346,758],{"class":386},[173,2348,1239],{"class":378},[173,2350,1242],{"class":382},[173,2352,758],{"class":386},[173,2354,2355],{"class":378},"optional",[173,2357,1242],{"class":382},[173,2359,758],{"class":386},[173,2361,1247],{"class":378},[173,2363,383],{"class":382},[173,2365,402],{"class":386},[173,2367,2368],{"class":405},"Preferred response language",[173,2370,402],{"class":386},[173,2372,1259],{"class":382},[173,2374,414],{"class":386},[173,2376,2377,2380,2382,2384,2386,2389,2391,2393,2395,2397,2399,2401,2403,2405,2408,2410,2412],{"class":175,"line":815},[173,2378,2379],{"class":392},"    verbose",[173,2381,396],{"class":386},[173,2383,1093],{"class":382},[173,2385,758],{"class":386},[173,2387,2388],{"class":378},"boolean",[173,2390,1242],{"class":382},[173,2392,758],{"class":386},[173,2394,2355],{"class":378},[173,2396,1242],{"class":382},[173,2398,758],{"class":386},[173,2400,1247],{"class":378},[173,2402,383],{"class":382},[173,2404,402],{"class":386},[173,2406,2407],{"class":405},"Enable verbose output",[173,2409,402],{"class":386},[173,2411,1259],{"class":382},[173,2413,414],{"class":386},[173,2415,2416],{"class":175,"line":841},[173,2417,442],{"class":386},[173,2419,2420,2422,2424,2426,2428,2431,2433,2436,2438,2440],{"class":175,"line":846},[173,2421,701],{"class":378},[173,2423,396],{"class":386},[173,2425,706],{"class":626},[173,2427,1276],{"class":386},[173,2429,2430],{"class":1279}," language",[173,2432,539],{"class":386},[173,2434,2435],{"class":1279}," verbose",[173,2437,1283],{"class":386},[173,2439,712],{"class":626},[173,2441,424],{"class":386},[173,2443,2444,2446,2448,2450,2452,2454,2457,2459],{"class":175,"line":1342},[173,2445,719],{"class":626},[173,2447,722],{"class":382},[173,2449,725],{"class":386},[173,2451,728],{"class":378},[173,2453,731],{"class":386},[173,2455,2456],{"class":630},"PreferencesSession",[173,2458,737],{"class":386},[173,2460,740],{"class":392},[173,2462,2463,2465,2467,2470,2472,2474,2476,2478,2480,2482,2484,2486,2488,2490,2492],{"class":175,"line":1390},[173,2464,1630],{"class":371},[173,2466,1633],{"class":392},[173,2468,2469],{"class":382},"language",[173,2471,773],{"class":392},[173,2473,906],{"class":371},[173,2475,722],{"class":382},[173,2477,758],{"class":386},[173,2479,792],{"class":378},[173,2481,383],{"class":392},[173,2483,402],{"class":386},[173,2485,2469],{"class":405},[173,2487,402],{"class":386},[173,2489,539],{"class":386},[173,2491,2430],{"class":382},[173,2493,450],{"class":392},[173,2495,2496,2498,2500,2503,2506,2509,2511,2513,2515,2517,2519,2521,2523,2525,2527,2529,2531],{"class":175,"line":1415},[173,2497,1630],{"class":371},[173,2499,1633],{"class":392},[173,2501,2502],{"class":382},"verbose",[173,2504,2505],{"class":386}," !==",[173,2507,2508],{"class":386}," undefined",[173,2510,773],{"class":392},[173,2512,906],{"class":371},[173,2514,722],{"class":382},[173,2516,758],{"class":386},[173,2518,792],{"class":378},[173,2520,383],{"class":392},[173,2522,402],{"class":386},[173,2524,2502],{"class":405},[173,2526,402],{"class":386},[173,2528,539],{"class":386},[173,2530,2435],{"class":382},[173,2532,450],{"class":392},[173,2534,2535,2537,2539,2542],{"class":175,"line":1442},[173,2536,818],{"class":371},[173,2538,611],{"class":386},[173,2540,2541],{"class":405},"Preferences updated.",[173,2543,617],{"class":386},[173,2545,2546],{"class":175,"line":1447},[173,2547,442],{"class":386},[173,2549,2550,2552],{"class":175,"line":1977},[173,2551,447],{"class":386},[173,2553,450],{"class":382},[145,2555,2556],{"id":2556},"自定义存储驱动",[150,2558,2559,2560,2563],{},"默认情况下，会话数据存储在",[154,2561,2562],{},"内存中","。服务器重启时数据会丢失，这对于开发和大多数用例来说是可以接受的。",[150,2565,2566,2567,2569],{},"对于需要持久化或在多个服务器实例间共享状态的生产环境，可以通过标准的 Nitro ",[170,2568,1057],{}," 配置来配置不同的存储后端：",[162,2571,2573],{"className":362,"code":2572,"filename":358,"language":364,"meta":168,"style":168},"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",[170,2574,2575,2587,2605,2614,2623,2637,2653,2669,2674,2678,2682],{"__ignoreMap":168},[173,2576,2577,2579,2581,2583,2585],{"class":175,"line":176},[173,2578,372],{"class":371},[173,2580,375],{"class":371},[173,2582,379],{"class":378},[173,2584,383],{"class":382},[173,2586,387],{"class":386},[173,2588,2589,2591,2593,2595,2598,2600,2602],{"class":175,"line":182},[173,2590,419],{"class":392},[173,2592,396],{"class":386},[173,2594,599],{"class":386},[173,2596,2597],{"class":392}," sessions",[173,2599,396],{"class":386},[173,2601,435],{"class":434},[173,2603,2604],{"class":386}," },\n",[173,2606,2607,2610,2612],{"class":175,"line":189},[173,2608,2609],{"class":392},"  nitro",[173,2611,396],{"class":386},[173,2613,424],{"class":386},[173,2615,2616,2619,2621],{"class":175,"line":195},[173,2617,2618],{"class":392},"    storage",[173,2620,396],{"class":386},[173,2622,424],{"class":386},[173,2624,2625,2628,2631,2633,2635],{"class":175,"line":201},[173,2626,2627],{"class":386},"      '",[173,2629,2630],{"class":392},"mcp:sessions",[173,2632,402],{"class":386},[173,2634,396],{"class":386},[173,2636,424],{"class":386},[173,2638,2639,2642,2644,2646,2649,2651],{"class":175,"line":207},[173,2640,2641],{"class":392},"        driver",[173,2643,396],{"class":386},[173,2645,611],{"class":386},[173,2647,2648],{"class":405},"redis",[173,2650,402],{"class":386},[173,2652,414],{"class":386},[173,2654,2655,2658,2660,2662,2665,2667],{"class":175,"line":213},[173,2656,2657],{"class":392},"        url",[173,2659,396],{"class":386},[173,2661,611],{"class":386},[173,2663,2664],{"class":405},"redis:\u002F\u002Flocalhost:6379",[173,2666,402],{"class":386},[173,2668,414],{"class":386},[173,2670,2671],{"class":175,"line":219},[173,2672,2673],{"class":386},"      },\n",[173,2675,2676],{"class":175,"line":225},[173,2677,548],{"class":386},[173,2679,2680],{"class":175,"line":231},[173,2681,442],{"class":386},[173,2683,2684,2686],{"class":175,"line":236},[173,2685,447],{"class":386},[173,2687,450],{"class":382},[150,2689,2690,2691,2696],{},"可以使用任何 ",[571,2692,2695],{"href":2693,"rel":2694},"https:\u002F\u002Funstorage.unjs.io\u002Fdrivers",[575],"unstorage 驱动","：Redis、文件系统、Cloudflare KV、Vercel KV 等。",[145,2698,2699],{"id":2699},"生命周期与清理",[150,2701,2702,2703,2706],{},"会话数据会在以下情况下",[154,2704,2705],{},"自动清理","：",[248,2708,2709,2715],{},[251,2710,2711,2712,1000],{},"客户端关闭会话（传输层 ",[170,2713,2714],{},"onclose",[251,2716,2717,2718,2721],{},"会话在 ",[170,2719,2720],{},"maxDuration"," 的不活动期后过期（默认：30 分钟）",[150,2723,2724],{},"你无需手动管理清理工作。",[145,2726,2727],{"id":2727},"要求",[345,2729,2732,2737],{"color":2730,"icon":2731},"warning","i-lucide-triangle-alert",[150,2733,2734,2736],{},[170,2735,564],{}," 需要：",[248,2738,2739,2745],{},[251,2740,2741,2742],{},"在配置中启用 ",[170,2743,2744],{},"mcp.sessions",[251,2746,2747,2750,2751,2754],{},[170,2748,2749],{},"nitro.experimental.asyncContext"," 为 ",[170,2752,2753],{},"true","（Nuxt 3.8+ 起默认开启）",[2756,2757,2758],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .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 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":168,"searchDepth":182,"depth":182,"links":2760},[2761,2762,2763,2764,2769,2774,2775,2776],{"id":147,"depth":182,"text":148},{"id":271,"depth":182,"text":271},{"id":352,"depth":182,"text":352},{"id":561,"depth":182,"text":564,"children":2765},[2766,2767,2768],{"id":581,"depth":189,"text":582},{"id":878,"depth":189,"text":878},{"id":971,"depth":189,"text":972},{"id":111,"depth":182,"text":111,"children":2770},[2771,2772,2773],{"id":1075,"depth":189,"text":1075},{"id":1677,"depth":189,"text":1677},{"id":2200,"depth":189,"text":2200},{"id":2556,"depth":182,"text":2556},{"id":2699,"depth":182,"text":2699},{"id":2727,"depth":182,"text":2727},"使用 useMcpSession() 在工具调用之间持久化每个会话的状态。","md",null,{},{"icon":99},{"title":2783,"description":2784},"MCP 会话管理","通过 unstorage 启用有状态的 MCP 会话，支持按会话存储、自动清理以及可插拔的后端。","R2Qa9Q0vm5XrWiMAgFCZHjnz8CFV92_cIT7ONpY8ymQ",[2787,2789],{"title":91,"path":92,"stem":93,"description":2788,"icon":94,"children":-1},"使用 Evalite 和 AI SDK MCP 客户端评估 MCP 工具和工作流。",{"title":101,"path":102,"stem":103,"description":2790,"icon":104,"children":-1},"根据身份验证、角色或请求上下文有条件地注册工具、资源和提示词。",1775615721144]