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