[{"data":1,"prerenderedAt":1577},["ShallowReactive",2],{"navigation_docs":3,"-tools-errors-caching":287,"-tools-errors-caching-surround":1572},[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":61,"body":289,"description":1563,"extension":1564,"links":1565,"meta":1566,"navigation":1567,"path":62,"seo":1568,"stem":63,"__hash__":1571},"docs\u002F2.tools\u002F3.errors-caching.md",{"type":290,"value":291,"toc":1552},"minimark",[292,297,306,311,318,652,655,749,753,760,962,966,973,977,990,1153,1157,1160,1373,1377,1518,1530,1548],[293,294,296],"h2",{"id":295},"error-handling","Error Handling",[298,299,300,301,305],"p",{},"Throw errors directly from your handlers — just like in Nitro event handlers. Thrown errors are automatically caught and converted into MCP-compliant ",[302,303,304],"code",{},"isError"," results.",[307,308,310],"h3",{"id":309},"h3-errors-recommended","H3 Errors (Recommended)",[298,312,313,314,317],{},"Use ",[302,315,316],{},"createError()"," from H3 for errors with status codes:",[319,320,326],"pre",{"className":321,"code":322,"filename":323,"language":324,"meta":325,"style":325},"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: 'Get a user by 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: 'User not found' })\n    }\n    return user\n  },\n})\n\u002F\u002F Error result: { isError: true, content: [{ type: 'text', text: '[404] User not found' }] }\n","server\u002Fmcp\u002Ftools\u002Fget-user.ts","typescript","",[302,327,328,361,381,402,409,427,448,465,476,497,503,530,556,576,617,623,632,637,645],{"__ignoreMap":325},[329,330,333,337,341,345,348,351,354,358],"span",{"class":331,"line":332},"line",1,[329,334,336],{"class":335},"s7zQu","import",[329,338,340],{"class":339},"sMK4o"," {",[329,342,344],{"class":343},"sTEyZ"," z",[329,346,347],{"class":339}," }",[329,349,350],{"class":335}," from",[329,352,353],{"class":339}," '",[329,355,357],{"class":356},"sfazB","zod",[329,359,360],{"class":339},"'\n",[329,362,364,366,368,371,373,375,377,379],{"class":331,"line":363},2,[329,365,336],{"class":335},[329,367,340],{"class":339},[329,369,370],{"class":343}," createError",[329,372,347],{"class":339},[329,374,350],{"class":335},[329,376,353],{"class":339},[329,378,307],{"class":356},[329,380,360],{"class":339},[329,382,384,386,388,391,393,395,397,400],{"class":331,"line":383},3,[329,385,336],{"class":335},[329,387,340],{"class":339},[329,389,390],{"class":343}," defineMcpTool",[329,392,347],{"class":339},[329,394,350],{"class":335},[329,396,353],{"class":339},[329,398,399],{"class":356},"@nuxtjs\u002Fmcp-toolkit\u002Fserver",[329,401,360],{"class":339},[329,403,405],{"class":331,"line":404},4,[329,406,408],{"emptyLinePlaceholder":407},true,"\n",[329,410,412,415,418,421,424],{"class":331,"line":411},5,[329,413,414],{"class":335},"export",[329,416,417],{"class":335}," default",[329,419,390],{"class":420},"s2Zo4",[329,422,423],{"class":343},"(",[329,425,426],{"class":339},"{\n",[329,428,430,434,437,439,442,445],{"class":331,"line":429},6,[329,431,433],{"class":432},"swJcz","  name",[329,435,436],{"class":339},":",[329,438,353],{"class":339},[329,440,441],{"class":356},"get-user",[329,443,444],{"class":339},"'",[329,446,447],{"class":339},",\n",[329,449,451,454,456,458,461,463],{"class":331,"line":450},7,[329,452,453],{"class":432},"  description",[329,455,436],{"class":339},[329,457,353],{"class":339},[329,459,460],{"class":356},"Get a user by ID",[329,462,444],{"class":339},[329,464,447],{"class":339},[329,466,468,471,473],{"class":331,"line":467},8,[329,469,470],{"class":432},"  inputSchema",[329,472,436],{"class":339},[329,474,475],{"class":339}," {\n",[329,477,479,482,484,486,489,492,495],{"class":331,"line":478},9,[329,480,481],{"class":432},"    id",[329,483,436],{"class":339},[329,485,344],{"class":343},[329,487,488],{"class":339},".",[329,490,491],{"class":420},"string",[329,493,494],{"class":343},"()",[329,496,447],{"class":339},[329,498,500],{"class":331,"line":499},10,[329,501,502],{"class":339},"  },\n",[329,504,506,509,511,515,518,522,525,528],{"class":331,"line":505},11,[329,507,508],{"class":420},"  handler",[329,510,436],{"class":339},[329,512,514],{"class":513},"spNyl"," async",[329,516,517],{"class":339}," ({",[329,519,521],{"class":520},"sHdIc"," id",[329,523,524],{"class":339}," })",[329,526,527],{"class":513}," =>",[329,529,475],{"class":339},[329,531,533,536,539,542,545,548,550,553],{"class":331,"line":532},12,[329,534,535],{"class":513},"    const",[329,537,538],{"class":343}," user",[329,540,541],{"class":339}," =",[329,543,544],{"class":335}," await",[329,546,547],{"class":420}," findUser",[329,549,423],{"class":432},[329,551,552],{"class":343},"id",[329,554,555],{"class":432},")\n",[329,557,559,562,565,568,571,574],{"class":331,"line":558},13,[329,560,561],{"class":335},"    if",[329,563,564],{"class":432}," (",[329,566,567],{"class":339},"!",[329,569,570],{"class":343},"user",[329,572,573],{"class":432},") ",[329,575,426],{"class":339},[329,577,579,582,584,586,589,592,594,598,601,604,606,608,611,613,615],{"class":331,"line":578},14,[329,580,581],{"class":335},"      throw",[329,583,370],{"class":420},[329,585,423],{"class":432},[329,587,588],{"class":339},"{",[329,590,591],{"class":432}," statusCode",[329,593,436],{"class":339},[329,595,597],{"class":596},"sbssI"," 404",[329,599,600],{"class":339},",",[329,602,603],{"class":432}," message",[329,605,436],{"class":339},[329,607,353],{"class":339},[329,609,610],{"class":356},"User not found",[329,612,444],{"class":339},[329,614,347],{"class":339},[329,616,555],{"class":432},[329,618,620],{"class":331,"line":619},15,[329,621,622],{"class":339},"    }\n",[329,624,626,629],{"class":331,"line":625},16,[329,627,628],{"class":335},"    return",[329,630,631],{"class":343}," user\n",[329,633,635],{"class":331,"line":634},17,[329,636,502],{"class":339},[329,638,640,643],{"class":331,"line":639},18,[329,641,642],{"class":339},"}",[329,644,555],{"class":343},[329,646,648],{"class":331,"line":647},19,[329,649,651],{"class":650},"sHwdD","\u002F\u002F Error result: { isError: true, content: [{ type: 'text', text: '[404] User not found' }] }\n",[298,653,654],{},"H3 errors can also include structured data:",[319,656,658],{"className":321,"code":657,"language":324,"meta":325,"style":325},"throw createError({\n  statusCode: 400,\n  message: 'Validation failed',\n  data: { fields: ['name', 'email'] },\n})\n\u002F\u002F Error text: '[400] Validation failed\\n{ \"fields\": [\"name\", \"email\"] }'\n",[302,659,660,671,683,699,738,744],{"__ignoreMap":325},[329,661,662,665,667,669],{"class":331,"line":332},[329,663,664],{"class":335},"throw",[329,666,370],{"class":420},[329,668,423],{"class":343},[329,670,426],{"class":339},[329,672,673,676,678,681],{"class":331,"line":363},[329,674,675],{"class":432},"  statusCode",[329,677,436],{"class":339},[329,679,680],{"class":596}," 400",[329,682,447],{"class":339},[329,684,685,688,690,692,695,697],{"class":331,"line":383},[329,686,687],{"class":432},"  message",[329,689,436],{"class":339},[329,691,353],{"class":339},[329,693,694],{"class":356},"Validation failed",[329,696,444],{"class":339},[329,698,447],{"class":339},[329,700,701,704,706,708,711,713,716,718,721,723,725,727,730,732,735],{"class":331,"line":404},[329,702,703],{"class":432},"  data",[329,705,436],{"class":339},[329,707,340],{"class":339},[329,709,710],{"class":432}," fields",[329,712,436],{"class":339},[329,714,715],{"class":343}," [",[329,717,444],{"class":339},[329,719,720],{"class":356},"name",[329,722,444],{"class":339},[329,724,600],{"class":339},[329,726,353],{"class":339},[329,728,729],{"class":356},"email",[329,731,444],{"class":339},[329,733,734],{"class":343},"] ",[329,736,737],{"class":339},"},\n",[329,739,740,742],{"class":331,"line":411},[329,741,642],{"class":339},[329,743,555],{"class":343},[329,745,746],{"class":331,"line":429},[329,747,748],{"class":650},"\u002F\u002F Error text: '[400] Validation failed\\n{ \"fields\": [\"name\", \"email\"] }'\n",[307,750,752],{"id":751},"plain-errors","Plain Errors",[298,754,755,756,759],{},"Regular ",[302,757,758],{},"Error"," instances work too:",[319,761,764],{"className":321,"code":762,"filename":763,"language":324,"meta":325,"style":325},"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('Division by zero')\n    return a \u002F b\n  },\n})\n","server\u002Fmcp\u002Ftools\u002Fsafe-divide.ts",[302,765,766,784,802,806,818,833,841,859,876,880,904,940,952,956],{"__ignoreMap":325},[329,767,768,770,772,774,776,778,780,782],{"class":331,"line":332},[329,769,336],{"class":335},[329,771,340],{"class":339},[329,773,344],{"class":343},[329,775,347],{"class":339},[329,777,350],{"class":335},[329,779,353],{"class":339},[329,781,357],{"class":356},[329,783,360],{"class":339},[329,785,786,788,790,792,794,796,798,800],{"class":331,"line":363},[329,787,336],{"class":335},[329,789,340],{"class":339},[329,791,390],{"class":343},[329,793,347],{"class":339},[329,795,350],{"class":335},[329,797,353],{"class":339},[329,799,399],{"class":356},[329,801,360],{"class":339},[329,803,804],{"class":331,"line":383},[329,805,408],{"emptyLinePlaceholder":407},[329,807,808,810,812,814,816],{"class":331,"line":404},[329,809,414],{"class":335},[329,811,417],{"class":335},[329,813,390],{"class":420},[329,815,423],{"class":343},[329,817,426],{"class":339},[329,819,820,822,824,826,829,831],{"class":331,"line":411},[329,821,433],{"class":432},[329,823,436],{"class":339},[329,825,353],{"class":339},[329,827,828],{"class":356},"safe-divide",[329,830,444],{"class":339},[329,832,447],{"class":339},[329,834,835,837,839],{"class":331,"line":429},[329,836,470],{"class":432},[329,838,436],{"class":339},[329,840,475],{"class":339},[329,842,843,846,848,850,852,855,857],{"class":331,"line":450},[329,844,845],{"class":432},"    a",[329,847,436],{"class":339},[329,849,344],{"class":343},[329,851,488],{"class":339},[329,853,854],{"class":420},"number",[329,856,494],{"class":343},[329,858,447],{"class":339},[329,860,861,864,866,868,870,872,874],{"class":331,"line":467},[329,862,863],{"class":432},"    b",[329,865,436],{"class":339},[329,867,344],{"class":343},[329,869,488],{"class":339},[329,871,854],{"class":420},[329,873,494],{"class":343},[329,875,447],{"class":339},[329,877,878],{"class":331,"line":478},[329,879,502],{"class":339},[329,881,882,884,886,888,890,893,895,898,900,902],{"class":331,"line":499},[329,883,508],{"class":420},[329,885,436],{"class":339},[329,887,514],{"class":513},[329,889,517],{"class":339},[329,891,892],{"class":520}," a",[329,894,600],{"class":339},[329,896,897],{"class":520}," b",[329,899,524],{"class":339},[329,901,527],{"class":513},[329,903,475],{"class":339},[329,905,906,908,910,913,916,919,921,923,926,929,931,933,936,938],{"class":331,"line":505},[329,907,561],{"class":335},[329,909,564],{"class":432},[329,911,912],{"class":343},"b",[329,914,915],{"class":339}," ===",[329,917,918],{"class":596}," 0",[329,920,573],{"class":432},[329,922,664],{"class":335},[329,924,925],{"class":339}," new",[329,927,928],{"class":420}," Error",[329,930,423],{"class":432},[329,932,444],{"class":339},[329,934,935],{"class":356},"Division by zero",[329,937,444],{"class":339},[329,939,555],{"class":432},[329,941,942,944,946,949],{"class":331,"line":532},[329,943,628],{"class":335},[329,945,892],{"class":343},[329,947,948],{"class":339}," \u002F",[329,950,951],{"class":343}," b\n",[329,953,954],{"class":331,"line":558},[329,955,502],{"class":339},[329,957,958,960],{"class":331,"line":578},[329,959,642],{"class":339},[329,961,555],{"class":343},[293,963,965],{"id":964},"response-caching","Response Caching",[298,967,968,969,972],{},"You can cache tool responses using Nitro's caching system. The ",[302,970,971],{},"cache"," option accepts three formats:",[307,974,976],{"id":975},"simple-duration","Simple Duration",[298,978,979,980,989],{},"Use a string duration (parsed by ",[981,982,986],"a",{"href":983,"rel":984},"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fms",[985],"nofollow",[302,987,988],{},"ms",") or a number in milliseconds:",[319,991,994],{"className":321,"code":992,"filename":993,"language":324,"meta":325,"style":325},"import { z } from 'zod'\nimport { defineMcpTool } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpTool({\n  description: 'Fetch data with 1 hour cache',\n  inputSchema: {\n    id: z.string(),\n  },\n  cache: '1h', \u002F\u002F or '30m', '2 days', 3600000, etc.\n  handler: async ({ id }) => {\n    return await fetchExpensiveData(id)\n  },\n})\n","server\u002Fmcp\u002Ftools\u002Fcached-data.ts",[302,995,996,1014,1032,1036,1048,1063,1071,1087,1091,1110,1128,1143,1147],{"__ignoreMap":325},[329,997,998,1000,1002,1004,1006,1008,1010,1012],{"class":331,"line":332},[329,999,336],{"class":335},[329,1001,340],{"class":339},[329,1003,344],{"class":343},[329,1005,347],{"class":339},[329,1007,350],{"class":335},[329,1009,353],{"class":339},[329,1011,357],{"class":356},[329,1013,360],{"class":339},[329,1015,1016,1018,1020,1022,1024,1026,1028,1030],{"class":331,"line":363},[329,1017,336],{"class":335},[329,1019,340],{"class":339},[329,1021,390],{"class":343},[329,1023,347],{"class":339},[329,1025,350],{"class":335},[329,1027,353],{"class":339},[329,1029,399],{"class":356},[329,1031,360],{"class":339},[329,1033,1034],{"class":331,"line":383},[329,1035,408],{"emptyLinePlaceholder":407},[329,1037,1038,1040,1042,1044,1046],{"class":331,"line":404},[329,1039,414],{"class":335},[329,1041,417],{"class":335},[329,1043,390],{"class":420},[329,1045,423],{"class":343},[329,1047,426],{"class":339},[329,1049,1050,1052,1054,1056,1059,1061],{"class":331,"line":411},[329,1051,453],{"class":432},[329,1053,436],{"class":339},[329,1055,353],{"class":339},[329,1057,1058],{"class":356},"Fetch data with 1 hour cache",[329,1060,444],{"class":339},[329,1062,447],{"class":339},[329,1064,1065,1067,1069],{"class":331,"line":429},[329,1066,470],{"class":432},[329,1068,436],{"class":339},[329,1070,475],{"class":339},[329,1072,1073,1075,1077,1079,1081,1083,1085],{"class":331,"line":450},[329,1074,481],{"class":432},[329,1076,436],{"class":339},[329,1078,344],{"class":343},[329,1080,488],{"class":339},[329,1082,491],{"class":420},[329,1084,494],{"class":343},[329,1086,447],{"class":339},[329,1088,1089],{"class":331,"line":467},[329,1090,502],{"class":339},[329,1092,1093,1096,1098,1100,1103,1105,1107],{"class":331,"line":478},[329,1094,1095],{"class":432},"  cache",[329,1097,436],{"class":339},[329,1099,353],{"class":339},[329,1101,1102],{"class":356},"1h",[329,1104,444],{"class":339},[329,1106,600],{"class":339},[329,1108,1109],{"class":650}," \u002F\u002F or '30m', '2 days', 3600000, etc.\n",[329,1111,1112,1114,1116,1118,1120,1122,1124,1126],{"class":331,"line":499},[329,1113,508],{"class":420},[329,1115,436],{"class":339},[329,1117,514],{"class":513},[329,1119,517],{"class":339},[329,1121,521],{"class":520},[329,1123,524],{"class":339},[329,1125,527],{"class":513},[329,1127,475],{"class":339},[329,1129,1130,1132,1134,1137,1139,1141],{"class":331,"line":505},[329,1131,628],{"class":335},[329,1133,544],{"class":335},[329,1135,1136],{"class":420}," fetchExpensiveData",[329,1138,423],{"class":432},[329,1140,552],{"class":343},[329,1142,555],{"class":432},[329,1144,1145],{"class":331,"line":532},[329,1146,502],{"class":339},[329,1148,1149,1151],{"class":331,"line":558},[329,1150,642],{"class":339},[329,1152,555],{"class":343},[307,1154,1156],{"id":1155},"full-cache-options","Full Cache Options",[298,1158,1159],{},"For more control, use an object with all Nitro cache options:",[319,1161,1164],{"className":321,"code":1162,"filename":1163,"language":324,"meta":325,"style":325},"import { z } from 'zod'\nimport { defineMcpTool } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpTool({\n  description: 'Get page with custom cache key',\n  inputSchema: {\n    path: z.string(),\n  },\n  cache: {\n    maxAge: '1h',\n    getKey: args => `page-${args.path}`,\n    swr: true, \u002F\u002F stale-while-revalidate\n  },\n  handler: async ({ path }) => {\n    \u002F\u002F ...\n  },\n})\n","server\u002Fmcp\u002Ftools\u002Fcached-pages.ts",[302,1165,1166,1184,1202,1206,1218,1233,1241,1258,1262,1270,1285,1319,1335,1339,1358,1363,1367],{"__ignoreMap":325},[329,1167,1168,1170,1172,1174,1176,1178,1180,1182],{"class":331,"line":332},[329,1169,336],{"class":335},[329,1171,340],{"class":339},[329,1173,344],{"class":343},[329,1175,347],{"class":339},[329,1177,350],{"class":335},[329,1179,353],{"class":339},[329,1181,357],{"class":356},[329,1183,360],{"class":339},[329,1185,1186,1188,1190,1192,1194,1196,1198,1200],{"class":331,"line":363},[329,1187,336],{"class":335},[329,1189,340],{"class":339},[329,1191,390],{"class":343},[329,1193,347],{"class":339},[329,1195,350],{"class":335},[329,1197,353],{"class":339},[329,1199,399],{"class":356},[329,1201,360],{"class":339},[329,1203,1204],{"class":331,"line":383},[329,1205,408],{"emptyLinePlaceholder":407},[329,1207,1208,1210,1212,1214,1216],{"class":331,"line":404},[329,1209,414],{"class":335},[329,1211,417],{"class":335},[329,1213,390],{"class":420},[329,1215,423],{"class":343},[329,1217,426],{"class":339},[329,1219,1220,1222,1224,1226,1229,1231],{"class":331,"line":411},[329,1221,453],{"class":432},[329,1223,436],{"class":339},[329,1225,353],{"class":339},[329,1227,1228],{"class":356},"Get page with custom cache key",[329,1230,444],{"class":339},[329,1232,447],{"class":339},[329,1234,1235,1237,1239],{"class":331,"line":429},[329,1236,470],{"class":432},[329,1238,436],{"class":339},[329,1240,475],{"class":339},[329,1242,1243,1246,1248,1250,1252,1254,1256],{"class":331,"line":450},[329,1244,1245],{"class":432},"    path",[329,1247,436],{"class":339},[329,1249,344],{"class":343},[329,1251,488],{"class":339},[329,1253,491],{"class":420},[329,1255,494],{"class":343},[329,1257,447],{"class":339},[329,1259,1260],{"class":331,"line":467},[329,1261,502],{"class":339},[329,1263,1264,1266,1268],{"class":331,"line":478},[329,1265,1095],{"class":432},[329,1267,436],{"class":339},[329,1269,475],{"class":339},[329,1271,1272,1275,1277,1279,1281,1283],{"class":331,"line":499},[329,1273,1274],{"class":432},"    maxAge",[329,1276,436],{"class":339},[329,1278,353],{"class":339},[329,1280,1102],{"class":356},[329,1282,444],{"class":339},[329,1284,447],{"class":339},[329,1286,1287,1290,1292,1295,1297,1300,1303,1306,1309,1311,1314,1317],{"class":331,"line":505},[329,1288,1289],{"class":420},"    getKey",[329,1291,436],{"class":339},[329,1293,1294],{"class":520}," args",[329,1296,527],{"class":513},[329,1298,1299],{"class":339}," `",[329,1301,1302],{"class":356},"page-",[329,1304,1305],{"class":339},"${",[329,1307,1308],{"class":343},"args",[329,1310,488],{"class":339},[329,1312,1313],{"class":343},"path",[329,1315,1316],{"class":339},"}`",[329,1318,447],{"class":339},[329,1320,1321,1324,1326,1330,1332],{"class":331,"line":532},[329,1322,1323],{"class":432},"    swr",[329,1325,436],{"class":339},[329,1327,1329],{"class":1328},"sfNiH"," true",[329,1331,600],{"class":339},[329,1333,1334],{"class":650}," \u002F\u002F stale-while-revalidate\n",[329,1336,1337],{"class":331,"line":558},[329,1338,502],{"class":339},[329,1340,1341,1343,1345,1347,1349,1352,1354,1356],{"class":331,"line":578},[329,1342,508],{"class":420},[329,1344,436],{"class":339},[329,1346,514],{"class":513},[329,1348,517],{"class":339},[329,1350,1351],{"class":520}," path",[329,1353,524],{"class":339},[329,1355,527],{"class":513},[329,1357,475],{"class":339},[329,1359,1360],{"class":331,"line":619},[329,1361,1362],{"class":650},"    \u002F\u002F ...\n",[329,1364,1365],{"class":331,"line":625},[329,1366,502],{"class":339},[329,1368,1369,1371],{"class":331,"line":634},[329,1370,642],{"class":339},[329,1372,555],{"class":343},[307,1374,1376],{"id":1375},"cache-options-reference","Cache Options Reference",[1378,1379,1380,1399],"table",{},[1381,1382,1383],"thead",{},[1384,1385,1386,1390,1393,1396],"tr",{},[1387,1388,1389],"th",{},"Option",[1387,1391,1392],{},"Type",[1387,1394,1395],{},"Required",[1387,1397,1398],{},"Description",[1400,1401,1402,1429,1447,1463,1484,1499],"tbody",{},[1384,1403,1404,1410,1415,1418],{},[1405,1406,1407],"td",{},[302,1408,1409],{},"maxAge",[1405,1411,1412],{},[302,1413,1414],{},"string | number",[1405,1416,1417],{},"Yes",[1405,1419,1420,1421,1424,1425,1428],{},"Cache duration (e.g., ",[302,1422,1423],{},"'1h'",", ",[302,1426,1427],{},"3600000",")",[1384,1430,1431,1436,1441,1444],{},[1405,1432,1433],{},[302,1434,1435],{},"getKey",[1405,1437,1438],{},[302,1439,1440],{},"(args) => string",[1405,1442,1443],{},"No",[1405,1445,1446],{},"Custom cache key generator",[1384,1448,1449,1454,1458,1460],{},[1405,1450,1451],{},[302,1452,1453],{},"staleMaxAge",[1405,1455,1456],{},[302,1457,854],{},[1405,1459,1443],{},[1405,1461,1462],{},"Duration for stale-while-revalidate",[1384,1464,1465,1470,1475,1477],{},[1405,1466,1467],{},[302,1468,1469],{},"swr",[1405,1471,1472],{},[302,1473,1474],{},"boolean",[1405,1476,1443],{},[1405,1478,1479,1480,1483],{},"Enable stale-while-revalidate (defaults to ",[302,1481,1482],{},"false",", see warning below)",[1384,1485,1486,1490,1494,1496],{},[1405,1487,1488],{},[302,1489,720],{},[1405,1491,1492],{},[302,1493,491],{},[1405,1495,1443],{},[1405,1497,1498],{},"Cache name (auto-generated from tool name)",[1384,1500,1501,1506,1510,1512],{},[1405,1502,1503],{},[302,1504,1505],{},"group",[1405,1507,1508],{},[302,1509,491],{},[1405,1511,1443],{},[1405,1513,1514,1515,1428],{},"Cache group (default: ",[302,1516,1517],{},"'mcp'",[1519,1520,1523,1524,1529],"callout",{"color":1521,"icon":1522},"info","i-lucide-info","See the ",[981,1525,1528],{"href":1526,"rel":1527},"https:\u002F\u002Fnitro.build\u002Fguide\u002Fcache#options",[985],"Nitro Cache documentation"," for all available options.",[1519,1531,1534,1536,1537,1539,1540,1543,1544,1547],{"color":1532,"icon":1533},"warning","i-lucide-triangle-alert",[302,1535,1469],{}," defaults to ",[302,1538,1482],{}," (Nitro itself defaults to ",[302,1541,1542],{},"true","). With ",[302,1545,1546],{},"swr: true",", stale hits return immediately and the handler refreshes in the background after the request is answered, so request-scoped writes (structured logs, traces) may be dropped. Opt in only when you accept that trade-off.",[1549,1550,1551],"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":325,"searchDepth":363,"depth":363,"links":1553},[1554,1558],{"id":295,"depth":363,"text":296,"children":1555},[1556,1557],{"id":309,"depth":383,"text":310},{"id":751,"depth":383,"text":752},{"id":964,"depth":363,"text":965,"children":1559},[1560,1561,1562],{"id":975,"depth":383,"text":976},{"id":1155,"depth":383,"text":1156},{"id":1375,"depth":383,"text":1376},"H3 and plain errors in tool handlers, and Nitro-backed response caching.","md",null,{},{"icon":64},{"title":1569,"description":1570},"Tool errors & response caching","createError from h3, plain Error throws, and cache options for MCP tools in Nuxt.","jBhZY2Cv6jlXhxN0FWEHh34_cyLHj49-RUvzhyVN4bE",[1573,1575],{"title":56,"path":57,"stem":58,"description":1574,"icon":59,"children":-1},"Behavioral hints for MCP clients and concrete inputExamples for complex tools.",{"title":66,"path":67,"stem":68,"description":1576,"icon":69,"children":-1},"group and tags, directory layout, type safety, and enabled guards for tools.",1787670838613]