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