[{"data":1,"prerenderedAt":1425},["ShallowReactive",2],{"navigation_docs":3,"-tools-groups-organization":272,"-tools-groups-organization-surround":1420},[4,40,70,99,122,151,184,243],{"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},"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],{"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,"children":155,"page":39},"Apps","\u002Fapps","6.apps",[156,160,165,170,174,179],{"title":46,"path":157,"stem":158,"icon":159},"\u002Fapps\u002Foverview","6.apps\u002F0.overview","i-lucide-app-window",{"title":161,"path":162,"stem":163,"icon":164},"Authoring & defineMcpApp","\u002Fapps\u002Fauthoring","6.apps\u002F1.authoring","i-lucide-code-2",{"title":166,"path":167,"stem":168,"icon":169},"useMcpApp() bridge","\u002Fapps\u002Fuse-mcp-app","6.apps\u002F2.use-mcp-app","i-lucide-message-circle",{"title":171,"path":172,"stem":173,"icon":64},"CSP & build pipeline","\u002Fapps\u002Fcsp-and-wiring","6.apps\u002F3.csp-and-wiring",{"title":175,"path":176,"stem":177,"icon":178},"Testing & publishing","\u002Fapps\u002Ftesting-publishing","6.apps\u002F4.testing-publishing","i-lucide-rocket",{"title":180,"path":181,"stem":182,"icon":183},"Patterns & limits","\u002Fapps\u002Fpatterns-reference","6.apps\u002F5.patterns-reference","i-lucide-book-marked",{"title":185,"path":186,"stem":187,"children":188,"page":39},"Advanced Topics","\u002Fadvanced","7.advanced",[189,194,199,204,208,213,218,223,228,233,238],{"title":190,"path":191,"stem":192,"icon":193},"Custom Paths","\u002Fadvanced\u002Fcustom-paths","7.advanced\u002F1.custom-paths","i-lucide-folder",{"title":195,"path":196,"stem":197,"icon":198},"Logging","\u002Fadvanced\u002Flogging","7.advanced\u002F10.logging","i-lucide-scroll-text",{"title":200,"path":201,"stem":202,"icon":203},"MCP Apps Internals","\u002Fadvanced\u002Fmcp-apps-internals","7.advanced\u002F11.mcp-apps-internals","i-lucide-cog",{"title":205,"path":206,"stem":207,"icon":64},"Middleware","\u002Fadvanced\u002Fmiddleware","7.advanced\u002F2.middleware",{"title":209,"path":210,"stem":211,"icon":212},"TypeScript","\u002Fadvanced\u002Ftypescript","7.advanced\u002F3.typescript","i-lucide-type",{"title":214,"path":215,"stem":216,"icon":217},"Hooks","\u002Fadvanced\u002Fhooks","7.advanced\u002F4.hooks","i-lucide-webhook",{"title":219,"path":220,"stem":221,"icon":222},"MCP Evals","\u002Fadvanced\u002Fevals","7.advanced\u002F5.evals","i-lucide-flask-conical",{"title":224,"path":225,"stem":226,"icon":227},"Sessions","\u002Fadvanced\u002Fsessions","7.advanced\u002F6.sessions","i-lucide-database",{"title":229,"path":230,"stem":231,"icon":232},"Dynamic Definitions","\u002Fadvanced\u002Fdynamic-definitions","7.advanced\u002F7.dynamic-definitions","i-lucide-toggle-right",{"title":234,"path":235,"stem":236,"icon":237},"Code Mode","\u002Fadvanced\u002Fcode-mode","7.advanced\u002F8.code-mode","i-lucide-code",{"title":239,"path":240,"stem":241,"icon":242},"Elicitation","\u002Fadvanced\u002Felicitation","7.advanced\u002F9.elicitation","i-lucide-message-square-quote",{"title":244,"path":245,"stem":246,"children":247,"page":39},"Examples","\u002Fexamples","8.examples",[248,253,258,263,268],{"title":249,"path":250,"stem":251,"icon":252},"Authentication","\u002Fexamples\u002Fauthentication","8.examples\u002F1.authentication","i-lucide-shield-check",{"title":254,"path":255,"stem":256,"icon":257},"API Integration","\u002Fexamples\u002Fapi-integration","8.examples\u002F2.api-integration","i-lucide-globe",{"title":259,"path":260,"stem":261,"icon":262},"Common Patterns","\u002Fexamples\u002Fcommon-patterns","8.examples\u002F3.common-patterns","i-lucide-lightbulb",{"title":264,"path":265,"stem":266,"icon":267},"File Operations","\u002Fexamples\u002Ffile-operations","8.examples\u002F4.file-operations","i-lucide-file",{"title":269,"path":270,"stem":271,"icon":107},"Prompt Examples","\u002Fexamples\u002Fprompt-examples","8.examples\u002F5.prompt-examples",{"id":273,"title":66,"body":274,"description":1411,"extension":1412,"links":1413,"meta":1414,"navigation":1415,"path":67,"seo":1416,"stem":68,"__hash__":1419},"docs\u002F2.tools\u002F4.groups-organization.md",{"type":275,"value":276,"toc":1397},"minimark",[277,282,287,291,647,651,674,678,686,870,874,877,885,891,895,905,1010,1013,1043,1047,1054,1060,1066,1070,1073,1184,1188,1195,1335,1348,1355,1359,1393],[278,279,281],"h2",{"id":280},"advanced-examples","Advanced Examples",[283,284,286],"h3",{"id":285},"tool-with-api-integration","Tool with API Integration",[288,289,290],"p",{},"Here's an example showing a typical API-backed tool:",[292,293,299],"pre",{"className":294,"code":295,"filename":296,"language":297,"meta":298,"style":298},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { z } from 'zod'\nimport { createError } from 'h3'\nimport { defineMcpTool } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpTool({\n  name: 'get-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","typescript","",[300,301,302,335,355,376,383,401,422,439,450,488,494,521,559,626,635,640],"code",{"__ignoreMap":298},[303,304,307,311,315,319,322,325,328,332],"span",{"class":305,"line":306},"line",1,[303,308,310],{"class":309},"s7zQu","import",[303,312,314],{"class":313},"sMK4o"," {",[303,316,318],{"class":317},"sTEyZ"," z",[303,320,321],{"class":313}," }",[303,323,324],{"class":309}," from",[303,326,327],{"class":313}," '",[303,329,331],{"class":330},"sfazB","zod",[303,333,334],{"class":313},"'\n",[303,336,338,340,342,345,347,349,351,353],{"class":305,"line":337},2,[303,339,310],{"class":309},[303,341,314],{"class":313},[303,343,344],{"class":317}," createError",[303,346,321],{"class":313},[303,348,324],{"class":309},[303,350,327],{"class":313},[303,352,283],{"class":330},[303,354,334],{"class":313},[303,356,358,360,362,365,367,369,371,374],{"class":305,"line":357},3,[303,359,310],{"class":309},[303,361,314],{"class":313},[303,363,364],{"class":317}," defineMcpTool",[303,366,321],{"class":313},[303,368,324],{"class":309},[303,370,327],{"class":313},[303,372,373],{"class":330},"@nuxtjs\u002Fmcp-toolkit\u002Fserver",[303,375,334],{"class":313},[303,377,379],{"class":305,"line":378},4,[303,380,382],{"emptyLinePlaceholder":381},true,"\n",[303,384,386,389,392,395,398],{"class":305,"line":385},5,[303,387,388],{"class":309},"export",[303,390,391],{"class":309}," default",[303,393,364],{"class":394},"s2Zo4",[303,396,397],{"class":317},"(",[303,399,400],{"class":313},"{\n",[303,402,404,408,411,413,416,419],{"class":305,"line":403},6,[303,405,407],{"class":406},"swJcz","  name",[303,409,410],{"class":313},":",[303,412,327],{"class":313},[303,414,415],{"class":330},"get-weather",[303,417,418],{"class":313},"'",[303,420,421],{"class":313},",\n",[303,423,425,428,430,432,435,437],{"class":305,"line":424},7,[303,426,427],{"class":406},"  description",[303,429,410],{"class":313},[303,431,327],{"class":313},[303,433,434],{"class":330},"Get current weather for a city",[303,436,418],{"class":313},[303,438,421],{"class":313},[303,440,442,445,447],{"class":305,"line":441},8,[303,443,444],{"class":406},"  inputSchema",[303,446,410],{"class":313},[303,448,449],{"class":313}," {\n",[303,451,453,456,458,460,463,466,469,471,474,476,478,481,483,486],{"class":305,"line":452},9,[303,454,455],{"class":406},"    city",[303,457,410],{"class":313},[303,459,318],{"class":317},[303,461,462],{"class":313},".",[303,464,465],{"class":394},"string",[303,467,468],{"class":317},"()",[303,470,462],{"class":313},[303,472,473],{"class":394},"describe",[303,475,397],{"class":317},[303,477,418],{"class":313},[303,479,480],{"class":330},"City name",[303,482,418],{"class":313},[303,484,485],{"class":317},")",[303,487,421],{"class":313},[303,489,491],{"class":305,"line":490},10,[303,492,493],{"class":313},"  },\n",[303,495,497,500,502,506,509,513,516,519],{"class":305,"line":496},11,[303,498,499],{"class":394},"  handler",[303,501,410],{"class":313},[303,503,505],{"class":504},"spNyl"," async",[303,507,508],{"class":313}," ({",[303,510,512],{"class":511},"sHdIc"," city",[303,514,515],{"class":313}," })",[303,517,518],{"class":504}," =>",[303,520,449],{"class":313},[303,522,524,527,530,533,536,539,541,544,547,550,553,556],{"class":305,"line":523},12,[303,525,526],{"class":504},"    const",[303,528,529],{"class":317}," data",[303,531,532],{"class":313}," =",[303,534,535],{"class":309}," await",[303,537,538],{"class":394}," $fetch",[303,540,397],{"class":406},[303,542,543],{"class":313},"`",[303,545,546],{"class":330},"\u002Fapi\u002Fweather\u002F",[303,548,549],{"class":313},"${",[303,551,552],{"class":317},"city",[303,554,555],{"class":313},"}`",[303,557,558],{"class":406},")\n",[303,560,562,565,568,571,574,577,580,582,584,587,590,592,596,599,602,604,607,610,612,614,617,620,622,624],{"class":305,"line":561},13,[303,563,564],{"class":309},"    if",[303,566,567],{"class":406}," (",[303,569,570],{"class":313},"!",[303,572,573],{"class":317},"data",[303,575,576],{"class":406},") ",[303,578,579],{"class":309},"throw",[303,581,344],{"class":394},[303,583,397],{"class":406},[303,585,586],{"class":313},"{",[303,588,589],{"class":406}," statusCode",[303,591,410],{"class":313},[303,593,595],{"class":594},"sbssI"," 404",[303,597,598],{"class":313},",",[303,600,601],{"class":406}," message",[303,603,410],{"class":313},[303,605,606],{"class":313}," `",[303,608,609],{"class":330},"City \"",[303,611,549],{"class":313},[303,613,552],{"class":317},[303,615,616],{"class":313},"}",[303,618,619],{"class":330},"\" not found",[303,621,543],{"class":313},[303,623,321],{"class":313},[303,625,558],{"class":406},[303,627,629,632],{"class":305,"line":628},14,[303,630,631],{"class":309},"    return",[303,633,634],{"class":317}," data\n",[303,636,638],{"class":305,"line":637},15,[303,639,493],{"class":313},[303,641,643,645],{"class":305,"line":642},16,[303,644,616],{"class":313},[303,646,558],{"class":317},[278,648,650],{"id":649},"groups-and-tags","Groups and Tags",[288,652,653,654,657,658,661,662,665,666,673],{},"Organize your tools with ",[300,655,656],{},"group"," and ",[300,659,660],{},"tags"," for filtering and progressive discovery. Groups and tags are exposed in ",[300,663,664],{},"_meta"," and will map to ",[667,668,672],"a",{"href":669,"rel":670},"https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fmodelcontextprotocol\u002Fissues\u002F1300",[671],"nofollow","SEP-1300"," when adopted.",[283,675,677],{"id":676},"explicit-group-and-tags","Explicit Group and Tags",[288,679,680,681,657,683,685],{},"Set ",[300,682,656],{},[300,684,660],{}," directly on the definition:",[292,687,690],{"className":294,"code":688,"filename":689,"language":297,"meta":298,"style":298},"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","server\u002Fmcp\u002Ftools\u002Fdelete-user.ts",[300,691,692,710,728,732,744,760,791,806,814,831,835,854,860,864],{"__ignoreMap":298},[303,693,694,696,698,700,702,704,706,708],{"class":305,"line":306},[303,695,310],{"class":309},[303,697,314],{"class":313},[303,699,318],{"class":317},[303,701,321],{"class":313},[303,703,324],{"class":309},[303,705,327],{"class":313},[303,707,331],{"class":330},[303,709,334],{"class":313},[303,711,712,714,716,718,720,722,724,726],{"class":305,"line":337},[303,713,310],{"class":309},[303,715,314],{"class":313},[303,717,364],{"class":317},[303,719,321],{"class":313},[303,721,324],{"class":309},[303,723,327],{"class":313},[303,725,373],{"class":330},[303,727,334],{"class":313},[303,729,730],{"class":305,"line":357},[303,731,382],{"emptyLinePlaceholder":381},[303,733,734,736,738,740,742],{"class":305,"line":378},[303,735,388],{"class":309},[303,737,391],{"class":309},[303,739,364],{"class":394},[303,741,397],{"class":317},[303,743,400],{"class":313},[303,745,746,749,751,753,756,758],{"class":305,"line":385},[303,747,748],{"class":406},"  group",[303,750,410],{"class":313},[303,752,327],{"class":313},[303,754,755],{"class":330},"admin",[303,757,418],{"class":313},[303,759,421],{"class":313},[303,761,762,765,767,770,772,775,777,779,781,784,786,789],{"class":305,"line":403},[303,763,764],{"class":406},"  tags",[303,766,410],{"class":313},[303,768,769],{"class":317}," [",[303,771,418],{"class":313},[303,773,774],{"class":330},"destructive",[303,776,418],{"class":313},[303,778,598],{"class":313},[303,780,327],{"class":313},[303,782,783],{"class":330},"user-management",[303,785,418],{"class":313},[303,787,788],{"class":317},"]",[303,790,421],{"class":313},[303,792,793,795,797,799,802,804],{"class":305,"line":424},[303,794,427],{"class":406},[303,796,410],{"class":313},[303,798,327],{"class":313},[303,800,801],{"class":330},"Delete a user account",[303,803,418],{"class":313},[303,805,421],{"class":313},[303,807,808,810,812],{"class":305,"line":441},[303,809,444],{"class":406},[303,811,410],{"class":313},[303,813,449],{"class":313},[303,815,816,819,821,823,825,827,829],{"class":305,"line":452},[303,817,818],{"class":406},"    userId",[303,820,410],{"class":313},[303,822,318],{"class":317},[303,824,462],{"class":313},[303,826,465],{"class":394},[303,828,468],{"class":317},[303,830,421],{"class":313},[303,832,833],{"class":305,"line":490},[303,834,493],{"class":313},[303,836,837,839,841,843,845,848,850,852],{"class":305,"line":496},[303,838,499],{"class":394},[303,840,410],{"class":313},[303,842,505],{"class":504},[303,844,508],{"class":313},[303,846,847],{"class":511}," userId",[303,849,515],{"class":313},[303,851,518],{"class":504},[303,853,449],{"class":313},[303,855,856],{"class":305,"line":523},[303,857,859],{"class":858},"sHwdD","    \u002F\u002F ...\n",[303,861,862],{"class":305,"line":561},[303,863,493],{"class":313},[303,865,866,868],{"class":305,"line":628},[303,867,616],{"class":313},[303,869,558],{"class":317},[283,871,873],{"id":872},"auto-inferred-group-from-directory","Auto-Inferred Group from Directory",[288,875,876],{},"Place tools in subdirectories and the group is inferred automatically:",[292,878,883],{"className":879,"code":881,"language":882},[880],"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","text",[300,884,881],{"__ignoreMap":298},[288,886,887,888,890],{},"An explicit ",[300,889,656],{}," on the definition always takes precedence over the directory-inferred value.",[283,892,894],{"id":893},"how-clients-see-groups-and-tags","How Clients See Groups and Tags",[288,896,897,898,900,901,904],{},"Groups and tags are included in the ",[300,899,664],{}," field of ",[300,902,903],{},"tools\u002Flist"," responses:",[292,906,910],{"className":907,"code":908,"language":909,"meta":298,"style":298},"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",[300,911,912,916,939,951,971,1000,1005],{"__ignoreMap":298},[303,913,914],{"class":305,"line":306},[303,915,400],{"class":313},[303,917,918,921,924,927,929,932,935,937],{"class":305,"line":337},[303,919,920],{"class":313},"  \"",[303,922,923],{"class":504},"name",[303,925,926],{"class":313},"\"",[303,928,410],{"class":313},[303,930,931],{"class":313}," \"",[303,933,934],{"class":330},"delete-user",[303,936,926],{"class":313},[303,938,421],{"class":313},[303,940,941,943,945,947,949],{"class":305,"line":357},[303,942,920],{"class":313},[303,944,664],{"class":504},[303,946,926],{"class":313},[303,948,410],{"class":313},[303,950,449],{"class":313},[303,952,953,956,959,961,963,965,967,969],{"class":305,"line":378},[303,954,955],{"class":313},"    \"",[303,957,656],{"class":958},"sBMFI",[303,960,926],{"class":313},[303,962,410],{"class":313},[303,964,931],{"class":313},[303,966,755],{"class":330},[303,968,926],{"class":313},[303,970,421],{"class":313},[303,972,973,975,977,979,981,983,985,987,989,991,993,995,997],{"class":305,"line":385},[303,974,955],{"class":313},[303,976,660],{"class":958},[303,978,926],{"class":313},[303,980,410],{"class":313},[303,982,769],{"class":313},[303,984,926],{"class":313},[303,986,774],{"class":330},[303,988,926],{"class":313},[303,990,598],{"class":313},[303,992,931],{"class":313},[303,994,783],{"class":330},[303,996,926],{"class":313},[303,998,999],{"class":313},"]\n",[303,1001,1002],{"class":305,"line":403},[303,1003,1004],{"class":313},"  }\n",[303,1006,1007],{"class":305,"line":424},[303,1008,1009],{"class":313},"}\n",[288,1011,1012],{},"MCP clients can use these values to filter, sort, or group tools in their UI.",[1014,1015,1018,1019,657,1023,1026,1027,657,1029,1031,1032,1026,1035,1038,1039,1042],"callout",{"color":1016,"icon":1017},"info","i-lucide-info","For ",[1020,1021,1022],"strong",{},"resources",[1020,1024,1025],{},"prompts",", ",[300,1028,656],{},[300,1030,660],{}," are stored on the definition objects but are not yet exposed in protocol responses (",[300,1033,1034],{},"resources\u002Flist",[300,1036,1037],{},"prompts\u002Flist","). This will be supported when ",[667,1040,672],{"href":669,"rel":1041},[671]," is adopted by the MCP SDK.",[278,1044,1046],{"id":1045},"file-organization","File Organization",[288,1048,1049,1050,1053],{},"Organize your tools in the ",[300,1051,1052],{},"server\u002Fmcp\u002Ftools\u002F"," directory. Both flat and nested layouts are supported:",[292,1055,1058],{"className":1056,"code":1057,"language":882},[880],"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",[300,1059,1057],{"__ignoreMap":298},[288,1061,1062,1063,1065],{},"Each file should export a default tool definition. Subdirectories automatically set the ",[300,1064,656],{}," for all tools within them.",[278,1067,1069],{"id":1068},"type-safety","Type Safety",[288,1071,1072],{},"The module provides full TypeScript type inference:",[292,1074,1076],{"className":294,"code":1075,"language":297,"meta":298,"style":298},"\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",[300,1077,1078,1083,1102,1107,1111,1115,1120,1133,1142,1157,1176,1180],{"__ignoreMap":298},[303,1079,1080],{"class":305,"line":306},[303,1081,1082],{"class":858},"\u002F\u002F Input types are inferred from inputSchema\n",[303,1084,1085,1088,1090,1092,1094,1096,1098,1100],{"class":305,"line":337},[303,1086,1087],{"class":958},"handler",[303,1089,410],{"class":313},[303,1091,505],{"class":504},[303,1093,508],{"class":313},[303,1095,601],{"class":511},[303,1097,515],{"class":313},[303,1099,518],{"class":504},[303,1101,449],{"class":313},[303,1103,1104],{"class":305,"line":357},[303,1105,1106],{"class":858},"  \u002F\u002F message is typed as string\n",[303,1108,1109],{"class":305,"line":378},[303,1110,1009],{"class":313},[303,1112,1113],{"class":305,"line":385},[303,1114,382],{"emptyLinePlaceholder":381},[303,1116,1117],{"class":305,"line":403},[303,1118,1119],{"class":858},"\u002F\u002F Output types are inferred from outputSchema\n",[303,1121,1122,1125,1128,1131],{"class":305,"line":424},[303,1123,1124],{"class":504},"const",[303,1126,1127],{"class":317}," result ",[303,1129,1130],{"class":313},"=",[303,1132,449],{"class":313},[303,1134,1135,1138,1140],{"class":305,"line":441},[303,1136,1137],{"class":406},"  structuredContent",[303,1139,410],{"class":313},[303,1141,449],{"class":313},[303,1143,1144,1147,1149,1152,1154],{"class":305,"line":452},[303,1145,1146],{"class":406},"    bmi",[303,1148,410],{"class":313},[303,1150,1151],{"class":594}," 25.5",[303,1153,598],{"class":313},[303,1155,1156],{"class":858},"      \u002F\u002F number\n",[303,1158,1159,1162,1164,1166,1169,1171,1173],{"class":305,"line":490},[303,1160,1161],{"class":406},"    category",[303,1163,410],{"class":313},[303,1165,327],{"class":313},[303,1167,1168],{"class":330},"...",[303,1170,418],{"class":313},[303,1172,598],{"class":313},[303,1174,1175],{"class":858}," \u002F\u002F string\n",[303,1177,1178],{"class":305,"line":496},[303,1179,493],{"class":313},[303,1181,1182],{"class":305,"line":523},[303,1183,1009],{"class":313},[278,1185,1187],{"id":1186},"conditional-registration","Conditional Registration",[288,1189,1190,1191,1194],{},"You can control whether a tool is visible to clients using the ",[300,1192,1193],{},"enabled"," guard:",[292,1196,1199],{"className":294,"code":1197,"filename":1198,"language":297,"meta":298,"style":298},"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",[300,1200,1201,1219,1223,1235,1250,1265,1306,1321,1325,1329],{"__ignoreMap":298},[303,1202,1203,1205,1207,1209,1211,1213,1215,1217],{"class":305,"line":306},[303,1204,310],{"class":309},[303,1206,314],{"class":313},[303,1208,364],{"class":317},[303,1210,321],{"class":313},[303,1212,324],{"class":309},[303,1214,327],{"class":313},[303,1216,373],{"class":330},[303,1218,334],{"class":313},[303,1220,1221],{"class":305,"line":337},[303,1222,382],{"emptyLinePlaceholder":381},[303,1224,1225,1227,1229,1231,1233],{"class":305,"line":357},[303,1226,388],{"class":309},[303,1228,391],{"class":309},[303,1230,364],{"class":394},[303,1232,397],{"class":317},[303,1234,400],{"class":313},[303,1236,1237,1239,1241,1243,1246,1248],{"class":305,"line":378},[303,1238,407],{"class":406},[303,1240,410],{"class":313},[303,1242,327],{"class":313},[303,1244,1245],{"class":330},"admin-tool",[303,1247,418],{"class":313},[303,1249,421],{"class":313},[303,1251,1252,1254,1256,1258,1261,1263],{"class":305,"line":385},[303,1253,427],{"class":406},[303,1255,410],{"class":313},[303,1257,327],{"class":313},[303,1259,1260],{"class":330},"Admin-only tool",[303,1262,418],{"class":313},[303,1264,421],{"class":313},[303,1266,1267,1270,1272,1275,1277,1279,1281,1284,1286,1289,1292,1295,1298,1300,1302,1304],{"class":305,"line":403},[303,1268,1269],{"class":394},"  enabled",[303,1271,410],{"class":313},[303,1273,1274],{"class":511}," event",[303,1276,518],{"class":504},[303,1278,1274],{"class":317},[303,1280,462],{"class":313},[303,1282,1283],{"class":317},"context",[303,1285,462],{"class":313},[303,1287,1288],{"class":317},"user",[303,1290,1291],{"class":313},"?.",[303,1293,1294],{"class":317},"role ",[303,1296,1297],{"class":313},"===",[303,1299,327],{"class":313},[303,1301,755],{"class":330},[303,1303,418],{"class":313},[303,1305,421],{"class":313},[303,1307,1308,1310,1312,1314,1317,1319],{"class":305,"line":424},[303,1309,499],{"class":394},[303,1311,410],{"class":313},[303,1313,505],{"class":504},[303,1315,1316],{"class":313}," ()",[303,1318,518],{"class":504},[303,1320,449],{"class":313},[303,1322,1323],{"class":305,"line":441},[303,1324,859],{"class":858},[303,1326,1327],{"class":305,"line":452},[303,1328,493],{"class":313},[303,1330,1331,1333],{"class":305,"line":490},[303,1332,616],{"class":313},[303,1334,558],{"class":317},[288,1336,1337,1338,1340,1341,1344,1345,1347],{},"When ",[300,1339,1193],{}," returns ",[300,1342,1343],{},"false",", the tool is hidden from ",[300,1346,903],{}," and cannot be called.",[1014,1349,1351,1352,1354],{"color":1350,"icon":13},"primary","See the ",[667,1353,229],{"href":230}," guide for detailed documentation on auth-based filtering.",[278,1356,1358],{"id":1357},"next-steps","Next Steps",[1360,1361,1362,1368,1373,1378,1383,1388],"ul",{},[1363,1364,1365,1367],"li",{},[667,1366,71],{"href":76}," - Create resources to expose data",[1363,1369,1370,1372],{},[667,1371,100],{"href":105}," - Create reusable prompts",[1363,1374,1375,1377],{},[667,1376,123],{"href":128}," - Create custom MCP endpoints",[1363,1379,1380,1382],{},[667,1381,234],{"href":235}," - Let LLMs orchestrate tools with JavaScript",[1363,1384,1385,1387],{},[667,1386,229],{"href":230}," - Conditionally register definitions",[1363,1389,1390,1392],{},[667,1391,244],{"href":260}," - See more tool examples",[1394,1395,1396],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":298,"searchDepth":337,"depth":337,"links":1398},[1399,1402,1407,1408,1409,1410],{"id":280,"depth":337,"text":281,"children":1400},[1401],{"id":285,"depth":357,"text":286},{"id":649,"depth":337,"text":650,"children":1403},[1404,1405,1406],{"id":676,"depth":357,"text":677},{"id":872,"depth":357,"text":873},{"id":893,"depth":357,"text":894},{"id":1045,"depth":337,"text":1046},{"id":1068,"depth":337,"text":1069},{"id":1186,"depth":337,"text":1187},{"id":1357,"depth":337,"text":1358},"group and tags, directory layout, type safety, and enabled guards for tools.","md",null,{},{"icon":69},{"title":1417,"description":1418},"Tool groups, organization & dynamic registration","Groups, tags, file layout, conditional registration, and next steps for MCP tools.","AycnRmGz1n7K9n8fF-YCmra4bTW4ZjBeSnkIXYf7Eec",[1421,1423],{"title":61,"path":62,"stem":63,"description":1422,"icon":64,"children":-1},"H3 and plain errors in tool handlers, and Nitro-backed response caching.",{"title":46,"path":76,"stem":77,"description":1424,"icon":78,"children":-1},"Expose read-only data sources as MCP resources to provide context to AI models.",1777306539873]