[{"data":1,"prerenderedAt":1096},["ShallowReactive",2],{"navigation_docs":3,"-tools-overview":287,"-tools-overview-surround":1091},[4,40,70,99,122,156,189,258],{"title":5,"path":6,"stem":7,"children":8,"page":39},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24,29,34],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-book-open",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Configuration","\u002Fgetting-started\u002Fconfiguration","1.getting-started\u002F3.configuration","i-lucide-settings",{"title":25,"path":26,"stem":27,"icon":28},"Inspector","\u002Fgetting-started\u002Finspector","1.getting-started\u002F4.inspector","i-lucide-circuit-board",{"title":30,"path":31,"stem":32,"icon":33},"Connection","\u002Fgetting-started\u002Fconnection","1.getting-started\u002F5.connection","i-lucide-plug",{"title":35,"path":36,"stem":37,"icon":38},"Agent Skills","\u002Fgetting-started\u002Fagent-skills","1.getting-started\u002F6.agent-skills","i-lucide-sparkles",false,{"title":41,"path":42,"stem":43,"children":44,"page":39},"Tools","\u002Ftools","2.tools",[45,50,55,60,65],{"title":46,"path":47,"stem":48,"icon":49},"Overview","\u002Ftools\u002Foverview","2.tools\u002F0.overview","i-lucide-wrench",{"title":51,"path":52,"stem":53,"icon":54},"Schema, handler & returns","\u002Ftools\u002Fschema-handler","2.tools\u002F1.schema-handler","i-lucide-braces",{"title":56,"path":57,"stem":58,"icon":59},"Annotations & input examples","\u002Ftools\u002Fannotations","2.tools\u002F2.annotations","i-lucide-badge-info",{"title":61,"path":62,"stem":63,"icon":64},"Errors & caching","\u002Ftools\u002Ferrors-caching","2.tools\u002F3.errors-caching","i-lucide-shield",{"title":66,"path":67,"stem":68,"icon":69},"Groups, files & dynamic registration","\u002Ftools\u002Fgroups-organization","2.tools\u002F4.groups-organization","i-lucide-tags",{"title":71,"path":72,"stem":73,"children":74,"page":39},"Resources","\u002Fresources","3.resources",[75,79,84,89,94],{"title":46,"path":76,"stem":77,"icon":78},"\u002Fresources\u002Foverview","3.resources\u002F0.overview","i-lucide-package",{"title":80,"path":81,"stem":82,"icon":83},"Static resources & structure","\u002Fresources\u002Fstatic-and-structure","3.resources\u002F1.static-and-structure","i-lucide-file-stack",{"title":85,"path":86,"stem":87,"icon":88},"Templates & handlers","\u002Fresources\u002Ftemplates-and-handlers","3.resources\u002F2.templates-and-handlers","i-lucide-git-branch",{"title":90,"path":91,"stem":92,"icon":93},"Metadata, content & errors","\u002Fresources\u002Fcontent-metadata-errors","3.resources\u002F3.content-metadata-errors","i-lucide-layers",{"title":95,"path":96,"stem":97,"icon":98},"Groups & organization","\u002Fresources\u002Forganization","3.resources\u002F4.organization","i-lucide-folder-tree",{"title":100,"path":101,"stem":102,"children":103,"page":39},"Prompts","\u002Fprompts","4.prompts",[104,108,113,117],{"title":46,"path":105,"stem":106,"icon":107},"\u002Fprompts\u002Foverview","4.prompts\u002F0.overview","i-lucide-message-square",{"title":109,"path":110,"stem":111,"icon":112},"Authoring & structure","\u002Fprompts\u002Fauthoring","4.prompts\u002F1.authoring","i-lucide-pen-line",{"title":114,"path":115,"stem":116,"icon":93},"Input, handler & messages","\u002Fprompts\u002Finput-handler-messages","4.prompts\u002F2.input-handler-messages",{"title":118,"path":119,"stem":120,"icon":121},"Patterns & advanced","\u002Fprompts\u002Fpatterns-advanced","4.prompts\u002F3.patterns-advanced","i-lucide-line-chart",{"title":123,"path":124,"stem":125,"children":126,"page":39},"Handlers","\u002Fhandlers","5.handlers",[127,131,136,141,146,151],{"title":46,"path":128,"stem":129,"icon":130},"\u002Fhandlers\u002Foverview","5.handlers\u002F0.overview","i-lucide-server",{"title":132,"path":133,"stem":134,"icon":135},"Default & custom handlers","\u002Fhandlers\u002Fdefault-and-custom","5.handlers\u002F1.default-and-custom","i-lucide-toggle-left",{"title":137,"path":138,"stem":139,"icon":140},"Structure & options","\u002Fhandlers\u002Fstructure-and-options","5.handlers\u002F2.structure-and-options","i-lucide-sliders-horizontal",{"title":142,"path":143,"stem":144,"icon":145},"Examples & routing","\u002Fhandlers\u002Fexamples-routing","5.handlers\u002F3.examples-routing","i-lucide-route",{"title":147,"path":148,"stem":149,"icon":150},"Sharing & practices","\u002Fhandlers\u002Fsharing-practices","5.handlers\u002F4.sharing-practices","i-lucide-share-2",{"title":152,"path":153,"stem":154,"icon":155},"Multi-handler organization","\u002Fhandlers\u002Forganization","5.handlers\u002F5.organization","i-lucide-network",{"title":157,"path":158,"stem":159,"children":160,"page":39},"Apps","\u002Fapps","6.apps",[161,165,170,175,179,184],{"title":46,"path":162,"stem":163,"icon":164},"\u002Fapps\u002Foverview","6.apps\u002F0.overview","i-lucide-app-window",{"title":166,"path":167,"stem":168,"icon":169},"Authoring & defineMcpApp","\u002Fapps\u002Fauthoring","6.apps\u002F1.authoring","i-lucide-code-2",{"title":171,"path":172,"stem":173,"icon":174},"useMcpApp() bridge","\u002Fapps\u002Fuse-mcp-app","6.apps\u002F2.use-mcp-app","i-lucide-message-circle",{"title":176,"path":177,"stem":178,"icon":64},"CSP & build pipeline","\u002Fapps\u002Fcsp-and-wiring","6.apps\u002F3.csp-and-wiring",{"title":180,"path":181,"stem":182,"icon":183},"Testing & publishing","\u002Fapps\u002Ftesting-publishing","6.apps\u002F4.testing-publishing","i-lucide-rocket",{"title":185,"path":186,"stem":187,"icon":188},"Patterns & limits","\u002Fapps\u002Fpatterns-reference","6.apps\u002F5.patterns-reference","i-lucide-book-marked",{"title":190,"path":191,"stem":192,"children":193,"page":39},"Advanced Topics","\u002Fadvanced","7.advanced",[194,199,204,209,214,219,223,228,233,238,243,248,253],{"title":195,"path":196,"stem":197,"icon":198},"Custom Paths","\u002Fadvanced\u002Fcustom-paths","7.advanced\u002F1.custom-paths","i-lucide-folder",{"title":200,"path":201,"stem":202,"icon":203},"Logging","\u002Fadvanced\u002Flogging","7.advanced\u002F10.logging","i-lucide-scroll-text",{"title":205,"path":206,"stem":207,"icon":208},"MCP Apps Internals","\u002Fadvanced\u002Fmcp-apps-internals","7.advanced\u002F11.mcp-apps-internals","i-lucide-cog",{"title":210,"path":211,"stem":212,"icon":213},"Listing Definitions","\u002Fadvanced\u002Flisting-definitions","7.advanced\u002F12.listing-definitions","i-lucide-list",{"title":215,"path":216,"stem":217,"icon":218},"llms.txt discovery","\u002Fadvanced\u002Fllms-txt","7.advanced\u002F13.llms-txt","i-lucide-file-text",{"title":220,"path":221,"stem":222,"icon":64},"Middleware","\u002Fadvanced\u002Fmiddleware","7.advanced\u002F2.middleware",{"title":224,"path":225,"stem":226,"icon":227},"TypeScript","\u002Fadvanced\u002Ftypescript","7.advanced\u002F3.typescript","i-lucide-type",{"title":229,"path":230,"stem":231,"icon":232},"Hooks","\u002Fadvanced\u002Fhooks","7.advanced\u002F4.hooks","i-lucide-webhook",{"title":234,"path":235,"stem":236,"icon":237},"MCP Evals","\u002Fadvanced\u002Fevals","7.advanced\u002F5.evals","i-lucide-flask-conical",{"title":239,"path":240,"stem":241,"icon":242},"Sessions","\u002Fadvanced\u002Fsessions","7.advanced\u002F6.sessions","i-lucide-database",{"title":244,"path":245,"stem":246,"icon":247},"Dynamic Definitions","\u002Fadvanced\u002Fdynamic-definitions","7.advanced\u002F7.dynamic-definitions","i-lucide-toggle-right",{"title":249,"path":250,"stem":251,"icon":252},"Code Mode","\u002Fadvanced\u002Fcode-mode","7.advanced\u002F8.code-mode","i-lucide-code",{"title":254,"path":255,"stem":256,"icon":257},"Elicitation","\u002Fadvanced\u002Felicitation","7.advanced\u002F9.elicitation","i-lucide-message-square-quote",{"title":259,"path":260,"stem":261,"children":262,"page":39},"Examples","\u002Fexamples","8.examples",[263,268,273,278,283],{"title":264,"path":265,"stem":266,"icon":267},"Authentication","\u002Fexamples\u002Fauthentication","8.examples\u002F1.authentication","i-lucide-shield-check",{"title":269,"path":270,"stem":271,"icon":272},"API Integration","\u002Fexamples\u002Fapi-integration","8.examples\u002F2.api-integration","i-lucide-globe",{"title":274,"path":275,"stem":276,"icon":277},"Common Patterns","\u002Fexamples\u002Fcommon-patterns","8.examples\u002F3.common-patterns","i-lucide-lightbulb",{"title":279,"path":280,"stem":281,"icon":282},"File Operations","\u002Fexamples\u002Ffile-operations","8.examples\u002F4.file-operations","i-lucide-file",{"title":284,"path":285,"stem":286,"icon":107},"Prompt Examples","\u002Fexamples\u002Fprompt-examples","8.examples\u002F5.prompt-examples",{"id":288,"title":41,"body":289,"description":1075,"extension":1076,"links":1077,"meta":1086,"navigation":1087,"path":47,"seo":1088,"stem":48,"__hash__":1090},"docs\u002F2.tools\u002F0.overview.md",{"type":290,"value":291,"toc":1068},"minimark",[292,297,301,351,355,358,591,595,606,707,714,733,742,746,749,1024,1028,1031,1064],[293,294,296],"h2",{"id":295},"what-are-tools","What are Tools?",[298,299,300],"p",{},"Tools are functions that AI assistants can call to perform actions or retrieve information. They accept validated input parameters and return structured results.",[302,303,306,309,342],"prompt",{":actions":304,"description":305,"icon":49},"[\"copy\",\"cursor\",\"windsurf\"]","Scaffold a new MCP tool",[298,307,308],{},"Create a new MCP tool in my Nuxt app using @nuxtjs\u002Fmcp-toolkit.",[310,311,312,316,319,327,330,333,336,339],"ul",{},[313,314,315],"li",{},"Create a file in server\u002Fmcp\u002Ftools\u002F (e.g. server\u002Fmcp\u002Ftools\u002Fmy-tool.ts)",[313,317,318],{},"Use defineMcpTool (auto-imported) with a description and handler",[313,320,321,322,326],{},"Import Zod with ",[323,324,325],"code",{},"import { z } from 'zod'"," and define input parameters in inputSchema (e.g. z.string().describe('...'))",[313,328,329],{},"The handler receives validated input and returns a string, number, boolean, object, or full CallToolResult",[313,331,332],{},"Throw errors with createError({ statusCode, message }) from h3 for error cases",[313,334,335],{},"Name and title are auto-generated from the filename (e.g. my-tool.ts → name: 'my-tool', title: 'My Tool')",[313,337,338],{},"Add annotations for behavioral hints (readOnlyHint, destructiveHint, idempotentHint, openWorldHint)",[313,340,341],{},"Use subdirectories to auto-infer groups (e.g. tools\u002Fadmin\u002Fdelete-user.ts → group: 'admin')",[298,343,344,345],{},"Docs: ",[346,347,348],"a",{"href":348,"rel":349},"https:\u002F\u002Fmcp-toolkit.nuxt.dev\u002Ftools\u002Foverview",[350],"nofollow",[293,352,354],{"id":353},"basic-tool-definition","Basic Tool Definition",[298,356,357],{},"Here's a simple tool that echoes back a message:",[359,360,366],"pre",{"className":361,"code":362,"filename":363,"language":364,"meta":365,"style":365},"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","",[323,367,368,401,422,429,447,468,485,496,534,540,582],{"__ignoreMap":365},[369,370,373,377,381,385,388,391,394,398],"span",{"class":371,"line":372},"line",1,[369,374,376],{"class":375},"s7zQu","import",[369,378,380],{"class":379},"sMK4o"," {",[369,382,384],{"class":383},"sTEyZ"," z",[369,386,387],{"class":379}," }",[369,389,390],{"class":375}," from",[369,392,393],{"class":379}," '",[369,395,397],{"class":396},"sfazB","zod",[369,399,400],{"class":379},"'\n",[369,402,404,406,408,411,413,415,417,420],{"class":371,"line":403},2,[369,405,376],{"class":375},[369,407,380],{"class":379},[369,409,410],{"class":383}," defineMcpTool",[369,412,387],{"class":379},[369,414,390],{"class":375},[369,416,393],{"class":379},[369,418,419],{"class":396},"@nuxtjs\u002Fmcp-toolkit\u002Fserver",[369,421,400],{"class":379},[369,423,425],{"class":371,"line":424},3,[369,426,428],{"emptyLinePlaceholder":427},true,"\n",[369,430,432,435,438,441,444],{"class":371,"line":431},4,[369,433,434],{"class":375},"export",[369,436,437],{"class":375}," default",[369,439,410],{"class":440},"s2Zo4",[369,442,443],{"class":383},"(",[369,445,446],{"class":379},"{\n",[369,448,450,454,457,459,462,465],{"class":371,"line":449},5,[369,451,453],{"class":452},"swJcz","  name",[369,455,456],{"class":379},":",[369,458,393],{"class":379},[369,460,461],{"class":396},"echo",[369,463,464],{"class":379},"'",[369,466,467],{"class":379},",\n",[369,469,471,474,476,478,481,483],{"class":371,"line":470},6,[369,472,473],{"class":452},"  description",[369,475,456],{"class":379},[369,477,393],{"class":379},[369,479,480],{"class":396},"Echo back a message",[369,482,464],{"class":379},[369,484,467],{"class":379},[369,486,488,491,493],{"class":371,"line":487},7,[369,489,490],{"class":452},"  inputSchema",[369,492,456],{"class":379},[369,494,495],{"class":379}," {\n",[369,497,499,502,504,506,509,512,515,517,520,522,524,527,529,532],{"class":371,"line":498},8,[369,500,501],{"class":452},"    message",[369,503,456],{"class":379},[369,505,384],{"class":383},[369,507,508],{"class":379},".",[369,510,511],{"class":440},"string",[369,513,514],{"class":383},"()",[369,516,508],{"class":379},[369,518,519],{"class":440},"describe",[369,521,443],{"class":383},[369,523,464],{"class":379},[369,525,526],{"class":396},"The message to echo back",[369,528,464],{"class":379},[369,530,531],{"class":383},")",[369,533,467],{"class":379},[369,535,537],{"class":371,"line":536},9,[369,538,539],{"class":379},"  },\n",[369,541,543,546,548,552,555,559,562,565,568,571,574,577,580],{"class":371,"line":542},10,[369,544,545],{"class":440},"  handler",[369,547,456],{"class":379},[369,549,551],{"class":550},"spNyl"," async",[369,553,554],{"class":379}," ({",[369,556,558],{"class":557},"sHdIc"," message",[369,560,561],{"class":379}," })",[369,563,564],{"class":550}," =>",[369,566,567],{"class":379}," `",[369,569,570],{"class":396},"Echo: ",[369,572,573],{"class":379},"${",[369,575,576],{"class":383},"message",[369,578,579],{"class":379},"}`",[369,581,467],{"class":379},[369,583,585,588],{"class":371,"line":584},11,[369,586,587],{"class":379},"}",[369,589,590],{"class":383},")\n",[293,592,594],{"id":593},"auto-generated-name-and-title","Auto-Generated Name and Title",[298,596,597,598,601,602,605],{},"You can omit ",[323,599,600],{},"name"," and ",[323,603,604],{},"title"," - they will be automatically generated from the filename:",[359,607,610],{"className":361,"code":608,"filename":609,"language":364,"meta":365,"style":365},"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",[323,611,612,630,634,646,652,657,662,677,692,697,701],{"__ignoreMap":365},[369,613,614,616,618,620,622,624,626,628],{"class":371,"line":372},[369,615,376],{"class":375},[369,617,380],{"class":379},[369,619,410],{"class":383},[369,621,387],{"class":379},[369,623,390],{"class":375},[369,625,393],{"class":379},[369,627,419],{"class":396},[369,629,400],{"class":379},[369,631,632],{"class":371,"line":403},[369,633,428],{"emptyLinePlaceholder":427},[369,635,636,638,640,642,644],{"class":371,"line":424},[369,637,434],{"class":375},[369,639,437],{"class":375},[369,641,410],{"class":440},[369,643,443],{"class":383},[369,645,446],{"class":379},[369,647,648],{"class":371,"line":431},[369,649,651],{"class":650},"sHwdD","  \u002F\u002F name and title are auto-generated from filename:\n",[369,653,654],{"class":371,"line":449},[369,655,656],{"class":650},"  \u002F\u002F name: 'list-documentation'\n",[369,658,659],{"class":371,"line":470},[369,660,661],{"class":650},"  \u002F\u002F title: 'List Documentation'\n",[369,663,664,666,668,670,673,675],{"class":371,"line":487},[369,665,473],{"class":452},[369,667,456],{"class":379},[369,669,393],{"class":379},[369,671,672],{"class":396},"List all documentation files",[369,674,464],{"class":379},[369,676,467],{"class":379},[369,678,679,681,683,685,688,690],{"class":371,"line":498},[369,680,545],{"class":440},[369,682,456],{"class":379},[369,684,551],{"class":550},[369,686,687],{"class":379}," ()",[369,689,564],{"class":550},[369,691,495],{"class":379},[369,693,694],{"class":371,"line":536},[369,695,696],{"class":650},"    \u002F\u002F ...\n",[369,698,699],{"class":371,"line":542},[369,700,539],{"class":379},[369,702,703,705],{"class":371,"line":584},[369,704,587],{"class":379},[369,706,590],{"class":383},[298,708,709,710,713],{},"The filename ",[323,711,712],{},"list-documentation.ts"," automatically becomes:",[310,715,716,725],{},[313,717,718,720,721,724],{},[323,719,600],{},": ",[323,722,723],{},"list-documentation"," (kebab-case)",[313,726,727,720,729,732],{},[323,728,604],{},[323,730,731],{},"List Documentation"," (title case)",[298,734,735,736,738,739,741],{},"You can still provide ",[323,737,600],{}," or ",[323,740,604],{}," explicitly to override the auto-generated values.",[293,743,745],{"id":744},"tool-structure","Tool Structure",[298,747,748],{},"A tool definition consists of:",[750,751,752,851],"code-group",{},[359,753,756],{"className":361,"code":754,"filename":755,"language":364,"meta":365,"style":365},"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",[323,757,758,770,789,806,826,841,845],{"__ignoreMap":365},[369,759,760,762,764,766,768],{"class":371,"line":372},[369,761,434],{"class":375},[369,763,437],{"class":375},[369,765,410],{"class":440},[369,767,443],{"class":383},[369,769,446],{"class":379},[369,771,772,774,776,778,781,783,786],{"class":371,"line":403},[369,773,453],{"class":452},[369,775,456],{"class":379},[369,777,393],{"class":379},[369,779,780],{"class":396},"tool-name",[369,782,464],{"class":379},[369,784,785],{"class":379},",",[369,787,788],{"class":650},"        \u002F\u002F Unique identifier (optional - auto-generated from filename)\n",[369,790,791,793,795,797,800,803],{"class":371,"line":424},[369,792,490],{"class":452},[369,794,456],{"class":379},[369,796,380],{"class":379},[369,798,799],{"class":379}," ...",[369,801,802],{"class":379}," },",[369,804,805],{"class":650},"      \u002F\u002F Zod schema for input validation\n",[369,807,808,810,812,814,817,820,822,824],{"class":371,"line":431},[369,809,545],{"class":440},[369,811,456],{"class":379},[369,813,551],{"class":550},[369,815,816],{"class":379}," (",[369,818,819],{"class":557},"args",[369,821,531],{"class":379},[369,823,564],{"class":550},[369,825,495],{"class":379},[369,827,828,831,833,836,838],{"class":371,"line":449},[369,829,830],{"class":375},"    return",[369,832,393],{"class":379},[369,834,835],{"class":396},"result",[369,837,464],{"class":379},[369,839,840],{"class":650},"          \u002F\u002F string, number, boolean, object, or CallToolResult\n",[369,842,843],{"class":371,"line":470},[369,844,539],{"class":379},[369,846,847,849],{"class":371,"line":487},[369,848,587],{"class":379},[369,850,590],{"class":383},[359,852,855],{"className":361,"code":853,"filename":854,"language":364,"meta":365,"style":365},"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",[323,856,857,869,886,905,923,938,954,970,995,1018],{"__ignoreMap":365},[369,858,859,861,863,865,867],{"class":371,"line":372},[369,860,434],{"class":375},[369,862,437],{"class":375},[369,864,410],{"class":440},[369,866,443],{"class":383},[369,868,446],{"class":379},[369,870,871,873,875,877,879,881,883],{"class":371,"line":403},[369,872,453],{"class":452},[369,874,456],{"class":379},[369,876,393],{"class":379},[369,878,780],{"class":396},[369,880,464],{"class":379},[369,882,785],{"class":379},[369,884,885],{"class":650},"              \u002F\u002F Optional - auto-generated from filename\n",[369,887,888,891,893,895,898,900,902],{"class":371,"line":424},[369,889,890],{"class":452},"  title",[369,892,456],{"class":379},[369,894,393],{"class":379},[369,896,897],{"class":396},"Tool Title",[369,899,464],{"class":379},[369,901,785],{"class":379},[369,903,904],{"class":650},"            \u002F\u002F Optional - auto-generated from filename\n",[369,906,907,909,911,913,916,918,920],{"class":371,"line":431},[369,908,473],{"class":452},[369,910,456],{"class":379},[369,912,393],{"class":379},[369,914,915],{"class":396},"Tool description",[369,917,464],{"class":379},[369,919,785],{"class":379},[369,921,922],{"class":650},"  \u002F\u002F What the tool does\n",[369,924,925,927,929,931,933,935],{"class":371,"line":449},[369,926,490],{"class":452},[369,928,456],{"class":379},[369,930,380],{"class":379},[369,932,799],{"class":379},[369,934,802],{"class":379},[369,936,937],{"class":650},"            \u002F\u002F Optional - Zod schema for input validation\n",[369,939,940,943,945,947,949,951],{"class":371,"line":470},[369,941,942],{"class":452},"  outputSchema",[369,944,456],{"class":379},[369,946,380],{"class":379},[369,948,799],{"class":379},[369,950,802],{"class":379},[369,952,953],{"class":650},"            \u002F\u002F Zod schema for structured output\n",[369,955,956,959,961,963,965,967],{"class":371,"line":487},[369,957,958],{"class":452},"  annotations",[369,960,456],{"class":379},[369,962,380],{"class":379},[369,964,799],{"class":379},[369,966,802],{"class":379},[369,968,969],{"class":650},"             \u002F\u002F Behavioral hints for clients\n",[369,971,972,975,977,980,983,985,987,990,992],{"class":371,"line":498},[369,973,974],{"class":452},"  inputExamples",[369,976,456],{"class":379},[369,978,979],{"class":383}," [",[369,981,982],{"class":379},"{",[369,984,799],{"class":379},[369,986,387],{"class":379},[369,988,989],{"class":383},"]",[369,991,785],{"class":379},[369,993,994],{"class":650},"         \u002F\u002F Concrete usage examples\n",[369,996,997,999,1001,1003,1005,1007,1009,1011,1013,1015],{"class":371,"line":536},[369,998,545],{"class":440},[369,1000,456],{"class":379},[369,1002,551],{"class":550},[369,1004,816],{"class":379},[369,1006,819],{"class":557},[369,1008,531],{"class":379},[369,1010,564],{"class":550},[369,1012,380],{"class":379},[369,1014,799],{"class":379},[369,1016,1017],{"class":379}," },\n",[369,1019,1020,1022],{"class":371,"line":542},[369,1021,587],{"class":379},[369,1023,590],{"class":383},[293,1025,1027],{"id":1026},"going-further","Going further",[298,1029,1030],{},"Once you've authored a few tools, branch out:",[1032,1033,1034,1044,1052,1057],"card-group",{},[1035,1036,1039,1040,1043],"card",{"color":1037,"icon":272,"title":1038,"to":270},"neutral","Integrate external APIs","Call third-party services, use ",[323,1041,1042],{},"useEvent()",", and cache responses with Nitro.",[1035,1045,1047,1048,1051],{"color":1037,"icon":267,"title":1046,"to":265},"Authenticate clients","Bearer tokens, Better Auth API keys, and per-tool ",[323,1049,1050],{},"enabled"," guards.",[1035,1053,1056],{"color":1037,"icon":1054,"title":1055,"to":250},"i-lucide-terminal","Use Code Mode","Let the LLM orchestrate multiple tool calls in a single sandboxed JS execution.",[1035,1058,1059,1060,1063],{"color":1037,"icon":155,"title":152,"to":153},"Attribute tools to dedicated MCP routes via the ",[323,1061,1062],{},"handlers\u002F\u003Cname>\u002F"," folder convention.",[1065,1066,1067],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":365,"searchDepth":403,"depth":403,"links":1069},[1070,1071,1072,1073,1074],{"id":295,"depth":403,"text":296},{"id":353,"depth":403,"text":354},{"id":593,"depth":403,"text":594},{"id":744,"depth":403,"text":745},{"id":1026,"depth":403,"text":1027},"Create MCP tools with Zod validation and type safety.","md",[1078,1081,1083,1084],{"label":1079,"icon":54,"to":52,"color":1037,"variant":1080},"Schema & handler","subtle",{"label":1082,"icon":59,"to":57,"color":1037,"variant":1080},"Annotations",{"label":61,"icon":64,"to":62,"color":1037,"variant":1080},{"label":1085,"icon":69,"to":67,"color":1037,"variant":1080},"Groups & advanced",{},{"title":46,"icon":49},{"title":41,"description":1089},"Create MCP tools with Zod validation and full TypeScript support.","XhAwUJfu8QwkeApR9NEJfABOqLPpn8FUvdftNaC7HK4",[1092,1094],{"title":35,"path":36,"stem":37,"description":1093,"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":1095,"icon":54,"children":-1},"Define tool inputs and outputs with Zod, and return text, structured data, or media from handlers.",1787670838613]