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