[{"data":1,"prerenderedAt":3699},["ShallowReactive",2],{"navigation_docs":3,"-core-concepts-resources":139,"-core-concepts-resources-surround":3694},[4,40,65,110],{"title":5,"path":6,"stem":7,"children":8,"page":39},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24,29,34],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-book-open",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Configuration","\u002Fgetting-started\u002Fconfiguration","1.getting-started\u002F3.configuration","i-lucide-settings",{"title":25,"path":26,"stem":27,"icon":28},"MCP Inspector","\u002Fgetting-started\u002Finspector","1.getting-started\u002F4.inspector","i-lucide-circuit-board",{"title":30,"path":31,"stem":32,"icon":33},"Connection","\u002Fgetting-started\u002Fconnection","1.getting-started\u002F5.connection","i-lucide-plug",{"title":35,"path":36,"stem":37,"icon":38},"Agent Skills","\u002Fgetting-started\u002Fagent-skills","1.getting-started\u002F6.agent-skills","i-lucide-sparkles",false,{"title":41,"path":42,"stem":43,"children":44,"page":39},"Core Concepts","\u002Fcore-concepts","2.core-concepts",[45,50,55,60],{"title":46,"path":47,"stem":48,"icon":49},"Tools","\u002Fcore-concepts\u002Ftools","2.core-concepts\u002F2.tools","i-lucide-wrench",{"title":51,"path":52,"stem":53,"icon":54},"Resources","\u002Fcore-concepts\u002Fresources","2.core-concepts\u002F3.resources","i-lucide-package",{"title":56,"path":57,"stem":58,"icon":59},"Prompts","\u002Fcore-concepts\u002Fprompts","2.core-concepts\u002F4.prompts","i-lucide-message-square",{"title":61,"path":62,"stem":63,"icon":64},"Handlers","\u002Fcore-concepts\u002Fhandlers","2.core-concepts\u002F5.handlers","i-lucide-server",{"title":66,"path":67,"stem":68,"children":69,"page":39},"Advanced Topics","\u002Fadvanced","3.advanced",[70,75,80,85,90,95,100,105],{"title":71,"path":72,"stem":73,"icon":74},"Custom Paths","\u002Fadvanced\u002Fcustom-paths","3.advanced\u002F1.custom-paths","i-lucide-folder",{"title":76,"path":77,"stem":78,"icon":79},"Middleware","\u002Fadvanced\u002Fmiddleware","3.advanced\u002F2.middleware","i-lucide-shield",{"title":81,"path":82,"stem":83,"icon":84},"TypeScript","\u002Fadvanced\u002Ftypescript","3.advanced\u002F3.typescript","i-lucide-type",{"title":86,"path":87,"stem":88,"icon":89},"Hooks","\u002Fadvanced\u002Fhooks","3.advanced\u002F4.hooks","i-lucide-webhook",{"title":91,"path":92,"stem":93,"icon":94},"MCP Evals","\u002Fadvanced\u002Fevals","3.advanced\u002F5.evals","i-lucide-flask-conical",{"title":96,"path":97,"stem":98,"icon":99},"Sessions","\u002Fadvanced\u002Fsessions","3.advanced\u002F6.sessions","i-lucide-database",{"title":101,"path":102,"stem":103,"icon":104},"Dynamic Definitions","\u002Fadvanced\u002Fdynamic-definitions","3.advanced\u002F7.dynamic-definitions","i-lucide-toggle-right",{"title":106,"path":107,"stem":108,"icon":109},"Code Mode","\u002Fadvanced\u002Fcode-mode","3.advanced\u002F8.code-mode","i-lucide-code",{"title":111,"path":112,"stem":113,"children":114,"page":39},"Examples","\u002Fexamples","4.examples",[115,120,125,130,135],{"title":116,"path":117,"stem":118,"icon":119},"Authentication","\u002Fexamples\u002Fauthentication","4.examples\u002F1.authentication","i-lucide-shield-check",{"title":121,"path":122,"stem":123,"icon":124},"API Integration","\u002Fexamples\u002Fapi-integration","4.examples\u002F2.api-integration","i-lucide-globe",{"title":126,"path":127,"stem":128,"icon":129},"Common Patterns","\u002Fexamples\u002Fcommon-patterns","4.examples\u002F3.common-patterns","i-lucide-lightbulb",{"title":131,"path":132,"stem":133,"icon":134},"File Operations","\u002Fexamples\u002Ffile-operations","4.examples\u002F4.file-operations","i-lucide-file",{"title":136,"path":137,"stem":138,"icon":59},"Prompt Examples","\u002Fexamples\u002Fprompt-examples","4.examples\u002F5.prompt-examples",{"id":140,"title":51,"body":141,"description":3686,"extension":3687,"links":3688,"meta":3689,"navigation":3690,"path":52,"seo":3691,"stem":53,"__hash__":3693},"docs\u002F2.core-concepts\u002F3.resources.md",{"type":142,"value":143,"toc":3662},"minimark",[144,149,158,240,257,268,272,275,360,365,378,383,394,398,404,471,505,510,514,517,522,529,653,656,683,687,698,1051,1055,1065,1138,1145,1163,1171,1175,1178,1402,1406,1413,1911,1914,1919,2060,2064,2070,2172,2176,2179,2434,2438,2441,2528,2532,2535,2807,2811,2814,3218,3222,3235,3356,3359,3367,3385,3389,3396,3402,3407,3411,3414,3444,3448,3455,3621,3627,3631,3658],[145,146,148],"h2",{"id":147},"what-are-resources","What are Resources?",[150,151,152,153,157],"p",{},"Resources are a standardized way for MCP servers to expose ",[154,155,156],"strong",{},"read-only data"," to clients. They provide contextual information that can help AI models understand your application, such as files, database schemas, configuration, or any data accessible via a URI.",[159,160,161],"code-collapse",{},[162,163,169],"pre",{"className":164,"code":165,"filename":166,"language":167,"meta":168,"style":168},"language-txt shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","Create a new MCP resource in my Nuxt app using @nuxtjs\u002Fmcp-toolkit.\n\n- Create a file in server\u002Fmcp\u002Fresources\u002F (e.g. server\u002Fmcp\u002Fresources\u002Freadme.ts)\n- Use defineMcpResource (auto-imported) with a description\n- For local files, use the file property: file: 'README.md' (URI, MIME type, and handler are auto-generated)\n- For custom data, define uri and handler manually, returning { contents: [{ uri, text, mimeType }] }\n- For dynamic resources, use ResourceTemplate from @modelcontextprotocol\u002Fsdk\u002Fserver\u002Fmcp.js with URI variables\n- Name and title are auto-generated from the filename\n- Use subdirectories to auto-infer groups (e.g. resources\u002Fconfig\u002Fapp.ts → group: 'config')\n\nDocs: https:\u002F\u002Fmcp-toolkit.nuxt.dev\u002Fcore-concepts\u002Fresources\n","Prompt","txt","",[170,171,172,180,187,193,199,205,211,217,223,229,234],"code",{"__ignoreMap":168},[173,174,177],"span",{"class":175,"line":176},"line",1,[173,178,179],{},"Create a new MCP resource in my Nuxt app using @nuxtjs\u002Fmcp-toolkit.\n",[173,181,183],{"class":175,"line":182},2,[173,184,186],{"emptyLinePlaceholder":185},true,"\n",[173,188,190],{"class":175,"line":189},3,[173,191,192],{},"- Create a file in server\u002Fmcp\u002Fresources\u002F (e.g. server\u002Fmcp\u002Fresources\u002Freadme.ts)\n",[173,194,196],{"class":175,"line":195},4,[173,197,198],{},"- Use defineMcpResource (auto-imported) with a description\n",[173,200,202],{"class":175,"line":201},5,[173,203,204],{},"- For local files, use the file property: file: 'README.md' (URI, MIME type, and handler are auto-generated)\n",[173,206,208],{"class":175,"line":207},6,[173,209,210],{},"- For custom data, define uri and handler manually, returning { contents: [{ uri, text, mimeType }] }\n",[173,212,214],{"class":175,"line":213},7,[173,215,216],{},"- For dynamic resources, use ResourceTemplate from @modelcontextprotocol\u002Fsdk\u002Fserver\u002Fmcp.js with URI variables\n",[173,218,220],{"class":175,"line":219},8,[173,221,222],{},"- Name and title are auto-generated from the filename\n",[173,224,226],{"class":175,"line":225},9,[173,227,228],{},"- Use subdirectories to auto-infer groups (e.g. resources\u002Fconfig\u002Fapp.ts → group: 'config')\n",[173,230,232],{"class":175,"line":231},10,[173,233,186],{"emptyLinePlaceholder":185},[173,235,237],{"class":175,"line":236},11,[173,238,239],{},"Docs: https:\u002F\u002Fmcp-toolkit.nuxt.dev\u002Fcore-concepts\u002Fresources\n",[241,242,244,247,248,252,253,256],"callout",{"color":243,"icon":129},"primary",[154,245,246],{},"Key concept",": Unlike ",[249,250,251],"a",{"href":47},"tools"," which are invoked directly by the AI to perform actions, resources are ",[154,254,255],{},"application-driven",". The host application (not the AI) decides when and how to fetch and include resource content in the conversation.",[150,258,259,260,263,264,267],{},"Each resource is uniquely identified by a URI (e.g., ",[170,261,262],{},"file:\u002F\u002F\u002Fproject\u002FREADME.md"," or ",[170,265,266],{},"api:\u002F\u002Fusers\u002F123",").",[145,269,271],{"id":270},"resources-vs-tools","Resources vs Tools",[150,273,274],{},"Understanding the difference between resources and tools is essential:",[276,277,278,292],"table",{},[279,280,281],"thead",{},[282,283,284,288,290],"tr",{},[285,286,287],"th",{},"Aspect",[285,289,51],{},[285,291,46],{},[293,294,295,309,322,335,348],"tbody",{},[282,296,297,303,306],{},[298,299,300],"td",{},[154,301,302],{},"Purpose",[298,304,305],{},"Provide context and data",[298,307,308],{},"Perform actions",[282,310,311,316,319],{},[298,312,313],{},[154,314,315],{},"Invocation",[298,317,318],{},"Application-driven (user or app selects)",[298,320,321],{},"AI-driven (model decides to call)",[282,323,324,329,332],{},[298,325,326],{},[154,327,328],{},"Nature",[298,330,331],{},"Read-only data access",[298,333,334],{},"Can read and modify state",[282,336,337,342,345],{},[298,338,339],{},[154,340,341],{},"Control",[298,343,344],{},"User\u002Fapplication controls what's included",[298,346,347],{},"AI decides when to use",[282,349,350,354,357],{},[298,351,352],{},[154,353,111],{},[298,355,356],{},"Files, configs, DB schemas, logs",[298,358,359],{},"Send email, create file, query API",[150,361,362],{},[154,363,364],{},"When to use resources:",[366,367,368,372,375],"ul",{},[369,370,371],"li",{},"Exposing project files or documentation",[369,373,374],{},"Sharing database schemas or configurations",[369,376,377],{},"Providing logs or system information as context",[150,379,380],{},[154,381,382],{},"When to use tools:",[366,384,385,388,391],{},[369,386,387],{},"Performing actions that modify state",[369,389,390],{},"Executing operations the AI should decide to trigger",[369,392,393],{},"Interacting with external APIs or services",[145,395,397],{"id":396},"how-resources-are-used","How Resources are Used",[150,399,400,401,403],{},"Resources follow an ",[154,402,255],{}," model. Here's the typical flow:",[162,405,409],{"className":406,"code":407,"language":408,"meta":168,"style":168},"language-mermaid shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","sequenceDiagram\n    participant App as Host Application\n    participant Server as MCP Server\n    participant AI as AI Model\n\n    App->>Server: resources\u002Flist\n    Server-->>App: Available resources\n    Note over App: Display in UI (tree, search...)\n    App->>App: User selects resources\n    App->>Server: resources\u002Fread (selected URIs)\n    Server-->>App: Resource contents\n    App->>AI: Include content as context\n","mermaid",[170,410,411,416,421,426,431,435,440,445,450,455,460,465],{"__ignoreMap":168},[173,412,413],{"class":175,"line":176},[173,414,415],{},"sequenceDiagram\n",[173,417,418],{"class":175,"line":182},[173,419,420],{},"    participant App as Host Application\n",[173,422,423],{"class":175,"line":189},[173,424,425],{},"    participant Server as MCP Server\n",[173,427,428],{"class":175,"line":195},[173,429,430],{},"    participant AI as AI Model\n",[173,432,433],{"class":175,"line":201},[173,434,186],{"emptyLinePlaceholder":185},[173,436,437],{"class":175,"line":207},[173,438,439],{},"    App->>Server: resources\u002Flist\n",[173,441,442],{"class":175,"line":213},[173,443,444],{},"    Server-->>App: Available resources\n",[173,446,447],{"class":175,"line":219},[173,448,449],{},"    Note over App: Display in UI (tree, search...)\n",[173,451,452],{"class":175,"line":225},[173,453,454],{},"    App->>App: User selects resources\n",[173,456,457],{"class":175,"line":231},[173,458,459],{},"    App->>Server: resources\u002Fread (selected URIs)\n",[173,461,462],{"class":175,"line":236},[173,463,464],{},"    Server-->>App: Resource contents\n",[173,466,468],{"class":175,"line":467},12,[173,469,470],{},"    App->>AI: Include content as context\n",[472,473,474,484,490,499],"ol",{},[369,475,476,479,480,483],{},[154,477,478],{},"Discovery",": The application calls ",[170,481,482],{},"resources\u002Flist"," to discover available resources",[369,485,486,489],{},[154,487,488],{},"Selection",": The application displays resources in a UI (tree view, search, list) and the user or application logic selects which ones to include",[369,491,492,495,496],{},[154,493,494],{},"Reading",": The application fetches selected resources via ",[170,497,498],{},"resources\u002Fread",[369,500,501,504],{},[154,502,503],{},"Context inclusion",": The application includes the resource content in the AI conversation as context",[241,506,509],{"color":507,"icon":508},"info","i-lucide-info","The AI model never directly requests resources. It's always the application that decides which resources to include based on user selection, heuristics, or automatic context detection.",[145,511,513],{"id":512},"static-resources","Static Resources",[150,515,516],{},"Static resources have a fixed URI that doesn't change.",[518,519,521],"h3",{"id":520},"simple-file-resources","Simple File Resources",[150,523,524,525,528],{},"The easiest way to expose a local file is using the ",[170,526,527],{},"file"," property. This automatically handles the URI generation, MIME type detection, and file reading.",[162,530,535],{"className":531,"code":532,"filename":533,"language":534,"meta":168,"style":168},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { defineMcpResource } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpResource({\n  name: 'readme',\n  description: 'Project README file',\n  file: 'README.md', \u002F\u002F Relative to project root\n})\n","server\u002Fmcp\u002Fresources\u002Freadme.ts","typescript",[170,536,537,567,571,588,608,624,645],{"__ignoreMap":168},[173,538,539,543,547,551,554,557,560,564],{"class":175,"line":176},[173,540,542],{"class":541},"s7zQu","import",[173,544,546],{"class":545},"sMK4o"," {",[173,548,550],{"class":549},"sTEyZ"," defineMcpResource",[173,552,553],{"class":545}," }",[173,555,556],{"class":541}," from",[173,558,559],{"class":545}," '",[173,561,563],{"class":562},"sfazB","@nuxtjs\u002Fmcp-toolkit\u002Fserver",[173,565,566],{"class":545},"'\n",[173,568,569],{"class":175,"line":182},[173,570,186],{"emptyLinePlaceholder":185},[173,572,573,576,579,582,585],{"class":175,"line":189},[173,574,575],{"class":541},"export",[173,577,578],{"class":541}," default",[173,580,550],{"class":581},"s2Zo4",[173,583,584],{"class":549},"(",[173,586,587],{"class":545},"{\n",[173,589,590,594,597,599,602,605],{"class":175,"line":195},[173,591,593],{"class":592},"swJcz","  name",[173,595,596],{"class":545},":",[173,598,559],{"class":545},[173,600,601],{"class":562},"readme",[173,603,604],{"class":545},"'",[173,606,607],{"class":545},",\n",[173,609,610,613,615,617,620,622],{"class":175,"line":201},[173,611,612],{"class":592},"  description",[173,614,596],{"class":545},[173,616,559],{"class":545},[173,618,619],{"class":562},"Project README file",[173,621,604],{"class":545},[173,623,607],{"class":545},[173,625,626,629,631,633,636,638,641],{"class":175,"line":207},[173,627,628],{"class":592},"  file",[173,630,596],{"class":545},[173,632,559],{"class":545},[173,634,635],{"class":562},"README.md",[173,637,604],{"class":545},[173,639,640],{"class":545},",",[173,642,644],{"class":643},"sHwdD"," \u002F\u002F Relative to project root\n",[173,646,647,650],{"class":175,"line":213},[173,648,649],{"class":545},"}",[173,651,652],{"class":549},")\n",[150,654,655],{},"This generates:",[366,657,658,667,673],{},[369,659,660,663,664],{},[154,661,662],{},"URI",": ",[170,665,666],{},"file:\u002F\u002F\u002Fpath\u002Fto\u002Fproject\u002FREADME.md",[369,668,669,672],{},[154,670,671],{},"Handler",": Automatically reads the file content",[369,674,675,678,679,682],{},[154,676,677],{},"MIME Type",": Automatically detected (e.g., ",[170,680,681],{},"text\u002Fmarkdown",")",[518,684,686],{"id":685},"custom-static-resources","Custom Static Resources",[150,688,689,690,693,694,697],{},"For more control, you can define the ",[170,691,692],{},"uri"," and ",[170,695,696],{},"handler"," manually:",[162,699,702],{"className":531,"code":700,"filename":701,"language":534,"meta":168,"style":168},"import { readFile } from 'node:fs\u002Fpromises'\nimport { fileURLToPath } from 'node:url'\nimport { defineMcpResource } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpResource({\n  name: 'custom-readme',\n  title: 'README',\n  description: 'Project README file',\n  uri: 'file:\u002F\u002F\u002FREADME.md',\n  metadata: {\n    mimeType: 'text\u002Fmarkdown',\n  },\n  handler: async (uri: URL) => {\n    const filePath = fileURLToPath(uri)\n    const content = await readFile(filePath, 'utf-8')\n    return {\n      contents: [{\n        uri: uri.toString(),\n        mimeType: 'text\u002Fmarkdown',\n        text: content,\n      }],\n    }\n  },\n})\n","server\u002Fmcp\u002Fresources\u002Fcustom-readme.ts",[170,703,704,724,744,762,766,778,793,809,823,839,849,864,869,900,920,951,959,972,994,1010,1022,1033,1039,1044],{"__ignoreMap":168},[173,705,706,708,710,713,715,717,719,722],{"class":175,"line":176},[173,707,542],{"class":541},[173,709,546],{"class":545},[173,711,712],{"class":549}," readFile",[173,714,553],{"class":545},[173,716,556],{"class":541},[173,718,559],{"class":545},[173,720,721],{"class":562},"node:fs\u002Fpromises",[173,723,566],{"class":545},[173,725,726,728,730,733,735,737,739,742],{"class":175,"line":182},[173,727,542],{"class":541},[173,729,546],{"class":545},[173,731,732],{"class":549}," fileURLToPath",[173,734,553],{"class":545},[173,736,556],{"class":541},[173,738,559],{"class":545},[173,740,741],{"class":562},"node:url",[173,743,566],{"class":545},[173,745,746,748,750,752,754,756,758,760],{"class":175,"line":189},[173,747,542],{"class":541},[173,749,546],{"class":545},[173,751,550],{"class":549},[173,753,553],{"class":545},[173,755,556],{"class":541},[173,757,559],{"class":545},[173,759,563],{"class":562},[173,761,566],{"class":545},[173,763,764],{"class":175,"line":195},[173,765,186],{"emptyLinePlaceholder":185},[173,767,768,770,772,774,776],{"class":175,"line":201},[173,769,575],{"class":541},[173,771,578],{"class":541},[173,773,550],{"class":581},[173,775,584],{"class":549},[173,777,587],{"class":545},[173,779,780,782,784,786,789,791],{"class":175,"line":207},[173,781,593],{"class":592},[173,783,596],{"class":545},[173,785,559],{"class":545},[173,787,788],{"class":562},"custom-readme",[173,790,604],{"class":545},[173,792,607],{"class":545},[173,794,795,798,800,802,805,807],{"class":175,"line":213},[173,796,797],{"class":592},"  title",[173,799,596],{"class":545},[173,801,559],{"class":545},[173,803,804],{"class":562},"README",[173,806,604],{"class":545},[173,808,607],{"class":545},[173,810,811,813,815,817,819,821],{"class":175,"line":219},[173,812,612],{"class":592},[173,814,596],{"class":545},[173,816,559],{"class":545},[173,818,619],{"class":562},[173,820,604],{"class":545},[173,822,607],{"class":545},[173,824,825,828,830,832,835,837],{"class":175,"line":225},[173,826,827],{"class":592},"  uri",[173,829,596],{"class":545},[173,831,559],{"class":545},[173,833,834],{"class":562},"file:\u002F\u002F\u002FREADME.md",[173,836,604],{"class":545},[173,838,607],{"class":545},[173,840,841,844,846],{"class":175,"line":231},[173,842,843],{"class":592},"  metadata",[173,845,596],{"class":545},[173,847,848],{"class":545}," {\n",[173,850,851,854,856,858,860,862],{"class":175,"line":236},[173,852,853],{"class":592},"    mimeType",[173,855,596],{"class":545},[173,857,559],{"class":545},[173,859,681],{"class":562},[173,861,604],{"class":545},[173,863,607],{"class":545},[173,865,866],{"class":175,"line":467},[173,867,868],{"class":545},"  },\n",[173,870,872,875,877,881,884,887,889,893,895,898],{"class":175,"line":871},13,[173,873,874],{"class":581},"  handler",[173,876,596],{"class":545},[173,878,880],{"class":879},"spNyl"," async",[173,882,883],{"class":545}," (",[173,885,692],{"class":886},"sHdIc",[173,888,596],{"class":545},[173,890,892],{"class":891},"sBMFI"," URL",[173,894,682],{"class":545},[173,896,897],{"class":879}," =>",[173,899,848],{"class":545},[173,901,903,906,909,912,914,916,918],{"class":175,"line":902},14,[173,904,905],{"class":879},"    const",[173,907,908],{"class":549}," filePath",[173,910,911],{"class":545}," =",[173,913,732],{"class":581},[173,915,584],{"class":592},[173,917,692],{"class":549},[173,919,652],{"class":592},[173,921,923,925,928,930,933,935,937,940,942,944,947,949],{"class":175,"line":922},15,[173,924,905],{"class":879},[173,926,927],{"class":549}," content",[173,929,911],{"class":545},[173,931,932],{"class":541}," await",[173,934,712],{"class":581},[173,936,584],{"class":592},[173,938,939],{"class":549},"filePath",[173,941,640],{"class":545},[173,943,559],{"class":545},[173,945,946],{"class":562},"utf-8",[173,948,604],{"class":545},[173,950,652],{"class":592},[173,952,954,957],{"class":175,"line":953},16,[173,955,956],{"class":541},"    return",[173,958,848],{"class":545},[173,960,962,965,967,970],{"class":175,"line":961},17,[173,963,964],{"class":592},"      contents",[173,966,596],{"class":545},[173,968,969],{"class":592}," [",[173,971,587],{"class":545},[173,973,975,978,980,983,986,989,992],{"class":175,"line":974},18,[173,976,977],{"class":592},"        uri",[173,979,596],{"class":545},[173,981,982],{"class":549}," uri",[173,984,985],{"class":545},".",[173,987,988],{"class":581},"toString",[173,990,991],{"class":592},"()",[173,993,607],{"class":545},[173,995,997,1000,1002,1004,1006,1008],{"class":175,"line":996},19,[173,998,999],{"class":592},"        mimeType",[173,1001,596],{"class":545},[173,1003,559],{"class":545},[173,1005,681],{"class":562},[173,1007,604],{"class":545},[173,1009,607],{"class":545},[173,1011,1013,1016,1018,1020],{"class":175,"line":1012},20,[173,1014,1015],{"class":592},"        text",[173,1017,596],{"class":545},[173,1019,927],{"class":549},[173,1021,607],{"class":545},[173,1023,1025,1028,1031],{"class":175,"line":1024},21,[173,1026,1027],{"class":545},"      }",[173,1029,1030],{"class":592},"]",[173,1032,607],{"class":545},[173,1034,1036],{"class":175,"line":1035},22,[173,1037,1038],{"class":545},"    }\n",[173,1040,1042],{"class":175,"line":1041},23,[173,1043,868],{"class":545},[173,1045,1047,1049],{"class":175,"line":1046},24,[173,1048,649],{"class":545},[173,1050,652],{"class":549},[145,1052,1054],{"id":1053},"auto-generated-name-and-title","Auto-Generated Name and Title",[150,1056,1057,1058,693,1061,1064],{},"You can omit ",[170,1059,1060],{},"name",[170,1062,1063],{},"title"," - they will be automatically generated from the filename:",[162,1066,1069],{"className":531,"code":1067,"filename":1068,"language":534,"meta":168,"style":168},"import { defineMcpResource } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpResource({\n  \u002F\u002F name and title are auto-generated from filename:\n  \u002F\u002F name: 'project-readme'\n  \u002F\u002F title: 'Project Readme'\n  file: 'README.md'\n})\n","server\u002Fmcp\u002Fresources\u002Fproject-readme.ts",[170,1070,1071,1089,1093,1105,1110,1115,1120,1132],{"__ignoreMap":168},[173,1072,1073,1075,1077,1079,1081,1083,1085,1087],{"class":175,"line":176},[173,1074,542],{"class":541},[173,1076,546],{"class":545},[173,1078,550],{"class":549},[173,1080,553],{"class":545},[173,1082,556],{"class":541},[173,1084,559],{"class":545},[173,1086,563],{"class":562},[173,1088,566],{"class":545},[173,1090,1091],{"class":175,"line":182},[173,1092,186],{"emptyLinePlaceholder":185},[173,1094,1095,1097,1099,1101,1103],{"class":175,"line":189},[173,1096,575],{"class":541},[173,1098,578],{"class":541},[173,1100,550],{"class":581},[173,1102,584],{"class":549},[173,1104,587],{"class":545},[173,1106,1107],{"class":175,"line":195},[173,1108,1109],{"class":643},"  \u002F\u002F name and title are auto-generated from filename:\n",[173,1111,1112],{"class":175,"line":201},[173,1113,1114],{"class":643},"  \u002F\u002F name: 'project-readme'\n",[173,1116,1117],{"class":175,"line":207},[173,1118,1119],{"class":643},"  \u002F\u002F title: 'Project Readme'\n",[173,1121,1122,1124,1126,1128,1130],{"class":175,"line":213},[173,1123,628],{"class":592},[173,1125,596],{"class":545},[173,1127,559],{"class":545},[173,1129,635],{"class":562},[173,1131,566],{"class":545},[173,1133,1134,1136],{"class":175,"line":219},[173,1135,649],{"class":545},[173,1137,652],{"class":549},[150,1139,1140,1141,1144],{},"The filename ",[170,1142,1143],{},"project-readme.ts"," automatically becomes:",[366,1146,1147,1155],{},[369,1148,1149,663,1151,1154],{},[170,1150,1060],{},[170,1152,1153],{},"project-readme"," (kebab-case)",[369,1156,1157,663,1159,1162],{},[170,1158,1063],{},[170,1160,1161],{},"Project Readme"," (title case)",[150,1164,1165,1166,263,1168,1170],{},"You can still provide ",[170,1167,1060],{},[170,1169,1063],{}," explicitly to override the auto-generated values.",[145,1172,1174],{"id":1173},"resource-structure","Resource Structure",[150,1176,1177],{},"A resource definition consists of:",[1179,1180,1181,1274],"code-group",{},[162,1182,1185],{"className":531,"code":1183,"filename":1184,"language":534,"meta":168,"style":168},"import { defineMcpResource } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpResource({\n  name: 'resource-name',\n  file: 'path\u002Fto\u002Ffile.txt', \u002F\u002F Local file path\n  metadata: { ... }\n})\n","File Resource",[170,1186,1187,1205,1209,1221,1236,1254,1268],{"__ignoreMap":168},[173,1188,1189,1191,1193,1195,1197,1199,1201,1203],{"class":175,"line":176},[173,1190,542],{"class":541},[173,1192,546],{"class":545},[173,1194,550],{"class":549},[173,1196,553],{"class":545},[173,1198,556],{"class":541},[173,1200,559],{"class":545},[173,1202,563],{"class":562},[173,1204,566],{"class":545},[173,1206,1207],{"class":175,"line":182},[173,1208,186],{"emptyLinePlaceholder":185},[173,1210,1211,1213,1215,1217,1219],{"class":175,"line":189},[173,1212,575],{"class":541},[173,1214,578],{"class":541},[173,1216,550],{"class":581},[173,1218,584],{"class":549},[173,1220,587],{"class":545},[173,1222,1223,1225,1227,1229,1232,1234],{"class":175,"line":195},[173,1224,593],{"class":592},[173,1226,596],{"class":545},[173,1228,559],{"class":545},[173,1230,1231],{"class":562},"resource-name",[173,1233,604],{"class":545},[173,1235,607],{"class":545},[173,1237,1238,1240,1242,1244,1247,1249,1251],{"class":175,"line":201},[173,1239,628],{"class":592},[173,1241,596],{"class":545},[173,1243,559],{"class":545},[173,1245,1246],{"class":562},"path\u002Fto\u002Ffile.txt",[173,1248,604],{"class":545},[173,1250,640],{"class":545},[173,1252,1253],{"class":643}," \u002F\u002F Local file path\n",[173,1255,1256,1258,1260,1262,1265],{"class":175,"line":207},[173,1257,843],{"class":592},[173,1259,596],{"class":545},[173,1261,546],{"class":545},[173,1263,1264],{"class":545}," ...",[173,1266,1267],{"class":545}," }\n",[173,1269,1270,1272],{"class":175,"line":213},[173,1271,649],{"class":545},[173,1273,652],{"class":549},[162,1275,1278],{"className":531,"code":1276,"filename":1277,"language":534,"meta":168,"style":168},"import { defineMcpResource } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpResource({\n  name: 'resource-name',  \u002F\u002F Unique identifier\n  uri: 'uri:\u002F\u002F...',      \u002F\u002F Static URI or ResourceTemplate\n  handler: async (uri) => { \u002F\u002F Handler function\n    return { contents: [...] }\n  },\n})\n","Custom Resource",[170,1279,1280,1298,1302,1314,1331,1349,1370,1392,1396],{"__ignoreMap":168},[173,1281,1282,1284,1286,1288,1290,1292,1294,1296],{"class":175,"line":176},[173,1283,542],{"class":541},[173,1285,546],{"class":545},[173,1287,550],{"class":549},[173,1289,553],{"class":545},[173,1291,556],{"class":541},[173,1293,559],{"class":545},[173,1295,563],{"class":562},[173,1297,566],{"class":545},[173,1299,1300],{"class":175,"line":182},[173,1301,186],{"emptyLinePlaceholder":185},[173,1303,1304,1306,1308,1310,1312],{"class":175,"line":189},[173,1305,575],{"class":541},[173,1307,578],{"class":541},[173,1309,550],{"class":581},[173,1311,584],{"class":549},[173,1313,587],{"class":545},[173,1315,1316,1318,1320,1322,1324,1326,1328],{"class":175,"line":195},[173,1317,593],{"class":592},[173,1319,596],{"class":545},[173,1321,559],{"class":545},[173,1323,1231],{"class":562},[173,1325,604],{"class":545},[173,1327,640],{"class":545},[173,1329,1330],{"class":643},"  \u002F\u002F Unique identifier\n",[173,1332,1333,1335,1337,1339,1342,1344,1346],{"class":175,"line":201},[173,1334,827],{"class":592},[173,1336,596],{"class":545},[173,1338,559],{"class":545},[173,1340,1341],{"class":562},"uri:\u002F\u002F...",[173,1343,604],{"class":545},[173,1345,640],{"class":545},[173,1347,1348],{"class":643},"      \u002F\u002F Static URI or ResourceTemplate\n",[173,1350,1351,1353,1355,1357,1359,1361,1363,1365,1367],{"class":175,"line":207},[173,1352,874],{"class":581},[173,1354,596],{"class":545},[173,1356,880],{"class":879},[173,1358,883],{"class":545},[173,1360,692],{"class":886},[173,1362,682],{"class":545},[173,1364,897],{"class":879},[173,1366,546],{"class":545},[173,1368,1369],{"class":643}," \u002F\u002F Handler function\n",[173,1371,1372,1374,1376,1379,1381,1383,1386,1389],{"class":175,"line":213},[173,1373,956],{"class":541},[173,1375,546],{"class":545},[173,1377,1378],{"class":592}," contents",[173,1380,596],{"class":545},[173,1382,969],{"class":592},[173,1384,1385],{"class":545},"...",[173,1387,1388],{"class":592},"] ",[173,1390,1391],{"class":545},"}\n",[173,1393,1394],{"class":175,"line":219},[173,1395,868],{"class":545},[173,1397,1398,1400],{"class":175,"line":225},[173,1399,649],{"class":545},[173,1401,652],{"class":549},[145,1403,1405],{"id":1404},"dynamic-resources-with-templates","Dynamic Resources with Templates",[150,1407,1408,1409,1412],{},"Use ",[170,1410,1411],{},"ResourceTemplate"," to create dynamic resources that accept variables:",[162,1414,1417],{"className":531,"code":1415,"filename":1416,"language":534,"meta":168,"style":168},"import { readFile } from 'node:fs\u002Fpromises'\nimport { join } from 'node:path'\nimport { ResourceTemplate } from '@modelcontextprotocol\u002Fsdk\u002Fserver\u002Fmcp.js'\nimport type { Variables } from '@modelcontextprotocol\u002Fsdk\u002Fshared\u002FuriTemplate.js'\nimport { defineMcpResource } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpResource({\n  name: 'file',\n  title: 'File Resource',\n  uri: new ResourceTemplate('file:\u002F\u002F\u002Fproject\u002F{+path}', {\n    list: async () => {\n      \u002F\u002F Return list of available resources\n      return {\n        resources: [\n          { uri: 'file:\u002F\u002F\u002Fproject\u002FREADME.md', name: 'README.md' },\n          { uri: 'file:\u002F\u002F\u002Fproject\u002Fsrc\u002Findex.ts', name: 'src\u002Findex.ts' },\n        ],\n      }\n    },\n  }),\n  handler: async (uri: URL, variables: Variables) => {\n    const path = variables.path as string\n    const filePath = join(process.cwd(), path)\n    const content = await readFile(filePath, 'utf-8')\n\n    return {\n      contents: [{\n        uri: uri.toString(),\n        mimeType: 'text\u002Fplain',\n        text: content,\n      }],\n    }\n  },\n})\n","server\u002Fmcp\u002Fresources\u002Ffile.ts",[170,1418,1419,1437,1457,1477,1500,1518,1522,1534,1548,1562,1586,1602,1607,1614,1624,1655,1685,1692,1697,1702,1711,1742,1764,1792,1818,1823,1830,1841,1858,1874,1885,1894,1899,1904],{"__ignoreMap":168},[173,1420,1421,1423,1425,1427,1429,1431,1433,1435],{"class":175,"line":176},[173,1422,542],{"class":541},[173,1424,546],{"class":545},[173,1426,712],{"class":549},[173,1428,553],{"class":545},[173,1430,556],{"class":541},[173,1432,559],{"class":545},[173,1434,721],{"class":562},[173,1436,566],{"class":545},[173,1438,1439,1441,1443,1446,1448,1450,1452,1455],{"class":175,"line":182},[173,1440,542],{"class":541},[173,1442,546],{"class":545},[173,1444,1445],{"class":549}," join",[173,1447,553],{"class":545},[173,1449,556],{"class":541},[173,1451,559],{"class":545},[173,1453,1454],{"class":562},"node:path",[173,1456,566],{"class":545},[173,1458,1459,1461,1463,1466,1468,1470,1472,1475],{"class":175,"line":189},[173,1460,542],{"class":541},[173,1462,546],{"class":545},[173,1464,1465],{"class":549}," ResourceTemplate",[173,1467,553],{"class":545},[173,1469,556],{"class":541},[173,1471,559],{"class":545},[173,1473,1474],{"class":562},"@modelcontextprotocol\u002Fsdk\u002Fserver\u002Fmcp.js",[173,1476,566],{"class":545},[173,1478,1479,1481,1484,1486,1489,1491,1493,1495,1498],{"class":175,"line":195},[173,1480,542],{"class":541},[173,1482,1483],{"class":541}," type",[173,1485,546],{"class":545},[173,1487,1488],{"class":549}," Variables",[173,1490,553],{"class":545},[173,1492,556],{"class":541},[173,1494,559],{"class":545},[173,1496,1497],{"class":562},"@modelcontextprotocol\u002Fsdk\u002Fshared\u002FuriTemplate.js",[173,1499,566],{"class":545},[173,1501,1502,1504,1506,1508,1510,1512,1514,1516],{"class":175,"line":201},[173,1503,542],{"class":541},[173,1505,546],{"class":545},[173,1507,550],{"class":549},[173,1509,553],{"class":545},[173,1511,556],{"class":541},[173,1513,559],{"class":545},[173,1515,563],{"class":562},[173,1517,566],{"class":545},[173,1519,1520],{"class":175,"line":207},[173,1521,186],{"emptyLinePlaceholder":185},[173,1523,1524,1526,1528,1530,1532],{"class":175,"line":213},[173,1525,575],{"class":541},[173,1527,578],{"class":541},[173,1529,550],{"class":581},[173,1531,584],{"class":549},[173,1533,587],{"class":545},[173,1535,1536,1538,1540,1542,1544,1546],{"class":175,"line":219},[173,1537,593],{"class":592},[173,1539,596],{"class":545},[173,1541,559],{"class":545},[173,1543,527],{"class":562},[173,1545,604],{"class":545},[173,1547,607],{"class":545},[173,1549,1550,1552,1554,1556,1558,1560],{"class":175,"line":225},[173,1551,797],{"class":592},[173,1553,596],{"class":545},[173,1555,559],{"class":545},[173,1557,1184],{"class":562},[173,1559,604],{"class":545},[173,1561,607],{"class":545},[173,1563,1564,1566,1568,1571,1573,1575,1577,1580,1582,1584],{"class":175,"line":231},[173,1565,827],{"class":592},[173,1567,596],{"class":545},[173,1569,1570],{"class":545}," new",[173,1572,1465],{"class":581},[173,1574,584],{"class":549},[173,1576,604],{"class":545},[173,1578,1579],{"class":562},"file:\u002F\u002F\u002Fproject\u002F{+path}",[173,1581,604],{"class":545},[173,1583,640],{"class":545},[173,1585,848],{"class":545},[173,1587,1588,1591,1593,1595,1598,1600],{"class":175,"line":236},[173,1589,1590],{"class":581},"    list",[173,1592,596],{"class":545},[173,1594,880],{"class":879},[173,1596,1597],{"class":545}," ()",[173,1599,897],{"class":879},[173,1601,848],{"class":545},[173,1603,1604],{"class":175,"line":467},[173,1605,1606],{"class":643},"      \u002F\u002F Return list of available resources\n",[173,1608,1609,1612],{"class":175,"line":871},[173,1610,1611],{"class":541},"      return",[173,1613,848],{"class":545},[173,1615,1616,1619,1621],{"class":175,"line":902},[173,1617,1618],{"class":592},"        resources",[173,1620,596],{"class":545},[173,1622,1623],{"class":592}," [\n",[173,1625,1626,1629,1631,1633,1635,1637,1639,1641,1644,1646,1648,1650,1652],{"class":175,"line":922},[173,1627,1628],{"class":545},"          {",[173,1630,982],{"class":592},[173,1632,596],{"class":545},[173,1634,559],{"class":545},[173,1636,262],{"class":562},[173,1638,604],{"class":545},[173,1640,640],{"class":545},[173,1642,1643],{"class":592}," name",[173,1645,596],{"class":545},[173,1647,559],{"class":545},[173,1649,635],{"class":562},[173,1651,604],{"class":545},[173,1653,1654],{"class":545}," },\n",[173,1656,1657,1659,1661,1663,1665,1668,1670,1672,1674,1676,1678,1681,1683],{"class":175,"line":953},[173,1658,1628],{"class":545},[173,1660,982],{"class":592},[173,1662,596],{"class":545},[173,1664,559],{"class":545},[173,1666,1667],{"class":562},"file:\u002F\u002F\u002Fproject\u002Fsrc\u002Findex.ts",[173,1669,604],{"class":545},[173,1671,640],{"class":545},[173,1673,1643],{"class":592},[173,1675,596],{"class":545},[173,1677,559],{"class":545},[173,1679,1680],{"class":562},"src\u002Findex.ts",[173,1682,604],{"class":545},[173,1684,1654],{"class":545},[173,1686,1687,1690],{"class":175,"line":961},[173,1688,1689],{"class":592},"        ]",[173,1691,607],{"class":545},[173,1693,1694],{"class":175,"line":974},[173,1695,1696],{"class":545},"      }\n",[173,1698,1699],{"class":175,"line":996},[173,1700,1701],{"class":545},"    },\n",[173,1703,1704,1707,1709],{"class":175,"line":1012},[173,1705,1706],{"class":545},"  }",[173,1708,682],{"class":549},[173,1710,607],{"class":545},[173,1712,1713,1715,1717,1719,1721,1723,1725,1727,1729,1732,1734,1736,1738,1740],{"class":175,"line":1024},[173,1714,874],{"class":581},[173,1716,596],{"class":545},[173,1718,880],{"class":879},[173,1720,883],{"class":545},[173,1722,692],{"class":886},[173,1724,596],{"class":545},[173,1726,892],{"class":891},[173,1728,640],{"class":545},[173,1730,1731],{"class":886}," variables",[173,1733,596],{"class":545},[173,1735,1488],{"class":891},[173,1737,682],{"class":545},[173,1739,897],{"class":879},[173,1741,848],{"class":545},[173,1743,1744,1746,1749,1751,1753,1755,1758,1761],{"class":175,"line":1035},[173,1745,905],{"class":879},[173,1747,1748],{"class":549}," path",[173,1750,911],{"class":545},[173,1752,1731],{"class":549},[173,1754,985],{"class":545},[173,1756,1757],{"class":549},"path",[173,1759,1760],{"class":541}," as",[173,1762,1763],{"class":891}," string\n",[173,1765,1766,1768,1770,1772,1774,1776,1779,1781,1784,1786,1788,1790],{"class":175,"line":1041},[173,1767,905],{"class":879},[173,1769,908],{"class":549},[173,1771,911],{"class":545},[173,1773,1445],{"class":581},[173,1775,584],{"class":592},[173,1777,1778],{"class":549},"process",[173,1780,985],{"class":545},[173,1782,1783],{"class":581},"cwd",[173,1785,991],{"class":592},[173,1787,640],{"class":545},[173,1789,1748],{"class":549},[173,1791,652],{"class":592},[173,1793,1794,1796,1798,1800,1802,1804,1806,1808,1810,1812,1814,1816],{"class":175,"line":1046},[173,1795,905],{"class":879},[173,1797,927],{"class":549},[173,1799,911],{"class":545},[173,1801,932],{"class":541},[173,1803,712],{"class":581},[173,1805,584],{"class":592},[173,1807,939],{"class":549},[173,1809,640],{"class":545},[173,1811,559],{"class":545},[173,1813,946],{"class":562},[173,1815,604],{"class":545},[173,1817,652],{"class":592},[173,1819,1821],{"class":175,"line":1820},25,[173,1822,186],{"emptyLinePlaceholder":185},[173,1824,1826,1828],{"class":175,"line":1825},26,[173,1827,956],{"class":541},[173,1829,848],{"class":545},[173,1831,1833,1835,1837,1839],{"class":175,"line":1832},27,[173,1834,964],{"class":592},[173,1836,596],{"class":545},[173,1838,969],{"class":592},[173,1840,587],{"class":545},[173,1842,1844,1846,1848,1850,1852,1854,1856],{"class":175,"line":1843},28,[173,1845,977],{"class":592},[173,1847,596],{"class":545},[173,1849,982],{"class":549},[173,1851,985],{"class":545},[173,1853,988],{"class":581},[173,1855,991],{"class":592},[173,1857,607],{"class":545},[173,1859,1861,1863,1865,1867,1870,1872],{"class":175,"line":1860},29,[173,1862,999],{"class":592},[173,1864,596],{"class":545},[173,1866,559],{"class":545},[173,1868,1869],{"class":562},"text\u002Fplain",[173,1871,604],{"class":545},[173,1873,607],{"class":545},[173,1875,1877,1879,1881,1883],{"class":175,"line":1876},30,[173,1878,1015],{"class":592},[173,1880,596],{"class":545},[173,1882,927],{"class":549},[173,1884,607],{"class":545},[173,1886,1888,1890,1892],{"class":175,"line":1887},31,[173,1889,1027],{"class":545},[173,1891,1030],{"class":592},[173,1893,607],{"class":545},[173,1895,1897],{"class":175,"line":1896},32,[173,1898,1038],{"class":545},[173,1900,1902],{"class":175,"line":1901},33,[173,1903,868],{"class":545},[173,1905,1907,1909],{"class":175,"line":1906},34,[173,1908,649],{"class":545},[173,1910,652],{"class":549},[145,1912,1411],{"id":1913},"resourcetemplate",[150,1915,1916,1918],{},[170,1917,1411],{}," allows you to create resources with variable parts in the URI:",[162,1920,1922],{"className":531,"code":1921,"language":534,"meta":168,"style":168},"new ResourceTemplate('file:\u002F\u002F\u002Fproject\u002F{+path}', {\n  list: async () => {\n    \u002F\u002F Optional: Return list of available resources\n    return {\n      resources: [\n        { uri: 'file:\u002F\u002F\u002Fproject\u002Ffile1.txt', name: 'File 1' },\n        { uri: 'file:\u002F\u002F\u002Fproject\u002Ffile2.txt', name: 'File 2' },\n      ],\n    }\n  },\n})\n",[170,1923,1924,1943,1958,1963,1969,1978,2009,2039,2046,2050,2054],{"__ignoreMap":168},[173,1925,1926,1929,1931,1933,1935,1937,1939,1941],{"class":175,"line":176},[173,1927,1928],{"class":545},"new",[173,1930,1465],{"class":581},[173,1932,584],{"class":549},[173,1934,604],{"class":545},[173,1936,1579],{"class":562},[173,1938,604],{"class":545},[173,1940,640],{"class":545},[173,1942,848],{"class":545},[173,1944,1945,1948,1950,1952,1954,1956],{"class":175,"line":182},[173,1946,1947],{"class":581},"  list",[173,1949,596],{"class":545},[173,1951,880],{"class":879},[173,1953,1597],{"class":545},[173,1955,897],{"class":879},[173,1957,848],{"class":545},[173,1959,1960],{"class":175,"line":189},[173,1961,1962],{"class":643},"    \u002F\u002F Optional: Return list of available resources\n",[173,1964,1965,1967],{"class":175,"line":195},[173,1966,956],{"class":541},[173,1968,848],{"class":545},[173,1970,1971,1974,1976],{"class":175,"line":201},[173,1972,1973],{"class":592},"      resources",[173,1975,596],{"class":545},[173,1977,1623],{"class":592},[173,1979,1980,1983,1985,1987,1989,1992,1994,1996,1998,2000,2002,2005,2007],{"class":175,"line":207},[173,1981,1982],{"class":545},"        {",[173,1984,982],{"class":592},[173,1986,596],{"class":545},[173,1988,559],{"class":545},[173,1990,1991],{"class":562},"file:\u002F\u002F\u002Fproject\u002Ffile1.txt",[173,1993,604],{"class":545},[173,1995,640],{"class":545},[173,1997,1643],{"class":592},[173,1999,596],{"class":545},[173,2001,559],{"class":545},[173,2003,2004],{"class":562},"File 1",[173,2006,604],{"class":545},[173,2008,1654],{"class":545},[173,2010,2011,2013,2015,2017,2019,2022,2024,2026,2028,2030,2032,2035,2037],{"class":175,"line":213},[173,2012,1982],{"class":545},[173,2014,982],{"class":592},[173,2016,596],{"class":545},[173,2018,559],{"class":545},[173,2020,2021],{"class":562},"file:\u002F\u002F\u002Fproject\u002Ffile2.txt",[173,2023,604],{"class":545},[173,2025,640],{"class":545},[173,2027,1643],{"class":592},[173,2029,596],{"class":545},[173,2031,559],{"class":545},[173,2033,2034],{"class":562},"File 2",[173,2036,604],{"class":545},[173,2038,1654],{"class":545},[173,2040,2041,2044],{"class":175,"line":219},[173,2042,2043],{"class":592},"      ]",[173,2045,607],{"class":545},[173,2047,2048],{"class":175,"line":225},[173,2049,1038],{"class":545},[173,2051,2052],{"class":175,"line":231},[173,2053,868],{"class":545},[173,2055,2056,2058],{"class":175,"line":236},[173,2057,649],{"class":545},[173,2059,652],{"class":549},[518,2061,2063],{"id":2062},"template-variables","Template Variables",[150,2065,2066,2067,596],{},"Variables in the URI are defined with ",[170,2068,2069],{},"{variableName}",[162,2071,2073],{"className":531,"code":2072,"language":534,"meta":168,"style":168},"\u002F\u002F Single variable\nnew ResourceTemplate('file:\u002F\u002F\u002Fproject\u002F{path}', { ... })\n\n\u002F\u002F Variable allowing slashes (reserved expansion)\nnew ResourceTemplate('file:\u002F\u002F\u002Fproject\u002F{+path}', { ... })\n\n\u002F\u002F Multiple variables\nnew ResourceTemplate('api:\u002F\u002Fusers\u002F{userId}\u002Fposts\u002F{postId}', { ... })\n",[170,2074,2075,2080,2105,2109,2114,2138,2142,2147],{"__ignoreMap":168},[173,2076,2077],{"class":175,"line":176},[173,2078,2079],{"class":643},"\u002F\u002F Single variable\n",[173,2081,2082,2084,2086,2088,2090,2093,2095,2097,2099,2101,2103],{"class":175,"line":182},[173,2083,1928],{"class":545},[173,2085,1465],{"class":581},[173,2087,584],{"class":549},[173,2089,604],{"class":545},[173,2091,2092],{"class":562},"file:\u002F\u002F\u002Fproject\u002F{path}",[173,2094,604],{"class":545},[173,2096,640],{"class":545},[173,2098,546],{"class":545},[173,2100,1264],{"class":545},[173,2102,553],{"class":545},[173,2104,652],{"class":549},[173,2106,2107],{"class":175,"line":189},[173,2108,186],{"emptyLinePlaceholder":185},[173,2110,2111],{"class":175,"line":195},[173,2112,2113],{"class":643},"\u002F\u002F Variable allowing slashes (reserved expansion)\n",[173,2115,2116,2118,2120,2122,2124,2126,2128,2130,2132,2134,2136],{"class":175,"line":201},[173,2117,1928],{"class":545},[173,2119,1465],{"class":581},[173,2121,584],{"class":549},[173,2123,604],{"class":545},[173,2125,1579],{"class":562},[173,2127,604],{"class":545},[173,2129,640],{"class":545},[173,2131,546],{"class":545},[173,2133,1264],{"class":545},[173,2135,553],{"class":545},[173,2137,652],{"class":549},[173,2139,2140],{"class":175,"line":207},[173,2141,186],{"emptyLinePlaceholder":185},[173,2143,2144],{"class":175,"line":213},[173,2145,2146],{"class":643},"\u002F\u002F Multiple variables\n",[173,2148,2149,2151,2153,2155,2157,2160,2162,2164,2166,2168,2170],{"class":175,"line":219},[173,2150,1928],{"class":545},[173,2152,1465],{"class":581},[173,2154,584],{"class":549},[173,2156,604],{"class":545},[173,2158,2159],{"class":562},"api:\u002F\u002Fusers\u002F{userId}\u002Fposts\u002F{postId}",[173,2161,604],{"class":545},[173,2163,640],{"class":545},[173,2165,546],{"class":545},[173,2167,1264],{"class":545},[173,2169,553],{"class":545},[173,2171,652],{"class":549},[145,2173,2175],{"id":2174},"handler-function","Handler Function",[150,2177,2178],{},"The handler receives the resolved URI and optional variables:",[162,2180,2182],{"className":531,"code":2181,"language":534,"meta":168,"style":168},"\u002F\u002F Static resource handler\nhandler: async (uri: URL) => {\n  return {\n    contents: [{\n      uri: uri.toString(),\n      mimeType: 'text\u002Fplain',\n      text: 'Content',\n    }],\n  }\n}\n\n\u002F\u002F Dynamic resource handler\nhandler: async (uri: URL, variables: Variables) => {\n  const path = variables.path as string\n  \u002F\u002F Use variables to resolve the resource\n  return {\n    contents: [{\n      uri: uri.toString(),\n      mimeType: 'text\u002Fplain',\n      text: 'Content',\n    }],\n  }\n}\n",[170,2183,2184,2189,2211,2218,2229,2246,2261,2277,2286,2291,2295,2299,2304,2334,2353,2358,2364,2374,2390,2404,2418,2426,2430],{"__ignoreMap":168},[173,2185,2186],{"class":175,"line":176},[173,2187,2188],{"class":643},"\u002F\u002F Static resource handler\n",[173,2190,2191,2193,2195,2197,2199,2201,2203,2205,2207,2209],{"class":175,"line":182},[173,2192,696],{"class":891},[173,2194,596],{"class":545},[173,2196,880],{"class":879},[173,2198,883],{"class":545},[173,2200,692],{"class":886},[173,2202,596],{"class":545},[173,2204,892],{"class":891},[173,2206,682],{"class":545},[173,2208,897],{"class":879},[173,2210,848],{"class":545},[173,2212,2213,2216],{"class":175,"line":189},[173,2214,2215],{"class":541},"  return",[173,2217,848],{"class":545},[173,2219,2220,2223,2225,2227],{"class":175,"line":195},[173,2221,2222],{"class":592},"    contents",[173,2224,596],{"class":545},[173,2226,969],{"class":592},[173,2228,587],{"class":545},[173,2230,2231,2234,2236,2238,2240,2242,2244],{"class":175,"line":201},[173,2232,2233],{"class":592},"      uri",[173,2235,596],{"class":545},[173,2237,982],{"class":549},[173,2239,985],{"class":545},[173,2241,988],{"class":581},[173,2243,991],{"class":592},[173,2245,607],{"class":545},[173,2247,2248,2251,2253,2255,2257,2259],{"class":175,"line":207},[173,2249,2250],{"class":592},"      mimeType",[173,2252,596],{"class":545},[173,2254,559],{"class":545},[173,2256,1869],{"class":562},[173,2258,604],{"class":545},[173,2260,607],{"class":545},[173,2262,2263,2266,2268,2270,2273,2275],{"class":175,"line":213},[173,2264,2265],{"class":592},"      text",[173,2267,596],{"class":545},[173,2269,559],{"class":545},[173,2271,2272],{"class":562},"Content",[173,2274,604],{"class":545},[173,2276,607],{"class":545},[173,2278,2279,2282,2284],{"class":175,"line":219},[173,2280,2281],{"class":545},"    }",[173,2283,1030],{"class":592},[173,2285,607],{"class":545},[173,2287,2288],{"class":175,"line":225},[173,2289,2290],{"class":545},"  }\n",[173,2292,2293],{"class":175,"line":231},[173,2294,1391],{"class":545},[173,2296,2297],{"class":175,"line":236},[173,2298,186],{"emptyLinePlaceholder":185},[173,2300,2301],{"class":175,"line":467},[173,2302,2303],{"class":643},"\u002F\u002F Dynamic resource handler\n",[173,2305,2306,2308,2310,2312,2314,2316,2318,2320,2322,2324,2326,2328,2330,2332],{"class":175,"line":871},[173,2307,696],{"class":891},[173,2309,596],{"class":545},[173,2311,880],{"class":879},[173,2313,883],{"class":545},[173,2315,692],{"class":886},[173,2317,596],{"class":545},[173,2319,892],{"class":891},[173,2321,640],{"class":545},[173,2323,1731],{"class":886},[173,2325,596],{"class":545},[173,2327,1488],{"class":891},[173,2329,682],{"class":545},[173,2331,897],{"class":879},[173,2333,848],{"class":545},[173,2335,2336,2339,2341,2343,2345,2347,2349,2351],{"class":175,"line":902},[173,2337,2338],{"class":879},"  const",[173,2340,1748],{"class":549},[173,2342,911],{"class":545},[173,2344,1731],{"class":549},[173,2346,985],{"class":545},[173,2348,1757],{"class":549},[173,2350,1760],{"class":541},[173,2352,1763],{"class":891},[173,2354,2355],{"class":175,"line":922},[173,2356,2357],{"class":643},"  \u002F\u002F Use variables to resolve the resource\n",[173,2359,2360,2362],{"class":175,"line":953},[173,2361,2215],{"class":541},[173,2363,848],{"class":545},[173,2365,2366,2368,2370,2372],{"class":175,"line":961},[173,2367,2222],{"class":592},[173,2369,596],{"class":545},[173,2371,969],{"class":592},[173,2373,587],{"class":545},[173,2375,2376,2378,2380,2382,2384,2386,2388],{"class":175,"line":974},[173,2377,2233],{"class":592},[173,2379,596],{"class":545},[173,2381,982],{"class":549},[173,2383,985],{"class":545},[173,2385,988],{"class":581},[173,2387,991],{"class":592},[173,2389,607],{"class":545},[173,2391,2392,2394,2396,2398,2400,2402],{"class":175,"line":996},[173,2393,2250],{"class":592},[173,2395,596],{"class":545},[173,2397,559],{"class":545},[173,2399,1869],{"class":562},[173,2401,604],{"class":545},[173,2403,607],{"class":545},[173,2405,2406,2408,2410,2412,2414,2416],{"class":175,"line":1012},[173,2407,2265],{"class":592},[173,2409,596],{"class":545},[173,2411,559],{"class":545},[173,2413,2272],{"class":562},[173,2415,604],{"class":545},[173,2417,607],{"class":545},[173,2419,2420,2422,2424],{"class":175,"line":1024},[173,2421,2281],{"class":545},[173,2423,1030],{"class":592},[173,2425,607],{"class":545},[173,2427,2428],{"class":175,"line":1035},[173,2429,2290],{"class":545},[173,2431,2432],{"class":175,"line":1041},[173,2433,1391],{"class":545},[145,2435,2437],{"id":2436},"resource-metadata","Resource Metadata",[150,2439,2440],{},"Add metadata to help clients understand the resource:",[162,2442,2444],{"className":531,"code":2443,"filename":533,"language":534,"meta":168,"style":168},"import { defineMcpResource } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpResource({\n  name: 'readme',\n  description: 'Project README file',\n  file: 'README.md',\n})\n",[170,2445,2446,2464,2468,2480,2494,2508,2522],{"__ignoreMap":168},[173,2447,2448,2450,2452,2454,2456,2458,2460,2462],{"class":175,"line":176},[173,2449,542],{"class":541},[173,2451,546],{"class":545},[173,2453,550],{"class":549},[173,2455,553],{"class":545},[173,2457,556],{"class":541},[173,2459,559],{"class":545},[173,2461,563],{"class":562},[173,2463,566],{"class":545},[173,2465,2466],{"class":175,"line":182},[173,2467,186],{"emptyLinePlaceholder":185},[173,2469,2470,2472,2474,2476,2478],{"class":175,"line":189},[173,2471,575],{"class":541},[173,2473,578],{"class":541},[173,2475,550],{"class":581},[173,2477,584],{"class":549},[173,2479,587],{"class":545},[173,2481,2482,2484,2486,2488,2490,2492],{"class":175,"line":195},[173,2483,593],{"class":592},[173,2485,596],{"class":545},[173,2487,559],{"class":545},[173,2489,601],{"class":562},[173,2491,604],{"class":545},[173,2493,607],{"class":545},[173,2495,2496,2498,2500,2502,2504,2506],{"class":175,"line":201},[173,2497,612],{"class":592},[173,2499,596],{"class":545},[173,2501,559],{"class":545},[173,2503,619],{"class":562},[173,2505,604],{"class":545},[173,2507,607],{"class":545},[173,2509,2510,2512,2514,2516,2518,2520],{"class":175,"line":207},[173,2511,628],{"class":592},[173,2513,596],{"class":545},[173,2515,559],{"class":545},[173,2517,635],{"class":562},[173,2519,604],{"class":545},[173,2521,607],{"class":545},[173,2523,2524,2526],{"class":175,"line":213},[173,2525,649],{"class":545},[173,2527,652],{"class":549},[145,2529,2531],{"id":2530},"content-types","Content Types",[150,2533,2534],{},"Resources can return different MIME types:",[1179,2536,2537,2620,2722],{},[162,2538,2541],{"className":531,"code":2539,"filename":2540,"language":534,"meta":168,"style":168},"return {\n  contents: [{\n    uri: uri.toString(),\n    mimeType: 'text\u002Fmarkdown',\n    text: '# Markdown content',\n  }],\n}\n","Text\u002FMarkdown",[170,2542,2543,2550,2561,2578,2592,2608,2616],{"__ignoreMap":168},[173,2544,2545,2548],{"class":175,"line":176},[173,2546,2547],{"class":541},"return",[173,2549,848],{"class":545},[173,2551,2552,2555,2557,2559],{"class":175,"line":182},[173,2553,2554],{"class":592},"  contents",[173,2556,596],{"class":545},[173,2558,969],{"class":549},[173,2560,587],{"class":545},[173,2562,2563,2566,2568,2570,2572,2574,2576],{"class":175,"line":189},[173,2564,2565],{"class":592},"    uri",[173,2567,596],{"class":545},[173,2569,982],{"class":549},[173,2571,985],{"class":545},[173,2573,988],{"class":581},[173,2575,991],{"class":549},[173,2577,607],{"class":545},[173,2579,2580,2582,2584,2586,2588,2590],{"class":175,"line":195},[173,2581,853],{"class":592},[173,2583,596],{"class":545},[173,2585,559],{"class":545},[173,2587,681],{"class":562},[173,2589,604],{"class":545},[173,2591,607],{"class":545},[173,2593,2594,2597,2599,2601,2604,2606],{"class":175,"line":201},[173,2595,2596],{"class":592},"    text",[173,2598,596],{"class":545},[173,2600,559],{"class":545},[173,2602,2603],{"class":562},"# Markdown content",[173,2605,604],{"class":545},[173,2607,607],{"class":545},[173,2609,2610,2612,2614],{"class":175,"line":207},[173,2611,1706],{"class":545},[173,2613,1030],{"class":549},[173,2615,607],{"class":545},[173,2617,2618],{"class":175,"line":213},[173,2619,1391],{"class":545},[162,2621,2624],{"className":531,"code":2622,"filename":2623,"language":534,"meta":168,"style":168},"return {\n  contents: [{\n    uri: uri.toString(),\n    mimeType: 'application\u002Fjson',\n    text: JSON.stringify({ key: 'value' }),\n  }],\n}\n","JSON",[170,2625,2626,2632,2642,2658,2673,2710,2718],{"__ignoreMap":168},[173,2627,2628,2630],{"class":175,"line":176},[173,2629,2547],{"class":541},[173,2631,848],{"class":545},[173,2633,2634,2636,2638,2640],{"class":175,"line":182},[173,2635,2554],{"class":592},[173,2637,596],{"class":545},[173,2639,969],{"class":549},[173,2641,587],{"class":545},[173,2643,2644,2646,2648,2650,2652,2654,2656],{"class":175,"line":189},[173,2645,2565],{"class":592},[173,2647,596],{"class":545},[173,2649,982],{"class":549},[173,2651,985],{"class":545},[173,2653,988],{"class":581},[173,2655,991],{"class":549},[173,2657,607],{"class":545},[173,2659,2660,2662,2664,2666,2669,2671],{"class":175,"line":195},[173,2661,853],{"class":592},[173,2663,596],{"class":545},[173,2665,559],{"class":545},[173,2667,2668],{"class":562},"application\u002Fjson",[173,2670,604],{"class":545},[173,2672,607],{"class":545},[173,2674,2675,2677,2679,2682,2684,2687,2689,2692,2695,2697,2699,2702,2704,2706,2708],{"class":175,"line":201},[173,2676,2596],{"class":592},[173,2678,596],{"class":545},[173,2680,2681],{"class":549}," JSON",[173,2683,985],{"class":545},[173,2685,2686],{"class":581},"stringify",[173,2688,584],{"class":549},[173,2690,2691],{"class":545},"{",[173,2693,2694],{"class":592}," key",[173,2696,596],{"class":545},[173,2698,559],{"class":545},[173,2700,2701],{"class":562},"value",[173,2703,604],{"class":545},[173,2705,553],{"class":545},[173,2707,682],{"class":549},[173,2709,607],{"class":545},[173,2711,2712,2714,2716],{"class":175,"line":207},[173,2713,1706],{"class":545},[173,2715,1030],{"class":549},[173,2717,607],{"class":545},[173,2719,2720],{"class":175,"line":213},[173,2721,1391],{"class":545},[162,2723,2726],{"className":531,"code":2724,"filename":2725,"language":534,"meta":168,"style":168},"return {\n  contents: [{\n    uri: uri.toString(),\n    mimeType: 'image\u002Fpng',\n    blob: Buffer.from(binaryData),\n  }],\n}\n","Binary Data",[170,2727,2728,2734,2744,2760,2775,2795,2803],{"__ignoreMap":168},[173,2729,2730,2732],{"class":175,"line":176},[173,2731,2547],{"class":541},[173,2733,848],{"class":545},[173,2735,2736,2738,2740,2742],{"class":175,"line":182},[173,2737,2554],{"class":592},[173,2739,596],{"class":545},[173,2741,969],{"class":549},[173,2743,587],{"class":545},[173,2745,2746,2748,2750,2752,2754,2756,2758],{"class":175,"line":189},[173,2747,2565],{"class":592},[173,2749,596],{"class":545},[173,2751,982],{"class":549},[173,2753,985],{"class":545},[173,2755,988],{"class":581},[173,2757,991],{"class":549},[173,2759,607],{"class":545},[173,2761,2762,2764,2766,2768,2771,2773],{"class":175,"line":195},[173,2763,853],{"class":592},[173,2765,596],{"class":545},[173,2767,559],{"class":545},[173,2769,2770],{"class":562},"image\u002Fpng",[173,2772,604],{"class":545},[173,2774,607],{"class":545},[173,2776,2777,2780,2782,2785,2787,2790,2793],{"class":175,"line":201},[173,2778,2779],{"class":592},"    blob",[173,2781,596],{"class":545},[173,2783,2784],{"class":549}," Buffer",[173,2786,985],{"class":545},[173,2788,2789],{"class":581},"from",[173,2791,2792],{"class":549},"(binaryData)",[173,2794,607],{"class":545},[173,2796,2797,2799,2801],{"class":175,"line":207},[173,2798,1706],{"class":545},[173,2800,1030],{"class":549},[173,2802,607],{"class":545},[173,2804,2805],{"class":175,"line":213},[173,2806,1391],{"class":545},[145,2808,2810],{"id":2809},"error-handling","Error Handling",[150,2812,2813],{},"Handle errors gracefully in your handlers:",[162,2815,2817],{"className":531,"code":2816,"filename":701,"language":534,"meta":168,"style":168},"import { readFile } from 'node:fs\u002Fpromises'\nimport { fileURLToPath } from 'node:url'\nimport { defineMcpResource } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpResource({\n  name: 'readme',\n  uri: 'file:\u002F\u002F\u002FREADME.md',\n  handler: async (uri: URL) => {\n    try {\n      const filePath = fileURLToPath(uri)\n      const content = await readFile(filePath, 'utf-8')\n\n      return {\n        contents: [{\n          uri: uri.toString(),\n          mimeType: 'text\u002Fmarkdown',\n          text: content,\n        }],\n      }\n    }\n    catch (error) {\n      return {\n        contents: [{\n          uri: uri.toString(),\n          mimeType: 'text\u002Fplain',\n          text: `Error: ${error instanceof Error ? error.message : String(error)}`,\n        }],\n        isError: true,\n      }\n    }\n  },\n})\n",[170,2818,2819,2837,2855,2873,2877,2889,2903,2917,2939,2946,2963,2989,2993,2999,3010,3027,3042,3053,3062,3066,3070,3085,3091,3101,3117,3131,3179,3187,3200,3204,3208,3212],{"__ignoreMap":168},[173,2820,2821,2823,2825,2827,2829,2831,2833,2835],{"class":175,"line":176},[173,2822,542],{"class":541},[173,2824,546],{"class":545},[173,2826,712],{"class":549},[173,2828,553],{"class":545},[173,2830,556],{"class":541},[173,2832,559],{"class":545},[173,2834,721],{"class":562},[173,2836,566],{"class":545},[173,2838,2839,2841,2843,2845,2847,2849,2851,2853],{"class":175,"line":182},[173,2840,542],{"class":541},[173,2842,546],{"class":545},[173,2844,732],{"class":549},[173,2846,553],{"class":545},[173,2848,556],{"class":541},[173,2850,559],{"class":545},[173,2852,741],{"class":562},[173,2854,566],{"class":545},[173,2856,2857,2859,2861,2863,2865,2867,2869,2871],{"class":175,"line":189},[173,2858,542],{"class":541},[173,2860,546],{"class":545},[173,2862,550],{"class":549},[173,2864,553],{"class":545},[173,2866,556],{"class":541},[173,2868,559],{"class":545},[173,2870,563],{"class":562},[173,2872,566],{"class":545},[173,2874,2875],{"class":175,"line":195},[173,2876,186],{"emptyLinePlaceholder":185},[173,2878,2879,2881,2883,2885,2887],{"class":175,"line":201},[173,2880,575],{"class":541},[173,2882,578],{"class":541},[173,2884,550],{"class":581},[173,2886,584],{"class":549},[173,2888,587],{"class":545},[173,2890,2891,2893,2895,2897,2899,2901],{"class":175,"line":207},[173,2892,593],{"class":592},[173,2894,596],{"class":545},[173,2896,559],{"class":545},[173,2898,601],{"class":562},[173,2900,604],{"class":545},[173,2902,607],{"class":545},[173,2904,2905,2907,2909,2911,2913,2915],{"class":175,"line":213},[173,2906,827],{"class":592},[173,2908,596],{"class":545},[173,2910,559],{"class":545},[173,2912,834],{"class":562},[173,2914,604],{"class":545},[173,2916,607],{"class":545},[173,2918,2919,2921,2923,2925,2927,2929,2931,2933,2935,2937],{"class":175,"line":219},[173,2920,874],{"class":581},[173,2922,596],{"class":545},[173,2924,880],{"class":879},[173,2926,883],{"class":545},[173,2928,692],{"class":886},[173,2930,596],{"class":545},[173,2932,892],{"class":891},[173,2934,682],{"class":545},[173,2936,897],{"class":879},[173,2938,848],{"class":545},[173,2940,2941,2944],{"class":175,"line":225},[173,2942,2943],{"class":541},"    try",[173,2945,848],{"class":545},[173,2947,2948,2951,2953,2955,2957,2959,2961],{"class":175,"line":231},[173,2949,2950],{"class":879},"      const",[173,2952,908],{"class":549},[173,2954,911],{"class":545},[173,2956,732],{"class":581},[173,2958,584],{"class":592},[173,2960,692],{"class":549},[173,2962,652],{"class":592},[173,2964,2965,2967,2969,2971,2973,2975,2977,2979,2981,2983,2985,2987],{"class":175,"line":236},[173,2966,2950],{"class":879},[173,2968,927],{"class":549},[173,2970,911],{"class":545},[173,2972,932],{"class":541},[173,2974,712],{"class":581},[173,2976,584],{"class":592},[173,2978,939],{"class":549},[173,2980,640],{"class":545},[173,2982,559],{"class":545},[173,2984,946],{"class":562},[173,2986,604],{"class":545},[173,2988,652],{"class":592},[173,2990,2991],{"class":175,"line":467},[173,2992,186],{"emptyLinePlaceholder":185},[173,2994,2995,2997],{"class":175,"line":871},[173,2996,1611],{"class":541},[173,2998,848],{"class":545},[173,3000,3001,3004,3006,3008],{"class":175,"line":902},[173,3002,3003],{"class":592},"        contents",[173,3005,596],{"class":545},[173,3007,969],{"class":592},[173,3009,587],{"class":545},[173,3011,3012,3015,3017,3019,3021,3023,3025],{"class":175,"line":922},[173,3013,3014],{"class":592},"          uri",[173,3016,596],{"class":545},[173,3018,982],{"class":549},[173,3020,985],{"class":545},[173,3022,988],{"class":581},[173,3024,991],{"class":592},[173,3026,607],{"class":545},[173,3028,3029,3032,3034,3036,3038,3040],{"class":175,"line":953},[173,3030,3031],{"class":592},"          mimeType",[173,3033,596],{"class":545},[173,3035,559],{"class":545},[173,3037,681],{"class":562},[173,3039,604],{"class":545},[173,3041,607],{"class":545},[173,3043,3044,3047,3049,3051],{"class":175,"line":961},[173,3045,3046],{"class":592},"          text",[173,3048,596],{"class":545},[173,3050,927],{"class":549},[173,3052,607],{"class":545},[173,3054,3055,3058,3060],{"class":175,"line":974},[173,3056,3057],{"class":545},"        }",[173,3059,1030],{"class":592},[173,3061,607],{"class":545},[173,3063,3064],{"class":175,"line":996},[173,3065,1696],{"class":545},[173,3067,3068],{"class":175,"line":1012},[173,3069,1038],{"class":545},[173,3071,3072,3075,3077,3080,3083],{"class":175,"line":1024},[173,3073,3074],{"class":541},"    catch",[173,3076,883],{"class":592},[173,3078,3079],{"class":549},"error",[173,3081,3082],{"class":592},") ",[173,3084,587],{"class":545},[173,3086,3087,3089],{"class":175,"line":1035},[173,3088,1611],{"class":541},[173,3090,848],{"class":545},[173,3092,3093,3095,3097,3099],{"class":175,"line":1041},[173,3094,3003],{"class":592},[173,3096,596],{"class":545},[173,3098,969],{"class":592},[173,3100,587],{"class":545},[173,3102,3103,3105,3107,3109,3111,3113,3115],{"class":175,"line":1046},[173,3104,3014],{"class":592},[173,3106,596],{"class":545},[173,3108,982],{"class":549},[173,3110,985],{"class":545},[173,3112,988],{"class":581},[173,3114,991],{"class":592},[173,3116,607],{"class":545},[173,3118,3119,3121,3123,3125,3127,3129],{"class":175,"line":1820},[173,3120,3031],{"class":592},[173,3122,596],{"class":545},[173,3124,559],{"class":545},[173,3126,1869],{"class":562},[173,3128,604],{"class":545},[173,3130,607],{"class":545},[173,3132,3133,3135,3137,3140,3143,3146,3149,3152,3155,3158,3161,3163,3166,3168,3171,3174,3177],{"class":175,"line":1825},[173,3134,3046],{"class":592},[173,3136,596],{"class":545},[173,3138,3139],{"class":545}," `",[173,3141,3142],{"class":562},"Error: ",[173,3144,3145],{"class":545},"${",[173,3147,3148],{"class":549},"error ",[173,3150,3151],{"class":545},"instanceof",[173,3153,3154],{"class":891}," Error",[173,3156,3157],{"class":545}," ?",[173,3159,3160],{"class":549}," error",[173,3162,985],{"class":545},[173,3164,3165],{"class":549},"message ",[173,3167,596],{"class":545},[173,3169,3170],{"class":581}," String",[173,3172,3173],{"class":549},"(error)",[173,3175,3176],{"class":545},"}`",[173,3178,607],{"class":545},[173,3180,3181,3183,3185],{"class":175,"line":1832},[173,3182,3057],{"class":545},[173,3184,1030],{"class":592},[173,3186,607],{"class":545},[173,3188,3189,3192,3194,3198],{"class":175,"line":1843},[173,3190,3191],{"class":592},"        isError",[173,3193,596],{"class":545},[173,3195,3197],{"class":3196},"sfNiH"," true",[173,3199,607],{"class":545},[173,3201,3202],{"class":175,"line":1860},[173,3203,1696],{"class":545},[173,3205,3206],{"class":175,"line":1876},[173,3207,1038],{"class":545},[173,3209,3210],{"class":175,"line":1887},[173,3211,868],{"class":545},[173,3213,3214,3216],{"class":175,"line":1896},[173,3215,649],{"class":545},[173,3217,652],{"class":549},[145,3219,3221],{"id":3220},"groups-and-tags","Groups and Tags",[150,3223,3224,3225,693,3228,3231,3232,985],{},"Organize your resources with ",[170,3226,3227],{},"group",[170,3229,3230],{},"tags"," for categorization. These fields work the same way as for ",[249,3233,251],{"href":3234},"\u002Fcore-concepts\u002Ftools#groups-and-tags",[162,3236,3239],{"className":531,"code":3237,"filename":3238,"language":534,"meta":168,"style":168},"import { defineMcpResource } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpResource({\n  group: 'config',\n  tags: ['readonly', 'settings'],\n  description: 'Application settings',\n  file: 'config\u002Fapp.json',\n})\n","server\u002Fmcp\u002Fresources\u002Fconfig\u002Fapp-settings.ts",[170,3240,3241,3259,3263,3275,3291,3320,3335,3350],{"__ignoreMap":168},[173,3242,3243,3245,3247,3249,3251,3253,3255,3257],{"class":175,"line":176},[173,3244,542],{"class":541},[173,3246,546],{"class":545},[173,3248,550],{"class":549},[173,3250,553],{"class":545},[173,3252,556],{"class":541},[173,3254,559],{"class":545},[173,3256,563],{"class":562},[173,3258,566],{"class":545},[173,3260,3261],{"class":175,"line":182},[173,3262,186],{"emptyLinePlaceholder":185},[173,3264,3265,3267,3269,3271,3273],{"class":175,"line":189},[173,3266,575],{"class":541},[173,3268,578],{"class":541},[173,3270,550],{"class":581},[173,3272,584],{"class":549},[173,3274,587],{"class":545},[173,3276,3277,3280,3282,3284,3287,3289],{"class":175,"line":195},[173,3278,3279],{"class":592},"  group",[173,3281,596],{"class":545},[173,3283,559],{"class":545},[173,3285,3286],{"class":562},"config",[173,3288,604],{"class":545},[173,3290,607],{"class":545},[173,3292,3293,3296,3298,3300,3302,3305,3307,3309,3311,3314,3316,3318],{"class":175,"line":201},[173,3294,3295],{"class":592},"  tags",[173,3297,596],{"class":545},[173,3299,969],{"class":549},[173,3301,604],{"class":545},[173,3303,3304],{"class":562},"readonly",[173,3306,604],{"class":545},[173,3308,640],{"class":545},[173,3310,559],{"class":545},[173,3312,3313],{"class":562},"settings",[173,3315,604],{"class":545},[173,3317,1030],{"class":549},[173,3319,607],{"class":545},[173,3321,3322,3324,3326,3328,3331,3333],{"class":175,"line":207},[173,3323,612],{"class":592},[173,3325,596],{"class":545},[173,3327,559],{"class":545},[173,3329,3330],{"class":562},"Application settings",[173,3332,604],{"class":545},[173,3334,607],{"class":545},[173,3336,3337,3339,3341,3343,3346,3348],{"class":175,"line":213},[173,3338,628],{"class":592},[173,3340,596],{"class":545},[173,3342,559],{"class":545},[173,3344,3345],{"class":562},"config\u002Fapp.json",[173,3347,604],{"class":545},[173,3349,607],{"class":545},[173,3351,3352,3354],{"class":175,"line":219},[173,3353,649],{"class":545},[173,3355,652],{"class":549},[150,3357,3358],{},"You can also place resource files in subdirectories to auto-infer the group:",[162,3360,3365],{"className":3361,"code":3363,"language":3364},[3362],"language-text","server\u002Fmcp\u002Fresources\u002F\n├── config\u002F\n│   └── app-settings.ts   → group: 'config'\n├── docs\u002F\n│   └── readme.ts         → group: 'docs'\n└── schema.ts             → no group\n","text",[170,3366,3363],{"__ignoreMap":168},[241,3368,3369,3370,693,3372,3374,3375,3377,3378,3384],{"color":507,"icon":508},"Resource ",[170,3371,3227],{},[170,3373,3230],{}," are stored on the definition objects but are not yet included in ",[170,3376,482],{}," protocol responses. This will be supported when ",[249,3379,3383],{"href":3380,"rel":3381},"https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fmodelcontextprotocol\u002Fissues\u002F1300",[3382],"nofollow","SEP-1300"," is adopted by the MCP SDK.",[145,3386,3388],{"id":3387},"file-organization","File Organization",[150,3390,3391,3392,3395],{},"Organize your resources in the ",[170,3393,3394],{},"server\u002Fmcp\u002Fresources\u002F"," directory. Both flat and nested layouts are supported:",[162,3397,3400],{"className":3398,"code":3399,"language":3364},[3362],"server\u002F\n└── mcp\u002F\n    └── resources\u002F\n        ├── readme.ts\n        ├── file.ts\n        └── config\u002F\n            └── app-settings.ts\n",[170,3401,3399],{"__ignoreMap":168},[150,3403,3404,3405,985],{},"Each file should export a default resource definition. Subdirectories automatically set the ",[170,3406,3227],{},[145,3408,3410],{"id":3409},"uri-schemes","URI Schemes",[150,3412,3413],{},"You can use any URI scheme that makes sense for your use case:",[366,3415,3416,3422,3428,3438],{},[369,3417,3418,3421],{},[170,3419,3420],{},"file:\u002F\u002F"," - File system resources",[369,3423,3424,3427],{},[170,3425,3426],{},"api:\u002F\u002F"," - API endpoints",[369,3429,3430,3433,3434,3437],{},[170,3431,3432],{},"http:\u002F\u002F"," \u002F ",[170,3435,3436],{},"https:\u002F\u002F"," - Web resources",[369,3439,3440,3443],{},[170,3441,3442],{},"custom:\u002F\u002F"," - Custom schemes",[145,3445,3447],{"id":3446},"conditional-registration","Conditional Registration",[150,3449,3450,3451,3454],{},"You can control whether a resource is visible to clients using the ",[170,3452,3453],{},"enabled"," guard:",[162,3456,3459],{"className":531,"code":3457,"filename":3458,"language":534,"meta":168,"style":168},"export default defineMcpResource({\n  name: 'internal-data',\n  uri: 'app:\u002F\u002Finternal',\n  enabled: event => event.context.user?.role === 'admin',\n  handler: async (uri) => ({\n    contents: [{ uri: uri.toString(), text: 'Internal data...' }],\n  }),\n})\n","server\u002Fmcp\u002Fresources\u002Finternal-data.ts",[170,3460,3461,3473,3488,3503,3545,3565,3607,3615],{"__ignoreMap":168},[173,3462,3463,3465,3467,3469,3471],{"class":175,"line":176},[173,3464,575],{"class":541},[173,3466,578],{"class":541},[173,3468,550],{"class":581},[173,3470,584],{"class":549},[173,3472,587],{"class":545},[173,3474,3475,3477,3479,3481,3484,3486],{"class":175,"line":182},[173,3476,593],{"class":592},[173,3478,596],{"class":545},[173,3480,559],{"class":545},[173,3482,3483],{"class":562},"internal-data",[173,3485,604],{"class":545},[173,3487,607],{"class":545},[173,3489,3490,3492,3494,3496,3499,3501],{"class":175,"line":189},[173,3491,827],{"class":592},[173,3493,596],{"class":545},[173,3495,559],{"class":545},[173,3497,3498],{"class":562},"app:\u002F\u002Finternal",[173,3500,604],{"class":545},[173,3502,607],{"class":545},[173,3504,3505,3508,3510,3513,3515,3517,3519,3522,3524,3527,3530,3533,3536,3538,3541,3543],{"class":175,"line":195},[173,3506,3507],{"class":581},"  enabled",[173,3509,596],{"class":545},[173,3511,3512],{"class":886}," event",[173,3514,897],{"class":879},[173,3516,3512],{"class":549},[173,3518,985],{"class":545},[173,3520,3521],{"class":549},"context",[173,3523,985],{"class":545},[173,3525,3526],{"class":549},"user",[173,3528,3529],{"class":545},"?.",[173,3531,3532],{"class":549},"role ",[173,3534,3535],{"class":545},"===",[173,3537,559],{"class":545},[173,3539,3540],{"class":562},"admin",[173,3542,604],{"class":545},[173,3544,607],{"class":545},[173,3546,3547,3549,3551,3553,3555,3557,3559,3561,3563],{"class":175,"line":201},[173,3548,874],{"class":581},[173,3550,596],{"class":545},[173,3552,880],{"class":879},[173,3554,883],{"class":545},[173,3556,692],{"class":886},[173,3558,682],{"class":545},[173,3560,897],{"class":879},[173,3562,883],{"class":549},[173,3564,587],{"class":545},[173,3566,3567,3569,3571,3573,3575,3577,3579,3581,3583,3585,3587,3589,3592,3594,3596,3599,3601,3603,3605],{"class":175,"line":207},[173,3568,2222],{"class":592},[173,3570,596],{"class":545},[173,3572,969],{"class":549},[173,3574,2691],{"class":545},[173,3576,982],{"class":592},[173,3578,596],{"class":545},[173,3580,982],{"class":549},[173,3582,985],{"class":545},[173,3584,988],{"class":581},[173,3586,991],{"class":549},[173,3588,640],{"class":545},[173,3590,3591],{"class":592}," text",[173,3593,596],{"class":545},[173,3595,559],{"class":545},[173,3597,3598],{"class":562},"Internal data...",[173,3600,604],{"class":545},[173,3602,553],{"class":545},[173,3604,1030],{"class":549},[173,3606,607],{"class":545},[173,3608,3609,3611,3613],{"class":175,"line":213},[173,3610,1706],{"class":545},[173,3612,682],{"class":549},[173,3614,607],{"class":545},[173,3616,3617,3619],{"class":175,"line":219},[173,3618,649],{"class":545},[173,3620,652],{"class":549},[241,3622,3623,3624,3626],{"color":243,"icon":13},"See the ",[249,3625,101],{"href":102}," guide for detailed documentation on auth-based filtering.",[145,3628,3630],{"id":3629},"next-steps","Next Steps",[366,3632,3633,3638,3643,3648,3653],{},[369,3634,3635,3637],{},[249,3636,46],{"href":47}," - Create tools to perform actions",[369,3639,3640,3642],{},[249,3641,56],{"href":57}," - Create reusable prompts",[369,3644,3645,3647],{},[249,3646,61],{"href":62}," - Create custom MCP endpoints",[369,3649,3650,3652],{},[249,3651,101],{"href":102}," - Conditionally register definitions",[369,3654,3655,3657],{},[249,3656,111],{"href":132}," - More resource examples",[3659,3660,3661],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .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 .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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":168,"searchDepth":182,"depth":182,"links":3663},[3664,3665,3666,3667,3671,3672,3673,3674,3677,3678,3679,3680,3681,3682,3683,3684,3685],{"id":147,"depth":182,"text":148},{"id":270,"depth":182,"text":271},{"id":396,"depth":182,"text":397},{"id":512,"depth":182,"text":513,"children":3668},[3669,3670],{"id":520,"depth":189,"text":521},{"id":685,"depth":189,"text":686},{"id":1053,"depth":182,"text":1054},{"id":1173,"depth":182,"text":1174},{"id":1404,"depth":182,"text":1405},{"id":1913,"depth":182,"text":1411,"children":3675},[3676],{"id":2062,"depth":189,"text":2063},{"id":2174,"depth":182,"text":2175},{"id":2436,"depth":182,"text":2437},{"id":2530,"depth":182,"text":2531},{"id":2809,"depth":182,"text":2810},{"id":3220,"depth":182,"text":3221},{"id":3387,"depth":182,"text":3388},{"id":3409,"depth":182,"text":3410},{"id":3446,"depth":182,"text":3447},{"id":3629,"depth":182,"text":3630},"Expose read-only data sources as MCP resources to provide context to AI models.","md",null,{},{"icon":54},{"title":51,"description":3692},"Create MCP resources to expose read-only data sources with static or dynamic URIs.","KBd7qNz4l_XPeuvZVIxsa3DFqF_perXbvXWKm_fUhnw",[3695,3697],{"title":46,"path":47,"stem":48,"description":3696,"icon":49,"children":-1},"Create MCP tools with Zod validation and type safety.",{"title":56,"path":57,"stem":58,"description":3698,"icon":59,"children":-1},"Create reusable prompts for AI assistants with optional arguments.",1774838289513]