[{"data":1,"prerenderedAt":1444},["ShallowReactive",2],{"navigation_docs":3,"-handlers-sharing-practices":287,"-handlers-sharing-practices-surround":1439},[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":147,"body":289,"description":1430,"extension":1431,"links":1432,"meta":1433,"navigation":1434,"path":148,"seo":1435,"stem":149,"__hash__":1438},"docs\u002F5.handlers\u002F4.sharing-practices.md",{"type":290,"value":291,"toc":1419},"minimark",[292,297,302,306,429,511,515,518,630,735,739,742,824,901,905,920,923,1107,1199,1288,1292,1298,1306,1331,1335,1370,1374,1415],[293,294,296],"h2",{"id":295},"use-cases","Use Cases",[298,299,301],"h3",{"id":300},"_1-feature-separation","1. Feature Separation",[303,304,305],"p",{},"Separate different features into different handlers:",[307,308,314],"pre",{"className":309,"code":310,"filename":311,"language":312,"meta":313,"style":313},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { defineMcpHandler } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpHandler({\n  name: 'users',\n  tools: [getUserTool, createUserTool, updateUserTool],\n})\n","server\u002Fmcp\u002Fuser-management.ts","typescript","",[315,316,317,350,357,375,396,420],"code",{"__ignoreMap":313},[318,319,322,326,330,334,337,340,343,347],"span",{"class":320,"line":321},"line",1,[318,323,325],{"class":324},"s7zQu","import",[318,327,329],{"class":328},"sMK4o"," {",[318,331,333],{"class":332},"sTEyZ"," defineMcpHandler",[318,335,336],{"class":328}," }",[318,338,339],{"class":324}," from",[318,341,342],{"class":328}," '",[318,344,346],{"class":345},"sfazB","@nuxtjs\u002Fmcp-toolkit\u002Fserver",[318,348,349],{"class":328},"'\n",[318,351,353],{"class":320,"line":352},2,[318,354,356],{"emptyLinePlaceholder":355},true,"\n",[318,358,360,363,366,369,372],{"class":320,"line":359},3,[318,361,362],{"class":324},"export",[318,364,365],{"class":324}," default",[318,367,333],{"class":368},"s2Zo4",[318,370,371],{"class":332},"(",[318,373,374],{"class":328},"{\n",[318,376,378,382,385,387,390,393],{"class":320,"line":377},4,[318,379,381],{"class":380},"swJcz","  name",[318,383,384],{"class":328},":",[318,386,342],{"class":328},[318,388,389],{"class":345},"users",[318,391,392],{"class":328},"'",[318,394,395],{"class":328},",\n",[318,397,399,402,404,407,410,413,415,418],{"class":320,"line":398},5,[318,400,401],{"class":380},"  tools",[318,403,384],{"class":328},[318,405,406],{"class":332}," [getUserTool",[318,408,409],{"class":328},",",[318,411,412],{"class":332}," createUserTool",[318,414,409],{"class":328},[318,416,417],{"class":332}," updateUserTool]",[318,419,395],{"class":328},[318,421,423,426],{"class":320,"line":422},6,[318,424,425],{"class":328},"}",[318,427,428],{"class":332},")\n",[307,430,433],{"className":309,"code":431,"filename":432,"language":312,"meta":313,"style":313},"import { defineMcpHandler } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpHandler({\n  name: 'content',\n  tools: [createPostTool, updatePostTool, deletePostTool],\n})\n","server\u002Fmcp\u002Fcontent-management.ts",[315,434,435,453,457,469,484,505],{"__ignoreMap":313},[318,436,437,439,441,443,445,447,449,451],{"class":320,"line":321},[318,438,325],{"class":324},[318,440,329],{"class":328},[318,442,333],{"class":332},[318,444,336],{"class":328},[318,446,339],{"class":324},[318,448,342],{"class":328},[318,450,346],{"class":345},[318,452,349],{"class":328},[318,454,455],{"class":320,"line":352},[318,456,356],{"emptyLinePlaceholder":355},[318,458,459,461,463,465,467],{"class":320,"line":359},[318,460,362],{"class":324},[318,462,365],{"class":324},[318,464,333],{"class":368},[318,466,371],{"class":332},[318,468,374],{"class":328},[318,470,471,473,475,477,480,482],{"class":320,"line":377},[318,472,381],{"class":380},[318,474,384],{"class":328},[318,476,342],{"class":328},[318,478,479],{"class":345},"content",[318,481,392],{"class":328},[318,483,395],{"class":328},[318,485,486,488,490,493,495,498,500,503],{"class":320,"line":398},[318,487,401],{"class":380},[318,489,384],{"class":328},[318,491,492],{"class":332}," [createPostTool",[318,494,409],{"class":328},[318,496,497],{"class":332}," updatePostTool",[318,499,409],{"class":328},[318,501,502],{"class":332}," deletePostTool]",[318,504,395],{"class":328},[318,506,507,509],{"class":320,"line":422},[318,508,425],{"class":328},[318,510,428],{"class":332},[298,512,514],{"id":513},"_2-versioned-apis","2. Versioned APIs",[303,516,517],{},"Create versioned handlers:",[307,519,522],{"className":309,"code":520,"filename":521,"language":312,"meta":313,"style":313},"import { defineMcpHandler } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpHandler({\n  name: 'api-v1',\n  version: '1.0.0',\n  route: '\u002Fapi\u002Fv1\u002Fmcp',\n  tools: [ ... ],\n})\n","server\u002Fmcp\u002Fapi-v1.ts",[315,523,524,542,546,558,573,589,605,623],{"__ignoreMap":313},[318,525,526,528,530,532,534,536,538,540],{"class":320,"line":321},[318,527,325],{"class":324},[318,529,329],{"class":328},[318,531,333],{"class":332},[318,533,336],{"class":328},[318,535,339],{"class":324},[318,537,342],{"class":328},[318,539,346],{"class":345},[318,541,349],{"class":328},[318,543,544],{"class":320,"line":352},[318,545,356],{"emptyLinePlaceholder":355},[318,547,548,550,552,554,556],{"class":320,"line":359},[318,549,362],{"class":324},[318,551,365],{"class":324},[318,553,333],{"class":368},[318,555,371],{"class":332},[318,557,374],{"class":328},[318,559,560,562,564,566,569,571],{"class":320,"line":377},[318,561,381],{"class":380},[318,563,384],{"class":328},[318,565,342],{"class":328},[318,567,568],{"class":345},"api-v1",[318,570,392],{"class":328},[318,572,395],{"class":328},[318,574,575,578,580,582,585,587],{"class":320,"line":398},[318,576,577],{"class":380},"  version",[318,579,384],{"class":328},[318,581,342],{"class":328},[318,583,584],{"class":345},"1.0.0",[318,586,392],{"class":328},[318,588,395],{"class":328},[318,590,591,594,596,598,601,603],{"class":320,"line":422},[318,592,593],{"class":380},"  route",[318,595,384],{"class":328},[318,597,342],{"class":328},[318,599,600],{"class":345},"\u002Fapi\u002Fv1\u002Fmcp",[318,602,392],{"class":328},[318,604,395],{"class":328},[318,606,608,610,612,615,618,621],{"class":320,"line":607},7,[318,609,401],{"class":380},[318,611,384],{"class":328},[318,613,614],{"class":332}," [ ",[318,616,617],{"class":328},"...",[318,619,620],{"class":332}," ]",[318,622,395],{"class":328},[318,624,626,628],{"class":320,"line":625},8,[318,627,425],{"class":328},[318,629,428],{"class":332},[307,631,634],{"className":309,"code":632,"filename":633,"language":312,"meta":313,"style":313},"import { defineMcpHandler } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpHandler({\n  name: 'api-v2',\n  version: '2.0.0',\n  route: '\u002Fapi\u002Fv2\u002Fmcp',\n  tools: [ ... ],\n})\n","server\u002Fmcp\u002Fapi-v2.ts",[315,635,636,654,658,670,685,700,715,729],{"__ignoreMap":313},[318,637,638,640,642,644,646,648,650,652],{"class":320,"line":321},[318,639,325],{"class":324},[318,641,329],{"class":328},[318,643,333],{"class":332},[318,645,336],{"class":328},[318,647,339],{"class":324},[318,649,342],{"class":328},[318,651,346],{"class":345},[318,653,349],{"class":328},[318,655,656],{"class":320,"line":352},[318,657,356],{"emptyLinePlaceholder":355},[318,659,660,662,664,666,668],{"class":320,"line":359},[318,661,362],{"class":324},[318,663,365],{"class":324},[318,665,333],{"class":368},[318,667,371],{"class":332},[318,669,374],{"class":328},[318,671,672,674,676,678,681,683],{"class":320,"line":377},[318,673,381],{"class":380},[318,675,384],{"class":328},[318,677,342],{"class":328},[318,679,680],{"class":345},"api-v2",[318,682,392],{"class":328},[318,684,395],{"class":328},[318,686,687,689,691,693,696,698],{"class":320,"line":398},[318,688,577],{"class":380},[318,690,384],{"class":328},[318,692,342],{"class":328},[318,694,695],{"class":345},"2.0.0",[318,697,392],{"class":328},[318,699,395],{"class":328},[318,701,702,704,706,708,711,713],{"class":320,"line":422},[318,703,593],{"class":380},[318,705,384],{"class":328},[318,707,342],{"class":328},[318,709,710],{"class":345},"\u002Fapi\u002Fv2\u002Fmcp",[318,712,392],{"class":328},[318,714,395],{"class":328},[318,716,717,719,721,723,725,727],{"class":320,"line":607},[318,718,401],{"class":380},[318,720,384],{"class":328},[318,722,614],{"class":332},[318,724,617],{"class":328},[318,726,620],{"class":332},[318,728,395],{"class":328},[318,730,731,733],{"class":320,"line":625},[318,732,425],{"class":328},[318,734,428],{"class":332},[298,736,738],{"id":737},"_3-domain-specific-handlers","3. Domain-Specific Handlers",[303,740,741],{},"Organize by domain:",[307,743,746],{"className":309,"code":744,"filename":745,"language":312,"meta":313,"style":313},"import { defineMcpHandler } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpHandler({\n  name: 'ecommerce',\n  tools: [addToCartTool, checkoutTool, getProductsTool],\n})\n","server\u002Fmcp\u002Fecommerce.ts",[315,747,748,766,770,782,797,818],{"__ignoreMap":313},[318,749,750,752,754,756,758,760,762,764],{"class":320,"line":321},[318,751,325],{"class":324},[318,753,329],{"class":328},[318,755,333],{"class":332},[318,757,336],{"class":328},[318,759,339],{"class":324},[318,761,342],{"class":328},[318,763,346],{"class":345},[318,765,349],{"class":328},[318,767,768],{"class":320,"line":352},[318,769,356],{"emptyLinePlaceholder":355},[318,771,772,774,776,778,780],{"class":320,"line":359},[318,773,362],{"class":324},[318,775,365],{"class":324},[318,777,333],{"class":368},[318,779,371],{"class":332},[318,781,374],{"class":328},[318,783,784,786,788,790,793,795],{"class":320,"line":377},[318,785,381],{"class":380},[318,787,384],{"class":328},[318,789,342],{"class":328},[318,791,792],{"class":345},"ecommerce",[318,794,392],{"class":328},[318,796,395],{"class":328},[318,798,799,801,803,806,808,811,813,816],{"class":320,"line":398},[318,800,401],{"class":380},[318,802,384],{"class":328},[318,804,805],{"class":332}," [addToCartTool",[318,807,409],{"class":328},[318,809,810],{"class":332}," checkoutTool",[318,812,409],{"class":328},[318,814,815],{"class":332}," getProductsTool]",[318,817,395],{"class":328},[318,819,820,822],{"class":320,"line":422},[318,821,425],{"class":328},[318,823,428],{"class":332},[307,825,828],{"className":309,"code":826,"filename":827,"language":312,"meta":313,"style":313},"import { defineMcpHandler } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpHandler({\n  name: 'analytics',\n  tools: [getStatsTool, generateReportTool],\n})\n","server\u002Fmcp\u002Fanalytics.ts",[315,829,830,848,852,864,879,895],{"__ignoreMap":313},[318,831,832,834,836,838,840,842,844,846],{"class":320,"line":321},[318,833,325],{"class":324},[318,835,329],{"class":328},[318,837,333],{"class":332},[318,839,336],{"class":328},[318,841,339],{"class":324},[318,843,342],{"class":328},[318,845,346],{"class":345},[318,847,349],{"class":328},[318,849,850],{"class":320,"line":352},[318,851,356],{"emptyLinePlaceholder":355},[318,853,854,856,858,860,862],{"class":320,"line":359},[318,855,362],{"class":324},[318,857,365],{"class":324},[318,859,333],{"class":368},[318,861,371],{"class":332},[318,863,374],{"class":328},[318,865,866,868,870,872,875,877],{"class":320,"line":377},[318,867,381],{"class":380},[318,869,384],{"class":328},[318,871,342],{"class":328},[318,873,874],{"class":345},"analytics",[318,876,392],{"class":328},[318,878,395],{"class":328},[318,880,881,883,885,888,890,893],{"class":320,"line":398},[318,882,401],{"class":380},[318,884,384],{"class":328},[318,886,887],{"class":332}," [getStatsTool",[318,889,409],{"class":328},[318,891,892],{"class":332}," generateReportTool]",[318,894,395],{"class":328},[318,896,897,899],{"class":320,"line":422},[318,898,425],{"class":328},[318,900,428],{"class":332},[293,902,904],{"id":903},"sharing-tools-between-handlers","Sharing Tools Between Handlers",[906,907,910,911,915,916,919],"callout",{"color":908,"icon":909},"primary","i-lucide-arrow-right","Prefer the ",[912,913,914],"a",{"href":153},"multi-handler organization"," features (folder convention plus the ",[315,917,918],{},"getMcp*"," function form) for any new handler. The patterns below remain fully supported for explicit, hand-built handler configs.",[303,921,922],{},"You can share tool definitions between handlers by exporting them from a separate file:",[307,924,927],{"className":309,"code":925,"filename":926,"language":312,"meta":313,"style":313},"import { z } from 'zod'\nimport { defineMcpTool } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport const sharedTool = defineMcpTool({\n  name: 'shared-tool',\n  description: 'A shared tool',\n  inputSchema: {\n    input: z.string(),\n  },\n  handler: async ({ input }) => `Shared: ${input}`,\n})\n","server\u002Fmcp\u002Fshared-tools.ts",[315,928,929,949,968,972,992,1007,1023,1033,1053,1059,1100],{"__ignoreMap":313},[318,930,931,933,935,938,940,942,944,947],{"class":320,"line":321},[318,932,325],{"class":324},[318,934,329],{"class":328},[318,936,937],{"class":332}," z",[318,939,336],{"class":328},[318,941,339],{"class":324},[318,943,342],{"class":328},[318,945,946],{"class":345},"zod",[318,948,349],{"class":328},[318,950,951,953,955,958,960,962,964,966],{"class":320,"line":352},[318,952,325],{"class":324},[318,954,329],{"class":328},[318,956,957],{"class":332}," defineMcpTool",[318,959,336],{"class":328},[318,961,339],{"class":324},[318,963,342],{"class":328},[318,965,346],{"class":345},[318,967,349],{"class":328},[318,969,970],{"class":320,"line":359},[318,971,356],{"emptyLinePlaceholder":355},[318,973,974,976,980,983,986,988,990],{"class":320,"line":377},[318,975,362],{"class":324},[318,977,979],{"class":978},"spNyl"," const",[318,981,982],{"class":332}," sharedTool ",[318,984,985],{"class":328},"=",[318,987,957],{"class":368},[318,989,371],{"class":332},[318,991,374],{"class":328},[318,993,994,996,998,1000,1003,1005],{"class":320,"line":398},[318,995,381],{"class":380},[318,997,384],{"class":328},[318,999,342],{"class":328},[318,1001,1002],{"class":345},"shared-tool",[318,1004,392],{"class":328},[318,1006,395],{"class":328},[318,1008,1009,1012,1014,1016,1019,1021],{"class":320,"line":422},[318,1010,1011],{"class":380},"  description",[318,1013,384],{"class":328},[318,1015,342],{"class":328},[318,1017,1018],{"class":345},"A shared tool",[318,1020,392],{"class":328},[318,1022,395],{"class":328},[318,1024,1025,1028,1030],{"class":320,"line":607},[318,1026,1027],{"class":380},"  inputSchema",[318,1029,384],{"class":328},[318,1031,1032],{"class":328}," {\n",[318,1034,1035,1038,1040,1042,1045,1048,1051],{"class":320,"line":625},[318,1036,1037],{"class":380},"    input",[318,1039,384],{"class":328},[318,1041,937],{"class":332},[318,1043,1044],{"class":328},".",[318,1046,1047],{"class":368},"string",[318,1049,1050],{"class":332},"()",[318,1052,395],{"class":328},[318,1054,1056],{"class":320,"line":1055},9,[318,1057,1058],{"class":328},"  },\n",[318,1060,1062,1065,1067,1070,1073,1077,1080,1083,1086,1089,1092,1095,1098],{"class":320,"line":1061},10,[318,1063,1064],{"class":368},"  handler",[318,1066,384],{"class":328},[318,1068,1069],{"class":978}," async",[318,1071,1072],{"class":328}," ({",[318,1074,1076],{"class":1075},"sHdIc"," input",[318,1078,1079],{"class":328}," })",[318,1081,1082],{"class":978}," =>",[318,1084,1085],{"class":328}," `",[318,1087,1088],{"class":345},"Shared: ",[318,1090,1091],{"class":328},"${",[318,1093,1094],{"class":332},"input",[318,1096,1097],{"class":328},"}`",[318,1099,395],{"class":328},[318,1101,1103,1105],{"class":320,"line":1102},11,[318,1104,425],{"class":328},[318,1106,428],{"class":332},[307,1108,1111],{"className":309,"code":1109,"filename":1110,"language":312,"meta":313,"style":313},"import { sharedTool } from '.\u002Fshared-tools'\nimport { defineMcpHandler } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpHandler({\n  name: 'handler1',\n  tools: [sharedTool],\n})\n","server\u002Fmcp\u002Fhandler1.ts",[315,1112,1113,1133,1151,1155,1167,1182,1193],{"__ignoreMap":313},[318,1114,1115,1117,1119,1122,1124,1126,1128,1131],{"class":320,"line":321},[318,1116,325],{"class":324},[318,1118,329],{"class":328},[318,1120,1121],{"class":332}," sharedTool",[318,1123,336],{"class":328},[318,1125,339],{"class":324},[318,1127,342],{"class":328},[318,1129,1130],{"class":345},".\u002Fshared-tools",[318,1132,349],{"class":328},[318,1134,1135,1137,1139,1141,1143,1145,1147,1149],{"class":320,"line":352},[318,1136,325],{"class":324},[318,1138,329],{"class":328},[318,1140,333],{"class":332},[318,1142,336],{"class":328},[318,1144,339],{"class":324},[318,1146,342],{"class":328},[318,1148,346],{"class":345},[318,1150,349],{"class":328},[318,1152,1153],{"class":320,"line":359},[318,1154,356],{"emptyLinePlaceholder":355},[318,1156,1157,1159,1161,1163,1165],{"class":320,"line":377},[318,1158,362],{"class":324},[318,1160,365],{"class":324},[318,1162,333],{"class":368},[318,1164,371],{"class":332},[318,1166,374],{"class":328},[318,1168,1169,1171,1173,1175,1178,1180],{"class":320,"line":398},[318,1170,381],{"class":380},[318,1172,384],{"class":328},[318,1174,342],{"class":328},[318,1176,1177],{"class":345},"handler1",[318,1179,392],{"class":328},[318,1181,395],{"class":328},[318,1183,1184,1186,1188,1191],{"class":320,"line":422},[318,1185,401],{"class":380},[318,1187,384],{"class":328},[318,1189,1190],{"class":332}," [sharedTool]",[318,1192,395],{"class":328},[318,1194,1195,1197],{"class":320,"line":607},[318,1196,425],{"class":328},[318,1198,428],{"class":332},[307,1200,1203],{"className":309,"code":1201,"filename":1202,"language":312,"meta":313,"style":313},"import { sharedTool } from '.\u002Fshared-tools'\nimport { defineMcpHandler } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpHandler({\n  name: 'handler2',\n  tools: [sharedTool],\n})\n","server\u002Fmcp\u002Fhandler2.ts",[315,1204,1205,1223,1241,1245,1257,1272,1282],{"__ignoreMap":313},[318,1206,1207,1209,1211,1213,1215,1217,1219,1221],{"class":320,"line":321},[318,1208,325],{"class":324},[318,1210,329],{"class":328},[318,1212,1121],{"class":332},[318,1214,336],{"class":328},[318,1216,339],{"class":324},[318,1218,342],{"class":328},[318,1220,1130],{"class":345},[318,1222,349],{"class":328},[318,1224,1225,1227,1229,1231,1233,1235,1237,1239],{"class":320,"line":352},[318,1226,325],{"class":324},[318,1228,329],{"class":328},[318,1230,333],{"class":332},[318,1232,336],{"class":328},[318,1234,339],{"class":324},[318,1236,342],{"class":328},[318,1238,346],{"class":345},[318,1240,349],{"class":328},[318,1242,1243],{"class":320,"line":359},[318,1244,356],{"emptyLinePlaceholder":355},[318,1246,1247,1249,1251,1253,1255],{"class":320,"line":377},[318,1248,362],{"class":324},[318,1250,365],{"class":324},[318,1252,333],{"class":368},[318,1254,371],{"class":332},[318,1256,374],{"class":328},[318,1258,1259,1261,1263,1265,1268,1270],{"class":320,"line":398},[318,1260,381],{"class":380},[318,1262,384],{"class":328},[318,1264,342],{"class":328},[318,1266,1267],{"class":345},"handler2",[318,1269,392],{"class":328},[318,1271,395],{"class":328},[318,1273,1274,1276,1278,1280],{"class":320,"line":422},[318,1275,401],{"class":380},[318,1277,384],{"class":328},[318,1279,1190],{"class":332},[318,1281,395],{"class":328},[318,1283,1284,1286],{"class":320,"line":607},[318,1285,425],{"class":328},[318,1287,428],{"class":332},[293,1289,1291],{"id":1290},"file-organization","File Organization",[303,1293,1294,1295,384],{},"Two conventions can coexist in ",[315,1296,1297],{},"server\u002Fmcp\u002F",[307,1299,1304],{"className":1300,"code":1302,"language":1303},[1301],"language-text","server\u002F\n└── mcp\u002F\n    ├── index.ts              # Default handler override (optional)\n    ├── migration.ts          # Top-level handler (defaults to all tools)\n    ├── tools\u002F                # Default handler tools (orphans)\n    ├── resources\u002F            # Default handler resources (orphans)\n    ├── prompts\u002F              # Default handler prompts (orphans)\n    └── handlers\u002F             # ✨ Named handler folders (recommended)\n        ├── admin\u002F\n        │   ├── index.ts      # Required: defineMcpHandler({ ... })\n        │   ├── tools\u002F        # Auto-attached to \u002Fmcp\u002Fadmin\n        │   └── prompts\u002F\n        └── apps\u002F\n            ├── index.ts\n            └── tools\u002F        # Auto-attached to \u002Fmcp\u002Fapps\n","text",[315,1305,1302],{"__ignoreMap":313},[906,1307,1308,1309,1312,1313,1315,1316,1319,1320,1322,1323,1326,1327,1330],{"color":908,"icon":277},"The ",[315,1310,1311],{},"index.ts"," at the root of ",[315,1314,1297],{}," overrides the default handler configuration. Inside a ",[315,1317,1318],{},"handlers\u002F\u003Cname>\u002F"," directory, ",[315,1321,1311],{}," is required (even as a one-liner: ",[315,1324,1325],{},"export default defineMcpHandler({})",") — it's what registers the ",[315,1328,1329],{},"\u002Fmcp\u002F\u003Cname>"," route.",[293,1332,1334],{"id":1333},"best-practices","Best Practices",[1336,1337,1338,1346,1352,1358,1364],"ol",{},[1339,1340,1341,1345],"li",{},[1342,1343,1344],"strong",{},"Use descriptive names",": Make handler names clear and specific",[1339,1347,1348,1351],{},[1342,1349,1350],{},"Group related functionality",": Put related tools\u002Fresources together",[1339,1353,1354,1357],{},[1342,1355,1356],{},"Version your handlers",": Use semantic versioning for handler versions",[1339,1359,1360,1363],{},[1342,1361,1362],{},"Document your handlers",": Add comments explaining what each handler does",[1339,1365,1366,1369],{},[1342,1367,1368],{},"Keep handlers focused",": Each handler should have a clear, single purpose",[293,1371,1373],{"id":1372},"next-steps","Next Steps",[1375,1376,1377,1385,1390,1395,1400,1405,1410],"ul",{},[1339,1378,1379,1381,1382,1384],{},[912,1380,152],{"href":153}," - Folder convention + ",[315,1383,918],{}," function form",[1339,1386,1387,1389],{},[912,1388,249],{"href":250}," - Orchestrate tools with LLM-generated JavaScript",[1339,1391,1392,1394],{},[912,1393,220],{"href":221}," - Add authentication and logging",[1339,1396,1397,1399],{},[912,1398,244],{"href":245}," - Conditionally register definitions",[1339,1401,1402,1404],{},[912,1403,20],{"href":21}," - Configure the default handler",[1339,1406,1407,1409],{},[912,1408,41],{"href":47}," - Create tools for your handlers",[1339,1411,1412,1414],{},[912,1413,259],{"href":275}," - See more handler examples",[1416,1417,1418],"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 .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 .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}",{"title":313,"searchDepth":352,"depth":352,"links":1420},[1421,1426,1427,1428,1429],{"id":295,"depth":352,"text":296,"children":1422},[1423,1424,1425],{"id":300,"depth":359,"text":301},{"id":513,"depth":359,"text":514},{"id":737,"depth":359,"text":738},{"id":903,"depth":352,"text":904},{"id":1290,"depth":352,"text":1291},{"id":1333,"depth":352,"text":1334},{"id":1372,"depth":352,"text":1373},"Cross-handler tool sharing, file layout, use cases, and next steps.","md",null,{},{"icon":150},{"title":1436,"description":1437},"Sharing tools between handlers","Shared tool definitions, handler file organization, use cases, and best practices.","cTMnJBjW8R04ihzmvRFSYgC2J9RoKQ5h2dF6STHDkEs",[1440,1442],{"title":142,"path":143,"stem":144,"description":1441,"icon":145,"children":-1},"Full handler examples, multiple handlers, routes, and default vs custom comparison.",{"title":152,"path":153,"stem":154,"description":1443,"icon":155,"children":-1},"Auto-attribute auto-discovered definitions to multiple MCP handlers via folder convention, with a function-based escape hatch for cross-cutting cases.",1787670843181]