[{"data":1,"prerenderedAt":1447},["ShallowReactive",2],{"navigation_docs":3,"-resources-templates-and-handlers":282,"-resources-templates-and-handlers-surround":1442},[4,40,70,99,122,156,189,253],{"title":5,"path":6,"stem":7,"children":8,"page":39},"入门指南","\u002Fgetting-started","1.getting-started",[9,14,19,24,29,34],{"title":10,"path":11,"stem":12,"icon":13},"简介","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-book-open",{"title":15,"path":16,"stem":17,"icon":18},"安装","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"配置","\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},"工具","\u002Ftools","2.tools",[45,50,55,60,65],{"title":46,"path":47,"stem":48,"icon":49},"概览","\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},"注释与输入示例","\u002Ftools\u002Fannotations","2.tools\u002F2.annotations","i-lucide-badge-info",{"title":61,"path":62,"stem":63,"icon":64},"错误与缓存","\u002Ftools\u002Ferrors-caching","2.tools\u002F3.errors-caching","i-lucide-shield",{"title":66,"path":67,"stem":68,"icon":69},"分组、文件与动态注册","\u002Ftools\u002Fgroups-organization","2.tools\u002F4.groups-organization","i-lucide-tags",{"title":71,"path":72,"stem":73,"children":74,"page":39},"资源","\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},"静态资源与结构","\u002Fresources\u002Fstatic-and-structure","3.resources\u002F1.static-and-structure","i-lucide-file-stack",{"title":85,"path":86,"stem":87,"icon":88},"模板与处理程序","\u002Fresources\u002Ftemplates-and-handlers","3.resources\u002F2.templates-and-handlers","i-lucide-git-branch",{"title":90,"path":91,"stem":92,"icon":93},"元数据、内容与错误","\u002Fresources\u002Fcontent-metadata-errors","3.resources\u002F3.content-metadata-errors","i-lucide-layers",{"title":95,"path":96,"stem":97,"icon":98},"分组与组织","\u002Fresources\u002Forganization","3.resources\u002F4.organization","i-lucide-folder-tree",{"title":100,"path":101,"stem":102,"children":103,"page":39},"提示词","\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},"编写与结构","\u002Fprompts\u002Fauthoring","4.prompts\u002F1.authoring","i-lucide-pen-line",{"title":114,"path":115,"stem":116,"icon":93},"输入、处理器与消息","\u002Fprompts\u002Finput-handler-messages","4.prompts\u002F2.input-handler-messages",{"title":118,"path":119,"stem":120,"icon":121},"模式与高级用法","\u002Fprompts\u002Fpatterns-advanced","4.prompts\u002F3.patterns-advanced","i-lucide-line-chart",{"title":123,"path":124,"stem":125,"children":126,"page":39},"处理器","\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},"默认与自定义处理器","\u002Fhandlers\u002Fdefault-and-custom","5.handlers\u002F1.default-and-custom","i-lucide-toggle-left",{"title":137,"path":138,"stem":139,"icon":140},"结构与选项","\u002Fhandlers\u002Fstructure-and-options","5.handlers\u002F2.structure-and-options","i-lucide-sliders-horizontal",{"title":142,"path":143,"stem":144,"icon":145},"示例与路由","\u002Fhandlers\u002Fexamples-routing","5.handlers\u002F3.examples-routing","i-lucide-route",{"title":147,"path":148,"stem":149,"icon":150},"分享与实践","\u002Fhandlers\u002Fsharing-practices","5.handlers\u002F4.sharing-practices","i-lucide-share-2",{"title":152,"path":153,"stem":154,"icon":155},"多处理器组织","\u002Fhandlers\u002Forganization","5.handlers\u002F5.organization","i-lucide-network",{"title":157,"path":158,"stem":159,"children":160,"page":39},"应用","\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},"编写与 defineMcpApp","\u002Fapps\u002Fauthoring","6.apps\u002F1.authoring","i-lucide-code-2",{"title":171,"path":172,"stem":173,"icon":174},"useMcpApp() 桥接","\u002Fapps\u002Fuse-mcp-app","6.apps\u002F2.use-mcp-app","i-lucide-message-circle",{"title":176,"path":177,"stem":178,"icon":64},"CSP 与构建流水线","\u002Fapps\u002Fcsp-and-wiring","6.apps\u002F3.csp-and-wiring",{"title":180,"path":181,"stem":182,"icon":183},"测试与发布","\u002Fapps\u002Ftesting-publishing","6.apps\u002F4.testing-publishing","i-lucide-rocket",{"title":185,"path":186,"stem":187,"icon":188},"模式与限制","\u002Fapps\u002Fpatterns-reference","6.apps\u002F5.patterns-reference","i-lucide-book-marked",{"title":190,"path":191,"stem":192,"children":193,"page":39},"进阶主题","\u002Fadvanced","7.advanced",[194,199,204,209,214,218,223,228,233,238,243,248],{"title":195,"path":196,"stem":197,"icon":198},"自定义路径","\u002Fadvanced\u002Fcustom-paths","7.advanced\u002F1.custom-paths","i-lucide-folder",{"title":200,"path":201,"stem":202,"icon":203},"日志","\u002Fadvanced\u002Flogging","7.advanced\u002F10.logging","i-lucide-scroll-text",{"title":205,"path":206,"stem":207,"icon":208},"MCP Apps 内部机制","\u002Fadvanced\u002Fmcp-apps-internals","7.advanced\u002F11.mcp-apps-internals","i-lucide-cog",{"title":210,"path":211,"stem":212,"icon":213},"列出定义","\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 评估","\u002Fadvanced\u002Fevals","7.advanced\u002F5.evals","i-lucide-flask-conical",{"title":234,"path":235,"stem":236,"icon":237},"会话","\u002Fadvanced\u002Fsessions","7.advanced\u002F6.sessions","i-lucide-database",{"title":239,"path":240,"stem":241,"icon":242},"动态定义","\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},"启发式询问","\u002Fadvanced\u002Felicitation","7.advanced\u002F9.elicitation","i-lucide-message-square-quote",{"title":254,"path":255,"stem":256,"children":257,"page":39},"示例","\u002Fexamples","8.examples",[258,263,268,273,278],{"title":259,"path":260,"stem":261,"icon":262},"身份验证","\u002Fexamples\u002Fauthentication","8.examples\u002F1.authentication","i-lucide-shield-check",{"title":264,"path":265,"stem":266,"icon":267},"API 集成","\u002Fexamples\u002Fapi-integration","8.examples\u002F2.api-integration","i-lucide-globe",{"title":269,"path":270,"stem":271,"icon":272},"常见模式","\u002Fexamples\u002Fcommon-patterns","8.examples\u002F3.common-patterns","i-lucide-lightbulb",{"title":274,"path":275,"stem":276,"icon":277},"文件操作","\u002Fexamples\u002Ffile-operations","8.examples\u002F4.file-operations","i-lucide-file",{"title":279,"path":280,"stem":281,"icon":107},"提示词示例","\u002Fexamples\u002Fprompt-examples","8.examples\u002F5.prompt-examples",{"id":283,"title":85,"body":284,"description":1433,"extension":1434,"links":1435,"meta":1436,"navigation":1437,"path":86,"seo":1438,"stem":87,"__hash__":1441},"docs\u002F3.resources\u002F2.templates-and-handlers.md",{"type":285,"value":286,"toc":1426},"minimark",[287,291,300,896,899,904,1045,1049,1056,1159,1162,1165,1422],[288,289,290],"h2",{"id":290},"使用模板的动态资源",[292,293,294,295,299],"p",{},"使用 ",[296,297,298],"code",{},"ResourceTemplate"," 创建接受变量的动态资源：",[301,302,308],"pre",{"className":303,"code":304,"filename":305,"language":306,"meta":307,"style":307},"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: '文件资源',\n  uri: new ResourceTemplate('file:\u002F\u002F\u002Fproject\u002F{+path}', {\n    list: async () => {\n      \u002F\u002F 返回可用资源列表\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","",[296,309,310,343,364,385,409,430,437,455,476,493,521,541,548,556,567,602,633,641,647,653,664,702,728,760,791,796,804,817,836,853,865,876,882,888],{"__ignoreMap":307},[311,312,315,319,323,327,330,333,336,340],"span",{"class":313,"line":314},"line",1,[311,316,318],{"class":317},"s7zQu","import",[311,320,322],{"class":321},"sMK4o"," {",[311,324,326],{"class":325},"sTEyZ"," readFile",[311,328,329],{"class":321}," }",[311,331,332],{"class":317}," from",[311,334,335],{"class":321}," '",[311,337,339],{"class":338},"sfazB","node:fs\u002Fpromises",[311,341,342],{"class":321},"'\n",[311,344,346,348,350,353,355,357,359,362],{"class":313,"line":345},2,[311,347,318],{"class":317},[311,349,322],{"class":321},[311,351,352],{"class":325}," join",[311,354,329],{"class":321},[311,356,332],{"class":317},[311,358,335],{"class":321},[311,360,361],{"class":338},"node:path",[311,363,342],{"class":321},[311,365,367,369,371,374,376,378,380,383],{"class":313,"line":366},3,[311,368,318],{"class":317},[311,370,322],{"class":321},[311,372,373],{"class":325}," ResourceTemplate",[311,375,329],{"class":321},[311,377,332],{"class":317},[311,379,335],{"class":321},[311,381,382],{"class":338},"@modelcontextprotocol\u002Fsdk\u002Fserver\u002Fmcp.js",[311,384,342],{"class":321},[311,386,388,390,393,395,398,400,402,404,407],{"class":313,"line":387},4,[311,389,318],{"class":317},[311,391,392],{"class":317}," type",[311,394,322],{"class":321},[311,396,397],{"class":325}," Variables",[311,399,329],{"class":321},[311,401,332],{"class":317},[311,403,335],{"class":321},[311,405,406],{"class":338},"@modelcontextprotocol\u002Fsdk\u002Fshared\u002FuriTemplate.js",[311,408,342],{"class":321},[311,410,412,414,416,419,421,423,425,428],{"class":313,"line":411},5,[311,413,318],{"class":317},[311,415,322],{"class":321},[311,417,418],{"class":325}," defineMcpResource",[311,420,329],{"class":321},[311,422,332],{"class":317},[311,424,335],{"class":321},[311,426,427],{"class":338},"@nuxtjs\u002Fmcp-toolkit\u002Fserver",[311,429,342],{"class":321},[311,431,433],{"class":313,"line":432},6,[311,434,436],{"emptyLinePlaceholder":435},true,"\n",[311,438,440,443,446,449,452],{"class":313,"line":439},7,[311,441,442],{"class":317},"export",[311,444,445],{"class":317}," default",[311,447,418],{"class":448},"s2Zo4",[311,450,451],{"class":325},"(",[311,453,454],{"class":321},"{\n",[311,456,458,462,465,467,470,473],{"class":313,"line":457},8,[311,459,461],{"class":460},"swJcz","  name",[311,463,464],{"class":321},":",[311,466,335],{"class":321},[311,468,469],{"class":338},"file",[311,471,472],{"class":321},"'",[311,474,475],{"class":321},",\n",[311,477,479,482,484,486,489,491],{"class":313,"line":478},9,[311,480,481],{"class":460},"  title",[311,483,464],{"class":321},[311,485,335],{"class":321},[311,487,488],{"class":338},"文件资源",[311,490,472],{"class":321},[311,492,475],{"class":321},[311,494,496,499,501,504,506,508,510,513,515,518],{"class":313,"line":495},10,[311,497,498],{"class":460},"  uri",[311,500,464],{"class":321},[311,502,503],{"class":321}," new",[311,505,373],{"class":448},[311,507,451],{"class":325},[311,509,472],{"class":321},[311,511,512],{"class":338},"file:\u002F\u002F\u002Fproject\u002F{+path}",[311,514,472],{"class":321},[311,516,517],{"class":321},",",[311,519,520],{"class":321}," {\n",[311,522,524,527,529,533,536,539],{"class":313,"line":523},11,[311,525,526],{"class":448},"    list",[311,528,464],{"class":321},[311,530,532],{"class":531},"spNyl"," async",[311,534,535],{"class":321}," ()",[311,537,538],{"class":531}," =>",[311,540,520],{"class":321},[311,542,544],{"class":313,"line":543},12,[311,545,547],{"class":546},"sHwdD","      \u002F\u002F 返回可用资源列表\n",[311,549,551,554],{"class":313,"line":550},13,[311,552,553],{"class":317},"      return",[311,555,520],{"class":321},[311,557,559,562,564],{"class":313,"line":558},14,[311,560,561],{"class":460},"        resources",[311,563,464],{"class":321},[311,565,566],{"class":460}," [\n",[311,568,570,573,576,578,580,583,585,587,590,592,594,597,599],{"class":313,"line":569},15,[311,571,572],{"class":321},"          {",[311,574,575],{"class":460}," uri",[311,577,464],{"class":321},[311,579,335],{"class":321},[311,581,582],{"class":338},"file:\u002F\u002F\u002Fproject\u002FREADME.md",[311,584,472],{"class":321},[311,586,517],{"class":321},[311,588,589],{"class":460}," name",[311,591,464],{"class":321},[311,593,335],{"class":321},[311,595,596],{"class":338},"README.md",[311,598,472],{"class":321},[311,600,601],{"class":321}," },\n",[311,603,605,607,609,611,613,616,618,620,622,624,626,629,631],{"class":313,"line":604},16,[311,606,572],{"class":321},[311,608,575],{"class":460},[311,610,464],{"class":321},[311,612,335],{"class":321},[311,614,615],{"class":338},"file:\u002F\u002F\u002Fproject\u002Fsrc\u002Findex.ts",[311,617,472],{"class":321},[311,619,517],{"class":321},[311,621,589],{"class":460},[311,623,464],{"class":321},[311,625,335],{"class":321},[311,627,628],{"class":338},"src\u002Findex.ts",[311,630,472],{"class":321},[311,632,601],{"class":321},[311,634,636,639],{"class":313,"line":635},17,[311,637,638],{"class":460},"        ]",[311,640,475],{"class":321},[311,642,644],{"class":313,"line":643},18,[311,645,646],{"class":321},"      }\n",[311,648,650],{"class":313,"line":649},19,[311,651,652],{"class":321},"    },\n",[311,654,656,659,662],{"class":313,"line":655},20,[311,657,658],{"class":321},"  }",[311,660,661],{"class":325},")",[311,663,475],{"class":321},[311,665,667,670,672,674,677,681,683,687,689,692,694,696,698,700],{"class":313,"line":666},21,[311,668,669],{"class":448},"  handler",[311,671,464],{"class":321},[311,673,532],{"class":531},[311,675,676],{"class":321}," (",[311,678,680],{"class":679},"sHdIc","uri",[311,682,464],{"class":321},[311,684,686],{"class":685},"sBMFI"," URL",[311,688,517],{"class":321},[311,690,691],{"class":679}," variables",[311,693,464],{"class":321},[311,695,397],{"class":685},[311,697,661],{"class":321},[311,699,538],{"class":531},[311,701,520],{"class":321},[311,703,705,708,711,714,716,719,722,725],{"class":313,"line":704},22,[311,706,707],{"class":531},"    const",[311,709,710],{"class":325}," path",[311,712,713],{"class":321}," =",[311,715,691],{"class":325},[311,717,718],{"class":321},".",[311,720,721],{"class":325},"path",[311,723,724],{"class":317}," as",[311,726,727],{"class":685}," string\n",[311,729,731,733,736,738,740,742,745,747,750,753,755,757],{"class":313,"line":730},23,[311,732,707],{"class":531},[311,734,735],{"class":325}," filePath",[311,737,713],{"class":321},[311,739,352],{"class":448},[311,741,451],{"class":460},[311,743,744],{"class":325},"process",[311,746,718],{"class":321},[311,748,749],{"class":448},"cwd",[311,751,752],{"class":460},"()",[311,754,517],{"class":321},[311,756,710],{"class":325},[311,758,759],{"class":460},")\n",[311,761,763,765,768,770,773,775,777,780,782,784,787,789],{"class":313,"line":762},24,[311,764,707],{"class":531},[311,766,767],{"class":325}," content",[311,769,713],{"class":321},[311,771,772],{"class":317}," await",[311,774,326],{"class":448},[311,776,451],{"class":460},[311,778,779],{"class":325},"filePath",[311,781,517],{"class":321},[311,783,335],{"class":321},[311,785,786],{"class":338},"utf-8",[311,788,472],{"class":321},[311,790,759],{"class":460},[311,792,794],{"class":313,"line":793},25,[311,795,436],{"emptyLinePlaceholder":435},[311,797,799,802],{"class":313,"line":798},26,[311,800,801],{"class":317},"    return",[311,803,520],{"class":321},[311,805,807,810,812,815],{"class":313,"line":806},27,[311,808,809],{"class":460},"      contents",[311,811,464],{"class":321},[311,813,814],{"class":460}," [",[311,816,454],{"class":321},[311,818,820,823,825,827,829,832,834],{"class":313,"line":819},28,[311,821,822],{"class":460},"        uri",[311,824,464],{"class":321},[311,826,575],{"class":325},[311,828,718],{"class":321},[311,830,831],{"class":448},"toString",[311,833,752],{"class":460},[311,835,475],{"class":321},[311,837,839,842,844,846,849,851],{"class":313,"line":838},29,[311,840,841],{"class":460},"        mimeType",[311,843,464],{"class":321},[311,845,335],{"class":321},[311,847,848],{"class":338},"text\u002Fplain",[311,850,472],{"class":321},[311,852,475],{"class":321},[311,854,856,859,861,863],{"class":313,"line":855},30,[311,857,858],{"class":460},"        text",[311,860,464],{"class":321},[311,862,767],{"class":325},[311,864,475],{"class":321},[311,866,868,871,874],{"class":313,"line":867},31,[311,869,870],{"class":321},"      }",[311,872,873],{"class":460},"]",[311,875,475],{"class":321},[311,877,879],{"class":313,"line":878},32,[311,880,881],{"class":321},"    }\n",[311,883,885],{"class":313,"line":884},33,[311,886,887],{"class":321},"  },\n",[311,889,891,894],{"class":313,"line":890},34,[311,892,893],{"class":321},"}",[311,895,759],{"class":325},[288,897,298],{"id":898},"resourcetemplate",[292,900,901,903],{},[296,902,298],{}," 允许你创建 URI 中包含可变部分的资源：",[301,905,907],{"className":303,"code":906,"language":306,"meta":307,"style":307},"new ResourceTemplate('file:\u002F\u002F\u002Fproject\u002F{+path}', {\n  list: async () => {\n    \u002F\u002F 可选：返回可用资源列表\n    return {\n      resources: [\n        { uri: 'file:\u002F\u002F\u002Fproject\u002Ffile1.txt', name: '文件 1' },\n        { uri: 'file:\u002F\u002F\u002Fproject\u002Ffile2.txt', name: '文件 2' },\n      ],\n    }\n  },\n})\n",[296,908,909,928,943,948,954,963,994,1024,1031,1035,1039],{"__ignoreMap":307},[311,910,911,914,916,918,920,922,924,926],{"class":313,"line":314},[311,912,913],{"class":321},"new",[311,915,373],{"class":448},[311,917,451],{"class":325},[311,919,472],{"class":321},[311,921,512],{"class":338},[311,923,472],{"class":321},[311,925,517],{"class":321},[311,927,520],{"class":321},[311,929,930,933,935,937,939,941],{"class":313,"line":345},[311,931,932],{"class":448},"  list",[311,934,464],{"class":321},[311,936,532],{"class":531},[311,938,535],{"class":321},[311,940,538],{"class":531},[311,942,520],{"class":321},[311,944,945],{"class":313,"line":366},[311,946,947],{"class":546},"    \u002F\u002F 可选：返回可用资源列表\n",[311,949,950,952],{"class":313,"line":387},[311,951,801],{"class":317},[311,953,520],{"class":321},[311,955,956,959,961],{"class":313,"line":411},[311,957,958],{"class":460},"      resources",[311,960,464],{"class":321},[311,962,566],{"class":460},[311,964,965,968,970,972,974,977,979,981,983,985,987,990,992],{"class":313,"line":432},[311,966,967],{"class":321},"        {",[311,969,575],{"class":460},[311,971,464],{"class":321},[311,973,335],{"class":321},[311,975,976],{"class":338},"file:\u002F\u002F\u002Fproject\u002Ffile1.txt",[311,978,472],{"class":321},[311,980,517],{"class":321},[311,982,589],{"class":460},[311,984,464],{"class":321},[311,986,335],{"class":321},[311,988,989],{"class":338},"文件 1",[311,991,472],{"class":321},[311,993,601],{"class":321},[311,995,996,998,1000,1002,1004,1007,1009,1011,1013,1015,1017,1020,1022],{"class":313,"line":439},[311,997,967],{"class":321},[311,999,575],{"class":460},[311,1001,464],{"class":321},[311,1003,335],{"class":321},[311,1005,1006],{"class":338},"file:\u002F\u002F\u002Fproject\u002Ffile2.txt",[311,1008,472],{"class":321},[311,1010,517],{"class":321},[311,1012,589],{"class":460},[311,1014,464],{"class":321},[311,1016,335],{"class":321},[311,1018,1019],{"class":338},"文件 2",[311,1021,472],{"class":321},[311,1023,601],{"class":321},[311,1025,1026,1029],{"class":313,"line":457},[311,1027,1028],{"class":460},"      ]",[311,1030,475],{"class":321},[311,1032,1033],{"class":313,"line":478},[311,1034,881],{"class":321},[311,1036,1037],{"class":313,"line":495},[311,1038,887],{"class":321},[311,1040,1041,1043],{"class":313,"line":523},[311,1042,893],{"class":321},[311,1044,759],{"class":325},[1046,1047,1048],"h3",{"id":1048},"模板变量",[292,1050,1051,1052,1055],{},"URI 中的变量使用 ",[296,1053,1054],{},"{variableName}"," 定义：",[301,1057,1059],{"className":303,"code":1058,"language":306,"meta":307,"style":307},"\u002F\u002F 单个变量\nnew ResourceTemplate('file:\u002F\u002F\u002Fproject\u002F{path}', { ... })\n\n\u002F\u002F 允许斜杠的变量（保留扩展）\nnew ResourceTemplate('file:\u002F\u002F\u002Fproject\u002F{+path}', { ... })\n\n\u002F\u002F 多个变量\nnew ResourceTemplate('api:\u002F\u002Fusers\u002F{userId}\u002Fposts\u002F{postId}', { ... })\n",[296,1060,1061,1066,1092,1096,1101,1125,1129,1134],{"__ignoreMap":307},[311,1062,1063],{"class":313,"line":314},[311,1064,1065],{"class":546},"\u002F\u002F 单个变量\n",[311,1067,1068,1070,1072,1074,1076,1079,1081,1083,1085,1088,1090],{"class":313,"line":345},[311,1069,913],{"class":321},[311,1071,373],{"class":448},[311,1073,451],{"class":325},[311,1075,472],{"class":321},[311,1077,1078],{"class":338},"file:\u002F\u002F\u002Fproject\u002F{path}",[311,1080,472],{"class":321},[311,1082,517],{"class":321},[311,1084,322],{"class":321},[311,1086,1087],{"class":321}," ...",[311,1089,329],{"class":321},[311,1091,759],{"class":325},[311,1093,1094],{"class":313,"line":366},[311,1095,436],{"emptyLinePlaceholder":435},[311,1097,1098],{"class":313,"line":387},[311,1099,1100],{"class":546},"\u002F\u002F 允许斜杠的变量（保留扩展）\n",[311,1102,1103,1105,1107,1109,1111,1113,1115,1117,1119,1121,1123],{"class":313,"line":411},[311,1104,913],{"class":321},[311,1106,373],{"class":448},[311,1108,451],{"class":325},[311,1110,472],{"class":321},[311,1112,512],{"class":338},[311,1114,472],{"class":321},[311,1116,517],{"class":321},[311,1118,322],{"class":321},[311,1120,1087],{"class":321},[311,1122,329],{"class":321},[311,1124,759],{"class":325},[311,1126,1127],{"class":313,"line":432},[311,1128,436],{"emptyLinePlaceholder":435},[311,1130,1131],{"class":313,"line":439},[311,1132,1133],{"class":546},"\u002F\u002F 多个变量\n",[311,1135,1136,1138,1140,1142,1144,1147,1149,1151,1153,1155,1157],{"class":313,"line":457},[311,1137,913],{"class":321},[311,1139,373],{"class":448},[311,1141,451],{"class":325},[311,1143,472],{"class":321},[311,1145,1146],{"class":338},"api:\u002F\u002Fusers\u002F{userId}\u002Fposts\u002F{postId}",[311,1148,472],{"class":321},[311,1150,517],{"class":321},[311,1152,322],{"class":321},[311,1154,1087],{"class":321},[311,1156,329],{"class":321},[311,1158,759],{"class":325},[288,1160,1161],{"id":1161},"处理程序函数",[292,1163,1164],{},"处理程序接收解析后的 URI 和可选变量：",[301,1166,1168],{"className":303,"code":1167,"language":306,"meta":307,"style":307},"\u002F\u002F 静态资源处理程序\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 动态资源处理程序\nhandler: async (uri: URL, variables: Variables) => {\n  const path = variables.path as string\n  \u002F\u002F 使用变量来解析资源\n  return {\n    contents: [{\n      uri: uri.toString(),\n      mimeType: 'text\u002Fplain',\n      text: 'Content',\n    }],\n  }\n}\n",[296,1169,1170,1175,1198,1205,1216,1233,1248,1264,1273,1278,1283,1287,1292,1322,1341,1346,1352,1362,1378,1392,1406,1414,1418],{"__ignoreMap":307},[311,1171,1172],{"class":313,"line":314},[311,1173,1174],{"class":546},"\u002F\u002F 静态资源处理程序\n",[311,1176,1177,1180,1182,1184,1186,1188,1190,1192,1194,1196],{"class":313,"line":345},[311,1178,1179],{"class":685},"handler",[311,1181,464],{"class":321},[311,1183,532],{"class":531},[311,1185,676],{"class":321},[311,1187,680],{"class":679},[311,1189,464],{"class":321},[311,1191,686],{"class":685},[311,1193,661],{"class":321},[311,1195,538],{"class":531},[311,1197,520],{"class":321},[311,1199,1200,1203],{"class":313,"line":366},[311,1201,1202],{"class":317},"  return",[311,1204,520],{"class":321},[311,1206,1207,1210,1212,1214],{"class":313,"line":387},[311,1208,1209],{"class":460},"    contents",[311,1211,464],{"class":321},[311,1213,814],{"class":460},[311,1215,454],{"class":321},[311,1217,1218,1221,1223,1225,1227,1229,1231],{"class":313,"line":411},[311,1219,1220],{"class":460},"      uri",[311,1222,464],{"class":321},[311,1224,575],{"class":325},[311,1226,718],{"class":321},[311,1228,831],{"class":448},[311,1230,752],{"class":460},[311,1232,475],{"class":321},[311,1234,1235,1238,1240,1242,1244,1246],{"class":313,"line":432},[311,1236,1237],{"class":460},"      mimeType",[311,1239,464],{"class":321},[311,1241,335],{"class":321},[311,1243,848],{"class":338},[311,1245,472],{"class":321},[311,1247,475],{"class":321},[311,1249,1250,1253,1255,1257,1260,1262],{"class":313,"line":439},[311,1251,1252],{"class":460},"      text",[311,1254,464],{"class":321},[311,1256,335],{"class":321},[311,1258,1259],{"class":338},"Content",[311,1261,472],{"class":321},[311,1263,475],{"class":321},[311,1265,1266,1269,1271],{"class":313,"line":457},[311,1267,1268],{"class":321},"    }",[311,1270,873],{"class":460},[311,1272,475],{"class":321},[311,1274,1275],{"class":313,"line":478},[311,1276,1277],{"class":321},"  }\n",[311,1279,1280],{"class":313,"line":495},[311,1281,1282],{"class":321},"}\n",[311,1284,1285],{"class":313,"line":523},[311,1286,436],{"emptyLinePlaceholder":435},[311,1288,1289],{"class":313,"line":543},[311,1290,1291],{"class":546},"\u002F\u002F 动态资源处理程序\n",[311,1293,1294,1296,1298,1300,1302,1304,1306,1308,1310,1312,1314,1316,1318,1320],{"class":313,"line":550},[311,1295,1179],{"class":685},[311,1297,464],{"class":321},[311,1299,532],{"class":531},[311,1301,676],{"class":321},[311,1303,680],{"class":679},[311,1305,464],{"class":321},[311,1307,686],{"class":685},[311,1309,517],{"class":321},[311,1311,691],{"class":679},[311,1313,464],{"class":321},[311,1315,397],{"class":685},[311,1317,661],{"class":321},[311,1319,538],{"class":531},[311,1321,520],{"class":321},[311,1323,1324,1327,1329,1331,1333,1335,1337,1339],{"class":313,"line":558},[311,1325,1326],{"class":531},"  const",[311,1328,710],{"class":325},[311,1330,713],{"class":321},[311,1332,691],{"class":325},[311,1334,718],{"class":321},[311,1336,721],{"class":325},[311,1338,724],{"class":317},[311,1340,727],{"class":685},[311,1342,1343],{"class":313,"line":569},[311,1344,1345],{"class":546},"  \u002F\u002F 使用变量来解析资源\n",[311,1347,1348,1350],{"class":313,"line":604},[311,1349,1202],{"class":317},[311,1351,520],{"class":321},[311,1353,1354,1356,1358,1360],{"class":313,"line":635},[311,1355,1209],{"class":460},[311,1357,464],{"class":321},[311,1359,814],{"class":460},[311,1361,454],{"class":321},[311,1363,1364,1366,1368,1370,1372,1374,1376],{"class":313,"line":643},[311,1365,1220],{"class":460},[311,1367,464],{"class":321},[311,1369,575],{"class":325},[311,1371,718],{"class":321},[311,1373,831],{"class":448},[311,1375,752],{"class":460},[311,1377,475],{"class":321},[311,1379,1380,1382,1384,1386,1388,1390],{"class":313,"line":649},[311,1381,1237],{"class":460},[311,1383,464],{"class":321},[311,1385,335],{"class":321},[311,1387,848],{"class":338},[311,1389,472],{"class":321},[311,1391,475],{"class":321},[311,1393,1394,1396,1398,1400,1402,1404],{"class":313,"line":655},[311,1395,1252],{"class":460},[311,1397,464],{"class":321},[311,1399,335],{"class":321},[311,1401,1259],{"class":338},[311,1403,472],{"class":321},[311,1405,475],{"class":321},[311,1407,1408,1410,1412],{"class":313,"line":666},[311,1409,1268],{"class":321},[311,1411,873],{"class":460},[311,1413,475],{"class":321},[311,1415,1416],{"class":313,"line":704},[311,1417,1277],{"class":321},[311,1419,1420],{"class":313,"line":730},[311,1421,1282],{"class":321},[1423,1424,1425],"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":307,"searchDepth":345,"depth":345,"links":1427},[1428,1429,1432],{"id":290,"depth":345,"text":290},{"id":898,"depth":345,"text":298,"children":1430},[1431],{"id":1048,"depth":366,"text":1048},{"id":1161,"depth":345,"text":1161},"ResourceTemplate URI、变量和资源处理程序函数。","md",null,{},{"icon":88},{"title":1439,"description":1440},"资源 — 模板与处理程序","使用 ResourceTemplate 和处理模式的动态 MCP 资源。","Ill1C7-W3SWZtHLIjT5dX_Gs-nPJg3koLgh5Ivog6ZY",[1443,1445],{"title":80,"path":81,"stem":82,"description":1444,"icon":83,"children":-1},"基于文件的资源、命名，以及 defineMcpResource 的结构。",{"title":90,"path":91,"stem":92,"description":1446,"icon":93,"children":-1},"资源元数据、MIME 类型、二进制载荷和错误响应。",1778659580655]