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