[{"data":1,"prerenderedAt":1566},["ShallowReactive",2],{"navigation_docs":3,"-tools-errors-caching":282,"-tools-errors-caching-surround":1561},[4,40,70,99,122,156,189,253],{"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},"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},"工具","\u002Ftools","2.tools",[45,50,55,60,65],{"title":46,"path":47,"stem":48,"icon":49},"概览","\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},"注释与输入示例","\u002Ftools\u002Fannotations","2.tools\u002F2.annotations","i-lucide-badge-info",{"title":61,"path":62,"stem":63,"icon":64},"错误与缓存","\u002Ftools\u002Ferrors-caching","2.tools\u002F3.errors-caching","i-lucide-shield",{"title":66,"path":67,"stem":68,"icon":69},"分组、文件与动态注册","\u002Ftools\u002Fgroups-organization","2.tools\u002F4.groups-organization","i-lucide-tags",{"title":71,"path":72,"stem":73,"children":74,"page":39},"资源","\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},"静态资源与结构","\u002Fresources\u002Fstatic-and-structure","3.resources\u002F1.static-and-structure","i-lucide-file-stack",{"title":85,"path":86,"stem":87,"icon":88},"模板与处理程序","\u002Fresources\u002Ftemplates-and-handlers","3.resources\u002F2.templates-and-handlers","i-lucide-git-branch",{"title":90,"path":91,"stem":92,"icon":93},"元数据、内容与错误","\u002Fresources\u002Fcontent-metadata-errors","3.resources\u002F3.content-metadata-errors","i-lucide-layers",{"title":95,"path":96,"stem":97,"icon":98},"分组与组织","\u002Fresources\u002Forganization","3.resources\u002F4.organization","i-lucide-folder-tree",{"title":100,"path":101,"stem":102,"children":103,"page":39},"提示词","\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},"编写与结构","\u002Fprompts\u002Fauthoring","4.prompts\u002F1.authoring","i-lucide-pen-line",{"title":114,"path":115,"stem":116,"icon":93},"输入、处理器与消息","\u002Fprompts\u002Finput-handler-messages","4.prompts\u002F2.input-handler-messages",{"title":118,"path":119,"stem":120,"icon":121},"模式与高级用法","\u002Fprompts\u002Fpatterns-advanced","4.prompts\u002F3.patterns-advanced","i-lucide-line-chart",{"title":123,"path":124,"stem":125,"children":126,"page":39},"处理器","\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},"默认与自定义处理器","\u002Fhandlers\u002Fdefault-and-custom","5.handlers\u002F1.default-and-custom","i-lucide-toggle-left",{"title":137,"path":138,"stem":139,"icon":140},"结构与选项","\u002Fhandlers\u002Fstructure-and-options","5.handlers\u002F2.structure-and-options","i-lucide-sliders-horizontal",{"title":142,"path":143,"stem":144,"icon":145},"示例与路由","\u002Fhandlers\u002Fexamples-routing","5.handlers\u002F3.examples-routing","i-lucide-route",{"title":147,"path":148,"stem":149,"icon":150},"分享与实践","\u002Fhandlers\u002Fsharing-practices","5.handlers\u002F4.sharing-practices","i-lucide-share-2",{"title":152,"path":153,"stem":154,"icon":155},"多处理器组织","\u002Fhandlers\u002Forganization","5.handlers\u002F5.organization","i-lucide-network",{"title":157,"path":158,"stem":159,"children":160,"page":39},"应用","\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},"编写与 defineMcpApp","\u002Fapps\u002Fauthoring","6.apps\u002F1.authoring","i-lucide-code-2",{"title":171,"path":172,"stem":173,"icon":174},"useMcpApp() 桥接","\u002Fapps\u002Fuse-mcp-app","6.apps\u002F2.use-mcp-app","i-lucide-message-circle",{"title":176,"path":177,"stem":178,"icon":64},"CSP 与构建流水线","\u002Fapps\u002Fcsp-and-wiring","6.apps\u002F3.csp-and-wiring",{"title":180,"path":181,"stem":182,"icon":183},"测试与发布","\u002Fapps\u002Ftesting-publishing","6.apps\u002F4.testing-publishing","i-lucide-rocket",{"title":185,"path":186,"stem":187,"icon":188},"模式与限制","\u002Fapps\u002Fpatterns-reference","6.apps\u002F5.patterns-reference","i-lucide-book-marked",{"title":190,"path":191,"stem":192,"children":193,"page":39},"进阶主题","\u002Fadvanced","7.advanced",[194,199,204,209,214,218,223,228,233,238,243,248],{"title":195,"path":196,"stem":197,"icon":198},"自定义路径","\u002Fadvanced\u002Fcustom-paths","7.advanced\u002F1.custom-paths","i-lucide-folder",{"title":200,"path":201,"stem":202,"icon":203},"日志","\u002Fadvanced\u002Flogging","7.advanced\u002F10.logging","i-lucide-scroll-text",{"title":205,"path":206,"stem":207,"icon":208},"MCP Apps 内部机制","\u002Fadvanced\u002Fmcp-apps-internals","7.advanced\u002F11.mcp-apps-internals","i-lucide-cog",{"title":210,"path":211,"stem":212,"icon":213},"列出定义","\u002Fadvanced\u002Flisting-definitions","7.advanced\u002F12.listing-definitions","i-lucide-list",{"title":215,"path":216,"stem":217,"icon":64},"Middleware","\u002Fadvanced\u002Fmiddleware","7.advanced\u002F2.middleware",{"title":219,"path":220,"stem":221,"icon":222},"TypeScript","\u002Fadvanced\u002Ftypescript","7.advanced\u002F3.typescript","i-lucide-type",{"title":224,"path":225,"stem":226,"icon":227},"Hooks","\u002Fadvanced\u002Fhooks","7.advanced\u002F4.hooks","i-lucide-webhook",{"title":229,"path":230,"stem":231,"icon":232},"MCP 评估","\u002Fadvanced\u002Fevals","7.advanced\u002F5.evals","i-lucide-flask-conical",{"title":234,"path":235,"stem":236,"icon":237},"会话","\u002Fadvanced\u002Fsessions","7.advanced\u002F6.sessions","i-lucide-database",{"title":239,"path":240,"stem":241,"icon":242},"动态定义","\u002Fadvanced\u002Fdynamic-definitions","7.advanced\u002F7.dynamic-definitions","i-lucide-toggle-right",{"title":244,"path":245,"stem":246,"icon":247},"代码模式 (Code Mode)","\u002Fadvanced\u002Fcode-mode","7.advanced\u002F8.code-mode","i-lucide-code",{"title":249,"path":250,"stem":251,"icon":252},"启发式询问","\u002Fadvanced\u002Felicitation","7.advanced\u002F9.elicitation","i-lucide-message-square-quote",{"title":254,"path":255,"stem":256,"children":257,"page":39},"示例","\u002Fexamples","8.examples",[258,263,268,273,278],{"title":259,"path":260,"stem":261,"icon":262},"身份验证","\u002Fexamples\u002Fauthentication","8.examples\u002F1.authentication","i-lucide-shield-check",{"title":264,"path":265,"stem":266,"icon":267},"API 集成","\u002Fexamples\u002Fapi-integration","8.examples\u002F2.api-integration","i-lucide-globe",{"title":269,"path":270,"stem":271,"icon":272},"常见模式","\u002Fexamples\u002Fcommon-patterns","8.examples\u002F3.common-patterns","i-lucide-lightbulb",{"title":274,"path":275,"stem":276,"icon":277},"文件操作","\u002Fexamples\u002Ffile-operations","8.examples\u002F4.file-operations","i-lucide-file",{"title":279,"path":280,"stem":281,"icon":107},"提示词示例","\u002Fexamples\u002Fprompt-examples","8.examples\u002F5.prompt-examples",{"id":283,"title":61,"body":284,"description":1552,"extension":1553,"links":1554,"meta":1555,"navigation":1556,"path":62,"seo":1557,"stem":63,"__hash__":1560},"docs\u002F2.tools\u002F3.errors-caching.md",{"type":285,"value":286,"toc":1541},"minimark",[287,291,300,305,312,646,649,743,746,753,955,958,965,968,981,1144,1147,1150,1363,1366,1507,1519,1537],[288,289,290],"h2",{"id":290},"错误处理",[292,293,294,295,299],"p",{},"直接从你的处理器中抛出错误——就像在 Nitro 事件处理器中一样。抛出的错误会被自动捕获并转换为符合 MCP 规范的 ",[296,297,298],"code",{},"isError"," 结果。",[301,302,304],"h3",{"id":303},"h3-错误推荐","H3 错误（推荐）",[292,306,307,308,311],{},"对带有状态码的错误使用 H3 的 ",[296,309,310],{},"createError()","：",[313,314,320],"pre",{"className":315,"code":316,"filename":317,"language":318,"meta":319,"style":319},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { z } from 'zod'\nimport { createError } from 'h3'\nimport { defineMcpTool } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpTool({\n  name: 'get-user',\n  description: '通过 ID 获取用户',\n  inputSchema: {\n    id: z.string(),\n  },\n  handler: async ({ id }) => {\n    const user = await findUser(id)\n    if (!user) {\n      throw createError({ statusCode: 404, message: '未找到用户' })\n    }\n    return user\n  },\n})\n\u002F\u002F 错误结果: { isError: true, content: [{ type: 'text', text: '[404] 未找到用户' }] }\n","server\u002Fmcp\u002Ftools\u002Fget-user.ts","typescript","",[296,321,322,355,375,396,403,421,442,459,470,491,497,524,550,570,611,617,626,631,639],{"__ignoreMap":319},[323,324,327,331,335,339,342,345,348,352],"span",{"class":325,"line":326},"line",1,[323,328,330],{"class":329},"s7zQu","import",[323,332,334],{"class":333},"sMK4o"," {",[323,336,338],{"class":337},"sTEyZ"," z",[323,340,341],{"class":333}," }",[323,343,344],{"class":329}," from",[323,346,347],{"class":333}," '",[323,349,351],{"class":350},"sfazB","zod",[323,353,354],{"class":333},"'\n",[323,356,358,360,362,365,367,369,371,373],{"class":325,"line":357},2,[323,359,330],{"class":329},[323,361,334],{"class":333},[323,363,364],{"class":337}," createError",[323,366,341],{"class":333},[323,368,344],{"class":329},[323,370,347],{"class":333},[323,372,301],{"class":350},[323,374,354],{"class":333},[323,376,378,380,382,385,387,389,391,394],{"class":325,"line":377},3,[323,379,330],{"class":329},[323,381,334],{"class":333},[323,383,384],{"class":337}," defineMcpTool",[323,386,341],{"class":333},[323,388,344],{"class":329},[323,390,347],{"class":333},[323,392,393],{"class":350},"@nuxtjs\u002Fmcp-toolkit\u002Fserver",[323,395,354],{"class":333},[323,397,399],{"class":325,"line":398},4,[323,400,402],{"emptyLinePlaceholder":401},true,"\n",[323,404,406,409,412,415,418],{"class":325,"line":405},5,[323,407,408],{"class":329},"export",[323,410,411],{"class":329}," default",[323,413,384],{"class":414},"s2Zo4",[323,416,417],{"class":337},"(",[323,419,420],{"class":333},"{\n",[323,422,424,428,431,433,436,439],{"class":325,"line":423},6,[323,425,427],{"class":426},"swJcz","  name",[323,429,430],{"class":333},":",[323,432,347],{"class":333},[323,434,435],{"class":350},"get-user",[323,437,438],{"class":333},"'",[323,440,441],{"class":333},",\n",[323,443,445,448,450,452,455,457],{"class":325,"line":444},7,[323,446,447],{"class":426},"  description",[323,449,430],{"class":333},[323,451,347],{"class":333},[323,453,454],{"class":350},"通过 ID 获取用户",[323,456,438],{"class":333},[323,458,441],{"class":333},[323,460,462,465,467],{"class":325,"line":461},8,[323,463,464],{"class":426},"  inputSchema",[323,466,430],{"class":333},[323,468,469],{"class":333}," {\n",[323,471,473,476,478,480,483,486,489],{"class":325,"line":472},9,[323,474,475],{"class":426},"    id",[323,477,430],{"class":333},[323,479,338],{"class":337},[323,481,482],{"class":333},".",[323,484,485],{"class":414},"string",[323,487,488],{"class":337},"()",[323,490,441],{"class":333},[323,492,494],{"class":325,"line":493},10,[323,495,496],{"class":333},"  },\n",[323,498,500,503,505,509,512,516,519,522],{"class":325,"line":499},11,[323,501,502],{"class":414},"  handler",[323,504,430],{"class":333},[323,506,508],{"class":507},"spNyl"," async",[323,510,511],{"class":333}," ({",[323,513,515],{"class":514},"sHdIc"," id",[323,517,518],{"class":333}," })",[323,520,521],{"class":507}," =>",[323,523,469],{"class":333},[323,525,527,530,533,536,539,542,544,547],{"class":325,"line":526},12,[323,528,529],{"class":507},"    const",[323,531,532],{"class":337}," user",[323,534,535],{"class":333}," =",[323,537,538],{"class":329}," await",[323,540,541],{"class":414}," findUser",[323,543,417],{"class":426},[323,545,546],{"class":337},"id",[323,548,549],{"class":426},")\n",[323,551,553,556,559,562,565,568],{"class":325,"line":552},13,[323,554,555],{"class":329},"    if",[323,557,558],{"class":426}," (",[323,560,561],{"class":333},"!",[323,563,564],{"class":337},"user",[323,566,567],{"class":426},") ",[323,569,420],{"class":333},[323,571,573,576,578,580,583,586,588,592,595,598,600,602,605,607,609],{"class":325,"line":572},14,[323,574,575],{"class":329},"      throw",[323,577,364],{"class":414},[323,579,417],{"class":426},[323,581,582],{"class":333},"{",[323,584,585],{"class":426}," statusCode",[323,587,430],{"class":333},[323,589,591],{"class":590},"sbssI"," 404",[323,593,594],{"class":333},",",[323,596,597],{"class":426}," message",[323,599,430],{"class":333},[323,601,347],{"class":333},[323,603,604],{"class":350},"未找到用户",[323,606,438],{"class":333},[323,608,341],{"class":333},[323,610,549],{"class":426},[323,612,614],{"class":325,"line":613},15,[323,615,616],{"class":333},"    }\n",[323,618,620,623],{"class":325,"line":619},16,[323,621,622],{"class":329},"    return",[323,624,625],{"class":337}," user\n",[323,627,629],{"class":325,"line":628},17,[323,630,496],{"class":333},[323,632,634,637],{"class":325,"line":633},18,[323,635,636],{"class":333},"}",[323,638,549],{"class":337},[323,640,642],{"class":325,"line":641},19,[323,643,645],{"class":644},"sHwdD","\u002F\u002F 错误结果: { isError: true, content: [{ type: 'text', text: '[404] 未找到用户' }] }\n",[292,647,648],{},"H3 错误也可以包含结构化数据：",[313,650,652],{"className":315,"code":651,"language":318,"meta":319,"style":319},"throw createError({\n  statusCode: 400,\n  message: '验证失败',\n  data: { fields: ['name', 'email'] },\n})\n\u002F\u002F 错误文本: '[400] 验证失败\\n{ \"fields\": [\"name\", \"email\"] }'\n",[296,653,654,665,677,693,732,738],{"__ignoreMap":319},[323,655,656,659,661,663],{"class":325,"line":326},[323,657,658],{"class":329},"throw",[323,660,364],{"class":414},[323,662,417],{"class":337},[323,664,420],{"class":333},[323,666,667,670,672,675],{"class":325,"line":357},[323,668,669],{"class":426},"  statusCode",[323,671,430],{"class":333},[323,673,674],{"class":590}," 400",[323,676,441],{"class":333},[323,678,679,682,684,686,689,691],{"class":325,"line":377},[323,680,681],{"class":426},"  message",[323,683,430],{"class":333},[323,685,347],{"class":333},[323,687,688],{"class":350},"验证失败",[323,690,438],{"class":333},[323,692,441],{"class":333},[323,694,695,698,700,702,705,707,710,712,715,717,719,721,724,726,729],{"class":325,"line":398},[323,696,697],{"class":426},"  data",[323,699,430],{"class":333},[323,701,334],{"class":333},[323,703,704],{"class":426}," fields",[323,706,430],{"class":333},[323,708,709],{"class":337}," [",[323,711,438],{"class":333},[323,713,714],{"class":350},"name",[323,716,438],{"class":333},[323,718,594],{"class":333},[323,720,347],{"class":333},[323,722,723],{"class":350},"email",[323,725,438],{"class":333},[323,727,728],{"class":337},"] ",[323,730,731],{"class":333},"},\n",[323,733,734,736],{"class":325,"line":405},[323,735,636],{"class":333},[323,737,549],{"class":337},[323,739,740],{"class":325,"line":423},[323,741,742],{"class":644},"\u002F\u002F 错误文本: '[400] 验证失败\\n{ \"fields\": [\"name\", \"email\"] }'\n",[301,744,745],{"id":745},"普通错误",[292,747,748,749,752],{},"常规的 ",[296,750,751],{},"Error"," 实例也可以正常使用：",[313,754,757],{"className":315,"code":755,"filename":756,"language":318,"meta":319,"style":319},"import { z } from 'zod'\nimport { defineMcpTool } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpTool({\n  name: 'safe-divide',\n  inputSchema: {\n    a: z.number(),\n    b: z.number(),\n  },\n  handler: async ({ a, b }) => {\n    if (b === 0) throw new Error('除数不能为零')\n    return a \u002F b\n  },\n})\n","server\u002Fmcp\u002Ftools\u002Fsafe-divide.ts",[296,758,759,777,795,799,811,826,834,852,869,873,897,933,945,949],{"__ignoreMap":319},[323,760,761,763,765,767,769,771,773,775],{"class":325,"line":326},[323,762,330],{"class":329},[323,764,334],{"class":333},[323,766,338],{"class":337},[323,768,341],{"class":333},[323,770,344],{"class":329},[323,772,347],{"class":333},[323,774,351],{"class":350},[323,776,354],{"class":333},[323,778,779,781,783,785,787,789,791,793],{"class":325,"line":357},[323,780,330],{"class":329},[323,782,334],{"class":333},[323,784,384],{"class":337},[323,786,341],{"class":333},[323,788,344],{"class":329},[323,790,347],{"class":333},[323,792,393],{"class":350},[323,794,354],{"class":333},[323,796,797],{"class":325,"line":377},[323,798,402],{"emptyLinePlaceholder":401},[323,800,801,803,805,807,809],{"class":325,"line":398},[323,802,408],{"class":329},[323,804,411],{"class":329},[323,806,384],{"class":414},[323,808,417],{"class":337},[323,810,420],{"class":333},[323,812,813,815,817,819,822,824],{"class":325,"line":405},[323,814,427],{"class":426},[323,816,430],{"class":333},[323,818,347],{"class":333},[323,820,821],{"class":350},"safe-divide",[323,823,438],{"class":333},[323,825,441],{"class":333},[323,827,828,830,832],{"class":325,"line":423},[323,829,464],{"class":426},[323,831,430],{"class":333},[323,833,469],{"class":333},[323,835,836,839,841,843,845,848,850],{"class":325,"line":444},[323,837,838],{"class":426},"    a",[323,840,430],{"class":333},[323,842,338],{"class":337},[323,844,482],{"class":333},[323,846,847],{"class":414},"number",[323,849,488],{"class":337},[323,851,441],{"class":333},[323,853,854,857,859,861,863,865,867],{"class":325,"line":461},[323,855,856],{"class":426},"    b",[323,858,430],{"class":333},[323,860,338],{"class":337},[323,862,482],{"class":333},[323,864,847],{"class":414},[323,866,488],{"class":337},[323,868,441],{"class":333},[323,870,871],{"class":325,"line":472},[323,872,496],{"class":333},[323,874,875,877,879,881,883,886,888,891,893,895],{"class":325,"line":493},[323,876,502],{"class":414},[323,878,430],{"class":333},[323,880,508],{"class":507},[323,882,511],{"class":333},[323,884,885],{"class":514}," a",[323,887,594],{"class":333},[323,889,890],{"class":514}," b",[323,892,518],{"class":333},[323,894,521],{"class":507},[323,896,469],{"class":333},[323,898,899,901,903,906,909,912,914,916,919,922,924,926,929,931],{"class":325,"line":499},[323,900,555],{"class":329},[323,902,558],{"class":426},[323,904,905],{"class":337},"b",[323,907,908],{"class":333}," ===",[323,910,911],{"class":590}," 0",[323,913,567],{"class":426},[323,915,658],{"class":329},[323,917,918],{"class":333}," new",[323,920,921],{"class":414}," Error",[323,923,417],{"class":426},[323,925,438],{"class":333},[323,927,928],{"class":350},"除数不能为零",[323,930,438],{"class":333},[323,932,549],{"class":426},[323,934,935,937,939,942],{"class":325,"line":526},[323,936,622],{"class":329},[323,938,885],{"class":337},[323,940,941],{"class":333}," \u002F",[323,943,944],{"class":337}," b\n",[323,946,947],{"class":325,"line":552},[323,948,496],{"class":333},[323,950,951,953],{"class":325,"line":572},[323,952,636],{"class":333},[323,954,549],{"class":337},[288,956,957],{"id":957},"响应缓存",[292,959,960,961,964],{},"你可以使用 Nitro 的缓存系统来缓存工具响应。",[296,962,963],{},"cache"," 选项接受三种格式：",[301,966,967],{"id":967},"简单时长",[292,969,970,971,980],{},"使用字符串时长（由 ",[972,973,977],"a",{"href":974,"rel":975},"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fms",[976],"nofollow",[296,978,979],{},"ms"," 解析）或以毫秒为单位的数字：",[313,982,985],{"className":315,"code":983,"filename":984,"language":318,"meta":319,"style":319},"import { z } from 'zod'\nimport { defineMcpTool } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpTool({\n  description: '获取带有 1 小时缓存的数据',\n  inputSchema: {\n    id: z.string(),\n  },\n  cache: '1h', \u002F\u002F 或 '30m'、'2 days'、3600000 等\n  handler: async ({ id }) => {\n    return await fetchExpensiveData(id)\n  },\n})\n","server\u002Fmcp\u002Ftools\u002Fcached-data.ts",[296,986,987,1005,1023,1027,1039,1054,1062,1078,1082,1101,1119,1134,1138],{"__ignoreMap":319},[323,988,989,991,993,995,997,999,1001,1003],{"class":325,"line":326},[323,990,330],{"class":329},[323,992,334],{"class":333},[323,994,338],{"class":337},[323,996,341],{"class":333},[323,998,344],{"class":329},[323,1000,347],{"class":333},[323,1002,351],{"class":350},[323,1004,354],{"class":333},[323,1006,1007,1009,1011,1013,1015,1017,1019,1021],{"class":325,"line":357},[323,1008,330],{"class":329},[323,1010,334],{"class":333},[323,1012,384],{"class":337},[323,1014,341],{"class":333},[323,1016,344],{"class":329},[323,1018,347],{"class":333},[323,1020,393],{"class":350},[323,1022,354],{"class":333},[323,1024,1025],{"class":325,"line":377},[323,1026,402],{"emptyLinePlaceholder":401},[323,1028,1029,1031,1033,1035,1037],{"class":325,"line":398},[323,1030,408],{"class":329},[323,1032,411],{"class":329},[323,1034,384],{"class":414},[323,1036,417],{"class":337},[323,1038,420],{"class":333},[323,1040,1041,1043,1045,1047,1050,1052],{"class":325,"line":405},[323,1042,447],{"class":426},[323,1044,430],{"class":333},[323,1046,347],{"class":333},[323,1048,1049],{"class":350},"获取带有 1 小时缓存的数据",[323,1051,438],{"class":333},[323,1053,441],{"class":333},[323,1055,1056,1058,1060],{"class":325,"line":423},[323,1057,464],{"class":426},[323,1059,430],{"class":333},[323,1061,469],{"class":333},[323,1063,1064,1066,1068,1070,1072,1074,1076],{"class":325,"line":444},[323,1065,475],{"class":426},[323,1067,430],{"class":333},[323,1069,338],{"class":337},[323,1071,482],{"class":333},[323,1073,485],{"class":414},[323,1075,488],{"class":337},[323,1077,441],{"class":333},[323,1079,1080],{"class":325,"line":461},[323,1081,496],{"class":333},[323,1083,1084,1087,1089,1091,1094,1096,1098],{"class":325,"line":472},[323,1085,1086],{"class":426},"  cache",[323,1088,430],{"class":333},[323,1090,347],{"class":333},[323,1092,1093],{"class":350},"1h",[323,1095,438],{"class":333},[323,1097,594],{"class":333},[323,1099,1100],{"class":644}," \u002F\u002F 或 '30m'、'2 days'、3600000 等\n",[323,1102,1103,1105,1107,1109,1111,1113,1115,1117],{"class":325,"line":493},[323,1104,502],{"class":414},[323,1106,430],{"class":333},[323,1108,508],{"class":507},[323,1110,511],{"class":333},[323,1112,515],{"class":514},[323,1114,518],{"class":333},[323,1116,521],{"class":507},[323,1118,469],{"class":333},[323,1120,1121,1123,1125,1128,1130,1132],{"class":325,"line":499},[323,1122,622],{"class":329},[323,1124,538],{"class":329},[323,1126,1127],{"class":414}," fetchExpensiveData",[323,1129,417],{"class":426},[323,1131,546],{"class":337},[323,1133,549],{"class":426},[323,1135,1136],{"class":325,"line":526},[323,1137,496],{"class":333},[323,1139,1140,1142],{"class":325,"line":552},[323,1141,636],{"class":333},[323,1143,549],{"class":337},[301,1145,1146],{"id":1146},"完整缓存选项",[292,1148,1149],{},"如需更多控制，请使用包含所有 Nitro 缓存选项的对象：",[313,1151,1154],{"className":315,"code":1152,"filename":1153,"language":318,"meta":319,"style":319},"import { z } from 'zod'\nimport { defineMcpTool } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpTool({\n  description: '获取带自定义缓存键的页面',\n  inputSchema: {\n    path: z.string(),\n  },\n  cache: {\n    maxAge: '1h',\n    getKey: args => `page-${args.path}`,\n    swr: true, \u002F\u002F 陈旧时重新验证\n  },\n  handler: async ({ path }) => {\n    \u002F\u002F ...\n  },\n})\n","server\u002Fmcp\u002Ftools\u002Fcached-pages.ts",[296,1155,1156,1174,1192,1196,1208,1223,1231,1248,1252,1260,1275,1309,1325,1329,1348,1353,1357],{"__ignoreMap":319},[323,1157,1158,1160,1162,1164,1166,1168,1170,1172],{"class":325,"line":326},[323,1159,330],{"class":329},[323,1161,334],{"class":333},[323,1163,338],{"class":337},[323,1165,341],{"class":333},[323,1167,344],{"class":329},[323,1169,347],{"class":333},[323,1171,351],{"class":350},[323,1173,354],{"class":333},[323,1175,1176,1178,1180,1182,1184,1186,1188,1190],{"class":325,"line":357},[323,1177,330],{"class":329},[323,1179,334],{"class":333},[323,1181,384],{"class":337},[323,1183,341],{"class":333},[323,1185,344],{"class":329},[323,1187,347],{"class":333},[323,1189,393],{"class":350},[323,1191,354],{"class":333},[323,1193,1194],{"class":325,"line":377},[323,1195,402],{"emptyLinePlaceholder":401},[323,1197,1198,1200,1202,1204,1206],{"class":325,"line":398},[323,1199,408],{"class":329},[323,1201,411],{"class":329},[323,1203,384],{"class":414},[323,1205,417],{"class":337},[323,1207,420],{"class":333},[323,1209,1210,1212,1214,1216,1219,1221],{"class":325,"line":405},[323,1211,447],{"class":426},[323,1213,430],{"class":333},[323,1215,347],{"class":333},[323,1217,1218],{"class":350},"获取带自定义缓存键的页面",[323,1220,438],{"class":333},[323,1222,441],{"class":333},[323,1224,1225,1227,1229],{"class":325,"line":423},[323,1226,464],{"class":426},[323,1228,430],{"class":333},[323,1230,469],{"class":333},[323,1232,1233,1236,1238,1240,1242,1244,1246],{"class":325,"line":444},[323,1234,1235],{"class":426},"    path",[323,1237,430],{"class":333},[323,1239,338],{"class":337},[323,1241,482],{"class":333},[323,1243,485],{"class":414},[323,1245,488],{"class":337},[323,1247,441],{"class":333},[323,1249,1250],{"class":325,"line":461},[323,1251,496],{"class":333},[323,1253,1254,1256,1258],{"class":325,"line":472},[323,1255,1086],{"class":426},[323,1257,430],{"class":333},[323,1259,469],{"class":333},[323,1261,1262,1265,1267,1269,1271,1273],{"class":325,"line":493},[323,1263,1264],{"class":426},"    maxAge",[323,1266,430],{"class":333},[323,1268,347],{"class":333},[323,1270,1093],{"class":350},[323,1272,438],{"class":333},[323,1274,441],{"class":333},[323,1276,1277,1280,1282,1285,1287,1290,1293,1296,1299,1301,1304,1307],{"class":325,"line":499},[323,1278,1279],{"class":414},"    getKey",[323,1281,430],{"class":333},[323,1283,1284],{"class":514}," args",[323,1286,521],{"class":507},[323,1288,1289],{"class":333}," `",[323,1291,1292],{"class":350},"page-",[323,1294,1295],{"class":333},"${",[323,1297,1298],{"class":337},"args",[323,1300,482],{"class":333},[323,1302,1303],{"class":337},"path",[323,1305,1306],{"class":333},"}`",[323,1308,441],{"class":333},[323,1310,1311,1314,1316,1320,1322],{"class":325,"line":526},[323,1312,1313],{"class":426},"    swr",[323,1315,430],{"class":333},[323,1317,1319],{"class":1318},"sfNiH"," true",[323,1321,594],{"class":333},[323,1323,1324],{"class":644}," \u002F\u002F 陈旧时重新验证\n",[323,1326,1327],{"class":325,"line":552},[323,1328,496],{"class":333},[323,1330,1331,1333,1335,1337,1339,1342,1344,1346],{"class":325,"line":572},[323,1332,502],{"class":414},[323,1334,430],{"class":333},[323,1336,508],{"class":507},[323,1338,511],{"class":333},[323,1340,1341],{"class":514}," path",[323,1343,518],{"class":333},[323,1345,521],{"class":507},[323,1347,469],{"class":333},[323,1349,1350],{"class":325,"line":613},[323,1351,1352],{"class":644},"    \u002F\u002F ...\n",[323,1354,1355],{"class":325,"line":619},[323,1356,496],{"class":333},[323,1358,1359,1361],{"class":325,"line":628},[323,1360,636],{"class":333},[323,1362,549],{"class":337},[301,1364,1365],{"id":1365},"缓存选项参考",[1367,1368,1369,1388],"table",{},[1370,1371,1372],"thead",{},[1373,1374,1375,1379,1382,1385],"tr",{},[1376,1377,1378],"th",{},"Option",[1376,1380,1381],{},"Type",[1376,1383,1384],{},"Required",[1376,1386,1387],{},"Description",[1389,1390,1391,1418,1436,1452,1473,1488],"tbody",{},[1373,1392,1393,1399,1404,1407],{},[1394,1395,1396],"td",{},[296,1397,1398],{},"maxAge",[1394,1400,1401],{},[296,1402,1403],{},"string | number",[1394,1405,1406],{},"Yes",[1394,1408,1409,1410,1413,1414,1417],{},"缓存持续时间（例如：",[296,1411,1412],{},"'1h'","、",[296,1415,1416],{},"3600000","）",[1373,1419,1420,1425,1430,1433],{},[1394,1421,1422],{},[296,1423,1424],{},"getKey",[1394,1426,1427],{},[296,1428,1429],{},"(args) => string",[1394,1431,1432],{},"No",[1394,1434,1435],{},"自定义缓存键生成器",[1373,1437,1438,1443,1447,1449],{},[1394,1439,1440],{},[296,1441,1442],{},"staleMaxAge",[1394,1444,1445],{},[296,1446,847],{},[1394,1448,1432],{},[1394,1450,1451],{},"陈旧时重新验证的持续时间",[1373,1453,1454,1459,1464,1466],{},[1394,1455,1456],{},[296,1457,1458],{},"swr",[1394,1460,1461],{},[296,1462,1463],{},"boolean",[1394,1465,1432],{},[1394,1467,1468,1469,1472],{},"启用陈旧时重新验证（默认 ",[296,1470,1471],{},"false","，见下方警告）",[1373,1474,1475,1479,1483,1485],{},[1394,1476,1477],{},[296,1478,714],{},[1394,1480,1481],{},[296,1482,485],{},[1394,1484,1432],{},[1394,1486,1487],{},"缓存名称（根据工具名称自动生成）",[1373,1489,1490,1495,1499,1501],{},[1394,1491,1492],{},[296,1493,1494],{},"group",[1394,1496,1497],{},[296,1498,485],{},[1394,1500,1432],{},[1394,1502,1503,1504,1417],{},"缓存分组（默认：",[296,1505,1506],{},"'mcp'",[1508,1509,1512,1513,1518],"callout",{"color":1510,"icon":1511},"info","i-lucide-info","有关所有可用选项，请参阅 ",[972,1514,1517],{"href":1515,"rel":1516},"https:\u002F\u002Fnitro.build\u002Fguide\u002Fcache#options",[976],"Nitro 缓存文档","。",[1508,1520,1523,1525,1526,1528,1529,1532,1533,1536],{"color":1521,"icon":1522},"warning","i-lucide-triangle-alert",[296,1524,1458],{}," 默认为 ",[296,1527,1471],{},"（而 Nitro 本身默认为 ",[296,1530,1531],{},"true","）。当 ",[296,1534,1535],{},"swr: true"," 时，过期命中会立即返回，并且处理器会在请求响应后于后台刷新，因此请求作用域内的写入（结构化日志、跟踪）可能会被丢弃。只有在你接受这种权衡时才启用。",[1538,1539,1540],"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .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 .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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":319,"searchDepth":357,"depth":357,"links":1542},[1543,1547],{"id":290,"depth":357,"text":290,"children":1544},[1545,1546],{"id":303,"depth":377,"text":304},{"id":745,"depth":377,"text":745},{"id":957,"depth":357,"text":957,"children":1548},[1549,1550,1551],{"id":967,"depth":377,"text":967},{"id":1146,"depth":377,"text":1146},{"id":1365,"depth":377,"text":1365},"工具处理器中的 H3 和普通错误，以及基于 Nitro 的响应缓存。","md",null,{},{"icon":64},{"title":1558,"description":1559},"工具错误与响应缓存","来自 h3 的 createError、普通 Error 抛出，以及 Nuxt 中 MCP 工具的缓存选项。","I22YphC9lM52DqybnanPUJKN5ysOynpZIQYPkXO4g6s",[1562,1564],{"title":56,"path":57,"stem":58,"description":1563,"icon":59,"children":-1},"MCP 客户端的行为提示以及复杂工具的具体 inputExamples。",{"title":66,"path":67,"stem":68,"description":1565,"icon":69,"children":-1},"工具的分组和标签、目录布局、类型安全以及启用守卫。",1778659574536]