[{"data":1,"prerenderedAt":5358},["ShallowReactive",2],{"navigation_docs":3,"-core-concepts-tools":139,"-core-concepts-tools-surround":5353},[4,40,65,110],{"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},"MCP 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},"Core Concepts","\u002Fcore-concepts","2.core-concepts",[45,50,55,60],{"title":46,"path":47,"stem":48,"icon":49},"Tools","\u002Fcore-concepts\u002Ftools","2.core-concepts\u002F2.tools","i-lucide-wrench",{"title":51,"path":52,"stem":53,"icon":54},"Resources","\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},"Advanced Topics","\u002Fadvanced","3.advanced",[70,75,80,85,90,95,100,105],{"title":71,"path":72,"stem":73,"icon":74},"Custom Paths","\u002Fadvanced\u002Fcustom-paths","3.advanced\u002F1.custom-paths","i-lucide-folder",{"title":76,"path":77,"stem":78,"icon":79},"Middleware","\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},"Hooks","\u002Fadvanced\u002Fhooks","3.advanced\u002F4.hooks","i-lucide-webhook",{"title":91,"path":92,"stem":93,"icon":94},"MCP Evals","\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},"Dynamic Definitions","\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},"Examples","\u002Fexamples","4.examples",[115,120,125,130,135],{"title":116,"path":117,"stem":118,"icon":119},"Authentication","\u002Fexamples\u002Fauthentication","4.examples\u002F1.authentication","i-lucide-shield-check",{"title":121,"path":122,"stem":123,"icon":124},"API Integration","\u002Fexamples\u002Fapi-integration","4.examples\u002F2.api-integration","i-lucide-globe",{"title":126,"path":127,"stem":128,"icon":129},"Common Patterns","\u002Fexamples\u002Fcommon-patterns","4.examples\u002F3.common-patterns","i-lucide-lightbulb",{"title":131,"path":132,"stem":133,"icon":134},"File Operations","\u002Fexamples\u002Ffile-operations","4.examples\u002F4.file-operations","i-lucide-file",{"title":136,"path":137,"stem":138,"icon":59},"Prompt Examples","\u002Fexamples\u002Fprompt-examples","4.examples\u002F5.prompt-examples",{"id":140,"title":46,"body":141,"description":5345,"extension":5346,"links":5347,"meta":5348,"navigation":5349,"path":47,"seo":5350,"stem":48,"__hash__":5352},"docs\u002F2.core-concepts\u002F2.tools.md",{"type":142,"value":143,"toc":5310},"minimark",[144,149,153,157,160,394,398,409,510,517,538,547,551,554,829,833,843,937,940,1370,1375,1517,1521,1527,1979,1988,1992,1999,2003,2015,2200,2209,2213,2219,2472,2476,2483,2661,2682,2686,2689,2910,2914,3028,3031,3280,3288,3292,3305,3308,3568,3574,3577,3584,3588,3595,3845,3848,3939,3943,3950,4145,4149,4156,4160,4172,4335,4339,4342,4548,4552,4678,4687,4691,4695,4698,4966,4970,4977,4985,4988,4992,4995,5101,5105,5112,5251,5264,5270,5274,5306],[145,146,148],"h2",{"id":147},"what-are-tools","What are Tools?",[150,151,152],"p",{},"Tools are functions that AI assistants can call to perform actions or retrieve information. They accept validated input parameters and return structured results.",[145,154,156],{"id":155},"basic-tool-definition","Basic Tool Definition",[150,158,159],{},"Here's a simple tool that echoes back a message:",[161,162,168],"pre",{"className":163,"code":164,"filename":165,"language":166,"meta":167,"style":167},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { z } from 'zod'\nimport { defineMcpTool } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpTool({\n  name: 'echo',\n  description: 'Echo back a message',\n  inputSchema: {\n    message: z.string().describe('The message to echo back'),\n  },\n  handler: async ({ message }) => `Echo: ${message}`,\n})\n","server\u002Fmcp\u002Ftools\u002Fecho.ts","typescript","",[169,170,171,204,225,232,250,271,288,299,337,343,385],"code",{"__ignoreMap":167},[172,173,176,180,184,188,191,194,197,201],"span",{"class":174,"line":175},"line",1,[172,177,179],{"class":178},"s7zQu","import",[172,181,183],{"class":182},"sMK4o"," {",[172,185,187],{"class":186},"sTEyZ"," z",[172,189,190],{"class":182}," }",[172,192,193],{"class":178}," from",[172,195,196],{"class":182}," '",[172,198,200],{"class":199},"sfazB","zod",[172,202,203],{"class":182},"'\n",[172,205,207,209,211,214,216,218,220,223],{"class":174,"line":206},2,[172,208,179],{"class":178},[172,210,183],{"class":182},[172,212,213],{"class":186}," defineMcpTool",[172,215,190],{"class":182},[172,217,193],{"class":178},[172,219,196],{"class":182},[172,221,222],{"class":199},"@nuxtjs\u002Fmcp-toolkit\u002Fserver",[172,224,203],{"class":182},[172,226,228],{"class":174,"line":227},3,[172,229,231],{"emptyLinePlaceholder":230},true,"\n",[172,233,235,238,241,244,247],{"class":174,"line":234},4,[172,236,237],{"class":178},"export",[172,239,240],{"class":178}," default",[172,242,213],{"class":243},"s2Zo4",[172,245,246],{"class":186},"(",[172,248,249],{"class":182},"{\n",[172,251,253,257,260,262,265,268],{"class":174,"line":252},5,[172,254,256],{"class":255},"swJcz","  name",[172,258,259],{"class":182},":",[172,261,196],{"class":182},[172,263,264],{"class":199},"echo",[172,266,267],{"class":182},"'",[172,269,270],{"class":182},",\n",[172,272,274,277,279,281,284,286],{"class":174,"line":273},6,[172,275,276],{"class":255},"  description",[172,278,259],{"class":182},[172,280,196],{"class":182},[172,282,283],{"class":199},"Echo back a message",[172,285,267],{"class":182},[172,287,270],{"class":182},[172,289,291,294,296],{"class":174,"line":290},7,[172,292,293],{"class":255},"  inputSchema",[172,295,259],{"class":182},[172,297,298],{"class":182}," {\n",[172,300,302,305,307,309,312,315,318,320,323,325,327,330,332,335],{"class":174,"line":301},8,[172,303,304],{"class":255},"    message",[172,306,259],{"class":182},[172,308,187],{"class":186},[172,310,311],{"class":182},".",[172,313,314],{"class":243},"string",[172,316,317],{"class":186},"()",[172,319,311],{"class":182},[172,321,322],{"class":243},"describe",[172,324,246],{"class":186},[172,326,267],{"class":182},[172,328,329],{"class":199},"The message to echo back",[172,331,267],{"class":182},[172,333,334],{"class":186},")",[172,336,270],{"class":182},[172,338,340],{"class":174,"line":339},9,[172,341,342],{"class":182},"  },\n",[172,344,346,349,351,355,358,362,365,368,371,374,377,380,383],{"class":174,"line":345},10,[172,347,348],{"class":243},"  handler",[172,350,259],{"class":182},[172,352,354],{"class":353},"spNyl"," async",[172,356,357],{"class":182}," ({",[172,359,361],{"class":360},"sHdIc"," message",[172,363,364],{"class":182}," })",[172,366,367],{"class":353}," =>",[172,369,370],{"class":182}," `",[172,372,373],{"class":199},"Echo: ",[172,375,376],{"class":182},"${",[172,378,379],{"class":186},"message",[172,381,382],{"class":182},"}`",[172,384,270],{"class":182},[172,386,388,391],{"class":174,"line":387},11,[172,389,390],{"class":182},"}",[172,392,393],{"class":186},")\n",[145,395,397],{"id":396},"auto-generated-name-and-title","Auto-Generated Name and Title",[150,399,400,401,404,405,408],{},"You can omit ",[169,402,403],{},"name"," and ",[169,406,407],{},"title"," - they will be automatically generated from the filename:",[161,410,413],{"className":163,"code":411,"filename":412,"language":166,"meta":167,"style":167},"import { defineMcpTool } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpTool({\n  \u002F\u002F name and title are auto-generated from filename:\n  \u002F\u002F name: 'list-documentation'\n  \u002F\u002F title: 'List Documentation'\n  description: 'List all documentation files',\n  handler: async () => {\n    \u002F\u002F ...\n  },\n})\n","server\u002Fmcp\u002Ftools\u002Flist-documentation.ts",[169,414,415,433,437,449,455,460,465,480,495,500,504],{"__ignoreMap":167},[172,416,417,419,421,423,425,427,429,431],{"class":174,"line":175},[172,418,179],{"class":178},[172,420,183],{"class":182},[172,422,213],{"class":186},[172,424,190],{"class":182},[172,426,193],{"class":178},[172,428,196],{"class":182},[172,430,222],{"class":199},[172,432,203],{"class":182},[172,434,435],{"class":174,"line":206},[172,436,231],{"emptyLinePlaceholder":230},[172,438,439,441,443,445,447],{"class":174,"line":227},[172,440,237],{"class":178},[172,442,240],{"class":178},[172,444,213],{"class":243},[172,446,246],{"class":186},[172,448,249],{"class":182},[172,450,451],{"class":174,"line":234},[172,452,454],{"class":453},"sHwdD","  \u002F\u002F name and title are auto-generated from filename:\n",[172,456,457],{"class":174,"line":252},[172,458,459],{"class":453},"  \u002F\u002F name: 'list-documentation'\n",[172,461,462],{"class":174,"line":273},[172,463,464],{"class":453},"  \u002F\u002F title: 'List Documentation'\n",[172,466,467,469,471,473,476,478],{"class":174,"line":290},[172,468,276],{"class":255},[172,470,259],{"class":182},[172,472,196],{"class":182},[172,474,475],{"class":199},"List all documentation files",[172,477,267],{"class":182},[172,479,270],{"class":182},[172,481,482,484,486,488,491,493],{"class":174,"line":301},[172,483,348],{"class":243},[172,485,259],{"class":182},[172,487,354],{"class":353},[172,489,490],{"class":182}," ()",[172,492,367],{"class":353},[172,494,298],{"class":182},[172,496,497],{"class":174,"line":339},[172,498,499],{"class":453},"    \u002F\u002F ...\n",[172,501,502],{"class":174,"line":345},[172,503,342],{"class":182},[172,505,506,508],{"class":174,"line":387},[172,507,390],{"class":182},[172,509,393],{"class":186},[150,511,512,513,516],{},"The filename ",[169,514,515],{},"list-documentation.ts"," automatically becomes:",[518,519,520,530],"ul",{},[521,522,523,525,526,529],"li",{},[169,524,403],{},": ",[169,527,528],{},"list-documentation"," (kebab-case)",[521,531,532,525,534,537],{},[169,533,407],{},[169,535,536],{},"List Documentation"," (title case)",[150,539,540,541,543,544,546],{},"You can still provide ",[169,542,403],{}," or ",[169,545,407],{}," explicitly to override the auto-generated values.",[145,548,550],{"id":549},"tool-structure","Tool Structure",[150,552,553],{},"A tool definition consists of:",[555,556,557,656],"code-group",{},[161,558,561],{"className":163,"code":559,"filename":560,"language":166,"meta":167,"style":167},"export default defineMcpTool({\n  name: 'tool-name',        \u002F\u002F Unique identifier (optional - auto-generated from filename)\n  inputSchema: { ... },      \u002F\u002F Zod schema for input validation\n  handler: async (args) => {\n    return 'result'          \u002F\u002F string, number, boolean, object, or CallToolResult\n  },\n})\n","Required Fields",[169,562,563,575,594,611,631,646,650],{"__ignoreMap":167},[172,564,565,567,569,571,573],{"class":174,"line":175},[172,566,237],{"class":178},[172,568,240],{"class":178},[172,570,213],{"class":243},[172,572,246],{"class":186},[172,574,249],{"class":182},[172,576,577,579,581,583,586,588,591],{"class":174,"line":206},[172,578,256],{"class":255},[172,580,259],{"class":182},[172,582,196],{"class":182},[172,584,585],{"class":199},"tool-name",[172,587,267],{"class":182},[172,589,590],{"class":182},",",[172,592,593],{"class":453},"        \u002F\u002F Unique identifier (optional - auto-generated from filename)\n",[172,595,596,598,600,602,605,608],{"class":174,"line":227},[172,597,293],{"class":255},[172,599,259],{"class":182},[172,601,183],{"class":182},[172,603,604],{"class":182}," ...",[172,606,607],{"class":182}," },",[172,609,610],{"class":453},"      \u002F\u002F Zod schema for input validation\n",[172,612,613,615,617,619,622,625,627,629],{"class":174,"line":234},[172,614,348],{"class":243},[172,616,259],{"class":182},[172,618,354],{"class":353},[172,620,621],{"class":182}," (",[172,623,624],{"class":360},"args",[172,626,334],{"class":182},[172,628,367],{"class":353},[172,630,298],{"class":182},[172,632,633,636,638,641,643],{"class":174,"line":252},[172,634,635],{"class":178},"    return",[172,637,196],{"class":182},[172,639,640],{"class":199},"result",[172,642,267],{"class":182},[172,644,645],{"class":453},"          \u002F\u002F string, number, boolean, object, or CallToolResult\n",[172,647,648],{"class":174,"line":273},[172,649,342],{"class":182},[172,651,652,654],{"class":174,"line":290},[172,653,390],{"class":182},[172,655,393],{"class":186},[161,657,660],{"className":163,"code":658,"filename":659,"language":166,"meta":167,"style":167},"export default defineMcpTool({\n  name: 'tool-name',              \u002F\u002F Optional - auto-generated from filename\n  title: 'Tool Title',            \u002F\u002F Optional - auto-generated from filename\n  description: 'Tool description',  \u002F\u002F What the tool does\n  inputSchema: { ... },            \u002F\u002F Optional - Zod schema for input validation\n  outputSchema: { ... },            \u002F\u002F Zod schema for structured output\n  annotations: { ... },             \u002F\u002F Behavioral hints for clients\n  inputExamples: [{ ... }],         \u002F\u002F Concrete usage examples\n  handler: async (args) => { ... },\n})\n","Optional Fields",[169,661,662,674,691,710,728,743,759,775,800,823],{"__ignoreMap":167},[172,663,664,666,668,670,672],{"class":174,"line":175},[172,665,237],{"class":178},[172,667,240],{"class":178},[172,669,213],{"class":243},[172,671,246],{"class":186},[172,673,249],{"class":182},[172,675,676,678,680,682,684,686,688],{"class":174,"line":206},[172,677,256],{"class":255},[172,679,259],{"class":182},[172,681,196],{"class":182},[172,683,585],{"class":199},[172,685,267],{"class":182},[172,687,590],{"class":182},[172,689,690],{"class":453},"              \u002F\u002F Optional - auto-generated from filename\n",[172,692,693,696,698,700,703,705,707],{"class":174,"line":227},[172,694,695],{"class":255},"  title",[172,697,259],{"class":182},[172,699,196],{"class":182},[172,701,702],{"class":199},"Tool Title",[172,704,267],{"class":182},[172,706,590],{"class":182},[172,708,709],{"class":453},"            \u002F\u002F Optional - auto-generated from filename\n",[172,711,712,714,716,718,721,723,725],{"class":174,"line":234},[172,713,276],{"class":255},[172,715,259],{"class":182},[172,717,196],{"class":182},[172,719,720],{"class":199},"Tool description",[172,722,267],{"class":182},[172,724,590],{"class":182},[172,726,727],{"class":453},"  \u002F\u002F What the tool does\n",[172,729,730,732,734,736,738,740],{"class":174,"line":252},[172,731,293],{"class":255},[172,733,259],{"class":182},[172,735,183],{"class":182},[172,737,604],{"class":182},[172,739,607],{"class":182},[172,741,742],{"class":453},"            \u002F\u002F Optional - Zod schema for input validation\n",[172,744,745,748,750,752,754,756],{"class":174,"line":273},[172,746,747],{"class":255},"  outputSchema",[172,749,259],{"class":182},[172,751,183],{"class":182},[172,753,604],{"class":182},[172,755,607],{"class":182},[172,757,758],{"class":453},"            \u002F\u002F Zod schema for structured output\n",[172,760,761,764,766,768,770,772],{"class":174,"line":290},[172,762,763],{"class":255},"  annotations",[172,765,259],{"class":182},[172,767,183],{"class":182},[172,769,604],{"class":182},[172,771,607],{"class":182},[172,773,774],{"class":453},"             \u002F\u002F Behavioral hints for clients\n",[172,776,777,780,782,785,788,790,792,795,797],{"class":174,"line":301},[172,778,779],{"class":255},"  inputExamples",[172,781,259],{"class":182},[172,783,784],{"class":186}," [",[172,786,787],{"class":182},"{",[172,789,604],{"class":182},[172,791,190],{"class":182},[172,793,794],{"class":186},"]",[172,796,590],{"class":182},[172,798,799],{"class":453},"         \u002F\u002F Concrete usage examples\n",[172,801,802,804,806,808,810,812,814,816,818,820],{"class":174,"line":339},[172,803,348],{"class":243},[172,805,259],{"class":182},[172,807,354],{"class":353},[172,809,621],{"class":182},[172,811,624],{"class":360},[172,813,334],{"class":182},[172,815,367],{"class":353},[172,817,183],{"class":182},[172,819,604],{"class":182},[172,821,822],{"class":182}," },\n",[172,824,825,827],{"class":174,"line":345},[172,826,390],{"class":182},[172,828,393],{"class":186},[145,830,832],{"id":831},"input-schema","Input Schema",[150,834,835,836,839,840,842],{},"The ",[169,837,838],{},"inputSchema"," is optional and uses Zod to define and validate input parameters. When provided, each field must be a Zod schema. Tools without parameters can omit ",[169,841,838],{}," entirely:",[161,844,846],{"className":163,"code":845,"filename":165,"language":166,"meta":167,"style":167},"import { defineMcpTool } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpTool({\n  name: 'echo',\n  description: 'Echo back a message',\n  handler: async () => 'Echo: test',\n})\n",[169,847,848,866,870,882,896,910,931],{"__ignoreMap":167},[172,849,850,852,854,856,858,860,862,864],{"class":174,"line":175},[172,851,179],{"class":178},[172,853,183],{"class":182},[172,855,213],{"class":186},[172,857,190],{"class":182},[172,859,193],{"class":178},[172,861,196],{"class":182},[172,863,222],{"class":199},[172,865,203],{"class":182},[172,867,868],{"class":174,"line":206},[172,869,231],{"emptyLinePlaceholder":230},[172,871,872,874,876,878,880],{"class":174,"line":227},[172,873,237],{"class":178},[172,875,240],{"class":178},[172,877,213],{"class":243},[172,879,246],{"class":186},[172,881,249],{"class":182},[172,883,884,886,888,890,892,894],{"class":174,"line":234},[172,885,256],{"class":255},[172,887,259],{"class":182},[172,889,196],{"class":182},[172,891,264],{"class":199},[172,893,267],{"class":182},[172,895,270],{"class":182},[172,897,898,900,902,904,906,908],{"class":174,"line":252},[172,899,276],{"class":255},[172,901,259],{"class":182},[172,903,196],{"class":182},[172,905,283],{"class":199},[172,907,267],{"class":182},[172,909,270],{"class":182},[172,911,912,914,916,918,920,922,924,927,929],{"class":174,"line":273},[172,913,348],{"class":243},[172,915,259],{"class":182},[172,917,354],{"class":353},[172,919,490],{"class":182},[172,921,367],{"class":353},[172,923,196],{"class":182},[172,925,926],{"class":199},"Echo: test",[172,928,267],{"class":182},[172,930,270],{"class":182},[172,932,933,935],{"class":174,"line":290},[172,934,390],{"class":182},[172,936,393],{"class":186},[150,938,939],{},"For tools with parameters, define them using Zod schemas:",[161,941,944],{"className":163,"code":942,"filename":943,"language":166,"meta":167,"style":167},"import { z } from 'zod'\nimport { defineMcpTool } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpTool({\n  name: 'calculator',\n  inputSchema: {\n    \u002F\u002F String input\n    operation: z.string().describe('Operation to perform'),\n\n    \u002F\u002F Number input\n    a: z.number().describe('First number'),\n    b: z.number().describe('Second number'),\n\n    \u002F\u002F Optional field\n    precision: z.number().optional().describe('Decimal precision'),\n\n    \u002F\u002F Enum input\n    format: z.enum(['decimal', 'fraction']).describe('Output format'),\n\n    \u002F\u002F Array input\n    numbers: z.array(z.number()).describe('List of numbers'),\n  },\n  handler: async ({ operation, a, b, precision, format, numbers }) => {\n    \u002F\u002F Handler implementation\n  },\n})\n","server\u002Fmcp\u002Ftools\u002Fcalculator.ts",[169,945,946,964,982,986,998,1013,1021,1026,1058,1062,1067,1100,1133,1138,1144,1184,1189,1195,1249,1254,1260,1302,1307,1352,1358,1363],{"__ignoreMap":167},[172,947,948,950,952,954,956,958,960,962],{"class":174,"line":175},[172,949,179],{"class":178},[172,951,183],{"class":182},[172,953,187],{"class":186},[172,955,190],{"class":182},[172,957,193],{"class":178},[172,959,196],{"class":182},[172,961,200],{"class":199},[172,963,203],{"class":182},[172,965,966,968,970,972,974,976,978,980],{"class":174,"line":206},[172,967,179],{"class":178},[172,969,183],{"class":182},[172,971,213],{"class":186},[172,973,190],{"class":182},[172,975,193],{"class":178},[172,977,196],{"class":182},[172,979,222],{"class":199},[172,981,203],{"class":182},[172,983,984],{"class":174,"line":227},[172,985,231],{"emptyLinePlaceholder":230},[172,987,988,990,992,994,996],{"class":174,"line":234},[172,989,237],{"class":178},[172,991,240],{"class":178},[172,993,213],{"class":243},[172,995,246],{"class":186},[172,997,249],{"class":182},[172,999,1000,1002,1004,1006,1009,1011],{"class":174,"line":252},[172,1001,256],{"class":255},[172,1003,259],{"class":182},[172,1005,196],{"class":182},[172,1007,1008],{"class":199},"calculator",[172,1010,267],{"class":182},[172,1012,270],{"class":182},[172,1014,1015,1017,1019],{"class":174,"line":273},[172,1016,293],{"class":255},[172,1018,259],{"class":182},[172,1020,298],{"class":182},[172,1022,1023],{"class":174,"line":290},[172,1024,1025],{"class":453},"    \u002F\u002F String input\n",[172,1027,1028,1031,1033,1035,1037,1039,1041,1043,1045,1047,1049,1052,1054,1056],{"class":174,"line":301},[172,1029,1030],{"class":255},"    operation",[172,1032,259],{"class":182},[172,1034,187],{"class":186},[172,1036,311],{"class":182},[172,1038,314],{"class":243},[172,1040,317],{"class":186},[172,1042,311],{"class":182},[172,1044,322],{"class":243},[172,1046,246],{"class":186},[172,1048,267],{"class":182},[172,1050,1051],{"class":199},"Operation to perform",[172,1053,267],{"class":182},[172,1055,334],{"class":186},[172,1057,270],{"class":182},[172,1059,1060],{"class":174,"line":339},[172,1061,231],{"emptyLinePlaceholder":230},[172,1063,1064],{"class":174,"line":345},[172,1065,1066],{"class":453},"    \u002F\u002F Number input\n",[172,1068,1069,1072,1074,1076,1078,1081,1083,1085,1087,1089,1091,1094,1096,1098],{"class":174,"line":387},[172,1070,1071],{"class":255},"    a",[172,1073,259],{"class":182},[172,1075,187],{"class":186},[172,1077,311],{"class":182},[172,1079,1080],{"class":243},"number",[172,1082,317],{"class":186},[172,1084,311],{"class":182},[172,1086,322],{"class":243},[172,1088,246],{"class":186},[172,1090,267],{"class":182},[172,1092,1093],{"class":199},"First number",[172,1095,267],{"class":182},[172,1097,334],{"class":186},[172,1099,270],{"class":182},[172,1101,1103,1106,1108,1110,1112,1114,1116,1118,1120,1122,1124,1127,1129,1131],{"class":174,"line":1102},12,[172,1104,1105],{"class":255},"    b",[172,1107,259],{"class":182},[172,1109,187],{"class":186},[172,1111,311],{"class":182},[172,1113,1080],{"class":243},[172,1115,317],{"class":186},[172,1117,311],{"class":182},[172,1119,322],{"class":243},[172,1121,246],{"class":186},[172,1123,267],{"class":182},[172,1125,1126],{"class":199},"Second number",[172,1128,267],{"class":182},[172,1130,334],{"class":186},[172,1132,270],{"class":182},[172,1134,1136],{"class":174,"line":1135},13,[172,1137,231],{"emptyLinePlaceholder":230},[172,1139,1141],{"class":174,"line":1140},14,[172,1142,1143],{"class":453},"    \u002F\u002F Optional field\n",[172,1145,1147,1150,1152,1154,1156,1158,1160,1162,1165,1167,1169,1171,1173,1175,1178,1180,1182],{"class":174,"line":1146},15,[172,1148,1149],{"class":255},"    precision",[172,1151,259],{"class":182},[172,1153,187],{"class":186},[172,1155,311],{"class":182},[172,1157,1080],{"class":243},[172,1159,317],{"class":186},[172,1161,311],{"class":182},[172,1163,1164],{"class":243},"optional",[172,1166,317],{"class":186},[172,1168,311],{"class":182},[172,1170,322],{"class":243},[172,1172,246],{"class":186},[172,1174,267],{"class":182},[172,1176,1177],{"class":199},"Decimal precision",[172,1179,267],{"class":182},[172,1181,334],{"class":186},[172,1183,270],{"class":182},[172,1185,1187],{"class":174,"line":1186},16,[172,1188,231],{"emptyLinePlaceholder":230},[172,1190,1192],{"class":174,"line":1191},17,[172,1193,1194],{"class":453},"    \u002F\u002F Enum input\n",[172,1196,1198,1201,1203,1205,1207,1210,1213,1215,1218,1220,1222,1224,1227,1229,1232,1234,1236,1238,1240,1243,1245,1247],{"class":174,"line":1197},18,[172,1199,1200],{"class":255},"    format",[172,1202,259],{"class":182},[172,1204,187],{"class":186},[172,1206,311],{"class":182},[172,1208,1209],{"class":243},"enum",[172,1211,1212],{"class":186},"([",[172,1214,267],{"class":182},[172,1216,1217],{"class":199},"decimal",[172,1219,267],{"class":182},[172,1221,590],{"class":182},[172,1223,196],{"class":182},[172,1225,1226],{"class":199},"fraction",[172,1228,267],{"class":182},[172,1230,1231],{"class":186},"])",[172,1233,311],{"class":182},[172,1235,322],{"class":243},[172,1237,246],{"class":186},[172,1239,267],{"class":182},[172,1241,1242],{"class":199},"Output format",[172,1244,267],{"class":182},[172,1246,334],{"class":186},[172,1248,270],{"class":182},[172,1250,1252],{"class":174,"line":1251},19,[172,1253,231],{"emptyLinePlaceholder":230},[172,1255,1257],{"class":174,"line":1256},20,[172,1258,1259],{"class":453},"    \u002F\u002F Array input\n",[172,1261,1263,1266,1268,1270,1272,1275,1278,1280,1282,1285,1287,1289,1291,1293,1296,1298,1300],{"class":174,"line":1262},21,[172,1264,1265],{"class":255},"    numbers",[172,1267,259],{"class":182},[172,1269,187],{"class":186},[172,1271,311],{"class":182},[172,1273,1274],{"class":243},"array",[172,1276,1277],{"class":186},"(z",[172,1279,311],{"class":182},[172,1281,1080],{"class":243},[172,1283,1284],{"class":186},"())",[172,1286,311],{"class":182},[172,1288,322],{"class":243},[172,1290,246],{"class":186},[172,1292,267],{"class":182},[172,1294,1295],{"class":199},"List of numbers",[172,1297,267],{"class":182},[172,1299,334],{"class":186},[172,1301,270],{"class":182},[172,1303,1305],{"class":174,"line":1304},22,[172,1306,342],{"class":182},[172,1308,1310,1312,1314,1316,1318,1321,1323,1326,1328,1331,1333,1336,1338,1341,1343,1346,1348,1350],{"class":174,"line":1309},23,[172,1311,348],{"class":243},[172,1313,259],{"class":182},[172,1315,354],{"class":353},[172,1317,357],{"class":182},[172,1319,1320],{"class":360}," operation",[172,1322,590],{"class":182},[172,1324,1325],{"class":360}," a",[172,1327,590],{"class":182},[172,1329,1330],{"class":360}," b",[172,1332,590],{"class":182},[172,1334,1335],{"class":360}," precision",[172,1337,590],{"class":182},[172,1339,1340],{"class":360}," format",[172,1342,590],{"class":182},[172,1344,1345],{"class":360}," numbers",[172,1347,364],{"class":182},[172,1349,367],{"class":353},[172,1351,298],{"class":182},[172,1353,1355],{"class":174,"line":1354},24,[172,1356,1357],{"class":453},"    \u002F\u002F Handler implementation\n",[172,1359,1361],{"class":174,"line":1360},25,[172,1362,342],{"class":182},[172,1364,1366,1368],{"class":174,"line":1365},26,[172,1367,390],{"class":182},[172,1369,393],{"class":186},[1371,1372,1374],"h3",{"id":1373},"common-zod-types","Common Zod Types",[1376,1377,1378,1394],"table",{},[1379,1380,1381],"thead",{},[1382,1383,1384,1388,1391],"tr",{},[1385,1386,1387],"th",{},"Zod Type",[1385,1389,1390],{},"Example",[1385,1392,1393],{},"Description",[1395,1396,1397,1413,1428,1442,1457,1472,1487,1502],"tbody",{},[1382,1398,1399,1405,1410],{},[1400,1401,1402],"td",{},[169,1403,1404],{},"z.string()",[1400,1406,1407],{},[169,1408,1409],{},"z.string().min(1).max(100)",[1400,1411,1412],{},"String with validation",[1382,1414,1415,1420,1425],{},[1400,1416,1417],{},[169,1418,1419],{},"z.number()",[1400,1421,1422],{},[169,1423,1424],{},"z.number().min(0).max(100)",[1400,1426,1427],{},"Number with validation",[1382,1429,1430,1435,1439],{},[1400,1431,1432],{},[169,1433,1434],{},"z.boolean()",[1400,1436,1437],{},[169,1438,1434],{},[1400,1440,1441],{},"Boolean value",[1382,1443,1444,1449,1454],{},[1400,1445,1446],{},[169,1447,1448],{},"z.array()",[1400,1450,1451],{},[169,1452,1453],{},"z.array(z.string())",[1400,1455,1456],{},"Array of values",[1382,1458,1459,1464,1469],{},[1400,1460,1461],{},[169,1462,1463],{},"z.object()",[1400,1465,1466],{},[169,1467,1468],{},"z.object({ ... })",[1400,1470,1471],{},"Nested object",[1382,1473,1474,1479,1484],{},[1400,1475,1476],{},[169,1477,1478],{},"z.enum()",[1400,1480,1481],{},[169,1482,1483],{},"z.enum(['a', 'b'])",[1400,1485,1486],{},"Enumeration",[1382,1488,1489,1494,1499],{},[1400,1490,1491],{},[169,1492,1493],{},"z.optional()",[1400,1495,1496],{},[169,1497,1498],{},"z.string().optional()",[1400,1500,1501],{},"Optional field",[1382,1503,1504,1509,1514],{},[1400,1505,1506],{},[169,1507,1508],{},"z.default()",[1400,1510,1511],{},[169,1512,1513],{},"z.string().default('value')",[1400,1515,1516],{},"Field with default",[145,1518,1520],{"id":1519},"output-schema","Output Schema",[150,1522,1523,1524,259],{},"Define structured output using ",[169,1525,1526],{},"outputSchema",[161,1528,1531],{"className":163,"code":1529,"filename":1530,"language":166,"meta":167,"style":167},"import { z } from 'zod'\nimport { defineMcpTool } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpTool({\n  name: 'calculate-bmi',\n  description: 'Calculate Body Mass Index',\n  inputSchema: {\n    weightKg: z.number().describe('Weight in kilograms'),\n    heightM: z.number().describe('Height in meters'),\n  },\n  outputSchema: {\n    bmi: z.number(),\n    category: z.string(),\n  },\n  handler: async ({ weightKg, heightM }) => {\n    const bmi = weightKg \u002F (heightM * heightM)\n    let category = 'Normal'\n    if (bmi \u003C 18.5) category = 'Underweight'\n    else if (bmi >= 25) category = 'Overweight'\n    else if (bmi >= 30) category = 'Obese'\n\n    return {\n      structuredContent: {\n        bmi: Math.round(bmi * 100) \u002F 100,\n        category,\n      },\n    }\n  },\n})\n","server\u002Fmcp\u002Ftools\u002Fbmi.ts",[169,1532,1533,1551,1569,1573,1585,1600,1615,1623,1655,1687,1691,1699,1716,1733,1737,1761,1789,1806,1838,1869,1897,1901,1907,1916,1949,1956,1961,1967,1972],{"__ignoreMap":167},[172,1534,1535,1537,1539,1541,1543,1545,1547,1549],{"class":174,"line":175},[172,1536,179],{"class":178},[172,1538,183],{"class":182},[172,1540,187],{"class":186},[172,1542,190],{"class":182},[172,1544,193],{"class":178},[172,1546,196],{"class":182},[172,1548,200],{"class":199},[172,1550,203],{"class":182},[172,1552,1553,1555,1557,1559,1561,1563,1565,1567],{"class":174,"line":206},[172,1554,179],{"class":178},[172,1556,183],{"class":182},[172,1558,213],{"class":186},[172,1560,190],{"class":182},[172,1562,193],{"class":178},[172,1564,196],{"class":182},[172,1566,222],{"class":199},[172,1568,203],{"class":182},[172,1570,1571],{"class":174,"line":227},[172,1572,231],{"emptyLinePlaceholder":230},[172,1574,1575,1577,1579,1581,1583],{"class":174,"line":234},[172,1576,237],{"class":178},[172,1578,240],{"class":178},[172,1580,213],{"class":243},[172,1582,246],{"class":186},[172,1584,249],{"class":182},[172,1586,1587,1589,1591,1593,1596,1598],{"class":174,"line":252},[172,1588,256],{"class":255},[172,1590,259],{"class":182},[172,1592,196],{"class":182},[172,1594,1595],{"class":199},"calculate-bmi",[172,1597,267],{"class":182},[172,1599,270],{"class":182},[172,1601,1602,1604,1606,1608,1611,1613],{"class":174,"line":273},[172,1603,276],{"class":255},[172,1605,259],{"class":182},[172,1607,196],{"class":182},[172,1609,1610],{"class":199},"Calculate Body Mass Index",[172,1612,267],{"class":182},[172,1614,270],{"class":182},[172,1616,1617,1619,1621],{"class":174,"line":290},[172,1618,293],{"class":255},[172,1620,259],{"class":182},[172,1622,298],{"class":182},[172,1624,1625,1628,1630,1632,1634,1636,1638,1640,1642,1644,1646,1649,1651,1653],{"class":174,"line":301},[172,1626,1627],{"class":255},"    weightKg",[172,1629,259],{"class":182},[172,1631,187],{"class":186},[172,1633,311],{"class":182},[172,1635,1080],{"class":243},[172,1637,317],{"class":186},[172,1639,311],{"class":182},[172,1641,322],{"class":243},[172,1643,246],{"class":186},[172,1645,267],{"class":182},[172,1647,1648],{"class":199},"Weight in kilograms",[172,1650,267],{"class":182},[172,1652,334],{"class":186},[172,1654,270],{"class":182},[172,1656,1657,1660,1662,1664,1666,1668,1670,1672,1674,1676,1678,1681,1683,1685],{"class":174,"line":339},[172,1658,1659],{"class":255},"    heightM",[172,1661,259],{"class":182},[172,1663,187],{"class":186},[172,1665,311],{"class":182},[172,1667,1080],{"class":243},[172,1669,317],{"class":186},[172,1671,311],{"class":182},[172,1673,322],{"class":243},[172,1675,246],{"class":186},[172,1677,267],{"class":182},[172,1679,1680],{"class":199},"Height in meters",[172,1682,267],{"class":182},[172,1684,334],{"class":186},[172,1686,270],{"class":182},[172,1688,1689],{"class":174,"line":345},[172,1690,342],{"class":182},[172,1692,1693,1695,1697],{"class":174,"line":387},[172,1694,747],{"class":255},[172,1696,259],{"class":182},[172,1698,298],{"class":182},[172,1700,1701,1704,1706,1708,1710,1712,1714],{"class":174,"line":1102},[172,1702,1703],{"class":255},"    bmi",[172,1705,259],{"class":182},[172,1707,187],{"class":186},[172,1709,311],{"class":182},[172,1711,1080],{"class":243},[172,1713,317],{"class":186},[172,1715,270],{"class":182},[172,1717,1718,1721,1723,1725,1727,1729,1731],{"class":174,"line":1135},[172,1719,1720],{"class":255},"    category",[172,1722,259],{"class":182},[172,1724,187],{"class":186},[172,1726,311],{"class":182},[172,1728,314],{"class":243},[172,1730,317],{"class":186},[172,1732,270],{"class":182},[172,1734,1735],{"class":174,"line":1140},[172,1736,342],{"class":182},[172,1738,1739,1741,1743,1745,1747,1750,1752,1755,1757,1759],{"class":174,"line":1146},[172,1740,348],{"class":243},[172,1742,259],{"class":182},[172,1744,354],{"class":353},[172,1746,357],{"class":182},[172,1748,1749],{"class":360}," weightKg",[172,1751,590],{"class":182},[172,1753,1754],{"class":360}," heightM",[172,1756,364],{"class":182},[172,1758,367],{"class":353},[172,1760,298],{"class":182},[172,1762,1763,1766,1769,1772,1774,1777,1779,1782,1785,1787],{"class":174,"line":1186},[172,1764,1765],{"class":353},"    const",[172,1767,1768],{"class":186}," bmi",[172,1770,1771],{"class":182}," =",[172,1773,1749],{"class":186},[172,1775,1776],{"class":182}," \u002F",[172,1778,621],{"class":255},[172,1780,1781],{"class":186},"heightM",[172,1783,1784],{"class":182}," *",[172,1786,1754],{"class":186},[172,1788,393],{"class":255},[172,1790,1791,1794,1797,1799,1801,1804],{"class":174,"line":1191},[172,1792,1793],{"class":353},"    let",[172,1795,1796],{"class":186}," category",[172,1798,1771],{"class":182},[172,1800,196],{"class":182},[172,1802,1803],{"class":199},"Normal",[172,1805,203],{"class":182},[172,1807,1808,1811,1813,1816,1819,1823,1826,1829,1831,1833,1836],{"class":174,"line":1197},[172,1809,1810],{"class":178},"    if",[172,1812,621],{"class":255},[172,1814,1815],{"class":186},"bmi",[172,1817,1818],{"class":182}," \u003C",[172,1820,1822],{"class":1821},"sbssI"," 18.5",[172,1824,1825],{"class":255},") ",[172,1827,1828],{"class":186},"category",[172,1830,1771],{"class":182},[172,1832,196],{"class":182},[172,1834,1835],{"class":199},"Underweight",[172,1837,203],{"class":182},[172,1839,1840,1843,1846,1848,1850,1853,1856,1858,1860,1862,1864,1867],{"class":174,"line":1251},[172,1841,1842],{"class":178},"    else",[172,1844,1845],{"class":178}," if",[172,1847,621],{"class":255},[172,1849,1815],{"class":186},[172,1851,1852],{"class":182}," >=",[172,1854,1855],{"class":1821}," 25",[172,1857,1825],{"class":255},[172,1859,1828],{"class":186},[172,1861,1771],{"class":182},[172,1863,196],{"class":182},[172,1865,1866],{"class":199},"Overweight",[172,1868,203],{"class":182},[172,1870,1871,1873,1875,1877,1879,1881,1884,1886,1888,1890,1892,1895],{"class":174,"line":1256},[172,1872,1842],{"class":178},[172,1874,1845],{"class":178},[172,1876,621],{"class":255},[172,1878,1815],{"class":186},[172,1880,1852],{"class":182},[172,1882,1883],{"class":1821}," 30",[172,1885,1825],{"class":255},[172,1887,1828],{"class":186},[172,1889,1771],{"class":182},[172,1891,196],{"class":182},[172,1893,1894],{"class":199},"Obese",[172,1896,203],{"class":182},[172,1898,1899],{"class":174,"line":1262},[172,1900,231],{"emptyLinePlaceholder":230},[172,1902,1903,1905],{"class":174,"line":1304},[172,1904,635],{"class":178},[172,1906,298],{"class":182},[172,1908,1909,1912,1914],{"class":174,"line":1309},[172,1910,1911],{"class":255},"      structuredContent",[172,1913,259],{"class":182},[172,1915,298],{"class":182},[172,1917,1918,1921,1923,1926,1928,1931,1933,1935,1937,1940,1942,1945,1947],{"class":174,"line":1354},[172,1919,1920],{"class":255},"        bmi",[172,1922,259],{"class":182},[172,1924,1925],{"class":186}," Math",[172,1927,311],{"class":182},[172,1929,1930],{"class":243},"round",[172,1932,246],{"class":255},[172,1934,1815],{"class":186},[172,1936,1784],{"class":182},[172,1938,1939],{"class":1821}," 100",[172,1941,1825],{"class":255},[172,1943,1944],{"class":182},"\u002F",[172,1946,1939],{"class":1821},[172,1948,270],{"class":182},[172,1950,1951,1954],{"class":174,"line":1360},[172,1952,1953],{"class":186},"        category",[172,1955,270],{"class":182},[172,1957,1958],{"class":174,"line":1365},[172,1959,1960],{"class":182},"      },\n",[172,1962,1964],{"class":174,"line":1963},27,[172,1965,1966],{"class":182},"    }\n",[172,1968,1970],{"class":174,"line":1969},28,[172,1971,342],{"class":182},[172,1973,1975,1977],{"class":174,"line":1974},29,[172,1976,390],{"class":182},[172,1978,393],{"class":186},[150,1980,835,1981,1984,1985,1987],{},[169,1982,1983],{},"structuredContent"," field provides structured data that matches your ",[169,1986,1526],{},", making it easier for AI assistants to work with the results.",[145,1989,1991],{"id":1990},"handler-function","Handler Function",[150,1993,1994,1995,1998],{},"The handler is an async function that receives validated input and returns results. You can return simplified values directly — they are automatically wrapped into the MCP ",[169,1996,1997],{},"CallToolResult"," format.",[1371,2000,2002],{"id":2001},"simplified-returns","Simplified Returns",[150,2004,2005,2006,2008,2009,2008,2011,2014],{},"Return a ",[169,2007,314],{},", ",[169,2010,1080],{},[169,2012,2013],{},"boolean",", object, or array directly from your handler:",[555,2016,2017,2059,2099,2165],{},[161,2018,2021],{"className":163,"code":2019,"filename":2020,"language":166,"meta":167,"style":167},"handler: async ({ name }) => `Hello ${name}`\n\u002F\u002F → { content: [{ type: 'text', text: 'Hello World' }] }\n","String",[169,2022,2023,2054],{"__ignoreMap":167},[172,2024,2025,2029,2031,2033,2035,2038,2040,2042,2044,2047,2049,2051],{"class":174,"line":175},[172,2026,2028],{"class":2027},"sBMFI","handler",[172,2030,259],{"class":182},[172,2032,354],{"class":353},[172,2034,357],{"class":182},[172,2036,2037],{"class":360}," name",[172,2039,364],{"class":182},[172,2041,367],{"class":353},[172,2043,370],{"class":182},[172,2045,2046],{"class":199},"Hello ",[172,2048,376],{"class":182},[172,2050,403],{"class":186},[172,2052,2053],{"class":182},"}`\n",[172,2055,2056],{"class":174,"line":206},[172,2057,2058],{"class":453},"\u002F\u002F → { content: [{ type: 'text', text: 'Hello World' }] }\n",[161,2060,2063],{"className":163,"code":2061,"filename":2062,"language":166,"meta":167,"style":167},"handler: async ({ a, b }) => a + b\n\u002F\u002F → { content: [{ type: 'text', text: '10' }] }\n","Number",[169,2064,2065,2094],{"__ignoreMap":167},[172,2066,2067,2069,2071,2073,2075,2077,2079,2081,2083,2085,2088,2091],{"class":174,"line":175},[172,2068,2028],{"class":2027},[172,2070,259],{"class":182},[172,2072,354],{"class":353},[172,2074,357],{"class":182},[172,2076,1325],{"class":360},[172,2078,590],{"class":182},[172,2080,1330],{"class":360},[172,2082,364],{"class":182},[172,2084,367],{"class":353},[172,2086,2087],{"class":186}," a ",[172,2089,2090],{"class":182},"+",[172,2092,2093],{"class":186}," b\n",[172,2095,2096],{"class":174,"line":206},[172,2097,2098],{"class":453},"\u002F\u002F → { content: [{ type: 'text', text: '10' }] }\n",[161,2100,2103],{"className":163,"code":2101,"filename":2102,"language":166,"meta":167,"style":167},"handler: async ({ id }) => {\n  const user = await getUser(id)\n  return user\n}\n\u002F\u002F → { content: [{ type: 'text', text: '{ \"id\": ... }' }] }\n","Object \u002F Array",[169,2104,2105,2124,2147,2155,2160],{"__ignoreMap":167},[172,2106,2107,2109,2111,2113,2115,2118,2120,2122],{"class":174,"line":175},[172,2108,2028],{"class":2027},[172,2110,259],{"class":182},[172,2112,354],{"class":353},[172,2114,357],{"class":182},[172,2116,2117],{"class":360}," id",[172,2119,364],{"class":182},[172,2121,367],{"class":353},[172,2123,298],{"class":182},[172,2125,2126,2129,2132,2134,2137,2140,2142,2145],{"class":174,"line":206},[172,2127,2128],{"class":353},"  const",[172,2130,2131],{"class":186}," user",[172,2133,1771],{"class":182},[172,2135,2136],{"class":178}," await",[172,2138,2139],{"class":243}," getUser",[172,2141,246],{"class":255},[172,2143,2144],{"class":186},"id",[172,2146,393],{"class":255},[172,2148,2149,2152],{"class":174,"line":227},[172,2150,2151],{"class":178},"  return",[172,2153,2154],{"class":186}," user\n",[172,2156,2157],{"class":174,"line":234},[172,2158,2159],{"class":182},"}\n",[172,2161,2162],{"class":174,"line":252},[172,2163,2164],{"class":453},"\u002F\u002F → { content: [{ type: 'text', text: '{ \"id\": ... }' }] }\n",[161,2166,2169],{"className":163,"code":2167,"filename":2168,"language":166,"meta":167,"style":167},"handler: async ({ id }) => await exists(id)\n\u002F\u002F → { content: [{ type: 'text', text: 'true' }] }\n","Boolean",[169,2170,2171,2195],{"__ignoreMap":167},[172,2172,2173,2175,2177,2179,2181,2183,2185,2187,2189,2192],{"class":174,"line":175},[172,2174,2028],{"class":2027},[172,2176,259],{"class":182},[172,2178,354],{"class":353},[172,2180,357],{"class":182},[172,2182,2117],{"class":360},[172,2184,364],{"class":182},[172,2186,367],{"class":353},[172,2188,2136],{"class":178},[172,2190,2191],{"class":243}," exists",[172,2193,2194],{"class":186},"(id)\n",[172,2196,2197],{"class":174,"line":206},[172,2198,2199],{"class":453},"\u002F\u002F → { content: [{ type: 'text', text: 'true' }] }\n",[150,2201,2202,2203,2205,2206,2208],{},"You can also return the full ",[169,2204,1997],{}," format when you need more control (e.g., images, multiple content items, ",[169,2207,1983],{},").",[1371,2210,2212],{"id":2211},"content-types","Content Types",[150,2214,2215,2216,2218],{},"For advanced use cases, return a full ",[169,2217,1997],{}," with typed content:",[555,2220,2221,2302,2361],{},[161,2222,2225],{"className":163,"code":2223,"filename":2224,"language":166,"meta":167,"style":167},"return {\n  content: [{\n    type: 'image',\n    data: base64ImageData,\n    mimeType: 'image\u002Fpng',\n  }],\n}\n","Image Content",[169,2226,2227,2234,2245,2261,2273,2289,2298],{"__ignoreMap":167},[172,2228,2229,2232],{"class":174,"line":175},[172,2230,2231],{"class":178},"return",[172,2233,298],{"class":182},[172,2235,2236,2239,2241,2243],{"class":174,"line":206},[172,2237,2238],{"class":255},"  content",[172,2240,259],{"class":182},[172,2242,784],{"class":186},[172,2244,249],{"class":182},[172,2246,2247,2250,2252,2254,2257,2259],{"class":174,"line":227},[172,2248,2249],{"class":255},"    type",[172,2251,259],{"class":182},[172,2253,196],{"class":182},[172,2255,2256],{"class":199},"image",[172,2258,267],{"class":182},[172,2260,270],{"class":182},[172,2262,2263,2266,2268,2271],{"class":174,"line":234},[172,2264,2265],{"class":255},"    data",[172,2267,259],{"class":182},[172,2269,2270],{"class":186}," base64ImageData",[172,2272,270],{"class":182},[172,2274,2275,2278,2280,2282,2285,2287],{"class":174,"line":252},[172,2276,2277],{"class":255},"    mimeType",[172,2279,259],{"class":182},[172,2281,196],{"class":182},[172,2283,2284],{"class":199},"image\u002Fpng",[172,2286,267],{"class":182},[172,2288,270],{"class":182},[172,2290,2291,2294,2296],{"class":174,"line":273},[172,2292,2293],{"class":182},"  }",[172,2295,794],{"class":186},[172,2297,270],{"class":182},[172,2299,2300],{"class":174,"line":290},[172,2301,2159],{"class":182},[161,2303,2306],{"className":163,"code":2304,"filename":2305,"language":166,"meta":167,"style":167},"return {\n  structuredContent: {\n    bmi: 25.5,\n    category: 'Normal',\n  },\n}\n\u002F\u002F text content is auto-generated as fallback for older clients\n","Structured Content",[169,2307,2308,2314,2323,2334,2348,2352,2356],{"__ignoreMap":167},[172,2309,2310,2312],{"class":174,"line":175},[172,2311,2231],{"class":178},[172,2313,298],{"class":182},[172,2315,2316,2319,2321],{"class":174,"line":206},[172,2317,2318],{"class":255},"  structuredContent",[172,2320,259],{"class":182},[172,2322,298],{"class":182},[172,2324,2325,2327,2329,2332],{"class":174,"line":227},[172,2326,1703],{"class":255},[172,2328,259],{"class":182},[172,2330,2331],{"class":1821}," 25.5",[172,2333,270],{"class":182},[172,2335,2336,2338,2340,2342,2344,2346],{"class":174,"line":234},[172,2337,1720],{"class":255},[172,2339,259],{"class":182},[172,2341,196],{"class":182},[172,2343,1803],{"class":199},[172,2345,267],{"class":182},[172,2347,270],{"class":182},[172,2349,2350],{"class":174,"line":252},[172,2351,342],{"class":182},[172,2353,2354],{"class":174,"line":273},[172,2355,2159],{"class":182},[172,2357,2358],{"class":174,"line":290},[172,2359,2360],{"class":453},"\u002F\u002F text content is auto-generated as fallback for older clients\n",[161,2362,2365],{"className":163,"code":2363,"filename":2364,"language":166,"meta":167,"style":167},"return {\n  content: [{\n    type: 'resource',\n    resource: {\n      uri: 'file:\u002F\u002F\u002Fpath\u002Fto\u002Ffile',\n      text: 'File content',\n      mimeType: 'text\u002Fplain',\n    },\n  }],\n}\n","Resource Reference",[169,2366,2367,2373,2383,2398,2407,2423,2439,2455,2460,2468],{"__ignoreMap":167},[172,2368,2369,2371],{"class":174,"line":175},[172,2370,2231],{"class":178},[172,2372,298],{"class":182},[172,2374,2375,2377,2379,2381],{"class":174,"line":206},[172,2376,2238],{"class":255},[172,2378,259],{"class":182},[172,2380,784],{"class":186},[172,2382,249],{"class":182},[172,2384,2385,2387,2389,2391,2394,2396],{"class":174,"line":227},[172,2386,2249],{"class":255},[172,2388,259],{"class":182},[172,2390,196],{"class":182},[172,2392,2393],{"class":199},"resource",[172,2395,267],{"class":182},[172,2397,270],{"class":182},[172,2399,2400,2403,2405],{"class":174,"line":234},[172,2401,2402],{"class":255},"    resource",[172,2404,259],{"class":182},[172,2406,298],{"class":182},[172,2408,2409,2412,2414,2416,2419,2421],{"class":174,"line":252},[172,2410,2411],{"class":255},"      uri",[172,2413,259],{"class":182},[172,2415,196],{"class":182},[172,2417,2418],{"class":199},"file:\u002F\u002F\u002Fpath\u002Fto\u002Ffile",[172,2420,267],{"class":182},[172,2422,270],{"class":182},[172,2424,2425,2428,2430,2432,2435,2437],{"class":174,"line":273},[172,2426,2427],{"class":255},"      text",[172,2429,259],{"class":182},[172,2431,196],{"class":182},[172,2433,2434],{"class":199},"File content",[172,2436,267],{"class":182},[172,2438,270],{"class":182},[172,2440,2441,2444,2446,2448,2451,2453],{"class":174,"line":290},[172,2442,2443],{"class":255},"      mimeType",[172,2445,259],{"class":182},[172,2447,196],{"class":182},[172,2449,2450],{"class":199},"text\u002Fplain",[172,2452,267],{"class":182},[172,2454,270],{"class":182},[172,2456,2457],{"class":174,"line":301},[172,2458,2459],{"class":182},"    },\n",[172,2461,2462,2464,2466],{"class":174,"line":339},[172,2463,2293],{"class":182},[172,2465,794],{"class":186},[172,2467,270],{"class":182},[172,2469,2470],{"class":174,"line":345},[172,2471,2159],{"class":182},[1371,2473,2475],{"id":2474},"result-helpers","Result Helpers",[150,2477,2478,2479,2482],{},"The module provides the ",[169,2480,2481],{},"imageResult"," helper for image responses:",[161,2484,2486],{"className":163,"code":2485,"language":166,"meta":167,"style":167},"import { z } from 'zod'\nimport { defineMcpTool, imageResult } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpTool({\n  description: 'Generate chart',\n  inputSchema: { data: z.array(z.number()) },\n  handler: async ({ data }) => {\n    const base64 = await generateChart(data)\n    return imageResult(base64, 'image\u002Fpng')\n  },\n})\n",[169,2487,2488,2506,2529,2533,2545,2560,2591,2609,2630,2651,2655],{"__ignoreMap":167},[172,2489,2490,2492,2494,2496,2498,2500,2502,2504],{"class":174,"line":175},[172,2491,179],{"class":178},[172,2493,183],{"class":182},[172,2495,187],{"class":186},[172,2497,190],{"class":182},[172,2499,193],{"class":178},[172,2501,196],{"class":182},[172,2503,200],{"class":199},[172,2505,203],{"class":182},[172,2507,2508,2510,2512,2514,2516,2519,2521,2523,2525,2527],{"class":174,"line":206},[172,2509,179],{"class":178},[172,2511,183],{"class":182},[172,2513,213],{"class":186},[172,2515,590],{"class":182},[172,2517,2518],{"class":186}," imageResult",[172,2520,190],{"class":182},[172,2522,193],{"class":178},[172,2524,196],{"class":182},[172,2526,222],{"class":199},[172,2528,203],{"class":182},[172,2530,2531],{"class":174,"line":227},[172,2532,231],{"emptyLinePlaceholder":230},[172,2534,2535,2537,2539,2541,2543],{"class":174,"line":234},[172,2536,237],{"class":178},[172,2538,240],{"class":178},[172,2540,213],{"class":243},[172,2542,246],{"class":186},[172,2544,249],{"class":182},[172,2546,2547,2549,2551,2553,2556,2558],{"class":174,"line":252},[172,2548,276],{"class":255},[172,2550,259],{"class":182},[172,2552,196],{"class":182},[172,2554,2555],{"class":199},"Generate chart",[172,2557,267],{"class":182},[172,2559,270],{"class":182},[172,2561,2562,2564,2566,2568,2571,2573,2575,2577,2579,2581,2583,2585,2588],{"class":174,"line":273},[172,2563,293],{"class":255},[172,2565,259],{"class":182},[172,2567,183],{"class":182},[172,2569,2570],{"class":255}," data",[172,2572,259],{"class":182},[172,2574,187],{"class":186},[172,2576,311],{"class":182},[172,2578,1274],{"class":243},[172,2580,1277],{"class":186},[172,2582,311],{"class":182},[172,2584,1080],{"class":243},[172,2586,2587],{"class":186},"()) ",[172,2589,2590],{"class":182},"},\n",[172,2592,2593,2595,2597,2599,2601,2603,2605,2607],{"class":174,"line":290},[172,2594,348],{"class":243},[172,2596,259],{"class":182},[172,2598,354],{"class":353},[172,2600,357],{"class":182},[172,2602,2570],{"class":360},[172,2604,364],{"class":182},[172,2606,367],{"class":353},[172,2608,298],{"class":182},[172,2610,2611,2613,2616,2618,2620,2623,2625,2628],{"class":174,"line":301},[172,2612,1765],{"class":353},[172,2614,2615],{"class":186}," base64",[172,2617,1771],{"class":182},[172,2619,2136],{"class":178},[172,2621,2622],{"class":243}," generateChart",[172,2624,246],{"class":255},[172,2626,2627],{"class":186},"data",[172,2629,393],{"class":255},[172,2631,2632,2634,2636,2638,2641,2643,2645,2647,2649],{"class":174,"line":339},[172,2633,635],{"class":178},[172,2635,2518],{"class":243},[172,2637,246],{"class":255},[172,2639,2640],{"class":186},"base64",[172,2642,590],{"class":182},[172,2644,196],{"class":182},[172,2646,2284],{"class":199},[172,2648,267],{"class":182},[172,2650,393],{"class":255},[172,2652,2653],{"class":174,"line":345},[172,2654,342],{"class":182},[172,2656,2657,2659],{"class":174,"line":387},[172,2658,390],{"class":182},[172,2660,393],{"class":186},[2662,2663,835,2666,2008,2669,2672,2673,2676,2677,2208],"callout",{"color":2664,"icon":2665},"info","i-lucide-info",[169,2667,2668],{},"textResult",[169,2670,2671],{},"jsonResult",", and ",[169,2674,2675],{},"errorResult"," helpers are deprecated. Return values directly from your handler instead, and throw errors for error cases (see ",[2678,2679,2681],"a",{"href":2680},"#error-handling","Error Handling",[145,2683,2685],{"id":2684},"tool-annotations","Tool Annotations",[150,2687,2688],{},"Annotations are behavioral hints that tell MCP clients how a tool behaves. Clients can use them to decide when to prompt users for confirmation (human-in-the-loop).",[161,2690,2693],{"className":163,"code":2691,"filename":2692,"language":166,"meta":167,"style":167},"import { z } from 'zod'\nimport { defineMcpTool } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpTool({\n  name: 'delete-user',\n  description: 'Delete a user account',\n  inputSchema: {\n    userId: z.string(),\n  },\n  annotations: {\n    readOnlyHint: false,    \u002F\u002F Tool modifies state\n    destructiveHint: true,  \u002F\u002F Tool performs destructive updates\n    idempotentHint: true,   \u002F\u002F Deleting the same user twice has no additional effect\n    openWorldHint: false,   \u002F\u002F Tool does not interact with external systems\n  },\n  handler: async ({ userId }) => {\n    \u002F\u002F ...\n  },\n})\n","server\u002Fmcp\u002Ftools\u002Fdelete-user.ts",[169,2694,2695,2713,2731,2735,2747,2762,2777,2785,2802,2806,2814,2830,2845,2859,2873,2877,2896,2900,2904],{"__ignoreMap":167},[172,2696,2697,2699,2701,2703,2705,2707,2709,2711],{"class":174,"line":175},[172,2698,179],{"class":178},[172,2700,183],{"class":182},[172,2702,187],{"class":186},[172,2704,190],{"class":182},[172,2706,193],{"class":178},[172,2708,196],{"class":182},[172,2710,200],{"class":199},[172,2712,203],{"class":182},[172,2714,2715,2717,2719,2721,2723,2725,2727,2729],{"class":174,"line":206},[172,2716,179],{"class":178},[172,2718,183],{"class":182},[172,2720,213],{"class":186},[172,2722,190],{"class":182},[172,2724,193],{"class":178},[172,2726,196],{"class":182},[172,2728,222],{"class":199},[172,2730,203],{"class":182},[172,2732,2733],{"class":174,"line":227},[172,2734,231],{"emptyLinePlaceholder":230},[172,2736,2737,2739,2741,2743,2745],{"class":174,"line":234},[172,2738,237],{"class":178},[172,2740,240],{"class":178},[172,2742,213],{"class":243},[172,2744,246],{"class":186},[172,2746,249],{"class":182},[172,2748,2749,2751,2753,2755,2758,2760],{"class":174,"line":252},[172,2750,256],{"class":255},[172,2752,259],{"class":182},[172,2754,196],{"class":182},[172,2756,2757],{"class":199},"delete-user",[172,2759,267],{"class":182},[172,2761,270],{"class":182},[172,2763,2764,2766,2768,2770,2773,2775],{"class":174,"line":273},[172,2765,276],{"class":255},[172,2767,259],{"class":182},[172,2769,196],{"class":182},[172,2771,2772],{"class":199},"Delete a user account",[172,2774,267],{"class":182},[172,2776,270],{"class":182},[172,2778,2779,2781,2783],{"class":174,"line":290},[172,2780,293],{"class":255},[172,2782,259],{"class":182},[172,2784,298],{"class":182},[172,2786,2787,2790,2792,2794,2796,2798,2800],{"class":174,"line":301},[172,2788,2789],{"class":255},"    userId",[172,2791,259],{"class":182},[172,2793,187],{"class":186},[172,2795,311],{"class":182},[172,2797,314],{"class":243},[172,2799,317],{"class":186},[172,2801,270],{"class":182},[172,2803,2804],{"class":174,"line":339},[172,2805,342],{"class":182},[172,2807,2808,2810,2812],{"class":174,"line":345},[172,2809,763],{"class":255},[172,2811,259],{"class":182},[172,2813,298],{"class":182},[172,2815,2816,2819,2821,2825,2827],{"class":174,"line":387},[172,2817,2818],{"class":255},"    readOnlyHint",[172,2820,259],{"class":182},[172,2822,2824],{"class":2823},"sfNiH"," false",[172,2826,590],{"class":182},[172,2828,2829],{"class":453},"    \u002F\u002F Tool modifies state\n",[172,2831,2832,2835,2837,2840,2842],{"class":174,"line":1102},[172,2833,2834],{"class":255},"    destructiveHint",[172,2836,259],{"class":182},[172,2838,2839],{"class":2823}," true",[172,2841,590],{"class":182},[172,2843,2844],{"class":453},"  \u002F\u002F Tool performs destructive updates\n",[172,2846,2847,2850,2852,2854,2856],{"class":174,"line":1135},[172,2848,2849],{"class":255},"    idempotentHint",[172,2851,259],{"class":182},[172,2853,2839],{"class":2823},[172,2855,590],{"class":182},[172,2857,2858],{"class":453},"   \u002F\u002F Deleting the same user twice has no additional effect\n",[172,2860,2861,2864,2866,2868,2870],{"class":174,"line":1140},[172,2862,2863],{"class":255},"    openWorldHint",[172,2865,259],{"class":182},[172,2867,2824],{"class":2823},[172,2869,590],{"class":182},[172,2871,2872],{"class":453},"   \u002F\u002F Tool does not interact with external systems\n",[172,2874,2875],{"class":174,"line":1146},[172,2876,342],{"class":182},[172,2878,2879,2881,2883,2885,2887,2890,2892,2894],{"class":174,"line":1186},[172,2880,348],{"class":243},[172,2882,259],{"class":182},[172,2884,354],{"class":353},[172,2886,357],{"class":182},[172,2888,2889],{"class":360}," userId",[172,2891,364],{"class":182},[172,2893,367],{"class":353},[172,2895,298],{"class":182},[172,2897,2898],{"class":174,"line":1191},[172,2899,499],{"class":453},[172,2901,2902],{"class":174,"line":1197},[172,2903,342],{"class":182},[172,2905,2906,2908],{"class":174,"line":1251},[172,2907,390],{"class":182},[172,2909,393],{"class":186},[1371,2911,2913],{"id":2912},"annotation-reference","Annotation Reference",[1376,2915,2916,2931],{},[1379,2917,2918],{},[1382,2919,2920,2923,2926,2929],{},[1385,2921,2922],{},"Annotation",[1385,2924,2925],{},"Type",[1385,2927,2928],{},"Default",[1385,2930,1393],{},[1395,2932,2933,2956,2981,3005],{},[1382,2934,2935,2940,2944,2949],{},[1400,2936,2937],{},[169,2938,2939],{},"readOnlyHint",[1400,2941,2942],{},[169,2943,2013],{},[1400,2945,2946],{},[169,2947,2948],{},"false",[1400,2950,2951,2952,2955],{},"If ",[169,2953,2954],{},"true",", the tool only reads data without modifying any state (safe to retry).",[1382,2957,2958,2963,2967,2971],{},[1400,2959,2960],{},[169,2961,2962],{},"destructiveHint",[1400,2964,2965],{},[169,2966,2013],{},[1400,2968,2969],{},[169,2970,2954],{},[1400,2972,2951,2973,2975,2976,2978,2979,311],{},[169,2974,2954],{},", the tool may perform destructive operations like deleting data. Only meaningful when ",[169,2977,2939],{}," is ",[169,2980,2948],{},[1382,2982,2983,2988,2992,2996],{},[1400,2984,2985],{},[169,2986,2987],{},"idempotentHint",[1400,2989,2990],{},[169,2991,2013],{},[1400,2993,2994],{},[169,2995,2948],{},[1400,2997,2951,2998,3000,3001,2978,3003,311],{},[169,2999,2954],{},", calling the tool multiple times with the same arguments has no additional effect beyond the first call. Only meaningful when ",[169,3002,2939],{},[169,3004,2948],{},[1382,3006,3007,3012,3016,3020],{},[1400,3008,3009],{},[169,3010,3011],{},"openWorldHint",[1400,3013,3014],{},[169,3015,2013],{},[1400,3017,3018],{},[169,3019,2954],{},[1400,3021,2951,3022,3024,3025,3027],{},[169,3023,2954],{},", the tool may interact with the outside world (external APIs, internet). If ",[169,3026,2948],{},", it only operates on local\u002Finternal data.",[150,3029,3030],{},"Here are common annotation patterns for typical tools:",[555,3032,3033,3090,3154,3217],{},[161,3034,3037],{"className":163,"code":3035,"filename":3036,"language":166,"meta":167,"style":167},"\u002F\u002F Search, list, lookup, calculate...\nannotations: {\n  readOnlyHint: true,\n  destructiveHint: false,\n  openWorldHint: false,\n}\n","Read-only tool",[169,3038,3039,3044,3053,3064,3075,3086],{"__ignoreMap":167},[172,3040,3041],{"class":174,"line":175},[172,3042,3043],{"class":453},"\u002F\u002F Search, list, lookup, calculate...\n",[172,3045,3046,3049,3051],{"class":174,"line":206},[172,3047,3048],{"class":2027},"annotations",[172,3050,259],{"class":182},[172,3052,298],{"class":182},[172,3054,3055,3058,3060,3062],{"class":174,"line":227},[172,3056,3057],{"class":2027},"  readOnlyHint",[172,3059,259],{"class":182},[172,3061,2839],{"class":2823},[172,3063,270],{"class":182},[172,3065,3066,3069,3071,3073],{"class":174,"line":234},[172,3067,3068],{"class":2027},"  destructiveHint",[172,3070,259],{"class":182},[172,3072,2824],{"class":2823},[172,3074,270],{"class":182},[172,3076,3077,3080,3082,3084],{"class":174,"line":252},[172,3078,3079],{"class":2027},"  openWorldHint",[172,3081,259],{"class":182},[172,3083,2824],{"class":2823},[172,3085,270],{"class":182},[172,3087,3088],{"class":174,"line":273},[172,3089,2159],{"class":182},[161,3091,3094],{"className":163,"code":3092,"filename":3093,"language":166,"meta":167,"style":167},"\u002F\u002F Creates a new record each time\nannotations: {\n  readOnlyHint: false,\n  destructiveHint: false,\n  idempotentHint: false,\n  openWorldHint: false,\n}\n","Create tool",[169,3095,3096,3101,3109,3119,3129,3140,3150],{"__ignoreMap":167},[172,3097,3098],{"class":174,"line":175},[172,3099,3100],{"class":453},"\u002F\u002F Creates a new record each time\n",[172,3102,3103,3105,3107],{"class":174,"line":206},[172,3104,3048],{"class":2027},[172,3106,259],{"class":182},[172,3108,298],{"class":182},[172,3110,3111,3113,3115,3117],{"class":174,"line":227},[172,3112,3057],{"class":2027},[172,3114,259],{"class":182},[172,3116,2824],{"class":2823},[172,3118,270],{"class":182},[172,3120,3121,3123,3125,3127],{"class":174,"line":234},[172,3122,3068],{"class":2027},[172,3124,259],{"class":182},[172,3126,2824],{"class":2823},[172,3128,270],{"class":182},[172,3130,3131,3134,3136,3138],{"class":174,"line":252},[172,3132,3133],{"class":2027},"  idempotentHint",[172,3135,259],{"class":182},[172,3137,2824],{"class":2823},[172,3139,270],{"class":182},[172,3141,3142,3144,3146,3148],{"class":174,"line":273},[172,3143,3079],{"class":2027},[172,3145,259],{"class":182},[172,3147,2824],{"class":2823},[172,3149,270],{"class":182},[172,3151,3152],{"class":174,"line":290},[172,3153,2159],{"class":182},[161,3155,3158],{"className":163,"code":3156,"filename":3157,"language":166,"meta":167,"style":167},"\u002F\u002F Updates are idempotent (same input → same result)\nannotations: {\n  readOnlyHint: false,\n  destructiveHint: false,\n  idempotentHint: true,\n  openWorldHint: false,\n}\n","Update tool",[169,3159,3160,3165,3173,3183,3193,3203,3213],{"__ignoreMap":167},[172,3161,3162],{"class":174,"line":175},[172,3163,3164],{"class":453},"\u002F\u002F Updates are idempotent (same input → same result)\n",[172,3166,3167,3169,3171],{"class":174,"line":206},[172,3168,3048],{"class":2027},[172,3170,259],{"class":182},[172,3172,298],{"class":182},[172,3174,3175,3177,3179,3181],{"class":174,"line":227},[172,3176,3057],{"class":2027},[172,3178,259],{"class":182},[172,3180,2824],{"class":2823},[172,3182,270],{"class":182},[172,3184,3185,3187,3189,3191],{"class":174,"line":234},[172,3186,3068],{"class":2027},[172,3188,259],{"class":182},[172,3190,2824],{"class":2823},[172,3192,270],{"class":182},[172,3194,3195,3197,3199,3201],{"class":174,"line":252},[172,3196,3133],{"class":2027},[172,3198,259],{"class":182},[172,3200,2839],{"class":2823},[172,3202,270],{"class":182},[172,3204,3205,3207,3209,3211],{"class":174,"line":273},[172,3206,3079],{"class":2027},[172,3208,259],{"class":182},[172,3210,2824],{"class":2823},[172,3212,270],{"class":182},[172,3214,3215],{"class":174,"line":290},[172,3216,2159],{"class":182},[161,3218,3221],{"className":163,"code":3219,"filename":3220,"language":166,"meta":167,"style":167},"\u002F\u002F Destructive and idempotent (deleting twice is the same)\nannotations: {\n  readOnlyHint: false,\n  destructiveHint: true,\n  idempotentHint: true,\n  openWorldHint: false,\n}\n","Delete tool",[169,3222,3223,3228,3236,3246,3256,3266,3276],{"__ignoreMap":167},[172,3224,3225],{"class":174,"line":175},[172,3226,3227],{"class":453},"\u002F\u002F Destructive and idempotent (deleting twice is the same)\n",[172,3229,3230,3232,3234],{"class":174,"line":206},[172,3231,3048],{"class":2027},[172,3233,259],{"class":182},[172,3235,298],{"class":182},[172,3237,3238,3240,3242,3244],{"class":174,"line":227},[172,3239,3057],{"class":2027},[172,3241,259],{"class":182},[172,3243,2824],{"class":2823},[172,3245,270],{"class":182},[172,3247,3248,3250,3252,3254],{"class":174,"line":234},[172,3249,3068],{"class":2027},[172,3251,259],{"class":182},[172,3253,2839],{"class":2823},[172,3255,270],{"class":182},[172,3257,3258,3260,3262,3264],{"class":174,"line":252},[172,3259,3133],{"class":2027},[172,3261,259],{"class":182},[172,3263,2839],{"class":2823},[172,3265,270],{"class":182},[172,3267,3268,3270,3272,3274],{"class":174,"line":273},[172,3269,3079],{"class":2027},[172,3271,259],{"class":182},[172,3273,2824],{"class":2823},[172,3275,270],{"class":182},[172,3277,3278],{"class":174,"line":290},[172,3279,2159],{"class":182},[2662,3281,3282,3283,3287],{"color":2664,"icon":2665},"All annotations are ",[3284,3285,3286],"strong",{},"hints"," — they are not guaranteed to be respected by every MCP client. Clients should never make security-critical decisions based on annotations from untrusted servers.",[145,3289,3291],{"id":3290},"input-examples","Input Examples",[150,3293,3294,3295,3298,3299,3301,3302,311],{},"You can provide concrete usage examples for your tools using ",[169,3296,3297],{},"inputExamples",". These examples are type-safe (matching your ",[169,3300,838],{},") and are transmitted to clients via ",[169,3303,3304],{},"_meta.inputExamples",[150,3306,3307],{},"Input examples help AI models understand how to correctly fill in tool parameters, especially for tools with optional fields or complex inputs.",[161,3309,3312],{"className":163,"code":3310,"filename":3311,"language":166,"meta":167,"style":167},"import { z } from 'zod'\nimport { defineMcpTool } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpTool({\n  description: 'Create a new todo',\n  inputSchema: {\n    title: z.string().describe('The title of the todo'),\n    content: z.string().optional().describe('Optional description'),\n  },\n  inputExamples: [\n    { title: 'Buy groceries', content: 'Milk, eggs, bread' },\n    { title: 'Fix login bug' },  \u002F\u002F content is optional\n  ],\n  handler: async ({ title, content }) => {\n    \u002F\u002F ...\n  },\n})\n","server\u002Fmcp\u002Ftools\u002Fcreate-todo.ts",[169,3313,3314,3332,3350,3354,3366,3381,3389,3421,3459,3463,3472,3505,3525,3532,3554,3558,3562],{"__ignoreMap":167},[172,3315,3316,3318,3320,3322,3324,3326,3328,3330],{"class":174,"line":175},[172,3317,179],{"class":178},[172,3319,183],{"class":182},[172,3321,187],{"class":186},[172,3323,190],{"class":182},[172,3325,193],{"class":178},[172,3327,196],{"class":182},[172,3329,200],{"class":199},[172,3331,203],{"class":182},[172,3333,3334,3336,3338,3340,3342,3344,3346,3348],{"class":174,"line":206},[172,3335,179],{"class":178},[172,3337,183],{"class":182},[172,3339,213],{"class":186},[172,3341,190],{"class":182},[172,3343,193],{"class":178},[172,3345,196],{"class":182},[172,3347,222],{"class":199},[172,3349,203],{"class":182},[172,3351,3352],{"class":174,"line":227},[172,3353,231],{"emptyLinePlaceholder":230},[172,3355,3356,3358,3360,3362,3364],{"class":174,"line":234},[172,3357,237],{"class":178},[172,3359,240],{"class":178},[172,3361,213],{"class":243},[172,3363,246],{"class":186},[172,3365,249],{"class":182},[172,3367,3368,3370,3372,3374,3377,3379],{"class":174,"line":252},[172,3369,276],{"class":255},[172,3371,259],{"class":182},[172,3373,196],{"class":182},[172,3375,3376],{"class":199},"Create a new todo",[172,3378,267],{"class":182},[172,3380,270],{"class":182},[172,3382,3383,3385,3387],{"class":174,"line":273},[172,3384,293],{"class":255},[172,3386,259],{"class":182},[172,3388,298],{"class":182},[172,3390,3391,3394,3396,3398,3400,3402,3404,3406,3408,3410,3412,3415,3417,3419],{"class":174,"line":290},[172,3392,3393],{"class":255},"    title",[172,3395,259],{"class":182},[172,3397,187],{"class":186},[172,3399,311],{"class":182},[172,3401,314],{"class":243},[172,3403,317],{"class":186},[172,3405,311],{"class":182},[172,3407,322],{"class":243},[172,3409,246],{"class":186},[172,3411,267],{"class":182},[172,3413,3414],{"class":199},"The title of the todo",[172,3416,267],{"class":182},[172,3418,334],{"class":186},[172,3420,270],{"class":182},[172,3422,3423,3426,3428,3430,3432,3434,3436,3438,3440,3442,3444,3446,3448,3450,3453,3455,3457],{"class":174,"line":301},[172,3424,3425],{"class":255},"    content",[172,3427,259],{"class":182},[172,3429,187],{"class":186},[172,3431,311],{"class":182},[172,3433,314],{"class":243},[172,3435,317],{"class":186},[172,3437,311],{"class":182},[172,3439,1164],{"class":243},[172,3441,317],{"class":186},[172,3443,311],{"class":182},[172,3445,322],{"class":243},[172,3447,246],{"class":186},[172,3449,267],{"class":182},[172,3451,3452],{"class":199},"Optional description",[172,3454,267],{"class":182},[172,3456,334],{"class":186},[172,3458,270],{"class":182},[172,3460,3461],{"class":174,"line":339},[172,3462,342],{"class":182},[172,3464,3465,3467,3469],{"class":174,"line":345},[172,3466,779],{"class":255},[172,3468,259],{"class":182},[172,3470,3471],{"class":186}," [\n",[172,3473,3474,3477,3480,3482,3484,3487,3489,3491,3494,3496,3498,3501,3503],{"class":174,"line":387},[172,3475,3476],{"class":182},"    {",[172,3478,3479],{"class":255}," title",[172,3481,259],{"class":182},[172,3483,196],{"class":182},[172,3485,3486],{"class":199},"Buy groceries",[172,3488,267],{"class":182},[172,3490,590],{"class":182},[172,3492,3493],{"class":255}," content",[172,3495,259],{"class":182},[172,3497,196],{"class":182},[172,3499,3500],{"class":199},"Milk, eggs, bread",[172,3502,267],{"class":182},[172,3504,822],{"class":182},[172,3506,3507,3509,3511,3513,3515,3518,3520,3522],{"class":174,"line":1102},[172,3508,3476],{"class":182},[172,3510,3479],{"class":255},[172,3512,259],{"class":182},[172,3514,196],{"class":182},[172,3516,3517],{"class":199},"Fix login bug",[172,3519,267],{"class":182},[172,3521,607],{"class":182},[172,3523,3524],{"class":453},"  \u002F\u002F content is optional\n",[172,3526,3527,3530],{"class":174,"line":1135},[172,3528,3529],{"class":186},"  ]",[172,3531,270],{"class":182},[172,3533,3534,3536,3538,3540,3542,3544,3546,3548,3550,3552],{"class":174,"line":1140},[172,3535,348],{"class":243},[172,3537,259],{"class":182},[172,3539,354],{"class":353},[172,3541,357],{"class":182},[172,3543,3479],{"class":360},[172,3545,590],{"class":182},[172,3547,3493],{"class":360},[172,3549,364],{"class":182},[172,3551,367],{"class":353},[172,3553,298],{"class":182},[172,3555,3556],{"class":174,"line":1146},[172,3557,499],{"class":453},[172,3559,3560],{"class":174,"line":1186},[172,3561,342],{"class":182},[172,3563,3564,3566],{"class":174,"line":1191},[172,3565,390],{"class":182},[172,3567,393],{"class":186},[2662,3569,3571,3573],{"color":3570,"icon":129},"warning",[169,3572,3297],{}," are particularly useful for tools with optional parameters, enums, or complex nested inputs where showing concrete values helps models pick the right format.",[145,3575,2681],{"id":3576},"error-handling",[150,3578,3579,3580,3583],{},"Throw errors directly from your handlers — just like in Nitro event handlers. Thrown errors are automatically caught and converted into MCP-compliant ",[169,3581,3582],{},"isError"," results.",[1371,3585,3587],{"id":3586},"h3-errors-recommended","H3 Errors (Recommended)",[150,3589,3590,3591,3594],{},"Use ",[169,3592,3593],{},"createError()"," from H3 for errors with status codes:",[161,3596,3599],{"className":163,"code":3597,"filename":3598,"language":166,"meta":167,"style":167},"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",[169,3600,3601,3619,3638,3656,3660,3672,3687,3702,3710,3727,3731,3749,3768,3784,3820,3824,3830,3834,3840],{"__ignoreMap":167},[172,3602,3603,3605,3607,3609,3611,3613,3615,3617],{"class":174,"line":175},[172,3604,179],{"class":178},[172,3606,183],{"class":182},[172,3608,187],{"class":186},[172,3610,190],{"class":182},[172,3612,193],{"class":178},[172,3614,196],{"class":182},[172,3616,200],{"class":199},[172,3618,203],{"class":182},[172,3620,3621,3623,3625,3628,3630,3632,3634,3636],{"class":174,"line":206},[172,3622,179],{"class":178},[172,3624,183],{"class":182},[172,3626,3627],{"class":186}," createError",[172,3629,190],{"class":182},[172,3631,193],{"class":178},[172,3633,196],{"class":182},[172,3635,1371],{"class":199},[172,3637,203],{"class":182},[172,3639,3640,3642,3644,3646,3648,3650,3652,3654],{"class":174,"line":227},[172,3641,179],{"class":178},[172,3643,183],{"class":182},[172,3645,213],{"class":186},[172,3647,190],{"class":182},[172,3649,193],{"class":178},[172,3651,196],{"class":182},[172,3653,222],{"class":199},[172,3655,203],{"class":182},[172,3657,3658],{"class":174,"line":234},[172,3659,231],{"emptyLinePlaceholder":230},[172,3661,3662,3664,3666,3668,3670],{"class":174,"line":252},[172,3663,237],{"class":178},[172,3665,240],{"class":178},[172,3667,213],{"class":243},[172,3669,246],{"class":186},[172,3671,249],{"class":182},[172,3673,3674,3676,3678,3680,3683,3685],{"class":174,"line":273},[172,3675,256],{"class":255},[172,3677,259],{"class":182},[172,3679,196],{"class":182},[172,3681,3682],{"class":199},"get-user",[172,3684,267],{"class":182},[172,3686,270],{"class":182},[172,3688,3689,3691,3693,3695,3698,3700],{"class":174,"line":290},[172,3690,276],{"class":255},[172,3692,259],{"class":182},[172,3694,196],{"class":182},[172,3696,3697],{"class":199},"Get a user by ID",[172,3699,267],{"class":182},[172,3701,270],{"class":182},[172,3703,3704,3706,3708],{"class":174,"line":301},[172,3705,293],{"class":255},[172,3707,259],{"class":182},[172,3709,298],{"class":182},[172,3711,3712,3715,3717,3719,3721,3723,3725],{"class":174,"line":339},[172,3713,3714],{"class":255},"    id",[172,3716,259],{"class":182},[172,3718,187],{"class":186},[172,3720,311],{"class":182},[172,3722,314],{"class":243},[172,3724,317],{"class":186},[172,3726,270],{"class":182},[172,3728,3729],{"class":174,"line":345},[172,3730,342],{"class":182},[172,3732,3733,3735,3737,3739,3741,3743,3745,3747],{"class":174,"line":387},[172,3734,348],{"class":243},[172,3736,259],{"class":182},[172,3738,354],{"class":353},[172,3740,357],{"class":182},[172,3742,2117],{"class":360},[172,3744,364],{"class":182},[172,3746,367],{"class":353},[172,3748,298],{"class":182},[172,3750,3751,3753,3755,3757,3759,3762,3764,3766],{"class":174,"line":1102},[172,3752,1765],{"class":353},[172,3754,2131],{"class":186},[172,3756,1771],{"class":182},[172,3758,2136],{"class":178},[172,3760,3761],{"class":243}," findUser",[172,3763,246],{"class":255},[172,3765,2144],{"class":186},[172,3767,393],{"class":255},[172,3769,3770,3772,3774,3777,3780,3782],{"class":174,"line":1135},[172,3771,1810],{"class":178},[172,3773,621],{"class":255},[172,3775,3776],{"class":182},"!",[172,3778,3779],{"class":186},"user",[172,3781,1825],{"class":255},[172,3783,249],{"class":182},[172,3785,3786,3789,3791,3793,3795,3798,3800,3803,3805,3807,3809,3811,3814,3816,3818],{"class":174,"line":1140},[172,3787,3788],{"class":178},"      throw",[172,3790,3627],{"class":243},[172,3792,246],{"class":255},[172,3794,787],{"class":182},[172,3796,3797],{"class":255}," statusCode",[172,3799,259],{"class":182},[172,3801,3802],{"class":1821}," 404",[172,3804,590],{"class":182},[172,3806,361],{"class":255},[172,3808,259],{"class":182},[172,3810,196],{"class":182},[172,3812,3813],{"class":199},"User not found",[172,3815,267],{"class":182},[172,3817,190],{"class":182},[172,3819,393],{"class":255},[172,3821,3822],{"class":174,"line":1146},[172,3823,1966],{"class":182},[172,3825,3826,3828],{"class":174,"line":1186},[172,3827,635],{"class":178},[172,3829,2154],{"class":186},[172,3831,3832],{"class":174,"line":1191},[172,3833,342],{"class":182},[172,3835,3836,3838],{"class":174,"line":1197},[172,3837,390],{"class":182},[172,3839,393],{"class":186},[172,3841,3842],{"class":174,"line":1251},[172,3843,3844],{"class":453},"\u002F\u002F Error result: { isError: true, content: [{ type: 'text', text: '[404] User not found' }] }\n",[150,3846,3847],{},"H3 errors can also include structured data:",[161,3849,3851],{"className":163,"code":3850,"language":166,"meta":167,"style":167},"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",[169,3852,3853,3864,3876,3892,3928,3934],{"__ignoreMap":167},[172,3854,3855,3858,3860,3862],{"class":174,"line":175},[172,3856,3857],{"class":178},"throw",[172,3859,3627],{"class":243},[172,3861,246],{"class":186},[172,3863,249],{"class":182},[172,3865,3866,3869,3871,3874],{"class":174,"line":206},[172,3867,3868],{"class":255},"  statusCode",[172,3870,259],{"class":182},[172,3872,3873],{"class":1821}," 400",[172,3875,270],{"class":182},[172,3877,3878,3881,3883,3885,3888,3890],{"class":174,"line":227},[172,3879,3880],{"class":255},"  message",[172,3882,259],{"class":182},[172,3884,196],{"class":182},[172,3886,3887],{"class":199},"Validation failed",[172,3889,267],{"class":182},[172,3891,270],{"class":182},[172,3893,3894,3897,3899,3901,3904,3906,3908,3910,3912,3914,3916,3918,3921,3923,3926],{"class":174,"line":234},[172,3895,3896],{"class":255},"  data",[172,3898,259],{"class":182},[172,3900,183],{"class":182},[172,3902,3903],{"class":255}," fields",[172,3905,259],{"class":182},[172,3907,784],{"class":186},[172,3909,267],{"class":182},[172,3911,403],{"class":199},[172,3913,267],{"class":182},[172,3915,590],{"class":182},[172,3917,196],{"class":182},[172,3919,3920],{"class":199},"email",[172,3922,267],{"class":182},[172,3924,3925],{"class":186},"] ",[172,3927,2590],{"class":182},[172,3929,3930,3932],{"class":174,"line":252},[172,3931,390],{"class":182},[172,3933,393],{"class":186},[172,3935,3936],{"class":174,"line":273},[172,3937,3938],{"class":453},"\u002F\u002F Error text: '[400] Validation failed\\n{ \"fields\": [\"name\", \"email\"] }'\n",[1371,3940,3942],{"id":3941},"plain-errors","Plain Errors",[150,3944,3945,3946,3949],{},"Regular ",[169,3947,3948],{},"Error"," instances work too:",[161,3951,3954],{"className":163,"code":3952,"filename":3953,"language":166,"meta":167,"style":167},"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",[169,3955,3956,3974,3992,3996,4008,4023,4031,4047,4063,4067,4089,4125,4135,4139],{"__ignoreMap":167},[172,3957,3958,3960,3962,3964,3966,3968,3970,3972],{"class":174,"line":175},[172,3959,179],{"class":178},[172,3961,183],{"class":182},[172,3963,187],{"class":186},[172,3965,190],{"class":182},[172,3967,193],{"class":178},[172,3969,196],{"class":182},[172,3971,200],{"class":199},[172,3973,203],{"class":182},[172,3975,3976,3978,3980,3982,3984,3986,3988,3990],{"class":174,"line":206},[172,3977,179],{"class":178},[172,3979,183],{"class":182},[172,3981,213],{"class":186},[172,3983,190],{"class":182},[172,3985,193],{"class":178},[172,3987,196],{"class":182},[172,3989,222],{"class":199},[172,3991,203],{"class":182},[172,3993,3994],{"class":174,"line":227},[172,3995,231],{"emptyLinePlaceholder":230},[172,3997,3998,4000,4002,4004,4006],{"class":174,"line":234},[172,3999,237],{"class":178},[172,4001,240],{"class":178},[172,4003,213],{"class":243},[172,4005,246],{"class":186},[172,4007,249],{"class":182},[172,4009,4010,4012,4014,4016,4019,4021],{"class":174,"line":252},[172,4011,256],{"class":255},[172,4013,259],{"class":182},[172,4015,196],{"class":182},[172,4017,4018],{"class":199},"safe-divide",[172,4020,267],{"class":182},[172,4022,270],{"class":182},[172,4024,4025,4027,4029],{"class":174,"line":273},[172,4026,293],{"class":255},[172,4028,259],{"class":182},[172,4030,298],{"class":182},[172,4032,4033,4035,4037,4039,4041,4043,4045],{"class":174,"line":290},[172,4034,1071],{"class":255},[172,4036,259],{"class":182},[172,4038,187],{"class":186},[172,4040,311],{"class":182},[172,4042,1080],{"class":243},[172,4044,317],{"class":186},[172,4046,270],{"class":182},[172,4048,4049,4051,4053,4055,4057,4059,4061],{"class":174,"line":301},[172,4050,1105],{"class":255},[172,4052,259],{"class":182},[172,4054,187],{"class":186},[172,4056,311],{"class":182},[172,4058,1080],{"class":243},[172,4060,317],{"class":186},[172,4062,270],{"class":182},[172,4064,4065],{"class":174,"line":339},[172,4066,342],{"class":182},[172,4068,4069,4071,4073,4075,4077,4079,4081,4083,4085,4087],{"class":174,"line":345},[172,4070,348],{"class":243},[172,4072,259],{"class":182},[172,4074,354],{"class":353},[172,4076,357],{"class":182},[172,4078,1325],{"class":360},[172,4080,590],{"class":182},[172,4082,1330],{"class":360},[172,4084,364],{"class":182},[172,4086,367],{"class":353},[172,4088,298],{"class":182},[172,4090,4091,4093,4095,4098,4101,4104,4106,4108,4111,4114,4116,4118,4121,4123],{"class":174,"line":387},[172,4092,1810],{"class":178},[172,4094,621],{"class":255},[172,4096,4097],{"class":186},"b",[172,4099,4100],{"class":182}," ===",[172,4102,4103],{"class":1821}," 0",[172,4105,1825],{"class":255},[172,4107,3857],{"class":178},[172,4109,4110],{"class":182}," new",[172,4112,4113],{"class":243}," Error",[172,4115,246],{"class":255},[172,4117,267],{"class":182},[172,4119,4120],{"class":199},"Division by zero",[172,4122,267],{"class":182},[172,4124,393],{"class":255},[172,4126,4127,4129,4131,4133],{"class":174,"line":1102},[172,4128,635],{"class":178},[172,4130,1325],{"class":186},[172,4132,1776],{"class":182},[172,4134,2093],{"class":186},[172,4136,4137],{"class":174,"line":1135},[172,4138,342],{"class":182},[172,4140,4141,4143],{"class":174,"line":1140},[172,4142,390],{"class":182},[172,4144,393],{"class":186},[145,4146,4148],{"id":4147},"response-caching","Response Caching",[150,4150,4151,4152,4155],{},"You can cache tool responses using Nitro's caching system. The ",[169,4153,4154],{},"cache"," option accepts three formats:",[1371,4157,4159],{"id":4158},"simple-duration","Simple Duration",[150,4161,4162,4163,4171],{},"Use a string duration (parsed by ",[2678,4164,4168],{"href":4165,"rel":4166},"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fms",[4167],"nofollow",[169,4169,4170],{},"ms",") or a number in milliseconds:",[161,4173,4176],{"className":163,"code":4174,"filename":4175,"language":166,"meta":167,"style":167},"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",[169,4177,4178,4196,4214,4218,4230,4245,4253,4269,4273,4292,4310,4325,4329],{"__ignoreMap":167},[172,4179,4180,4182,4184,4186,4188,4190,4192,4194],{"class":174,"line":175},[172,4181,179],{"class":178},[172,4183,183],{"class":182},[172,4185,187],{"class":186},[172,4187,190],{"class":182},[172,4189,193],{"class":178},[172,4191,196],{"class":182},[172,4193,200],{"class":199},[172,4195,203],{"class":182},[172,4197,4198,4200,4202,4204,4206,4208,4210,4212],{"class":174,"line":206},[172,4199,179],{"class":178},[172,4201,183],{"class":182},[172,4203,213],{"class":186},[172,4205,190],{"class":182},[172,4207,193],{"class":178},[172,4209,196],{"class":182},[172,4211,222],{"class":199},[172,4213,203],{"class":182},[172,4215,4216],{"class":174,"line":227},[172,4217,231],{"emptyLinePlaceholder":230},[172,4219,4220,4222,4224,4226,4228],{"class":174,"line":234},[172,4221,237],{"class":178},[172,4223,240],{"class":178},[172,4225,213],{"class":243},[172,4227,246],{"class":186},[172,4229,249],{"class":182},[172,4231,4232,4234,4236,4238,4241,4243],{"class":174,"line":252},[172,4233,276],{"class":255},[172,4235,259],{"class":182},[172,4237,196],{"class":182},[172,4239,4240],{"class":199},"Fetch data with 1 hour cache",[172,4242,267],{"class":182},[172,4244,270],{"class":182},[172,4246,4247,4249,4251],{"class":174,"line":273},[172,4248,293],{"class":255},[172,4250,259],{"class":182},[172,4252,298],{"class":182},[172,4254,4255,4257,4259,4261,4263,4265,4267],{"class":174,"line":290},[172,4256,3714],{"class":255},[172,4258,259],{"class":182},[172,4260,187],{"class":186},[172,4262,311],{"class":182},[172,4264,314],{"class":243},[172,4266,317],{"class":186},[172,4268,270],{"class":182},[172,4270,4271],{"class":174,"line":301},[172,4272,342],{"class":182},[172,4274,4275,4278,4280,4282,4285,4287,4289],{"class":174,"line":339},[172,4276,4277],{"class":255},"  cache",[172,4279,259],{"class":182},[172,4281,196],{"class":182},[172,4283,4284],{"class":199},"1h",[172,4286,267],{"class":182},[172,4288,590],{"class":182},[172,4290,4291],{"class":453}," \u002F\u002F or '30m', '2 days', 3600000, etc.\n",[172,4293,4294,4296,4298,4300,4302,4304,4306,4308],{"class":174,"line":345},[172,4295,348],{"class":243},[172,4297,259],{"class":182},[172,4299,354],{"class":353},[172,4301,357],{"class":182},[172,4303,2117],{"class":360},[172,4305,364],{"class":182},[172,4307,367],{"class":353},[172,4309,298],{"class":182},[172,4311,4312,4314,4316,4319,4321,4323],{"class":174,"line":387},[172,4313,635],{"class":178},[172,4315,2136],{"class":178},[172,4317,4318],{"class":243}," fetchExpensiveData",[172,4320,246],{"class":255},[172,4322,2144],{"class":186},[172,4324,393],{"class":255},[172,4326,4327],{"class":174,"line":1102},[172,4328,342],{"class":182},[172,4330,4331,4333],{"class":174,"line":1135},[172,4332,390],{"class":182},[172,4334,393],{"class":186},[1371,4336,4338],{"id":4337},"full-cache-options","Full Cache Options",[150,4340,4341],{},"For more control, use an object with all Nitro cache options:",[161,4343,4346],{"className":163,"code":4344,"filename":4345,"language":166,"meta":167,"style":167},"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",[169,4347,4348,4366,4384,4388,4400,4415,4423,4440,4444,4452,4467,4497,4511,4515,4534,4538,4542],{"__ignoreMap":167},[172,4349,4350,4352,4354,4356,4358,4360,4362,4364],{"class":174,"line":175},[172,4351,179],{"class":178},[172,4353,183],{"class":182},[172,4355,187],{"class":186},[172,4357,190],{"class":182},[172,4359,193],{"class":178},[172,4361,196],{"class":182},[172,4363,200],{"class":199},[172,4365,203],{"class":182},[172,4367,4368,4370,4372,4374,4376,4378,4380,4382],{"class":174,"line":206},[172,4369,179],{"class":178},[172,4371,183],{"class":182},[172,4373,213],{"class":186},[172,4375,190],{"class":182},[172,4377,193],{"class":178},[172,4379,196],{"class":182},[172,4381,222],{"class":199},[172,4383,203],{"class":182},[172,4385,4386],{"class":174,"line":227},[172,4387,231],{"emptyLinePlaceholder":230},[172,4389,4390,4392,4394,4396,4398],{"class":174,"line":234},[172,4391,237],{"class":178},[172,4393,240],{"class":178},[172,4395,213],{"class":243},[172,4397,246],{"class":186},[172,4399,249],{"class":182},[172,4401,4402,4404,4406,4408,4411,4413],{"class":174,"line":252},[172,4403,276],{"class":255},[172,4405,259],{"class":182},[172,4407,196],{"class":182},[172,4409,4410],{"class":199},"Get page with custom cache key",[172,4412,267],{"class":182},[172,4414,270],{"class":182},[172,4416,4417,4419,4421],{"class":174,"line":273},[172,4418,293],{"class":255},[172,4420,259],{"class":182},[172,4422,298],{"class":182},[172,4424,4425,4428,4430,4432,4434,4436,4438],{"class":174,"line":290},[172,4426,4427],{"class":255},"    path",[172,4429,259],{"class":182},[172,4431,187],{"class":186},[172,4433,311],{"class":182},[172,4435,314],{"class":243},[172,4437,317],{"class":186},[172,4439,270],{"class":182},[172,4441,4442],{"class":174,"line":301},[172,4443,342],{"class":182},[172,4445,4446,4448,4450],{"class":174,"line":339},[172,4447,4277],{"class":255},[172,4449,259],{"class":182},[172,4451,298],{"class":182},[172,4453,4454,4457,4459,4461,4463,4465],{"class":174,"line":345},[172,4455,4456],{"class":255},"    maxAge",[172,4458,259],{"class":182},[172,4460,196],{"class":182},[172,4462,4284],{"class":199},[172,4464,267],{"class":182},[172,4466,270],{"class":182},[172,4468,4469,4472,4474,4477,4479,4481,4484,4486,4488,4490,4493,4495],{"class":174,"line":387},[172,4470,4471],{"class":243},"    getKey",[172,4473,259],{"class":182},[172,4475,4476],{"class":360}," args",[172,4478,367],{"class":353},[172,4480,370],{"class":182},[172,4482,4483],{"class":199},"page-",[172,4485,376],{"class":182},[172,4487,624],{"class":186},[172,4489,311],{"class":182},[172,4491,4492],{"class":186},"path",[172,4494,382],{"class":182},[172,4496,270],{"class":182},[172,4498,4499,4502,4504,4506,4508],{"class":174,"line":1102},[172,4500,4501],{"class":255},"    swr",[172,4503,259],{"class":182},[172,4505,2839],{"class":2823},[172,4507,590],{"class":182},[172,4509,4510],{"class":453}," \u002F\u002F stale-while-revalidate\n",[172,4512,4513],{"class":174,"line":1135},[172,4514,342],{"class":182},[172,4516,4517,4519,4521,4523,4525,4528,4530,4532],{"class":174,"line":1140},[172,4518,348],{"class":243},[172,4520,259],{"class":182},[172,4522,354],{"class":353},[172,4524,357],{"class":182},[172,4526,4527],{"class":360}," path",[172,4529,364],{"class":182},[172,4531,367],{"class":353},[172,4533,298],{"class":182},[172,4535,4536],{"class":174,"line":1146},[172,4537,499],{"class":453},[172,4539,4540],{"class":174,"line":1186},[172,4541,342],{"class":182},[172,4543,4544,4546],{"class":174,"line":1191},[172,4545,390],{"class":182},[172,4547,393],{"class":186},[1371,4549,4551],{"id":4550},"cache-options-reference","Cache Options Reference",[1376,4553,4554,4568],{},[1379,4555,4556],{},[1382,4557,4558,4561,4563,4566],{},[1385,4559,4560],{},"Option",[1385,4562,2925],{},[1385,4564,4565],{},"Required",[1385,4567,1393],{},[1395,4569,4570,4594,4612,4628,4644,4659],{},[1382,4571,4572,4577,4582,4585],{},[1400,4573,4574],{},[169,4575,4576],{},"maxAge",[1400,4578,4579],{},[169,4580,4581],{},"string | number",[1400,4583,4584],{},"Yes",[1400,4586,4587,4588,2008,4591,334],{},"Cache duration (e.g., ",[169,4589,4590],{},"'1h'",[169,4592,4593],{},"3600000",[1382,4595,4596,4601,4606,4609],{},[1400,4597,4598],{},[169,4599,4600],{},"getKey",[1400,4602,4603],{},[169,4604,4605],{},"(args) => string",[1400,4607,4608],{},"No",[1400,4610,4611],{},"Custom cache key generator",[1382,4613,4614,4619,4623,4625],{},[1400,4615,4616],{},[169,4617,4618],{},"staleMaxAge",[1400,4620,4621],{},[169,4622,1080],{},[1400,4624,4608],{},[1400,4626,4627],{},"Duration for stale-while-revalidate",[1382,4629,4630,4635,4639,4641],{},[1400,4631,4632],{},[169,4633,4634],{},"swr",[1400,4636,4637],{},[169,4638,2013],{},[1400,4640,4608],{},[1400,4642,4643],{},"Enable stale-while-revalidate",[1382,4645,4646,4650,4654,4656],{},[1400,4647,4648],{},[169,4649,403],{},[1400,4651,4652],{},[169,4653,314],{},[1400,4655,4608],{},[1400,4657,4658],{},"Cache name (auto-generated from tool name)",[1382,4660,4661,4666,4670,4672],{},[1400,4662,4663],{},[169,4664,4665],{},"group",[1400,4667,4668],{},[169,4669,314],{},[1400,4671,4608],{},[1400,4673,4674,4675,334],{},"Cache group (default: ",[169,4676,4677],{},"'mcp'",[2662,4679,4680,4681,4686],{"color":2664,"icon":2665},"See the ",[2678,4682,4685],{"href":4683,"rel":4684},"https:\u002F\u002Fnitro.build\u002Fguide\u002Fcache#options",[4167],"Nitro Cache documentation"," for all available options.",[145,4688,4690],{"id":4689},"advanced-examples","Advanced Examples",[1371,4692,4694],{"id":4693},"tool-with-api-integration","Tool with API Integration",[150,4696,4697],{},"Here's an example showing a typical API-backed tool:",[161,4699,4702],{"className":163,"code":4700,"filename":4701,"language":166,"meta":167,"style":167},"import { z } from 'zod'\nimport { createError } from 'h3'\nimport { defineMcpTool } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpTool({\n  name: 'get-weather',\n  description: 'Get current weather for a city',\n  inputSchema: {\n    city: z.string().describe('City name'),\n  },\n  handler: async ({ city }) => {\n    const data = await $fetch(`\u002Fapi\u002Fweather\u002F${city}`)\n    if (!data) throw createError({ statusCode: 404, message: `City \"${city}\" not found` })\n    return data\n  },\n})\n","server\u002Fmcp\u002Ftools\u002Fget-weather.ts",[169,4703,4704,4722,4740,4758,4762,4774,4789,4804,4812,4844,4848,4867,4897,4949,4956,4960],{"__ignoreMap":167},[172,4705,4706,4708,4710,4712,4714,4716,4718,4720],{"class":174,"line":175},[172,4707,179],{"class":178},[172,4709,183],{"class":182},[172,4711,187],{"class":186},[172,4713,190],{"class":182},[172,4715,193],{"class":178},[172,4717,196],{"class":182},[172,4719,200],{"class":199},[172,4721,203],{"class":182},[172,4723,4724,4726,4728,4730,4732,4734,4736,4738],{"class":174,"line":206},[172,4725,179],{"class":178},[172,4727,183],{"class":182},[172,4729,3627],{"class":186},[172,4731,190],{"class":182},[172,4733,193],{"class":178},[172,4735,196],{"class":182},[172,4737,1371],{"class":199},[172,4739,203],{"class":182},[172,4741,4742,4744,4746,4748,4750,4752,4754,4756],{"class":174,"line":227},[172,4743,179],{"class":178},[172,4745,183],{"class":182},[172,4747,213],{"class":186},[172,4749,190],{"class":182},[172,4751,193],{"class":178},[172,4753,196],{"class":182},[172,4755,222],{"class":199},[172,4757,203],{"class":182},[172,4759,4760],{"class":174,"line":234},[172,4761,231],{"emptyLinePlaceholder":230},[172,4763,4764,4766,4768,4770,4772],{"class":174,"line":252},[172,4765,237],{"class":178},[172,4767,240],{"class":178},[172,4769,213],{"class":243},[172,4771,246],{"class":186},[172,4773,249],{"class":182},[172,4775,4776,4778,4780,4782,4785,4787],{"class":174,"line":273},[172,4777,256],{"class":255},[172,4779,259],{"class":182},[172,4781,196],{"class":182},[172,4783,4784],{"class":199},"get-weather",[172,4786,267],{"class":182},[172,4788,270],{"class":182},[172,4790,4791,4793,4795,4797,4800,4802],{"class":174,"line":290},[172,4792,276],{"class":255},[172,4794,259],{"class":182},[172,4796,196],{"class":182},[172,4798,4799],{"class":199},"Get current weather for a city",[172,4801,267],{"class":182},[172,4803,270],{"class":182},[172,4805,4806,4808,4810],{"class":174,"line":301},[172,4807,293],{"class":255},[172,4809,259],{"class":182},[172,4811,298],{"class":182},[172,4813,4814,4817,4819,4821,4823,4825,4827,4829,4831,4833,4835,4838,4840,4842],{"class":174,"line":339},[172,4815,4816],{"class":255},"    city",[172,4818,259],{"class":182},[172,4820,187],{"class":186},[172,4822,311],{"class":182},[172,4824,314],{"class":243},[172,4826,317],{"class":186},[172,4828,311],{"class":182},[172,4830,322],{"class":243},[172,4832,246],{"class":186},[172,4834,267],{"class":182},[172,4836,4837],{"class":199},"City name",[172,4839,267],{"class":182},[172,4841,334],{"class":186},[172,4843,270],{"class":182},[172,4845,4846],{"class":174,"line":345},[172,4847,342],{"class":182},[172,4849,4850,4852,4854,4856,4858,4861,4863,4865],{"class":174,"line":387},[172,4851,348],{"class":243},[172,4853,259],{"class":182},[172,4855,354],{"class":353},[172,4857,357],{"class":182},[172,4859,4860],{"class":360}," city",[172,4862,364],{"class":182},[172,4864,367],{"class":353},[172,4866,298],{"class":182},[172,4868,4869,4871,4873,4875,4877,4880,4882,4885,4888,4890,4893,4895],{"class":174,"line":1102},[172,4870,1765],{"class":353},[172,4872,2570],{"class":186},[172,4874,1771],{"class":182},[172,4876,2136],{"class":178},[172,4878,4879],{"class":243}," $fetch",[172,4881,246],{"class":255},[172,4883,4884],{"class":182},"`",[172,4886,4887],{"class":199},"\u002Fapi\u002Fweather\u002F",[172,4889,376],{"class":182},[172,4891,4892],{"class":186},"city",[172,4894,382],{"class":182},[172,4896,393],{"class":255},[172,4898,4899,4901,4903,4905,4907,4909,4911,4913,4915,4917,4919,4921,4923,4925,4927,4929,4931,4934,4936,4938,4940,4943,4945,4947],{"class":174,"line":1135},[172,4900,1810],{"class":178},[172,4902,621],{"class":255},[172,4904,3776],{"class":182},[172,4906,2627],{"class":186},[172,4908,1825],{"class":255},[172,4910,3857],{"class":178},[172,4912,3627],{"class":243},[172,4914,246],{"class":255},[172,4916,787],{"class":182},[172,4918,3797],{"class":255},[172,4920,259],{"class":182},[172,4922,3802],{"class":1821},[172,4924,590],{"class":182},[172,4926,361],{"class":255},[172,4928,259],{"class":182},[172,4930,370],{"class":182},[172,4932,4933],{"class":199},"City \"",[172,4935,376],{"class":182},[172,4937,4892],{"class":186},[172,4939,390],{"class":182},[172,4941,4942],{"class":199},"\" not found",[172,4944,4884],{"class":182},[172,4946,190],{"class":182},[172,4948,393],{"class":255},[172,4950,4951,4953],{"class":174,"line":1140},[172,4952,635],{"class":178},[172,4954,4955],{"class":186}," data\n",[172,4957,4958],{"class":174,"line":1146},[172,4959,342],{"class":182},[172,4961,4962,4964],{"class":174,"line":1186},[172,4963,390],{"class":182},[172,4965,393],{"class":186},[145,4967,4969],{"id":4968},"file-organization","File Organization",[150,4971,4972,4973,4976],{},"Organize your tools in the ",[169,4974,4975],{},"server\u002Fmcp\u002Ftools\u002F"," directory:",[161,4978,4983],{"className":4979,"code":4981,"language":4982},[4980],"language-text","server\u002F\n└── mcp\u002F\n    └── tools\u002F\n        ├── echo.ts\n        ├── calculator.ts\n        ├── bmi.ts\n        └── text-processor.ts\n","text",[169,4984,4981],{"__ignoreMap":167},[150,4986,4987],{},"Each file should export a default tool definition.",[145,4989,4991],{"id":4990},"type-safety","Type Safety",[150,4993,4994],{},"The module provides full TypeScript type inference:",[161,4996,4998],{"className":163,"code":4997,"language":166,"meta":167,"style":167},"\u002F\u002F Input types are inferred from inputSchema\nhandler: async ({ message }) => {\n  \u002F\u002F message is typed as string\n}\n\n\u002F\u002F Output types are inferred from outputSchema\nconst result = {\n  structuredContent: {\n    bmi: 25.5,      \u002F\u002F number\n    category: '...', \u002F\u002F string\n  },\n}\n",[169,4999,5000,5005,5023,5028,5032,5036,5041,5054,5062,5075,5093,5097],{"__ignoreMap":167},[172,5001,5002],{"class":174,"line":175},[172,5003,5004],{"class":453},"\u002F\u002F Input types are inferred from inputSchema\n",[172,5006,5007,5009,5011,5013,5015,5017,5019,5021],{"class":174,"line":206},[172,5008,2028],{"class":2027},[172,5010,259],{"class":182},[172,5012,354],{"class":353},[172,5014,357],{"class":182},[172,5016,361],{"class":360},[172,5018,364],{"class":182},[172,5020,367],{"class":353},[172,5022,298],{"class":182},[172,5024,5025],{"class":174,"line":227},[172,5026,5027],{"class":453},"  \u002F\u002F message is typed as string\n",[172,5029,5030],{"class":174,"line":234},[172,5031,2159],{"class":182},[172,5033,5034],{"class":174,"line":252},[172,5035,231],{"emptyLinePlaceholder":230},[172,5037,5038],{"class":174,"line":273},[172,5039,5040],{"class":453},"\u002F\u002F Output types are inferred from outputSchema\n",[172,5042,5043,5046,5049,5052],{"class":174,"line":290},[172,5044,5045],{"class":353},"const",[172,5047,5048],{"class":186}," result ",[172,5050,5051],{"class":182},"=",[172,5053,298],{"class":182},[172,5055,5056,5058,5060],{"class":174,"line":301},[172,5057,2318],{"class":255},[172,5059,259],{"class":182},[172,5061,298],{"class":182},[172,5063,5064,5066,5068,5070,5072],{"class":174,"line":339},[172,5065,1703],{"class":255},[172,5067,259],{"class":182},[172,5069,2331],{"class":1821},[172,5071,590],{"class":182},[172,5073,5074],{"class":453},"      \u002F\u002F number\n",[172,5076,5077,5079,5081,5083,5086,5088,5090],{"class":174,"line":345},[172,5078,1720],{"class":255},[172,5080,259],{"class":182},[172,5082,196],{"class":182},[172,5084,5085],{"class":199},"...",[172,5087,267],{"class":182},[172,5089,590],{"class":182},[172,5091,5092],{"class":453}," \u002F\u002F string\n",[172,5094,5095],{"class":174,"line":387},[172,5096,342],{"class":182},[172,5098,5099],{"class":174,"line":1102},[172,5100,2159],{"class":182},[145,5102,5104],{"id":5103},"conditional-registration","Conditional Registration",[150,5106,5107,5108,5111],{},"You can control whether a tool is visible to clients using the ",[169,5109,5110],{},"enabled"," guard:",[161,5113,5116],{"className":163,"code":5114,"filename":5115,"language":166,"meta":167,"style":167},"import { defineMcpTool } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpTool({\n  name: 'admin-tool',\n  description: 'Admin-only tool',\n  enabled: event => event.context.user?.role === 'admin',\n  handler: async () => {\n    \u002F\u002F ...\n  },\n})\n","server\u002Fmcp\u002Ftools\u002Fadmin-tool.ts",[169,5117,5118,5136,5140,5152,5167,5182,5223,5237,5241,5245],{"__ignoreMap":167},[172,5119,5120,5122,5124,5126,5128,5130,5132,5134],{"class":174,"line":175},[172,5121,179],{"class":178},[172,5123,183],{"class":182},[172,5125,213],{"class":186},[172,5127,190],{"class":182},[172,5129,193],{"class":178},[172,5131,196],{"class":182},[172,5133,222],{"class":199},[172,5135,203],{"class":182},[172,5137,5138],{"class":174,"line":206},[172,5139,231],{"emptyLinePlaceholder":230},[172,5141,5142,5144,5146,5148,5150],{"class":174,"line":227},[172,5143,237],{"class":178},[172,5145,240],{"class":178},[172,5147,213],{"class":243},[172,5149,246],{"class":186},[172,5151,249],{"class":182},[172,5153,5154,5156,5158,5160,5163,5165],{"class":174,"line":234},[172,5155,256],{"class":255},[172,5157,259],{"class":182},[172,5159,196],{"class":182},[172,5161,5162],{"class":199},"admin-tool",[172,5164,267],{"class":182},[172,5166,270],{"class":182},[172,5168,5169,5171,5173,5175,5178,5180],{"class":174,"line":252},[172,5170,276],{"class":255},[172,5172,259],{"class":182},[172,5174,196],{"class":182},[172,5176,5177],{"class":199},"Admin-only tool",[172,5179,267],{"class":182},[172,5181,270],{"class":182},[172,5183,5184,5187,5189,5192,5194,5196,5198,5201,5203,5205,5208,5211,5214,5216,5219,5221],{"class":174,"line":273},[172,5185,5186],{"class":243},"  enabled",[172,5188,259],{"class":182},[172,5190,5191],{"class":360}," event",[172,5193,367],{"class":353},[172,5195,5191],{"class":186},[172,5197,311],{"class":182},[172,5199,5200],{"class":186},"context",[172,5202,311],{"class":182},[172,5204,3779],{"class":186},[172,5206,5207],{"class":182},"?.",[172,5209,5210],{"class":186},"role ",[172,5212,5213],{"class":182},"===",[172,5215,196],{"class":182},[172,5217,5218],{"class":199},"admin",[172,5220,267],{"class":182},[172,5222,270],{"class":182},[172,5224,5225,5227,5229,5231,5233,5235],{"class":174,"line":290},[172,5226,348],{"class":243},[172,5228,259],{"class":182},[172,5230,354],{"class":353},[172,5232,490],{"class":182},[172,5234,367],{"class":353},[172,5236,298],{"class":182},[172,5238,5239],{"class":174,"line":301},[172,5240,499],{"class":453},[172,5242,5243],{"class":174,"line":339},[172,5244,342],{"class":182},[172,5246,5247,5249],{"class":174,"line":345},[172,5248,390],{"class":182},[172,5250,393],{"class":186},[150,5252,5253,5254,5256,5257,5259,5260,5263],{},"When ",[169,5255,5110],{}," returns ",[169,5258,2948],{},", the tool is hidden from ",[169,5261,5262],{},"tools\u002Flist"," and cannot be called.",[2662,5265,4680,5267,5269],{"color":5266,"icon":13},"primary",[2678,5268,101],{"href":102}," guide for detailed documentation on auth-based filtering.",[145,5271,5273],{"id":5272},"next-steps","Next Steps",[518,5275,5276,5281,5286,5291,5296,5301],{},[521,5277,5278,5280],{},[2678,5279,51],{"href":52}," - Create resources to expose data",[521,5282,5283,5285],{},[2678,5284,56],{"href":57}," - Create reusable prompts",[521,5287,5288,5290],{},[2678,5289,61],{"href":62}," - Create custom MCP endpoints",[521,5292,5293,5295],{},[2678,5294,106],{"href":107}," - Let LLMs orchestrate tools with JavaScript",[521,5297,5298,5300],{},[2678,5299,101],{"href":102}," - Conditionally register definitions",[521,5302,5303,5305],{},[2678,5304,111],{"href":127}," - See more tool examples",[5307,5308,5309],"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 .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 .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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":167,"searchDepth":206,"depth":206,"links":5311},[5312,5313,5314,5315,5316,5319,5320,5325,5328,5329,5333,5338,5341,5342,5343,5344],{"id":147,"depth":206,"text":148},{"id":155,"depth":206,"text":156},{"id":396,"depth":206,"text":397},{"id":549,"depth":206,"text":550},{"id":831,"depth":206,"text":832,"children":5317},[5318],{"id":1373,"depth":227,"text":1374},{"id":1519,"depth":206,"text":1520},{"id":1990,"depth":206,"text":1991,"children":5321},[5322,5323,5324],{"id":2001,"depth":227,"text":2002},{"id":2211,"depth":227,"text":2212},{"id":2474,"depth":227,"text":2475},{"id":2684,"depth":206,"text":2685,"children":5326},[5327],{"id":2912,"depth":227,"text":2913},{"id":3290,"depth":206,"text":3291},{"id":3576,"depth":206,"text":2681,"children":5330},[5331,5332],{"id":3586,"depth":227,"text":3587},{"id":3941,"depth":227,"text":3942},{"id":4147,"depth":206,"text":4148,"children":5334},[5335,5336,5337],{"id":4158,"depth":227,"text":4159},{"id":4337,"depth":227,"text":4338},{"id":4550,"depth":227,"text":4551},{"id":4689,"depth":206,"text":4690,"children":5339},[5340],{"id":4693,"depth":227,"text":4694},{"id":4968,"depth":206,"text":4969},{"id":4990,"depth":206,"text":4991},{"id":5103,"depth":206,"text":5104},{"id":5272,"depth":206,"text":5273},"Create MCP tools with Zod validation and type safety.","md",null,{},{"icon":49},{"title":46,"description":5351},"Create MCP tools with Zod validation and full TypeScript support.","HFCNRxZUvG3FIAK8nxmNotvw3hzDf4soc_Ej-h8GkPs",[5354,5356],{"title":35,"path":36,"stem":37,"description":5355,"icon":38,"children":-1},"AI-assisted MCP server development using Agent Skills. Let AI help you setup, create, review, and troubleshoot MCP servers in your Nuxt app.",{"title":51,"path":52,"stem":53,"description":5357,"icon":54,"children":-1},"Expose read-only data sources as MCP resources to provide context to AI models.",1774007087743]