[{"data":1,"prerenderedAt":1449},["ShallowReactive",2],{"navigation_docs":3,"-resources-templates-and-handlers":282,"-resources-templates-and-handlers-surround":1444},[4,40,70,99,122,156,189,253],{"title":5,"path":6,"stem":7,"children":8,"page":39},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24,29,34],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-book-open",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Configuration","\u002Fgetting-started\u002Fconfiguration","1.getting-started\u002F3.configuration","i-lucide-settings",{"title":25,"path":26,"stem":27,"icon":28},"Inspector","\u002Fgetting-started\u002Finspector","1.getting-started\u002F4.inspector","i-lucide-circuit-board",{"title":30,"path":31,"stem":32,"icon":33},"Connection","\u002Fgetting-started\u002Fconnection","1.getting-started\u002F5.connection","i-lucide-plug",{"title":35,"path":36,"stem":37,"icon":38},"Agent Skills","\u002Fgetting-started\u002Fagent-skills","1.getting-started\u002F6.agent-skills","i-lucide-sparkles",false,{"title":41,"path":42,"stem":43,"children":44,"page":39},"Tools","\u002Ftools","2.tools",[45,50,55,60,65],{"title":46,"path":47,"stem":48,"icon":49},"Overview","\u002Ftools\u002Foverview","2.tools\u002F0.overview","i-lucide-wrench",{"title":51,"path":52,"stem":53,"icon":54},"Schema, handler & returns","\u002Ftools\u002Fschema-handler","2.tools\u002F1.schema-handler","i-lucide-braces",{"title":56,"path":57,"stem":58,"icon":59},"Annotations & input examples","\u002Ftools\u002Fannotations","2.tools\u002F2.annotations","i-lucide-badge-info",{"title":61,"path":62,"stem":63,"icon":64},"Errors & caching","\u002Ftools\u002Ferrors-caching","2.tools\u002F3.errors-caching","i-lucide-shield",{"title":66,"path":67,"stem":68,"icon":69},"Groups, files & dynamic registration","\u002Ftools\u002Fgroups-organization","2.tools\u002F4.groups-organization","i-lucide-tags",{"title":71,"path":72,"stem":73,"children":74,"page":39},"Resources","\u002Fresources","3.resources",[75,79,84,89,94],{"title":46,"path":76,"stem":77,"icon":78},"\u002Fresources\u002Foverview","3.resources\u002F0.overview","i-lucide-package",{"title":80,"path":81,"stem":82,"icon":83},"Static resources & structure","\u002Fresources\u002Fstatic-and-structure","3.resources\u002F1.static-and-structure","i-lucide-file-stack",{"title":85,"path":86,"stem":87,"icon":88},"Templates & handlers","\u002Fresources\u002Ftemplates-and-handlers","3.resources\u002F2.templates-and-handlers","i-lucide-git-branch",{"title":90,"path":91,"stem":92,"icon":93},"Metadata, content & errors","\u002Fresources\u002Fcontent-metadata-errors","3.resources\u002F3.content-metadata-errors","i-lucide-layers",{"title":95,"path":96,"stem":97,"icon":98},"Groups & organization","\u002Fresources\u002Forganization","3.resources\u002F4.organization","i-lucide-folder-tree",{"title":100,"path":101,"stem":102,"children":103,"page":39},"Prompts","\u002Fprompts","4.prompts",[104,108,113,117],{"title":46,"path":105,"stem":106,"icon":107},"\u002Fprompts\u002Foverview","4.prompts\u002F0.overview","i-lucide-message-square",{"title":109,"path":110,"stem":111,"icon":112},"Authoring & structure","\u002Fprompts\u002Fauthoring","4.prompts\u002F1.authoring","i-lucide-pen-line",{"title":114,"path":115,"stem":116,"icon":93},"Input, handler & messages","\u002Fprompts\u002Finput-handler-messages","4.prompts\u002F2.input-handler-messages",{"title":118,"path":119,"stem":120,"icon":121},"Patterns & advanced","\u002Fprompts\u002Fpatterns-advanced","4.prompts\u002F3.patterns-advanced","i-lucide-line-chart",{"title":123,"path":124,"stem":125,"children":126,"page":39},"Handlers","\u002Fhandlers","5.handlers",[127,131,136,141,146,151],{"title":46,"path":128,"stem":129,"icon":130},"\u002Fhandlers\u002Foverview","5.handlers\u002F0.overview","i-lucide-server",{"title":132,"path":133,"stem":134,"icon":135},"Default & custom handlers","\u002Fhandlers\u002Fdefault-and-custom","5.handlers\u002F1.default-and-custom","i-lucide-toggle-left",{"title":137,"path":138,"stem":139,"icon":140},"Structure & options","\u002Fhandlers\u002Fstructure-and-options","5.handlers\u002F2.structure-and-options","i-lucide-sliders-horizontal",{"title":142,"path":143,"stem":144,"icon":145},"Examples & routing","\u002Fhandlers\u002Fexamples-routing","5.handlers\u002F3.examples-routing","i-lucide-route",{"title":147,"path":148,"stem":149,"icon":150},"Sharing & practices","\u002Fhandlers\u002Fsharing-practices","5.handlers\u002F4.sharing-practices","i-lucide-share-2",{"title":152,"path":153,"stem":154,"icon":155},"Multi-handler organization","\u002Fhandlers\u002Forganization","5.handlers\u002F5.organization","i-lucide-network",{"title":157,"path":158,"stem":159,"children":160,"page":39},"Apps","\u002Fapps","6.apps",[161,165,170,175,179,184],{"title":46,"path":162,"stem":163,"icon":164},"\u002Fapps\u002Foverview","6.apps\u002F0.overview","i-lucide-app-window",{"title":166,"path":167,"stem":168,"icon":169},"Authoring & defineMcpApp","\u002Fapps\u002Fauthoring","6.apps\u002F1.authoring","i-lucide-code-2",{"title":171,"path":172,"stem":173,"icon":174},"useMcpApp() bridge","\u002Fapps\u002Fuse-mcp-app","6.apps\u002F2.use-mcp-app","i-lucide-message-circle",{"title":176,"path":177,"stem":178,"icon":64},"CSP & build pipeline","\u002Fapps\u002Fcsp-and-wiring","6.apps\u002F3.csp-and-wiring",{"title":180,"path":181,"stem":182,"icon":183},"Testing & publishing","\u002Fapps\u002Ftesting-publishing","6.apps\u002F4.testing-publishing","i-lucide-rocket",{"title":185,"path":186,"stem":187,"icon":188},"Patterns & limits","\u002Fapps\u002Fpatterns-reference","6.apps\u002F5.patterns-reference","i-lucide-book-marked",{"title":190,"path":191,"stem":192,"children":193,"page":39},"Advanced Topics","\u002Fadvanced","7.advanced",[194,199,204,209,214,218,223,228,233,238,243,248],{"title":195,"path":196,"stem":197,"icon":198},"Custom Paths","\u002Fadvanced\u002Fcustom-paths","7.advanced\u002F1.custom-paths","i-lucide-folder",{"title":200,"path":201,"stem":202,"icon":203},"Logging","\u002Fadvanced\u002Flogging","7.advanced\u002F10.logging","i-lucide-scroll-text",{"title":205,"path":206,"stem":207,"icon":208},"MCP Apps Internals","\u002Fadvanced\u002Fmcp-apps-internals","7.advanced\u002F11.mcp-apps-internals","i-lucide-cog",{"title":210,"path":211,"stem":212,"icon":213},"Listing Definitions","\u002Fadvanced\u002Flisting-definitions","7.advanced\u002F12.listing-definitions","i-lucide-list",{"title":215,"path":216,"stem":217,"icon":64},"Middleware","\u002Fadvanced\u002Fmiddleware","7.advanced\u002F2.middleware",{"title":219,"path":220,"stem":221,"icon":222},"TypeScript","\u002Fadvanced\u002Ftypescript","7.advanced\u002F3.typescript","i-lucide-type",{"title":224,"path":225,"stem":226,"icon":227},"Hooks","\u002Fadvanced\u002Fhooks","7.advanced\u002F4.hooks","i-lucide-webhook",{"title":229,"path":230,"stem":231,"icon":232},"MCP Evals","\u002Fadvanced\u002Fevals","7.advanced\u002F5.evals","i-lucide-flask-conical",{"title":234,"path":235,"stem":236,"icon":237},"Sessions","\u002Fadvanced\u002Fsessions","7.advanced\u002F6.sessions","i-lucide-database",{"title":239,"path":240,"stem":241,"icon":242},"Dynamic Definitions","\u002Fadvanced\u002Fdynamic-definitions","7.advanced\u002F7.dynamic-definitions","i-lucide-toggle-right",{"title":244,"path":245,"stem":246,"icon":247},"Code Mode","\u002Fadvanced\u002Fcode-mode","7.advanced\u002F8.code-mode","i-lucide-code",{"title":249,"path":250,"stem":251,"icon":252},"Elicitation","\u002Fadvanced\u002Felicitation","7.advanced\u002F9.elicitation","i-lucide-message-square-quote",{"title":254,"path":255,"stem":256,"children":257,"page":39},"Examples","\u002Fexamples","8.examples",[258,263,268,273,278],{"title":259,"path":260,"stem":261,"icon":262},"Authentication","\u002Fexamples\u002Fauthentication","8.examples\u002F1.authentication","i-lucide-shield-check",{"title":264,"path":265,"stem":266,"icon":267},"API Integration","\u002Fexamples\u002Fapi-integration","8.examples\u002F2.api-integration","i-lucide-globe",{"title":269,"path":270,"stem":271,"icon":272},"Common Patterns","\u002Fexamples\u002Fcommon-patterns","8.examples\u002F3.common-patterns","i-lucide-lightbulb",{"title":274,"path":275,"stem":276,"icon":277},"File Operations","\u002Fexamples\u002Ffile-operations","8.examples\u002F4.file-operations","i-lucide-file",{"title":279,"path":280,"stem":281,"icon":107},"Prompt Examples","\u002Fexamples\u002Fprompt-examples","8.examples\u002F5.prompt-examples",{"id":283,"title":85,"body":284,"description":1435,"extension":1436,"links":1437,"meta":1438,"navigation":1439,"path":86,"seo":1440,"stem":87,"__hash__":1443},"docs\u002F3.resources\u002F2.templates-and-handlers.md",{"type":285,"value":286,"toc":1428},"minimark",[287,292,301,897,900,905,1046,1051,1057,1160,1164,1167,1424],[288,289,291],"h2",{"id":290},"dynamic-resources-with-templates","Dynamic Resources with Templates",[293,294,295,296,300],"p",{},"Use ",[297,298,299],"code",{},"ResourceTemplate"," to create dynamic resources that accept variables:",[302,303,309],"pre",{"className":304,"code":305,"filename":306,"language":307,"meta":308,"style":308},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","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","typescript","",[297,310,311,344,365,386,410,431,438,456,477,494,522,542,549,557,568,603,634,642,648,654,665,703,729,761,792,797,805,818,837,854,866,877,883,889],{"__ignoreMap":308},[312,313,316,320,324,328,331,334,337,341],"span",{"class":314,"line":315},"line",1,[312,317,319],{"class":318},"s7zQu","import",[312,321,323],{"class":322},"sMK4o"," {",[312,325,327],{"class":326},"sTEyZ"," readFile",[312,329,330],{"class":322}," }",[312,332,333],{"class":318}," from",[312,335,336],{"class":322}," '",[312,338,340],{"class":339},"sfazB","node:fs\u002Fpromises",[312,342,343],{"class":322},"'\n",[312,345,347,349,351,354,356,358,360,363],{"class":314,"line":346},2,[312,348,319],{"class":318},[312,350,323],{"class":322},[312,352,353],{"class":326}," join",[312,355,330],{"class":322},[312,357,333],{"class":318},[312,359,336],{"class":322},[312,361,362],{"class":339},"node:path",[312,364,343],{"class":322},[312,366,368,370,372,375,377,379,381,384],{"class":314,"line":367},3,[312,369,319],{"class":318},[312,371,323],{"class":322},[312,373,374],{"class":326}," ResourceTemplate",[312,376,330],{"class":322},[312,378,333],{"class":318},[312,380,336],{"class":322},[312,382,383],{"class":339},"@modelcontextprotocol\u002Fsdk\u002Fserver\u002Fmcp.js",[312,385,343],{"class":322},[312,387,389,391,394,396,399,401,403,405,408],{"class":314,"line":388},4,[312,390,319],{"class":318},[312,392,393],{"class":318}," type",[312,395,323],{"class":322},[312,397,398],{"class":326}," Variables",[312,400,330],{"class":322},[312,402,333],{"class":318},[312,404,336],{"class":322},[312,406,407],{"class":339},"@modelcontextprotocol\u002Fsdk\u002Fshared\u002FuriTemplate.js",[312,409,343],{"class":322},[312,411,413,415,417,420,422,424,426,429],{"class":314,"line":412},5,[312,414,319],{"class":318},[312,416,323],{"class":322},[312,418,419],{"class":326}," defineMcpResource",[312,421,330],{"class":322},[312,423,333],{"class":318},[312,425,336],{"class":322},[312,427,428],{"class":339},"@nuxtjs\u002Fmcp-toolkit\u002Fserver",[312,430,343],{"class":322},[312,432,434],{"class":314,"line":433},6,[312,435,437],{"emptyLinePlaceholder":436},true,"\n",[312,439,441,444,447,450,453],{"class":314,"line":440},7,[312,442,443],{"class":318},"export",[312,445,446],{"class":318}," default",[312,448,419],{"class":449},"s2Zo4",[312,451,452],{"class":326},"(",[312,454,455],{"class":322},"{\n",[312,457,459,463,466,468,471,474],{"class":314,"line":458},8,[312,460,462],{"class":461},"swJcz","  name",[312,464,465],{"class":322},":",[312,467,336],{"class":322},[312,469,470],{"class":339},"file",[312,472,473],{"class":322},"'",[312,475,476],{"class":322},",\n",[312,478,480,483,485,487,490,492],{"class":314,"line":479},9,[312,481,482],{"class":461},"  title",[312,484,465],{"class":322},[312,486,336],{"class":322},[312,488,489],{"class":339},"File Resource",[312,491,473],{"class":322},[312,493,476],{"class":322},[312,495,497,500,502,505,507,509,511,514,516,519],{"class":314,"line":496},10,[312,498,499],{"class":461},"  uri",[312,501,465],{"class":322},[312,503,504],{"class":322}," new",[312,506,374],{"class":449},[312,508,452],{"class":326},[312,510,473],{"class":322},[312,512,513],{"class":339},"file:\u002F\u002F\u002Fproject\u002F{+path}",[312,515,473],{"class":322},[312,517,518],{"class":322},",",[312,520,521],{"class":322}," {\n",[312,523,525,528,530,534,537,540],{"class":314,"line":524},11,[312,526,527],{"class":449},"    list",[312,529,465],{"class":322},[312,531,533],{"class":532},"spNyl"," async",[312,535,536],{"class":322}," ()",[312,538,539],{"class":532}," =>",[312,541,521],{"class":322},[312,543,545],{"class":314,"line":544},12,[312,546,548],{"class":547},"sHwdD","      \u002F\u002F Return list of available resources\n",[312,550,552,555],{"class":314,"line":551},13,[312,553,554],{"class":318},"      return",[312,556,521],{"class":322},[312,558,560,563,565],{"class":314,"line":559},14,[312,561,562],{"class":461},"        resources",[312,564,465],{"class":322},[312,566,567],{"class":461}," [\n",[312,569,571,574,577,579,581,584,586,588,591,593,595,598,600],{"class":314,"line":570},15,[312,572,573],{"class":322},"          {",[312,575,576],{"class":461}," uri",[312,578,465],{"class":322},[312,580,336],{"class":322},[312,582,583],{"class":339},"file:\u002F\u002F\u002Fproject\u002FREADME.md",[312,585,473],{"class":322},[312,587,518],{"class":322},[312,589,590],{"class":461}," name",[312,592,465],{"class":322},[312,594,336],{"class":322},[312,596,597],{"class":339},"README.md",[312,599,473],{"class":322},[312,601,602],{"class":322}," },\n",[312,604,606,608,610,612,614,617,619,621,623,625,627,630,632],{"class":314,"line":605},16,[312,607,573],{"class":322},[312,609,576],{"class":461},[312,611,465],{"class":322},[312,613,336],{"class":322},[312,615,616],{"class":339},"file:\u002F\u002F\u002Fproject\u002Fsrc\u002Findex.ts",[312,618,473],{"class":322},[312,620,518],{"class":322},[312,622,590],{"class":461},[312,624,465],{"class":322},[312,626,336],{"class":322},[312,628,629],{"class":339},"src\u002Findex.ts",[312,631,473],{"class":322},[312,633,602],{"class":322},[312,635,637,640],{"class":314,"line":636},17,[312,638,639],{"class":461},"        ]",[312,641,476],{"class":322},[312,643,645],{"class":314,"line":644},18,[312,646,647],{"class":322},"      }\n",[312,649,651],{"class":314,"line":650},19,[312,652,653],{"class":322},"    },\n",[312,655,657,660,663],{"class":314,"line":656},20,[312,658,659],{"class":322},"  }",[312,661,662],{"class":326},")",[312,664,476],{"class":322},[312,666,668,671,673,675,678,682,684,688,690,693,695,697,699,701],{"class":314,"line":667},21,[312,669,670],{"class":449},"  handler",[312,672,465],{"class":322},[312,674,533],{"class":532},[312,676,677],{"class":322}," (",[312,679,681],{"class":680},"sHdIc","uri",[312,683,465],{"class":322},[312,685,687],{"class":686},"sBMFI"," URL",[312,689,518],{"class":322},[312,691,692],{"class":680}," variables",[312,694,465],{"class":322},[312,696,398],{"class":686},[312,698,662],{"class":322},[312,700,539],{"class":532},[312,702,521],{"class":322},[312,704,706,709,712,715,717,720,723,726],{"class":314,"line":705},22,[312,707,708],{"class":532},"    const",[312,710,711],{"class":326}," path",[312,713,714],{"class":322}," =",[312,716,692],{"class":326},[312,718,719],{"class":322},".",[312,721,722],{"class":326},"path",[312,724,725],{"class":318}," as",[312,727,728],{"class":686}," string\n",[312,730,732,734,737,739,741,743,746,748,751,754,756,758],{"class":314,"line":731},23,[312,733,708],{"class":532},[312,735,736],{"class":326}," filePath",[312,738,714],{"class":322},[312,740,353],{"class":449},[312,742,452],{"class":461},[312,744,745],{"class":326},"process",[312,747,719],{"class":322},[312,749,750],{"class":449},"cwd",[312,752,753],{"class":461},"()",[312,755,518],{"class":322},[312,757,711],{"class":326},[312,759,760],{"class":461},")\n",[312,762,764,766,769,771,774,776,778,781,783,785,788,790],{"class":314,"line":763},24,[312,765,708],{"class":532},[312,767,768],{"class":326}," content",[312,770,714],{"class":322},[312,772,773],{"class":318}," await",[312,775,327],{"class":449},[312,777,452],{"class":461},[312,779,780],{"class":326},"filePath",[312,782,518],{"class":322},[312,784,336],{"class":322},[312,786,787],{"class":339},"utf-8",[312,789,473],{"class":322},[312,791,760],{"class":461},[312,793,795],{"class":314,"line":794},25,[312,796,437],{"emptyLinePlaceholder":436},[312,798,800,803],{"class":314,"line":799},26,[312,801,802],{"class":318},"    return",[312,804,521],{"class":322},[312,806,808,811,813,816],{"class":314,"line":807},27,[312,809,810],{"class":461},"      contents",[312,812,465],{"class":322},[312,814,815],{"class":461}," [",[312,817,455],{"class":322},[312,819,821,824,826,828,830,833,835],{"class":314,"line":820},28,[312,822,823],{"class":461},"        uri",[312,825,465],{"class":322},[312,827,576],{"class":326},[312,829,719],{"class":322},[312,831,832],{"class":449},"toString",[312,834,753],{"class":461},[312,836,476],{"class":322},[312,838,840,843,845,847,850,852],{"class":314,"line":839},29,[312,841,842],{"class":461},"        mimeType",[312,844,465],{"class":322},[312,846,336],{"class":322},[312,848,849],{"class":339},"text\u002Fplain",[312,851,473],{"class":322},[312,853,476],{"class":322},[312,855,857,860,862,864],{"class":314,"line":856},30,[312,858,859],{"class":461},"        text",[312,861,465],{"class":322},[312,863,768],{"class":326},[312,865,476],{"class":322},[312,867,869,872,875],{"class":314,"line":868},31,[312,870,871],{"class":322},"      }",[312,873,874],{"class":461},"]",[312,876,476],{"class":322},[312,878,880],{"class":314,"line":879},32,[312,881,882],{"class":322},"    }\n",[312,884,886],{"class":314,"line":885},33,[312,887,888],{"class":322},"  },\n",[312,890,892,895],{"class":314,"line":891},34,[312,893,894],{"class":322},"}",[312,896,760],{"class":326},[288,898,299],{"id":899},"resourcetemplate",[293,901,902,904],{},[297,903,299],{}," allows you to create resources with variable parts in the URI:",[302,906,908],{"className":304,"code":907,"language":307,"meta":308,"style":308},"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",[297,909,910,929,944,949,955,964,995,1025,1032,1036,1040],{"__ignoreMap":308},[312,911,912,915,917,919,921,923,925,927],{"class":314,"line":315},[312,913,914],{"class":322},"new",[312,916,374],{"class":449},[312,918,452],{"class":326},[312,920,473],{"class":322},[312,922,513],{"class":339},[312,924,473],{"class":322},[312,926,518],{"class":322},[312,928,521],{"class":322},[312,930,931,934,936,938,940,942],{"class":314,"line":346},[312,932,933],{"class":449},"  list",[312,935,465],{"class":322},[312,937,533],{"class":532},[312,939,536],{"class":322},[312,941,539],{"class":532},[312,943,521],{"class":322},[312,945,946],{"class":314,"line":367},[312,947,948],{"class":547},"    \u002F\u002F Optional: Return list of available resources\n",[312,950,951,953],{"class":314,"line":388},[312,952,802],{"class":318},[312,954,521],{"class":322},[312,956,957,960,962],{"class":314,"line":412},[312,958,959],{"class":461},"      resources",[312,961,465],{"class":322},[312,963,567],{"class":461},[312,965,966,969,971,973,975,978,980,982,984,986,988,991,993],{"class":314,"line":433},[312,967,968],{"class":322},"        {",[312,970,576],{"class":461},[312,972,465],{"class":322},[312,974,336],{"class":322},[312,976,977],{"class":339},"file:\u002F\u002F\u002Fproject\u002Ffile1.txt",[312,979,473],{"class":322},[312,981,518],{"class":322},[312,983,590],{"class":461},[312,985,465],{"class":322},[312,987,336],{"class":322},[312,989,990],{"class":339},"File 1",[312,992,473],{"class":322},[312,994,602],{"class":322},[312,996,997,999,1001,1003,1005,1008,1010,1012,1014,1016,1018,1021,1023],{"class":314,"line":440},[312,998,968],{"class":322},[312,1000,576],{"class":461},[312,1002,465],{"class":322},[312,1004,336],{"class":322},[312,1006,1007],{"class":339},"file:\u002F\u002F\u002Fproject\u002Ffile2.txt",[312,1009,473],{"class":322},[312,1011,518],{"class":322},[312,1013,590],{"class":461},[312,1015,465],{"class":322},[312,1017,336],{"class":322},[312,1019,1020],{"class":339},"File 2",[312,1022,473],{"class":322},[312,1024,602],{"class":322},[312,1026,1027,1030],{"class":314,"line":458},[312,1028,1029],{"class":461},"      ]",[312,1031,476],{"class":322},[312,1033,1034],{"class":314,"line":479},[312,1035,882],{"class":322},[312,1037,1038],{"class":314,"line":496},[312,1039,888],{"class":322},[312,1041,1042,1044],{"class":314,"line":524},[312,1043,894],{"class":322},[312,1045,760],{"class":326},[1047,1048,1050],"h3",{"id":1049},"template-variables","Template Variables",[293,1052,1053,1054,465],{},"Variables in the URI are defined with ",[297,1055,1056],{},"{variableName}",[302,1058,1060],{"className":304,"code":1059,"language":307,"meta":308,"style":308},"\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",[297,1061,1062,1067,1093,1097,1102,1126,1130,1135],{"__ignoreMap":308},[312,1063,1064],{"class":314,"line":315},[312,1065,1066],{"class":547},"\u002F\u002F Single variable\n",[312,1068,1069,1071,1073,1075,1077,1080,1082,1084,1086,1089,1091],{"class":314,"line":346},[312,1070,914],{"class":322},[312,1072,374],{"class":449},[312,1074,452],{"class":326},[312,1076,473],{"class":322},[312,1078,1079],{"class":339},"file:\u002F\u002F\u002Fproject\u002F{path}",[312,1081,473],{"class":322},[312,1083,518],{"class":322},[312,1085,323],{"class":322},[312,1087,1088],{"class":322}," ...",[312,1090,330],{"class":322},[312,1092,760],{"class":326},[312,1094,1095],{"class":314,"line":367},[312,1096,437],{"emptyLinePlaceholder":436},[312,1098,1099],{"class":314,"line":388},[312,1100,1101],{"class":547},"\u002F\u002F Variable allowing slashes (reserved expansion)\n",[312,1103,1104,1106,1108,1110,1112,1114,1116,1118,1120,1122,1124],{"class":314,"line":412},[312,1105,914],{"class":322},[312,1107,374],{"class":449},[312,1109,452],{"class":326},[312,1111,473],{"class":322},[312,1113,513],{"class":339},[312,1115,473],{"class":322},[312,1117,518],{"class":322},[312,1119,323],{"class":322},[312,1121,1088],{"class":322},[312,1123,330],{"class":322},[312,1125,760],{"class":326},[312,1127,1128],{"class":314,"line":433},[312,1129,437],{"emptyLinePlaceholder":436},[312,1131,1132],{"class":314,"line":440},[312,1133,1134],{"class":547},"\u002F\u002F Multiple variables\n",[312,1136,1137,1139,1141,1143,1145,1148,1150,1152,1154,1156,1158],{"class":314,"line":458},[312,1138,914],{"class":322},[312,1140,374],{"class":449},[312,1142,452],{"class":326},[312,1144,473],{"class":322},[312,1146,1147],{"class":339},"api:\u002F\u002Fusers\u002F{userId}\u002Fposts\u002F{postId}",[312,1149,473],{"class":322},[312,1151,518],{"class":322},[312,1153,323],{"class":322},[312,1155,1088],{"class":322},[312,1157,330],{"class":322},[312,1159,760],{"class":326},[288,1161,1163],{"id":1162},"handler-function","Handler Function",[293,1165,1166],{},"The handler receives the resolved URI and optional variables:",[302,1168,1170],{"className":304,"code":1169,"language":307,"meta":308,"style":308},"\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",[297,1171,1172,1177,1200,1207,1218,1235,1250,1266,1275,1280,1285,1289,1294,1324,1343,1348,1354,1364,1380,1394,1408,1416,1420],{"__ignoreMap":308},[312,1173,1174],{"class":314,"line":315},[312,1175,1176],{"class":547},"\u002F\u002F Static resource handler\n",[312,1178,1179,1182,1184,1186,1188,1190,1192,1194,1196,1198],{"class":314,"line":346},[312,1180,1181],{"class":686},"handler",[312,1183,465],{"class":322},[312,1185,533],{"class":532},[312,1187,677],{"class":322},[312,1189,681],{"class":680},[312,1191,465],{"class":322},[312,1193,687],{"class":686},[312,1195,662],{"class":322},[312,1197,539],{"class":532},[312,1199,521],{"class":322},[312,1201,1202,1205],{"class":314,"line":367},[312,1203,1204],{"class":318},"  return",[312,1206,521],{"class":322},[312,1208,1209,1212,1214,1216],{"class":314,"line":388},[312,1210,1211],{"class":461},"    contents",[312,1213,465],{"class":322},[312,1215,815],{"class":461},[312,1217,455],{"class":322},[312,1219,1220,1223,1225,1227,1229,1231,1233],{"class":314,"line":412},[312,1221,1222],{"class":461},"      uri",[312,1224,465],{"class":322},[312,1226,576],{"class":326},[312,1228,719],{"class":322},[312,1230,832],{"class":449},[312,1232,753],{"class":461},[312,1234,476],{"class":322},[312,1236,1237,1240,1242,1244,1246,1248],{"class":314,"line":433},[312,1238,1239],{"class":461},"      mimeType",[312,1241,465],{"class":322},[312,1243,336],{"class":322},[312,1245,849],{"class":339},[312,1247,473],{"class":322},[312,1249,476],{"class":322},[312,1251,1252,1255,1257,1259,1262,1264],{"class":314,"line":440},[312,1253,1254],{"class":461},"      text",[312,1256,465],{"class":322},[312,1258,336],{"class":322},[312,1260,1261],{"class":339},"Content",[312,1263,473],{"class":322},[312,1265,476],{"class":322},[312,1267,1268,1271,1273],{"class":314,"line":458},[312,1269,1270],{"class":322},"    }",[312,1272,874],{"class":461},[312,1274,476],{"class":322},[312,1276,1277],{"class":314,"line":479},[312,1278,1279],{"class":322},"  }\n",[312,1281,1282],{"class":314,"line":496},[312,1283,1284],{"class":322},"}\n",[312,1286,1287],{"class":314,"line":524},[312,1288,437],{"emptyLinePlaceholder":436},[312,1290,1291],{"class":314,"line":544},[312,1292,1293],{"class":547},"\u002F\u002F Dynamic resource handler\n",[312,1295,1296,1298,1300,1302,1304,1306,1308,1310,1312,1314,1316,1318,1320,1322],{"class":314,"line":551},[312,1297,1181],{"class":686},[312,1299,465],{"class":322},[312,1301,533],{"class":532},[312,1303,677],{"class":322},[312,1305,681],{"class":680},[312,1307,465],{"class":322},[312,1309,687],{"class":686},[312,1311,518],{"class":322},[312,1313,692],{"class":680},[312,1315,465],{"class":322},[312,1317,398],{"class":686},[312,1319,662],{"class":322},[312,1321,539],{"class":532},[312,1323,521],{"class":322},[312,1325,1326,1329,1331,1333,1335,1337,1339,1341],{"class":314,"line":559},[312,1327,1328],{"class":532},"  const",[312,1330,711],{"class":326},[312,1332,714],{"class":322},[312,1334,692],{"class":326},[312,1336,719],{"class":322},[312,1338,722],{"class":326},[312,1340,725],{"class":318},[312,1342,728],{"class":686},[312,1344,1345],{"class":314,"line":570},[312,1346,1347],{"class":547},"  \u002F\u002F Use variables to resolve the resource\n",[312,1349,1350,1352],{"class":314,"line":605},[312,1351,1204],{"class":318},[312,1353,521],{"class":322},[312,1355,1356,1358,1360,1362],{"class":314,"line":636},[312,1357,1211],{"class":461},[312,1359,465],{"class":322},[312,1361,815],{"class":461},[312,1363,455],{"class":322},[312,1365,1366,1368,1370,1372,1374,1376,1378],{"class":314,"line":644},[312,1367,1222],{"class":461},[312,1369,465],{"class":322},[312,1371,576],{"class":326},[312,1373,719],{"class":322},[312,1375,832],{"class":449},[312,1377,753],{"class":461},[312,1379,476],{"class":322},[312,1381,1382,1384,1386,1388,1390,1392],{"class":314,"line":650},[312,1383,1239],{"class":461},[312,1385,465],{"class":322},[312,1387,336],{"class":322},[312,1389,849],{"class":339},[312,1391,473],{"class":322},[312,1393,476],{"class":322},[312,1395,1396,1398,1400,1402,1404,1406],{"class":314,"line":656},[312,1397,1254],{"class":461},[312,1399,465],{"class":322},[312,1401,336],{"class":322},[312,1403,1261],{"class":339},[312,1405,473],{"class":322},[312,1407,476],{"class":322},[312,1409,1410,1412,1414],{"class":314,"line":667},[312,1411,1270],{"class":322},[312,1413,874],{"class":461},[312,1415,476],{"class":322},[312,1417,1418],{"class":314,"line":705},[312,1419,1279],{"class":322},[312,1421,1422],{"class":314,"line":731},[312,1423,1284],{"class":322},[1425,1426,1427],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .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 .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 .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);}",{"title":308,"searchDepth":346,"depth":346,"links":1429},[1430,1431,1434],{"id":290,"depth":346,"text":291},{"id":899,"depth":346,"text":299,"children":1432},[1433],{"id":1049,"depth":367,"text":1050},{"id":1162,"depth":346,"text":1163},"ResourceTemplate URIs, variables, and resource handler functions.","md",null,{},{"icon":88},{"title":1441,"description":1442},"Resources — Templates & handlers","Dynamic MCP resources with ResourceTemplate and handler patterns.","N4d7gjUnM12gnzZXwtUXxazEq-WHVMIE94D9MA2IeGA",[1445,1447],{"title":80,"path":81,"stem":82,"description":1446,"icon":83,"children":-1},"File-backed resources, naming, and the shape of defineMcpResource.",{"title":90,"path":91,"stem":92,"description":1448,"icon":93,"children":-1},"Resource metadata, MIME types, binary payloads, and error responses.",1777888637756]