[{"data":1,"prerenderedAt":3685},["ShallowReactive",2],{"navigation_docs":3,"-core-concepts-resources":139,"-core-concepts-resources-surround":3680},[4,40,65,110],{"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},"MCP Inspector","\u002Fgetting-started\u002Finspector","1.getting-started\u002F4.inspector","i-lucide-circuit-board",{"title":30,"path":31,"stem":32,"icon":33},"连接","\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},"核心概念","\u002Fcore-concepts","2.core-concepts",[45,50,55,60],{"title":46,"path":47,"stem":48,"icon":49},"工具","\u002Fcore-concepts\u002Ftools","2.core-concepts\u002F2.tools","i-lucide-wrench",{"title":51,"path":52,"stem":53,"icon":54},"资源","\u002Fcore-concepts\u002Fresources","2.core-concepts\u002F3.resources","i-lucide-package",{"title":56,"path":57,"stem":58,"icon":59},"提示词 (Prompts)","\u002Fcore-concepts\u002Fprompts","2.core-concepts\u002F4.prompts","i-lucide-message-square",{"title":61,"path":62,"stem":63,"icon":64},"处理器 (Handlers)","\u002Fcore-concepts\u002Fhandlers","2.core-concepts\u002F5.handlers","i-lucide-server",{"title":66,"path":67,"stem":68,"children":69,"page":39},"进阶主题","\u002Fadvanced","3.advanced",[70,75,80,85,90,95,100,105],{"title":71,"path":72,"stem":73,"icon":74},"自定义路径","\u002Fadvanced\u002Fcustom-paths","3.advanced\u002F1.custom-paths","i-lucide-folder",{"title":76,"path":77,"stem":78,"icon":79},"中间件","\u002Fadvanced\u002Fmiddleware","3.advanced\u002F2.middleware","i-lucide-shield",{"title":81,"path":82,"stem":83,"icon":84},"TypeScript","\u002Fadvanced\u002Ftypescript","3.advanced\u002F3.typescript","i-lucide-type",{"title":86,"path":87,"stem":88,"icon":89},"钩子","\u002Fadvanced\u002Fhooks","3.advanced\u002F4.hooks","i-lucide-webhook",{"title":91,"path":92,"stem":93,"icon":94},"MCP 评估","\u002Fadvanced\u002Fevals","3.advanced\u002F5.evals","i-lucide-flask-conical",{"title":96,"path":97,"stem":98,"icon":99},"会话 (Sessions)","\u002Fadvanced\u002Fsessions","3.advanced\u002F6.sessions","i-lucide-database",{"title":101,"path":102,"stem":103,"icon":104},"动态定义","\u002Fadvanced\u002Fdynamic-definitions","3.advanced\u002F7.dynamic-definitions","i-lucide-toggle-right",{"title":106,"path":107,"stem":108,"icon":109},"代码模式 (Code Mode)","\u002Fadvanced\u002Fcode-mode","3.advanced\u002F8.code-mode","i-lucide-code",{"title":111,"path":112,"stem":113,"children":114,"page":39},"示例","\u002Fexamples","4.examples",[115,120,125,130,135],{"title":116,"path":117,"stem":118,"icon":119},"身份验证","\u002Fexamples\u002Fauthentication","4.examples\u002F1.authentication","i-lucide-shield-check",{"title":121,"path":122,"stem":123,"icon":124},"API 集成","\u002Fexamples\u002Fapi-integration","4.examples\u002F2.api-integration","i-lucide-globe",{"title":126,"path":127,"stem":128,"icon":129},"常见模式","\u002Fexamples\u002Fcommon-patterns","4.examples\u002F3.common-patterns","i-lucide-lightbulb",{"title":131,"path":132,"stem":133,"icon":134},"文件操作","\u002Fexamples\u002Ffile-operations","4.examples\u002F4.file-operations","i-lucide-file",{"title":136,"path":137,"stem":138,"icon":59},"提示词示例","\u002Fexamples\u002Fprompt-examples","4.examples\u002F5.prompt-examples",{"id":140,"title":51,"body":141,"description":3672,"extension":3673,"links":3674,"meta":3675,"navigation":3676,"path":52,"seo":3677,"stem":53,"__hash__":3679},"docs\u002F2.core-concepts\u002F3.resources.md",{"type":142,"value":143,"toc":3648},"minimark",[144,149,158,240,255,266,269,272,357,362,375,380,391,394,401,468,503,508,511,514,518,525,649,652,679,682,692,1046,1049,1059,1132,1139,1157,1165,1168,1171,1395,1398,1405,1903,1906,1911,2052,2055,2062,2164,2167,2170,2425,2428,2431,2518,2521,2524,2796,2799,2802,3206,3209,3222,3343,3346,3354,3372,3375,3382,3388,3394,3398,3401,3431,3434,3441,3607,3613,3616,3644],[145,146,148],"h2",{"id":147},"什么是资源","什么是资源？",[150,151,152,153,157],"p",{},"资源是 MCP 服务器向客户端公开",[154,155,156],"strong",{},"只读数据","的一种标准化方式。它们提供上下文信息，帮助 AI 模型理解您的应用程序，例如文件、数据库架构、配置或任何可通过 URI 访问的数据。",[159,160,161],"code-collapse",{},[162,163,169],"pre",{"className":164,"code":165,"filename":166,"language":167,"meta":168,"style":168},"language-txt shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","使用 @nuxtjs\u002Fmcp-toolkit 在我的 Nuxt 应用中创建一个新的 MCP 资源。\n\n- 在 server\u002Fmcp\u002Fresources\u002F 中创建一个文件（例如 server\u002Fmcp\u002Fresources\u002Freadme.ts）\n- 使用 defineMcpResource（自动导入）并附带描述\n- 对于本地文件，使用 file 属性：file: 'README.md'（URI、MIME 类型和处理器将自动生成）\n- 对于自定义数据，手动定义 uri 和 handler，返回 { contents: [{ uri, text, mimeType }] }\n- 对于动态资源，使用 @modelcontextprotocol\u002Fsdk\u002Fserver\u002Fmcp.js 中的 ResourceTemplate 配合 URI 变量\n- 名称和标题将根据文件名自动生成\n- 使用子目录自动推断分组（例如 resources\u002Fconfig\u002Fapp.ts → group: 'config'）\n\n文档：https:\u002F\u002Fmcp-toolkit.nuxt.dev\u002Fcore-concepts\u002Fresources\n","Prompt","txt","",[170,171,172,180,187,193,199,205,211,217,223,229,234],"code",{"__ignoreMap":168},[173,174,177],"span",{"class":175,"line":176},"line",1,[173,178,179],{},"使用 @nuxtjs\u002Fmcp-toolkit 在我的 Nuxt 应用中创建一个新的 MCP 资源。\n",[173,181,183],{"class":175,"line":182},2,[173,184,186],{"emptyLinePlaceholder":185},true,"\n",[173,188,190],{"class":175,"line":189},3,[173,191,192],{},"- 在 server\u002Fmcp\u002Fresources\u002F 中创建一个文件（例如 server\u002Fmcp\u002Fresources\u002Freadme.ts）\n",[173,194,196],{"class":175,"line":195},4,[173,197,198],{},"- 使用 defineMcpResource（自动导入）并附带描述\n",[173,200,202],{"class":175,"line":201},5,[173,203,204],{},"- 对于本地文件，使用 file 属性：file: 'README.md'（URI、MIME 类型和处理器将自动生成）\n",[173,206,208],{"class":175,"line":207},6,[173,209,210],{},"- 对于自定义数据，手动定义 uri 和 handler，返回 { contents: [{ uri, text, mimeType }] }\n",[173,212,214],{"class":175,"line":213},7,[173,215,216],{},"- 对于动态资源，使用 @modelcontextprotocol\u002Fsdk\u002Fserver\u002Fmcp.js 中的 ResourceTemplate 配合 URI 变量\n",[173,218,220],{"class":175,"line":219},8,[173,221,222],{},"- 名称和标题将根据文件名自动生成\n",[173,224,226],{"class":175,"line":225},9,[173,227,228],{},"- 使用子目录自动推断分组（例如 resources\u002Fconfig\u002Fapp.ts → group: 'config'）\n",[173,230,232],{"class":175,"line":231},10,[173,233,186],{"emptyLinePlaceholder":185},[173,235,237],{"class":175,"line":236},11,[173,238,239],{},"文档：https:\u002F\u002Fmcp-toolkit.nuxt.dev\u002Fcore-concepts\u002Fresources\n",[241,242,244,246,247,250,251,254],"callout",{"color":243,"icon":129},"primary",[154,245,41],{},"：与由 AI 直接调用以执行操作的",[248,249,46],"a",{"href":47},"不同，资源是",[154,252,253],{},"由应用程序驱动的","。宿主应用程序（而非 AI）决定何时以及如何获取资源内容并将其包含在对话中。",[150,256,257,258,261,262,265],{},"每个资源都由一个唯一的 URI 标识（例如 ",[170,259,260],{},"file:\u002F\u002F\u002Fproject\u002FREADME.md"," 或 ",[170,263,264],{},"api:\u002F\u002Fusers\u002F123","）。",[145,267,268],{"id":268},"资源与工具",[150,270,271],{},"理解资源与工具之间的区别至关重要：",[273,274,275,289],"table",{},[276,277,278],"thead",{},[279,280,281,285,287],"tr",{},[282,283,284],"th",{},"方面",[282,286,51],{},[282,288,46],{},[290,291,292,306,319,332,345],"tbody",{},[279,293,294,300,303],{},[295,296,297],"td",{},[154,298,299],{},"目的",[295,301,302],{},"提供上下文和数据",[295,304,305],{},"执行操作",[279,307,308,313,316],{},[295,309,310],{},[154,311,312],{},"调用方式",[295,314,315],{},"应用程序驱动（用户或应用选择）",[295,317,318],{},"AI 驱动（模型决定调用）",[279,320,321,326,329],{},[295,322,323],{},[154,324,325],{},"性质",[295,327,328],{},"只读数据访问",[295,330,331],{},"可读取和修改状态",[279,333,334,339,342],{},[295,335,336],{},[154,337,338],{},"控制权",[295,340,341],{},"用户\u002F应用程序控制包含的内容",[295,343,344],{},"AI 决定何时使用",[279,346,347,351,354],{},[295,348,349],{},[154,350,111],{},[295,352,353],{},"文件、配置、数据库架构、日志",[295,355,356],{},"发送邮件、创建文件、查询 API",[150,358,359],{},[154,360,361],{},"何时使用资源：",[363,364,365,369,372],"ul",{},[366,367,368],"li",{},"公开项目文件或文档",[366,370,371],{},"共享数据库架构或配置",[366,373,374],{},"提供日志或系统信息作为上下文",[150,376,377],{},[154,378,379],{},"何时使用工具：",[363,381,382,385,388],{},[366,383,384],{},"执行修改状态的操作",[366,386,387],{},"执行应由 AI 决定触发的操作",[366,389,390],{},"与外部 API 或服务交互",[145,392,393],{"id":393},"资源的使用方式",[150,395,396,397,400],{},"资源遵循",[154,398,399],{},"应用程序驱动","模型。典型流程如下：",[162,402,406],{"className":403,"code":404,"language":405,"meta":168,"style":168},"language-mermaid shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","sequenceDiagram\n    participant App as Host Application\n    participant Server as MCP Server\n    participant AI as AI Model\n\n    App->>Server: resources\u002Flist\n    Server-->>App: Available resources\n    Note over App: Display in UI (tree, search...)\n    App->>App: User selects resources\n    App->>Server: resources\u002Fread (selected URIs)\n    Server-->>App: Resource contents\n    App->>AI: Include content as context\n","mermaid",[170,407,408,413,418,423,428,432,437,442,447,452,457,462],{"__ignoreMap":168},[173,409,410],{"class":175,"line":176},[173,411,412],{},"sequenceDiagram\n",[173,414,415],{"class":175,"line":182},[173,416,417],{},"    participant App as Host Application\n",[173,419,420],{"class":175,"line":189},[173,421,422],{},"    participant Server as MCP Server\n",[173,424,425],{"class":175,"line":195},[173,426,427],{},"    participant AI as AI Model\n",[173,429,430],{"class":175,"line":201},[173,431,186],{"emptyLinePlaceholder":185},[173,433,434],{"class":175,"line":207},[173,435,436],{},"    App->>Server: resources\u002Flist\n",[173,438,439],{"class":175,"line":213},[173,440,441],{},"    Server-->>App: Available resources\n",[173,443,444],{"class":175,"line":219},[173,445,446],{},"    Note over App: Display in UI (tree, search...)\n",[173,448,449],{"class":175,"line":225},[173,450,451],{},"    App->>App: User selects resources\n",[173,453,454],{"class":175,"line":231},[173,455,456],{},"    App->>Server: resources\u002Fread (selected URIs)\n",[173,458,459],{"class":175,"line":236},[173,460,461],{},"    Server-->>App: Resource contents\n",[173,463,465],{"class":175,"line":464},12,[173,466,467],{},"    App->>AI: Include content as context\n",[469,470,471,481,487,497],"ol",{},[366,472,473,476,477,480],{},[154,474,475],{},"发现","：应用程序调用 ",[170,478,479],{},"resources\u002Flist"," 来发现可用资源",[366,482,483,486],{},[154,484,485],{},"选择","：应用程序在 UI 中显示资源（树状视图、搜索、列表），用户或应用程序逻辑选择要包含哪些资源",[366,488,489,492,493,496],{},[154,490,491],{},"读取","：应用程序通过 ",[170,494,495],{},"resources\u002Fread"," 获取选定的资源",[366,498,499,502],{},[154,500,501],{},"上下文包含","：应用程序将资源内容作为上下文包含在 AI 对话中",[241,504,507],{"color":505,"icon":506},"info","i-lucide-info","AI 模型永远不会直接请求资源。始终由应用程序根据用户选择、启发式规则或自动上下文检测来决定包含哪些资源。",[145,509,510],{"id":510},"静态资源",[150,512,513],{},"静态资源具有固定不变的 URI。",[515,516,517],"h3",{"id":517},"简单文件资源",[150,519,520,521,524],{},"公开本地文件最简单的方法是使用 ",[170,522,523],{},"file"," 属性。这将自动处理 URI 生成、MIME 类型检测和文件读取。",[162,526,531],{"className":527,"code":528,"filename":529,"language":530,"meta":168,"style":168},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { defineMcpResource } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpResource({\n  name: 'readme',\n  description: 'Project README file',\n  file: 'README.md', \u002F\u002F 相对于项目根目录\n})\n","server\u002Fmcp\u002Fresources\u002Freadme.ts","typescript",[170,532,533,563,567,584,604,620,641],{"__ignoreMap":168},[173,534,535,539,543,547,550,553,556,560],{"class":175,"line":176},[173,536,538],{"class":537},"s7zQu","import",[173,540,542],{"class":541},"sMK4o"," {",[173,544,546],{"class":545},"sTEyZ"," defineMcpResource",[173,548,549],{"class":541}," }",[173,551,552],{"class":537}," from",[173,554,555],{"class":541}," '",[173,557,559],{"class":558},"sfazB","@nuxtjs\u002Fmcp-toolkit\u002Fserver",[173,561,562],{"class":541},"'\n",[173,564,565],{"class":175,"line":182},[173,566,186],{"emptyLinePlaceholder":185},[173,568,569,572,575,578,581],{"class":175,"line":189},[173,570,571],{"class":537},"export",[173,573,574],{"class":537}," default",[173,576,546],{"class":577},"s2Zo4",[173,579,580],{"class":545},"(",[173,582,583],{"class":541},"{\n",[173,585,586,590,593,595,598,601],{"class":175,"line":195},[173,587,589],{"class":588},"swJcz","  name",[173,591,592],{"class":541},":",[173,594,555],{"class":541},[173,596,597],{"class":558},"readme",[173,599,600],{"class":541},"'",[173,602,603],{"class":541},",\n",[173,605,606,609,611,613,616,618],{"class":175,"line":201},[173,607,608],{"class":588},"  description",[173,610,592],{"class":541},[173,612,555],{"class":541},[173,614,615],{"class":558},"Project README file",[173,617,600],{"class":541},[173,619,603],{"class":541},[173,621,622,625,627,629,632,634,637],{"class":175,"line":207},[173,623,624],{"class":588},"  file",[173,626,592],{"class":541},[173,628,555],{"class":541},[173,630,631],{"class":558},"README.md",[173,633,600],{"class":541},[173,635,636],{"class":541},",",[173,638,640],{"class":639},"sHwdD"," \u002F\u002F 相对于项目根目录\n",[173,642,643,646],{"class":175,"line":213},[173,644,645],{"class":541},"}",[173,647,648],{"class":545},")\n",[150,650,651],{},"这将生成：",[363,653,654,663,669],{},[366,655,656,659,660],{},[154,657,658],{},"URI","：",[170,661,662],{},"file:\u002F\u002F\u002Fpath\u002Fto\u002Fproject\u002FREADME.md",[366,664,665,668],{},[154,666,667],{},"处理器","：自动读取文件内容",[366,670,671,674,675,678],{},[154,672,673],{},"MIME 类型","：自动检测（例如 ",[170,676,677],{},"text\u002Fmarkdown","）",[515,680,681],{"id":681},"自定义静态资源",[150,683,684,685,688,689,659],{},"为了获得更高的控制权，您可以手动定义 ",[170,686,687],{},"uri"," 和 ",[170,690,691],{},"handler",[162,693,696],{"className":527,"code":694,"filename":695,"language":530,"meta":168,"style":168},"import { readFile } from 'node:fs\u002Fpromises'\nimport { fileURLToPath } from 'node:url'\nimport { defineMcpResource } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpResource({\n  name: 'custom-readme',\n  title: 'README',\n  description: 'Project README file',\n  uri: 'file:\u002F\u002F\u002FREADME.md',\n  metadata: {\n    mimeType: 'text\u002Fmarkdown',\n  },\n  handler: async (uri: URL) => {\n    const filePath = fileURLToPath(uri)\n    const content = await readFile(filePath, 'utf-8')\n    return {\n      contents: [{\n        uri: uri.toString(),\n        mimeType: 'text\u002Fmarkdown',\n        text: content,\n      }],\n    }\n  },\n})\n","server\u002Fmcp\u002Fresources\u002Fcustom-readme.ts",[170,697,698,718,738,756,760,772,787,803,817,833,843,858,863,895,915,946,954,967,989,1005,1017,1028,1034,1039],{"__ignoreMap":168},[173,699,700,702,704,707,709,711,713,716],{"class":175,"line":176},[173,701,538],{"class":537},[173,703,542],{"class":541},[173,705,706],{"class":545}," readFile",[173,708,549],{"class":541},[173,710,552],{"class":537},[173,712,555],{"class":541},[173,714,715],{"class":558},"node:fs\u002Fpromises",[173,717,562],{"class":541},[173,719,720,722,724,727,729,731,733,736],{"class":175,"line":182},[173,721,538],{"class":537},[173,723,542],{"class":541},[173,725,726],{"class":545}," fileURLToPath",[173,728,549],{"class":541},[173,730,552],{"class":537},[173,732,555],{"class":541},[173,734,735],{"class":558},"node:url",[173,737,562],{"class":541},[173,739,740,742,744,746,748,750,752,754],{"class":175,"line":189},[173,741,538],{"class":537},[173,743,542],{"class":541},[173,745,546],{"class":545},[173,747,549],{"class":541},[173,749,552],{"class":537},[173,751,555],{"class":541},[173,753,559],{"class":558},[173,755,562],{"class":541},[173,757,758],{"class":175,"line":195},[173,759,186],{"emptyLinePlaceholder":185},[173,761,762,764,766,768,770],{"class":175,"line":201},[173,763,571],{"class":537},[173,765,574],{"class":537},[173,767,546],{"class":577},[173,769,580],{"class":545},[173,771,583],{"class":541},[173,773,774,776,778,780,783,785],{"class":175,"line":207},[173,775,589],{"class":588},[173,777,592],{"class":541},[173,779,555],{"class":541},[173,781,782],{"class":558},"custom-readme",[173,784,600],{"class":541},[173,786,603],{"class":541},[173,788,789,792,794,796,799,801],{"class":175,"line":213},[173,790,791],{"class":588},"  title",[173,793,592],{"class":541},[173,795,555],{"class":541},[173,797,798],{"class":558},"README",[173,800,600],{"class":541},[173,802,603],{"class":541},[173,804,805,807,809,811,813,815],{"class":175,"line":219},[173,806,608],{"class":588},[173,808,592],{"class":541},[173,810,555],{"class":541},[173,812,615],{"class":558},[173,814,600],{"class":541},[173,816,603],{"class":541},[173,818,819,822,824,826,829,831],{"class":175,"line":225},[173,820,821],{"class":588},"  uri",[173,823,592],{"class":541},[173,825,555],{"class":541},[173,827,828],{"class":558},"file:\u002F\u002F\u002FREADME.md",[173,830,600],{"class":541},[173,832,603],{"class":541},[173,834,835,838,840],{"class":175,"line":231},[173,836,837],{"class":588},"  metadata",[173,839,592],{"class":541},[173,841,842],{"class":541}," {\n",[173,844,845,848,850,852,854,856],{"class":175,"line":236},[173,846,847],{"class":588},"    mimeType",[173,849,592],{"class":541},[173,851,555],{"class":541},[173,853,677],{"class":558},[173,855,600],{"class":541},[173,857,603],{"class":541},[173,859,860],{"class":175,"line":464},[173,861,862],{"class":541},"  },\n",[173,864,866,869,871,875,878,881,883,887,890,893],{"class":175,"line":865},13,[173,867,868],{"class":577},"  handler",[173,870,592],{"class":541},[173,872,874],{"class":873},"spNyl"," async",[173,876,877],{"class":541}," (",[173,879,687],{"class":880},"sHdIc",[173,882,592],{"class":541},[173,884,886],{"class":885},"sBMFI"," URL",[173,888,889],{"class":541},")",[173,891,892],{"class":873}," =>",[173,894,842],{"class":541},[173,896,898,901,904,907,909,911,913],{"class":175,"line":897},14,[173,899,900],{"class":873},"    const",[173,902,903],{"class":545}," filePath",[173,905,906],{"class":541}," =",[173,908,726],{"class":577},[173,910,580],{"class":588},[173,912,687],{"class":545},[173,914,648],{"class":588},[173,916,918,920,923,925,928,930,932,935,937,939,942,944],{"class":175,"line":917},15,[173,919,900],{"class":873},[173,921,922],{"class":545}," content",[173,924,906],{"class":541},[173,926,927],{"class":537}," await",[173,929,706],{"class":577},[173,931,580],{"class":588},[173,933,934],{"class":545},"filePath",[173,936,636],{"class":541},[173,938,555],{"class":541},[173,940,941],{"class":558},"utf-8",[173,943,600],{"class":541},[173,945,648],{"class":588},[173,947,949,952],{"class":175,"line":948},16,[173,950,951],{"class":537},"    return",[173,953,842],{"class":541},[173,955,957,960,962,965],{"class":175,"line":956},17,[173,958,959],{"class":588},"      contents",[173,961,592],{"class":541},[173,963,964],{"class":588}," [",[173,966,583],{"class":541},[173,968,970,973,975,978,981,984,987],{"class":175,"line":969},18,[173,971,972],{"class":588},"        uri",[173,974,592],{"class":541},[173,976,977],{"class":545}," uri",[173,979,980],{"class":541},".",[173,982,983],{"class":577},"toString",[173,985,986],{"class":588},"()",[173,988,603],{"class":541},[173,990,992,995,997,999,1001,1003],{"class":175,"line":991},19,[173,993,994],{"class":588},"        mimeType",[173,996,592],{"class":541},[173,998,555],{"class":541},[173,1000,677],{"class":558},[173,1002,600],{"class":541},[173,1004,603],{"class":541},[173,1006,1008,1011,1013,1015],{"class":175,"line":1007},20,[173,1009,1010],{"class":588},"        text",[173,1012,592],{"class":541},[173,1014,922],{"class":545},[173,1016,603],{"class":541},[173,1018,1020,1023,1026],{"class":175,"line":1019},21,[173,1021,1022],{"class":541},"      }",[173,1024,1025],{"class":588},"]",[173,1027,603],{"class":541},[173,1029,1031],{"class":175,"line":1030},22,[173,1032,1033],{"class":541},"    }\n",[173,1035,1037],{"class":175,"line":1036},23,[173,1038,862],{"class":541},[173,1040,1042,1044],{"class":175,"line":1041},24,[173,1043,645],{"class":541},[173,1045,648],{"class":545},[145,1047,1048],{"id":1048},"自动生成的名称和标题",[150,1050,1051,1052,688,1055,1058],{},"您可以省略 ",[170,1053,1054],{},"name",[170,1056,1057],{},"title"," —— 它们将根据文件名自动生成：",[162,1060,1063],{"className":527,"code":1061,"filename":1062,"language":530,"meta":168,"style":168},"import { defineMcpResource } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpResource({\n  \u002F\u002F name 和 title 将根据文件名自动生成：\n  \u002F\u002F name: 'project-readme'\n  \u002F\u002F title: 'Project Readme'\n  file: 'README.md'\n})\n","server\u002Fmcp\u002Fresources\u002Fproject-readme.ts",[170,1064,1065,1083,1087,1099,1104,1109,1114,1126],{"__ignoreMap":168},[173,1066,1067,1069,1071,1073,1075,1077,1079,1081],{"class":175,"line":176},[173,1068,538],{"class":537},[173,1070,542],{"class":541},[173,1072,546],{"class":545},[173,1074,549],{"class":541},[173,1076,552],{"class":537},[173,1078,555],{"class":541},[173,1080,559],{"class":558},[173,1082,562],{"class":541},[173,1084,1085],{"class":175,"line":182},[173,1086,186],{"emptyLinePlaceholder":185},[173,1088,1089,1091,1093,1095,1097],{"class":175,"line":189},[173,1090,571],{"class":537},[173,1092,574],{"class":537},[173,1094,546],{"class":577},[173,1096,580],{"class":545},[173,1098,583],{"class":541},[173,1100,1101],{"class":175,"line":195},[173,1102,1103],{"class":639},"  \u002F\u002F name 和 title 将根据文件名自动生成：\n",[173,1105,1106],{"class":175,"line":201},[173,1107,1108],{"class":639},"  \u002F\u002F name: 'project-readme'\n",[173,1110,1111],{"class":175,"line":207},[173,1112,1113],{"class":639},"  \u002F\u002F title: 'Project Readme'\n",[173,1115,1116,1118,1120,1122,1124],{"class":175,"line":213},[173,1117,624],{"class":588},[173,1119,592],{"class":541},[173,1121,555],{"class":541},[173,1123,631],{"class":558},[173,1125,562],{"class":541},[173,1127,1128,1130],{"class":175,"line":219},[173,1129,645],{"class":541},[173,1131,648],{"class":545},[150,1133,1134,1135,1138],{},"文件名 ",[170,1136,1137],{},"project-readme.ts"," 将自动转换为：",[363,1140,1141,1149],{},[366,1142,1143,659,1145,1148],{},[170,1144,1054],{},[170,1146,1147],{},"project-readme","（短横线命名法）",[366,1150,1151,659,1153,1156],{},[170,1152,1057],{},[170,1154,1155],{},"Project Readme","（标题大小写）",[150,1158,1159,1160,261,1162,1164],{},"您仍然可以显式提供 ",[170,1161,1054],{},[170,1163,1057],{}," 以覆盖自动生成的值。",[145,1166,1167],{"id":1167},"资源结构",[150,1169,1170],{},"资源定义包含以下内容：",[1172,1173,1174,1267],"code-group",{},[162,1175,1178],{"className":527,"code":1176,"filename":1177,"language":530,"meta":168,"style":168},"import { defineMcpResource } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpResource({\n  name: 'resource-name',\n  file: 'path\u002Fto\u002Ffile.txt', \u002F\u002F 本地文件路径\n  metadata: { ... }\n})\n","File Resource",[170,1179,1180,1198,1202,1214,1229,1247,1261],{"__ignoreMap":168},[173,1181,1182,1184,1186,1188,1190,1192,1194,1196],{"class":175,"line":176},[173,1183,538],{"class":537},[173,1185,542],{"class":541},[173,1187,546],{"class":545},[173,1189,549],{"class":541},[173,1191,552],{"class":537},[173,1193,555],{"class":541},[173,1195,559],{"class":558},[173,1197,562],{"class":541},[173,1199,1200],{"class":175,"line":182},[173,1201,186],{"emptyLinePlaceholder":185},[173,1203,1204,1206,1208,1210,1212],{"class":175,"line":189},[173,1205,571],{"class":537},[173,1207,574],{"class":537},[173,1209,546],{"class":577},[173,1211,580],{"class":545},[173,1213,583],{"class":541},[173,1215,1216,1218,1220,1222,1225,1227],{"class":175,"line":195},[173,1217,589],{"class":588},[173,1219,592],{"class":541},[173,1221,555],{"class":541},[173,1223,1224],{"class":558},"resource-name",[173,1226,600],{"class":541},[173,1228,603],{"class":541},[173,1230,1231,1233,1235,1237,1240,1242,1244],{"class":175,"line":201},[173,1232,624],{"class":588},[173,1234,592],{"class":541},[173,1236,555],{"class":541},[173,1238,1239],{"class":558},"path\u002Fto\u002Ffile.txt",[173,1241,600],{"class":541},[173,1243,636],{"class":541},[173,1245,1246],{"class":639}," \u002F\u002F 本地文件路径\n",[173,1248,1249,1251,1253,1255,1258],{"class":175,"line":207},[173,1250,837],{"class":588},[173,1252,592],{"class":541},[173,1254,542],{"class":541},[173,1256,1257],{"class":541}," ...",[173,1259,1260],{"class":541}," }\n",[173,1262,1263,1265],{"class":175,"line":213},[173,1264,645],{"class":541},[173,1266,648],{"class":545},[162,1268,1271],{"className":527,"code":1269,"filename":1270,"language":530,"meta":168,"style":168},"import { defineMcpResource } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpResource({\n  name: 'resource-name',  \u002F\u002F 唯一标识符\n  uri: 'uri:\u002F\u002F...',      \u002F\u002F 静态 URI 或 ResourceTemplate\n  handler: async (uri) => { \u002F\u002F 处理器函数\n    return { contents: [...] }\n  },\n})\n","Custom Resource",[170,1272,1273,1291,1295,1307,1324,1342,1363,1385,1389],{"__ignoreMap":168},[173,1274,1275,1277,1279,1281,1283,1285,1287,1289],{"class":175,"line":176},[173,1276,538],{"class":537},[173,1278,542],{"class":541},[173,1280,546],{"class":545},[173,1282,549],{"class":541},[173,1284,552],{"class":537},[173,1286,555],{"class":541},[173,1288,559],{"class":558},[173,1290,562],{"class":541},[173,1292,1293],{"class":175,"line":182},[173,1294,186],{"emptyLinePlaceholder":185},[173,1296,1297,1299,1301,1303,1305],{"class":175,"line":189},[173,1298,571],{"class":537},[173,1300,574],{"class":537},[173,1302,546],{"class":577},[173,1304,580],{"class":545},[173,1306,583],{"class":541},[173,1308,1309,1311,1313,1315,1317,1319,1321],{"class":175,"line":195},[173,1310,589],{"class":588},[173,1312,592],{"class":541},[173,1314,555],{"class":541},[173,1316,1224],{"class":558},[173,1318,600],{"class":541},[173,1320,636],{"class":541},[173,1322,1323],{"class":639},"  \u002F\u002F 唯一标识符\n",[173,1325,1326,1328,1330,1332,1335,1337,1339],{"class":175,"line":201},[173,1327,821],{"class":588},[173,1329,592],{"class":541},[173,1331,555],{"class":541},[173,1333,1334],{"class":558},"uri:\u002F\u002F...",[173,1336,600],{"class":541},[173,1338,636],{"class":541},[173,1340,1341],{"class":639},"      \u002F\u002F 静态 URI 或 ResourceTemplate\n",[173,1343,1344,1346,1348,1350,1352,1354,1356,1358,1360],{"class":175,"line":207},[173,1345,868],{"class":577},[173,1347,592],{"class":541},[173,1349,874],{"class":873},[173,1351,877],{"class":541},[173,1353,687],{"class":880},[173,1355,889],{"class":541},[173,1357,892],{"class":873},[173,1359,542],{"class":541},[173,1361,1362],{"class":639}," \u002F\u002F 处理器函数\n",[173,1364,1365,1367,1369,1372,1374,1376,1379,1382],{"class":175,"line":213},[173,1366,951],{"class":537},[173,1368,542],{"class":541},[173,1370,1371],{"class":588}," contents",[173,1373,592],{"class":541},[173,1375,964],{"class":588},[173,1377,1378],{"class":541},"...",[173,1380,1381],{"class":588},"] ",[173,1383,1384],{"class":541},"}\n",[173,1386,1387],{"class":175,"line":219},[173,1388,862],{"class":541},[173,1390,1391,1393],{"class":175,"line":225},[173,1392,645],{"class":541},[173,1394,648],{"class":545},[145,1396,1397],{"id":1397},"使用模板的动态资源",[150,1399,1400,1401,1404],{},"使用 ",[170,1402,1403],{},"ResourceTemplate"," 创建接受变量的动态资源：",[162,1406,1409],{"className":527,"code":1407,"filename":1408,"language":530,"meta":168,"style":168},"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 返回可用资源列表\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",[170,1410,1411,1429,1449,1469,1492,1510,1514,1526,1540,1554,1578,1594,1599,1606,1616,1647,1677,1684,1689,1694,1703,1734,1756,1784,1810,1815,1822,1833,1850,1866,1877,1886,1891,1896],{"__ignoreMap":168},[173,1412,1413,1415,1417,1419,1421,1423,1425,1427],{"class":175,"line":176},[173,1414,538],{"class":537},[173,1416,542],{"class":541},[173,1418,706],{"class":545},[173,1420,549],{"class":541},[173,1422,552],{"class":537},[173,1424,555],{"class":541},[173,1426,715],{"class":558},[173,1428,562],{"class":541},[173,1430,1431,1433,1435,1438,1440,1442,1444,1447],{"class":175,"line":182},[173,1432,538],{"class":537},[173,1434,542],{"class":541},[173,1436,1437],{"class":545}," join",[173,1439,549],{"class":541},[173,1441,552],{"class":537},[173,1443,555],{"class":541},[173,1445,1446],{"class":558},"node:path",[173,1448,562],{"class":541},[173,1450,1451,1453,1455,1458,1460,1462,1464,1467],{"class":175,"line":189},[173,1452,538],{"class":537},[173,1454,542],{"class":541},[173,1456,1457],{"class":545}," ResourceTemplate",[173,1459,549],{"class":541},[173,1461,552],{"class":537},[173,1463,555],{"class":541},[173,1465,1466],{"class":558},"@modelcontextprotocol\u002Fsdk\u002Fserver\u002Fmcp.js",[173,1468,562],{"class":541},[173,1470,1471,1473,1476,1478,1481,1483,1485,1487,1490],{"class":175,"line":195},[173,1472,538],{"class":537},[173,1474,1475],{"class":537}," type",[173,1477,542],{"class":541},[173,1479,1480],{"class":545}," Variables",[173,1482,549],{"class":541},[173,1484,552],{"class":537},[173,1486,555],{"class":541},[173,1488,1489],{"class":558},"@modelcontextprotocol\u002Fsdk\u002Fshared\u002FuriTemplate.js",[173,1491,562],{"class":541},[173,1493,1494,1496,1498,1500,1502,1504,1506,1508],{"class":175,"line":201},[173,1495,538],{"class":537},[173,1497,542],{"class":541},[173,1499,546],{"class":545},[173,1501,549],{"class":541},[173,1503,552],{"class":537},[173,1505,555],{"class":541},[173,1507,559],{"class":558},[173,1509,562],{"class":541},[173,1511,1512],{"class":175,"line":207},[173,1513,186],{"emptyLinePlaceholder":185},[173,1515,1516,1518,1520,1522,1524],{"class":175,"line":213},[173,1517,571],{"class":537},[173,1519,574],{"class":537},[173,1521,546],{"class":577},[173,1523,580],{"class":545},[173,1525,583],{"class":541},[173,1527,1528,1530,1532,1534,1536,1538],{"class":175,"line":219},[173,1529,589],{"class":588},[173,1531,592],{"class":541},[173,1533,555],{"class":541},[173,1535,523],{"class":558},[173,1537,600],{"class":541},[173,1539,603],{"class":541},[173,1541,1542,1544,1546,1548,1550,1552],{"class":175,"line":225},[173,1543,791],{"class":588},[173,1545,592],{"class":541},[173,1547,555],{"class":541},[173,1549,1177],{"class":558},[173,1551,600],{"class":541},[173,1553,603],{"class":541},[173,1555,1556,1558,1560,1563,1565,1567,1569,1572,1574,1576],{"class":175,"line":231},[173,1557,821],{"class":588},[173,1559,592],{"class":541},[173,1561,1562],{"class":541}," new",[173,1564,1457],{"class":577},[173,1566,580],{"class":545},[173,1568,600],{"class":541},[173,1570,1571],{"class":558},"file:\u002F\u002F\u002Fproject\u002F{+path}",[173,1573,600],{"class":541},[173,1575,636],{"class":541},[173,1577,842],{"class":541},[173,1579,1580,1583,1585,1587,1590,1592],{"class":175,"line":236},[173,1581,1582],{"class":577},"    list",[173,1584,592],{"class":541},[173,1586,874],{"class":873},[173,1588,1589],{"class":541}," ()",[173,1591,892],{"class":873},[173,1593,842],{"class":541},[173,1595,1596],{"class":175,"line":464},[173,1597,1598],{"class":639},"      \u002F\u002F 返回可用资源列表\n",[173,1600,1601,1604],{"class":175,"line":865},[173,1602,1603],{"class":537},"      return",[173,1605,842],{"class":541},[173,1607,1608,1611,1613],{"class":175,"line":897},[173,1609,1610],{"class":588},"        resources",[173,1612,592],{"class":541},[173,1614,1615],{"class":588}," [\n",[173,1617,1618,1621,1623,1625,1627,1629,1631,1633,1636,1638,1640,1642,1644],{"class":175,"line":917},[173,1619,1620],{"class":541},"          {",[173,1622,977],{"class":588},[173,1624,592],{"class":541},[173,1626,555],{"class":541},[173,1628,260],{"class":558},[173,1630,600],{"class":541},[173,1632,636],{"class":541},[173,1634,1635],{"class":588}," name",[173,1637,592],{"class":541},[173,1639,555],{"class":541},[173,1641,631],{"class":558},[173,1643,600],{"class":541},[173,1645,1646],{"class":541}," },\n",[173,1648,1649,1651,1653,1655,1657,1660,1662,1664,1666,1668,1670,1673,1675],{"class":175,"line":948},[173,1650,1620],{"class":541},[173,1652,977],{"class":588},[173,1654,592],{"class":541},[173,1656,555],{"class":541},[173,1658,1659],{"class":558},"file:\u002F\u002F\u002Fproject\u002Fsrc\u002Findex.ts",[173,1661,600],{"class":541},[173,1663,636],{"class":541},[173,1665,1635],{"class":588},[173,1667,592],{"class":541},[173,1669,555],{"class":541},[173,1671,1672],{"class":558},"src\u002Findex.ts",[173,1674,600],{"class":541},[173,1676,1646],{"class":541},[173,1678,1679,1682],{"class":175,"line":956},[173,1680,1681],{"class":588},"        ]",[173,1683,603],{"class":541},[173,1685,1686],{"class":175,"line":969},[173,1687,1688],{"class":541},"      }\n",[173,1690,1691],{"class":175,"line":991},[173,1692,1693],{"class":541},"    },\n",[173,1695,1696,1699,1701],{"class":175,"line":1007},[173,1697,1698],{"class":541},"  }",[173,1700,889],{"class":545},[173,1702,603],{"class":541},[173,1704,1705,1707,1709,1711,1713,1715,1717,1719,1721,1724,1726,1728,1730,1732],{"class":175,"line":1019},[173,1706,868],{"class":577},[173,1708,592],{"class":541},[173,1710,874],{"class":873},[173,1712,877],{"class":541},[173,1714,687],{"class":880},[173,1716,592],{"class":541},[173,1718,886],{"class":885},[173,1720,636],{"class":541},[173,1722,1723],{"class":880}," variables",[173,1725,592],{"class":541},[173,1727,1480],{"class":885},[173,1729,889],{"class":541},[173,1731,892],{"class":873},[173,1733,842],{"class":541},[173,1735,1736,1738,1741,1743,1745,1747,1750,1753],{"class":175,"line":1030},[173,1737,900],{"class":873},[173,1739,1740],{"class":545}," path",[173,1742,906],{"class":541},[173,1744,1723],{"class":545},[173,1746,980],{"class":541},[173,1748,1749],{"class":545},"path",[173,1751,1752],{"class":537}," as",[173,1754,1755],{"class":885}," string\n",[173,1757,1758,1760,1762,1764,1766,1768,1771,1773,1776,1778,1780,1782],{"class":175,"line":1036},[173,1759,900],{"class":873},[173,1761,903],{"class":545},[173,1763,906],{"class":541},[173,1765,1437],{"class":577},[173,1767,580],{"class":588},[173,1769,1770],{"class":545},"process",[173,1772,980],{"class":541},[173,1774,1775],{"class":577},"cwd",[173,1777,986],{"class":588},[173,1779,636],{"class":541},[173,1781,1740],{"class":545},[173,1783,648],{"class":588},[173,1785,1786,1788,1790,1792,1794,1796,1798,1800,1802,1804,1806,1808],{"class":175,"line":1041},[173,1787,900],{"class":873},[173,1789,922],{"class":545},[173,1791,906],{"class":541},[173,1793,927],{"class":537},[173,1795,706],{"class":577},[173,1797,580],{"class":588},[173,1799,934],{"class":545},[173,1801,636],{"class":541},[173,1803,555],{"class":541},[173,1805,941],{"class":558},[173,1807,600],{"class":541},[173,1809,648],{"class":588},[173,1811,1813],{"class":175,"line":1812},25,[173,1814,186],{"emptyLinePlaceholder":185},[173,1816,1818,1820],{"class":175,"line":1817},26,[173,1819,951],{"class":537},[173,1821,842],{"class":541},[173,1823,1825,1827,1829,1831],{"class":175,"line":1824},27,[173,1826,959],{"class":588},[173,1828,592],{"class":541},[173,1830,964],{"class":588},[173,1832,583],{"class":541},[173,1834,1836,1838,1840,1842,1844,1846,1848],{"class":175,"line":1835},28,[173,1837,972],{"class":588},[173,1839,592],{"class":541},[173,1841,977],{"class":545},[173,1843,980],{"class":541},[173,1845,983],{"class":577},[173,1847,986],{"class":588},[173,1849,603],{"class":541},[173,1851,1853,1855,1857,1859,1862,1864],{"class":175,"line":1852},29,[173,1854,994],{"class":588},[173,1856,592],{"class":541},[173,1858,555],{"class":541},[173,1860,1861],{"class":558},"text\u002Fplain",[173,1863,600],{"class":541},[173,1865,603],{"class":541},[173,1867,1869,1871,1873,1875],{"class":175,"line":1868},30,[173,1870,1010],{"class":588},[173,1872,592],{"class":541},[173,1874,922],{"class":545},[173,1876,603],{"class":541},[173,1878,1880,1882,1884],{"class":175,"line":1879},31,[173,1881,1022],{"class":541},[173,1883,1025],{"class":588},[173,1885,603],{"class":541},[173,1887,1889],{"class":175,"line":1888},32,[173,1890,1033],{"class":541},[173,1892,1894],{"class":175,"line":1893},33,[173,1895,862],{"class":541},[173,1897,1899,1901],{"class":175,"line":1898},34,[173,1900,645],{"class":541},[173,1902,648],{"class":545},[145,1904,1403],{"id":1905},"resourcetemplate",[150,1907,1908,1910],{},[170,1909,1403],{}," 允许您在 URI 中创建包含可变部分的资源：",[162,1912,1914],{"className":527,"code":1913,"language":530,"meta":168,"style":168},"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: 'File 1' },\n        { uri: 'file:\u002F\u002F\u002Fproject\u002Ffile2.txt', name: 'File 2' },\n      ],\n    }\n  },\n})\n",[170,1915,1916,1935,1950,1955,1961,1970,2001,2031,2038,2042,2046],{"__ignoreMap":168},[173,1917,1918,1921,1923,1925,1927,1929,1931,1933],{"class":175,"line":176},[173,1919,1920],{"class":541},"new",[173,1922,1457],{"class":577},[173,1924,580],{"class":545},[173,1926,600],{"class":541},[173,1928,1571],{"class":558},[173,1930,600],{"class":541},[173,1932,636],{"class":541},[173,1934,842],{"class":541},[173,1936,1937,1940,1942,1944,1946,1948],{"class":175,"line":182},[173,1938,1939],{"class":577},"  list",[173,1941,592],{"class":541},[173,1943,874],{"class":873},[173,1945,1589],{"class":541},[173,1947,892],{"class":873},[173,1949,842],{"class":541},[173,1951,1952],{"class":175,"line":189},[173,1953,1954],{"class":639},"    \u002F\u002F 可选：返回可用资源列表\n",[173,1956,1957,1959],{"class":175,"line":195},[173,1958,951],{"class":537},[173,1960,842],{"class":541},[173,1962,1963,1966,1968],{"class":175,"line":201},[173,1964,1965],{"class":588},"      resources",[173,1967,592],{"class":541},[173,1969,1615],{"class":588},[173,1971,1972,1975,1977,1979,1981,1984,1986,1988,1990,1992,1994,1997,1999],{"class":175,"line":207},[173,1973,1974],{"class":541},"        {",[173,1976,977],{"class":588},[173,1978,592],{"class":541},[173,1980,555],{"class":541},[173,1982,1983],{"class":558},"file:\u002F\u002F\u002Fproject\u002Ffile1.txt",[173,1985,600],{"class":541},[173,1987,636],{"class":541},[173,1989,1635],{"class":588},[173,1991,592],{"class":541},[173,1993,555],{"class":541},[173,1995,1996],{"class":558},"File 1",[173,1998,600],{"class":541},[173,2000,1646],{"class":541},[173,2002,2003,2005,2007,2009,2011,2014,2016,2018,2020,2022,2024,2027,2029],{"class":175,"line":213},[173,2004,1974],{"class":541},[173,2006,977],{"class":588},[173,2008,592],{"class":541},[173,2010,555],{"class":541},[173,2012,2013],{"class":558},"file:\u002F\u002F\u002Fproject\u002Ffile2.txt",[173,2015,600],{"class":541},[173,2017,636],{"class":541},[173,2019,1635],{"class":588},[173,2021,592],{"class":541},[173,2023,555],{"class":541},[173,2025,2026],{"class":558},"File 2",[173,2028,600],{"class":541},[173,2030,1646],{"class":541},[173,2032,2033,2036],{"class":175,"line":219},[173,2034,2035],{"class":588},"      ]",[173,2037,603],{"class":541},[173,2039,2040],{"class":175,"line":225},[173,2041,1033],{"class":541},[173,2043,2044],{"class":175,"line":231},[173,2045,862],{"class":541},[173,2047,2048,2050],{"class":175,"line":236},[173,2049,645],{"class":541},[173,2051,648],{"class":545},[515,2053,2054],{"id":2054},"模板变量",[150,2056,2057,2058,2061],{},"URI 中的变量使用 ",[170,2059,2060],{},"{variableName}"," 定义：",[162,2063,2065],{"className":527,"code":2064,"language":530,"meta":168,"style":168},"\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",[170,2066,2067,2072,2097,2101,2106,2130,2134,2139],{"__ignoreMap":168},[173,2068,2069],{"class":175,"line":176},[173,2070,2071],{"class":639},"\u002F\u002F 单个变量\n",[173,2073,2074,2076,2078,2080,2082,2085,2087,2089,2091,2093,2095],{"class":175,"line":182},[173,2075,1920],{"class":541},[173,2077,1457],{"class":577},[173,2079,580],{"class":545},[173,2081,600],{"class":541},[173,2083,2084],{"class":558},"file:\u002F\u002F\u002Fproject\u002F{path}",[173,2086,600],{"class":541},[173,2088,636],{"class":541},[173,2090,542],{"class":541},[173,2092,1257],{"class":541},[173,2094,549],{"class":541},[173,2096,648],{"class":545},[173,2098,2099],{"class":175,"line":189},[173,2100,186],{"emptyLinePlaceholder":185},[173,2102,2103],{"class":175,"line":195},[173,2104,2105],{"class":639},"\u002F\u002F 允许包含斜杠的变量（保留扩展）\n",[173,2107,2108,2110,2112,2114,2116,2118,2120,2122,2124,2126,2128],{"class":175,"line":201},[173,2109,1920],{"class":541},[173,2111,1457],{"class":577},[173,2113,580],{"class":545},[173,2115,600],{"class":541},[173,2117,1571],{"class":558},[173,2119,600],{"class":541},[173,2121,636],{"class":541},[173,2123,542],{"class":541},[173,2125,1257],{"class":541},[173,2127,549],{"class":541},[173,2129,648],{"class":545},[173,2131,2132],{"class":175,"line":207},[173,2133,186],{"emptyLinePlaceholder":185},[173,2135,2136],{"class":175,"line":213},[173,2137,2138],{"class":639},"\u002F\u002F 多个变量\n",[173,2140,2141,2143,2145,2147,2149,2152,2154,2156,2158,2160,2162],{"class":175,"line":219},[173,2142,1920],{"class":541},[173,2144,1457],{"class":577},[173,2146,580],{"class":545},[173,2148,600],{"class":541},[173,2150,2151],{"class":558},"api:\u002F\u002Fusers\u002F{userId}\u002Fposts\u002F{postId}",[173,2153,600],{"class":541},[173,2155,636],{"class":541},[173,2157,542],{"class":541},[173,2159,1257],{"class":541},[173,2161,549],{"class":541},[173,2163,648],{"class":545},[145,2165,2166],{"id":2166},"处理器函数",[150,2168,2169],{},"处理器接收解析后的 URI 和可选的变量：",[162,2171,2173],{"className":527,"code":2172,"language":530,"meta":168,"style":168},"\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",[170,2174,2175,2180,2202,2209,2220,2237,2252,2268,2277,2282,2286,2290,2295,2325,2344,2349,2355,2365,2381,2395,2409,2417,2421],{"__ignoreMap":168},[173,2176,2177],{"class":175,"line":176},[173,2178,2179],{"class":639},"\u002F\u002F 静态资源处理器\n",[173,2181,2182,2184,2186,2188,2190,2192,2194,2196,2198,2200],{"class":175,"line":182},[173,2183,691],{"class":885},[173,2185,592],{"class":541},[173,2187,874],{"class":873},[173,2189,877],{"class":541},[173,2191,687],{"class":880},[173,2193,592],{"class":541},[173,2195,886],{"class":885},[173,2197,889],{"class":541},[173,2199,892],{"class":873},[173,2201,842],{"class":541},[173,2203,2204,2207],{"class":175,"line":189},[173,2205,2206],{"class":537},"  return",[173,2208,842],{"class":541},[173,2210,2211,2214,2216,2218],{"class":175,"line":195},[173,2212,2213],{"class":588},"    contents",[173,2215,592],{"class":541},[173,2217,964],{"class":588},[173,2219,583],{"class":541},[173,2221,2222,2225,2227,2229,2231,2233,2235],{"class":175,"line":201},[173,2223,2224],{"class":588},"      uri",[173,2226,592],{"class":541},[173,2228,977],{"class":545},[173,2230,980],{"class":541},[173,2232,983],{"class":577},[173,2234,986],{"class":588},[173,2236,603],{"class":541},[173,2238,2239,2242,2244,2246,2248,2250],{"class":175,"line":207},[173,2240,2241],{"class":588},"      mimeType",[173,2243,592],{"class":541},[173,2245,555],{"class":541},[173,2247,1861],{"class":558},[173,2249,600],{"class":541},[173,2251,603],{"class":541},[173,2253,2254,2257,2259,2261,2264,2266],{"class":175,"line":213},[173,2255,2256],{"class":588},"      text",[173,2258,592],{"class":541},[173,2260,555],{"class":541},[173,2262,2263],{"class":558},"Content",[173,2265,600],{"class":541},[173,2267,603],{"class":541},[173,2269,2270,2273,2275],{"class":175,"line":219},[173,2271,2272],{"class":541},"    }",[173,2274,1025],{"class":588},[173,2276,603],{"class":541},[173,2278,2279],{"class":175,"line":225},[173,2280,2281],{"class":541},"  }\n",[173,2283,2284],{"class":175,"line":231},[173,2285,1384],{"class":541},[173,2287,2288],{"class":175,"line":236},[173,2289,186],{"emptyLinePlaceholder":185},[173,2291,2292],{"class":175,"line":464},[173,2293,2294],{"class":639},"\u002F\u002F 动态资源处理器\n",[173,2296,2297,2299,2301,2303,2305,2307,2309,2311,2313,2315,2317,2319,2321,2323],{"class":175,"line":865},[173,2298,691],{"class":885},[173,2300,592],{"class":541},[173,2302,874],{"class":873},[173,2304,877],{"class":541},[173,2306,687],{"class":880},[173,2308,592],{"class":541},[173,2310,886],{"class":885},[173,2312,636],{"class":541},[173,2314,1723],{"class":880},[173,2316,592],{"class":541},[173,2318,1480],{"class":885},[173,2320,889],{"class":541},[173,2322,892],{"class":873},[173,2324,842],{"class":541},[173,2326,2327,2330,2332,2334,2336,2338,2340,2342],{"class":175,"line":897},[173,2328,2329],{"class":873},"  const",[173,2331,1740],{"class":545},[173,2333,906],{"class":541},[173,2335,1723],{"class":545},[173,2337,980],{"class":541},[173,2339,1749],{"class":545},[173,2341,1752],{"class":537},[173,2343,1755],{"class":885},[173,2345,2346],{"class":175,"line":917},[173,2347,2348],{"class":639},"  \u002F\u002F 使用变量来解析资源\n",[173,2350,2351,2353],{"class":175,"line":948},[173,2352,2206],{"class":537},[173,2354,842],{"class":541},[173,2356,2357,2359,2361,2363],{"class":175,"line":956},[173,2358,2213],{"class":588},[173,2360,592],{"class":541},[173,2362,964],{"class":588},[173,2364,583],{"class":541},[173,2366,2367,2369,2371,2373,2375,2377,2379],{"class":175,"line":969},[173,2368,2224],{"class":588},[173,2370,592],{"class":541},[173,2372,977],{"class":545},[173,2374,980],{"class":541},[173,2376,983],{"class":577},[173,2378,986],{"class":588},[173,2380,603],{"class":541},[173,2382,2383,2385,2387,2389,2391,2393],{"class":175,"line":991},[173,2384,2241],{"class":588},[173,2386,592],{"class":541},[173,2388,555],{"class":541},[173,2390,1861],{"class":558},[173,2392,600],{"class":541},[173,2394,603],{"class":541},[173,2396,2397,2399,2401,2403,2405,2407],{"class":175,"line":1007},[173,2398,2256],{"class":588},[173,2400,592],{"class":541},[173,2402,555],{"class":541},[173,2404,2263],{"class":558},[173,2406,600],{"class":541},[173,2408,603],{"class":541},[173,2410,2411,2413,2415],{"class":175,"line":1019},[173,2412,2272],{"class":541},[173,2414,1025],{"class":588},[173,2416,603],{"class":541},[173,2418,2419],{"class":175,"line":1030},[173,2420,2281],{"class":541},[173,2422,2423],{"class":175,"line":1036},[173,2424,1384],{"class":541},[145,2426,2427],{"id":2427},"资源元数据",[150,2429,2430],{},"添加元数据以帮助客户端理解资源：",[162,2432,2434],{"className":527,"code":2433,"filename":529,"language":530,"meta":168,"style":168},"import { defineMcpResource } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpResource({\n  name: 'readme',\n  description: 'Project README file',\n  file: 'README.md',\n})\n",[170,2435,2436,2454,2458,2470,2484,2498,2512],{"__ignoreMap":168},[173,2437,2438,2440,2442,2444,2446,2448,2450,2452],{"class":175,"line":176},[173,2439,538],{"class":537},[173,2441,542],{"class":541},[173,2443,546],{"class":545},[173,2445,549],{"class":541},[173,2447,552],{"class":537},[173,2449,555],{"class":541},[173,2451,559],{"class":558},[173,2453,562],{"class":541},[173,2455,2456],{"class":175,"line":182},[173,2457,186],{"emptyLinePlaceholder":185},[173,2459,2460,2462,2464,2466,2468],{"class":175,"line":189},[173,2461,571],{"class":537},[173,2463,574],{"class":537},[173,2465,546],{"class":577},[173,2467,580],{"class":545},[173,2469,583],{"class":541},[173,2471,2472,2474,2476,2478,2480,2482],{"class":175,"line":195},[173,2473,589],{"class":588},[173,2475,592],{"class":541},[173,2477,555],{"class":541},[173,2479,597],{"class":558},[173,2481,600],{"class":541},[173,2483,603],{"class":541},[173,2485,2486,2488,2490,2492,2494,2496],{"class":175,"line":201},[173,2487,608],{"class":588},[173,2489,592],{"class":541},[173,2491,555],{"class":541},[173,2493,615],{"class":558},[173,2495,600],{"class":541},[173,2497,603],{"class":541},[173,2499,2500,2502,2504,2506,2508,2510],{"class":175,"line":207},[173,2501,624],{"class":588},[173,2503,592],{"class":541},[173,2505,555],{"class":541},[173,2507,631],{"class":558},[173,2509,600],{"class":541},[173,2511,603],{"class":541},[173,2513,2514,2516],{"class":175,"line":213},[173,2515,645],{"class":541},[173,2517,648],{"class":545},[145,2519,2520],{"id":2520},"内容类型",[150,2522,2523],{},"资源可以返回不同的 MIME 类型：",[1172,2525,2526,2609,2711],{},[162,2527,2530],{"className":527,"code":2528,"filename":2529,"language":530,"meta":168,"style":168},"return {\n  contents: [{\n    uri: uri.toString(),\n    mimeType: 'text\u002Fmarkdown',\n    text: '# Markdown content',\n  }],\n}\n","Text\u002FMarkdown",[170,2531,2532,2539,2550,2567,2581,2597,2605],{"__ignoreMap":168},[173,2533,2534,2537],{"class":175,"line":176},[173,2535,2536],{"class":537},"return",[173,2538,842],{"class":541},[173,2540,2541,2544,2546,2548],{"class":175,"line":182},[173,2542,2543],{"class":588},"  contents",[173,2545,592],{"class":541},[173,2547,964],{"class":545},[173,2549,583],{"class":541},[173,2551,2552,2555,2557,2559,2561,2563,2565],{"class":175,"line":189},[173,2553,2554],{"class":588},"    uri",[173,2556,592],{"class":541},[173,2558,977],{"class":545},[173,2560,980],{"class":541},[173,2562,983],{"class":577},[173,2564,986],{"class":545},[173,2566,603],{"class":541},[173,2568,2569,2571,2573,2575,2577,2579],{"class":175,"line":195},[173,2570,847],{"class":588},[173,2572,592],{"class":541},[173,2574,555],{"class":541},[173,2576,677],{"class":558},[173,2578,600],{"class":541},[173,2580,603],{"class":541},[173,2582,2583,2586,2588,2590,2593,2595],{"class":175,"line":201},[173,2584,2585],{"class":588},"    text",[173,2587,592],{"class":541},[173,2589,555],{"class":541},[173,2591,2592],{"class":558},"# Markdown content",[173,2594,600],{"class":541},[173,2596,603],{"class":541},[173,2598,2599,2601,2603],{"class":175,"line":207},[173,2600,1698],{"class":541},[173,2602,1025],{"class":545},[173,2604,603],{"class":541},[173,2606,2607],{"class":175,"line":213},[173,2608,1384],{"class":541},[162,2610,2613],{"className":527,"code":2611,"filename":2612,"language":530,"meta":168,"style":168},"return {\n  contents: [{\n    uri: uri.toString(),\n    mimeType: 'application\u002Fjson',\n    text: JSON.stringify({ key: 'value' }),\n  }],\n}\n","JSON",[170,2614,2615,2621,2631,2647,2662,2699,2707],{"__ignoreMap":168},[173,2616,2617,2619],{"class":175,"line":176},[173,2618,2536],{"class":537},[173,2620,842],{"class":541},[173,2622,2623,2625,2627,2629],{"class":175,"line":182},[173,2624,2543],{"class":588},[173,2626,592],{"class":541},[173,2628,964],{"class":545},[173,2630,583],{"class":541},[173,2632,2633,2635,2637,2639,2641,2643,2645],{"class":175,"line":189},[173,2634,2554],{"class":588},[173,2636,592],{"class":541},[173,2638,977],{"class":545},[173,2640,980],{"class":541},[173,2642,983],{"class":577},[173,2644,986],{"class":545},[173,2646,603],{"class":541},[173,2648,2649,2651,2653,2655,2658,2660],{"class":175,"line":195},[173,2650,847],{"class":588},[173,2652,592],{"class":541},[173,2654,555],{"class":541},[173,2656,2657],{"class":558},"application\u002Fjson",[173,2659,600],{"class":541},[173,2661,603],{"class":541},[173,2663,2664,2666,2668,2671,2673,2676,2678,2681,2684,2686,2688,2691,2693,2695,2697],{"class":175,"line":201},[173,2665,2585],{"class":588},[173,2667,592],{"class":541},[173,2669,2670],{"class":545}," JSON",[173,2672,980],{"class":541},[173,2674,2675],{"class":577},"stringify",[173,2677,580],{"class":545},[173,2679,2680],{"class":541},"{",[173,2682,2683],{"class":588}," key",[173,2685,592],{"class":541},[173,2687,555],{"class":541},[173,2689,2690],{"class":558},"value",[173,2692,600],{"class":541},[173,2694,549],{"class":541},[173,2696,889],{"class":545},[173,2698,603],{"class":541},[173,2700,2701,2703,2705],{"class":175,"line":207},[173,2702,1698],{"class":541},[173,2704,1025],{"class":545},[173,2706,603],{"class":541},[173,2708,2709],{"class":175,"line":213},[173,2710,1384],{"class":541},[162,2712,2715],{"className":527,"code":2713,"filename":2714,"language":530,"meta":168,"style":168},"return {\n  contents: [{\n    uri: uri.toString(),\n    mimeType: 'image\u002Fpng',\n    blob: Buffer.from(binaryData),\n  }],\n}\n","Binary Data",[170,2716,2717,2723,2733,2749,2764,2784,2792],{"__ignoreMap":168},[173,2718,2719,2721],{"class":175,"line":176},[173,2720,2536],{"class":537},[173,2722,842],{"class":541},[173,2724,2725,2727,2729,2731],{"class":175,"line":182},[173,2726,2543],{"class":588},[173,2728,592],{"class":541},[173,2730,964],{"class":545},[173,2732,583],{"class":541},[173,2734,2735,2737,2739,2741,2743,2745,2747],{"class":175,"line":189},[173,2736,2554],{"class":588},[173,2738,592],{"class":541},[173,2740,977],{"class":545},[173,2742,980],{"class":541},[173,2744,983],{"class":577},[173,2746,986],{"class":545},[173,2748,603],{"class":541},[173,2750,2751,2753,2755,2757,2760,2762],{"class":175,"line":195},[173,2752,847],{"class":588},[173,2754,592],{"class":541},[173,2756,555],{"class":541},[173,2758,2759],{"class":558},"image\u002Fpng",[173,2761,600],{"class":541},[173,2763,603],{"class":541},[173,2765,2766,2769,2771,2774,2776,2779,2782],{"class":175,"line":201},[173,2767,2768],{"class":588},"    blob",[173,2770,592],{"class":541},[173,2772,2773],{"class":545}," Buffer",[173,2775,980],{"class":541},[173,2777,2778],{"class":577},"from",[173,2780,2781],{"class":545},"(binaryData)",[173,2783,603],{"class":541},[173,2785,2786,2788,2790],{"class":175,"line":207},[173,2787,1698],{"class":541},[173,2789,1025],{"class":545},[173,2791,603],{"class":541},[173,2793,2794],{"class":175,"line":213},[173,2795,1384],{"class":541},[145,2797,2798],{"id":2798},"错误处理",[150,2800,2801],{},"在处理器中优雅地处理错误：",[162,2803,2805],{"className":527,"code":2804,"filename":695,"language":530,"meta":168,"style":168},"import { readFile } from 'node:fs\u002Fpromises'\nimport { fileURLToPath } from 'node:url'\nimport { defineMcpResource } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpResource({\n  name: 'readme',\n  uri: 'file:\u002F\u002F\u002FREADME.md',\n  handler: async (uri: URL) => {\n    try {\n      const filePath = fileURLToPath(uri)\n      const content = await readFile(filePath, 'utf-8')\n\n      return {\n        contents: [{\n          uri: uri.toString(),\n          mimeType: 'text\u002Fmarkdown',\n          text: content,\n        }],\n      }\n    }\n    catch (error) {\n      return {\n        contents: [{\n          uri: uri.toString(),\n          mimeType: 'text\u002Fplain',\n          text: `Error: ${error instanceof Error ? error.message : String(error)}`,\n        }],\n        isError: true,\n      }\n    }\n  },\n})\n",[170,2806,2807,2825,2843,2861,2865,2877,2891,2905,2927,2934,2951,2977,2981,2987,2998,3015,3030,3041,3050,3054,3058,3073,3079,3089,3105,3119,3167,3175,3188,3192,3196,3200],{"__ignoreMap":168},[173,2808,2809,2811,2813,2815,2817,2819,2821,2823],{"class":175,"line":176},[173,2810,538],{"class":537},[173,2812,542],{"class":541},[173,2814,706],{"class":545},[173,2816,549],{"class":541},[173,2818,552],{"class":537},[173,2820,555],{"class":541},[173,2822,715],{"class":558},[173,2824,562],{"class":541},[173,2826,2827,2829,2831,2833,2835,2837,2839,2841],{"class":175,"line":182},[173,2828,538],{"class":537},[173,2830,542],{"class":541},[173,2832,726],{"class":545},[173,2834,549],{"class":541},[173,2836,552],{"class":537},[173,2838,555],{"class":541},[173,2840,735],{"class":558},[173,2842,562],{"class":541},[173,2844,2845,2847,2849,2851,2853,2855,2857,2859],{"class":175,"line":189},[173,2846,538],{"class":537},[173,2848,542],{"class":541},[173,2850,546],{"class":545},[173,2852,549],{"class":541},[173,2854,552],{"class":537},[173,2856,555],{"class":541},[173,2858,559],{"class":558},[173,2860,562],{"class":541},[173,2862,2863],{"class":175,"line":195},[173,2864,186],{"emptyLinePlaceholder":185},[173,2866,2867,2869,2871,2873,2875],{"class":175,"line":201},[173,2868,571],{"class":537},[173,2870,574],{"class":537},[173,2872,546],{"class":577},[173,2874,580],{"class":545},[173,2876,583],{"class":541},[173,2878,2879,2881,2883,2885,2887,2889],{"class":175,"line":207},[173,2880,589],{"class":588},[173,2882,592],{"class":541},[173,2884,555],{"class":541},[173,2886,597],{"class":558},[173,2888,600],{"class":541},[173,2890,603],{"class":541},[173,2892,2893,2895,2897,2899,2901,2903],{"class":175,"line":213},[173,2894,821],{"class":588},[173,2896,592],{"class":541},[173,2898,555],{"class":541},[173,2900,828],{"class":558},[173,2902,600],{"class":541},[173,2904,603],{"class":541},[173,2906,2907,2909,2911,2913,2915,2917,2919,2921,2923,2925],{"class":175,"line":219},[173,2908,868],{"class":577},[173,2910,592],{"class":541},[173,2912,874],{"class":873},[173,2914,877],{"class":541},[173,2916,687],{"class":880},[173,2918,592],{"class":541},[173,2920,886],{"class":885},[173,2922,889],{"class":541},[173,2924,892],{"class":873},[173,2926,842],{"class":541},[173,2928,2929,2932],{"class":175,"line":225},[173,2930,2931],{"class":537},"    try",[173,2933,842],{"class":541},[173,2935,2936,2939,2941,2943,2945,2947,2949],{"class":175,"line":231},[173,2937,2938],{"class":873},"      const",[173,2940,903],{"class":545},[173,2942,906],{"class":541},[173,2944,726],{"class":577},[173,2946,580],{"class":588},[173,2948,687],{"class":545},[173,2950,648],{"class":588},[173,2952,2953,2955,2957,2959,2961,2963,2965,2967,2969,2971,2973,2975],{"class":175,"line":236},[173,2954,2938],{"class":873},[173,2956,922],{"class":545},[173,2958,906],{"class":541},[173,2960,927],{"class":537},[173,2962,706],{"class":577},[173,2964,580],{"class":588},[173,2966,934],{"class":545},[173,2968,636],{"class":541},[173,2970,555],{"class":541},[173,2972,941],{"class":558},[173,2974,600],{"class":541},[173,2976,648],{"class":588},[173,2978,2979],{"class":175,"line":464},[173,2980,186],{"emptyLinePlaceholder":185},[173,2982,2983,2985],{"class":175,"line":865},[173,2984,1603],{"class":537},[173,2986,842],{"class":541},[173,2988,2989,2992,2994,2996],{"class":175,"line":897},[173,2990,2991],{"class":588},"        contents",[173,2993,592],{"class":541},[173,2995,964],{"class":588},[173,2997,583],{"class":541},[173,2999,3000,3003,3005,3007,3009,3011,3013],{"class":175,"line":917},[173,3001,3002],{"class":588},"          uri",[173,3004,592],{"class":541},[173,3006,977],{"class":545},[173,3008,980],{"class":541},[173,3010,983],{"class":577},[173,3012,986],{"class":588},[173,3014,603],{"class":541},[173,3016,3017,3020,3022,3024,3026,3028],{"class":175,"line":948},[173,3018,3019],{"class":588},"          mimeType",[173,3021,592],{"class":541},[173,3023,555],{"class":541},[173,3025,677],{"class":558},[173,3027,600],{"class":541},[173,3029,603],{"class":541},[173,3031,3032,3035,3037,3039],{"class":175,"line":956},[173,3033,3034],{"class":588},"          text",[173,3036,592],{"class":541},[173,3038,922],{"class":545},[173,3040,603],{"class":541},[173,3042,3043,3046,3048],{"class":175,"line":969},[173,3044,3045],{"class":541},"        }",[173,3047,1025],{"class":588},[173,3049,603],{"class":541},[173,3051,3052],{"class":175,"line":991},[173,3053,1688],{"class":541},[173,3055,3056],{"class":175,"line":1007},[173,3057,1033],{"class":541},[173,3059,3060,3063,3065,3068,3071],{"class":175,"line":1019},[173,3061,3062],{"class":537},"    catch",[173,3064,877],{"class":588},[173,3066,3067],{"class":545},"error",[173,3069,3070],{"class":588},") ",[173,3072,583],{"class":541},[173,3074,3075,3077],{"class":175,"line":1030},[173,3076,1603],{"class":537},[173,3078,842],{"class":541},[173,3080,3081,3083,3085,3087],{"class":175,"line":1036},[173,3082,2991],{"class":588},[173,3084,592],{"class":541},[173,3086,964],{"class":588},[173,3088,583],{"class":541},[173,3090,3091,3093,3095,3097,3099,3101,3103],{"class":175,"line":1041},[173,3092,3002],{"class":588},[173,3094,592],{"class":541},[173,3096,977],{"class":545},[173,3098,980],{"class":541},[173,3100,983],{"class":577},[173,3102,986],{"class":588},[173,3104,603],{"class":541},[173,3106,3107,3109,3111,3113,3115,3117],{"class":175,"line":1812},[173,3108,3019],{"class":588},[173,3110,592],{"class":541},[173,3112,555],{"class":541},[173,3114,1861],{"class":558},[173,3116,600],{"class":541},[173,3118,603],{"class":541},[173,3120,3121,3123,3125,3128,3131,3134,3137,3140,3143,3146,3149,3151,3154,3156,3159,3162,3165],{"class":175,"line":1817},[173,3122,3034],{"class":588},[173,3124,592],{"class":541},[173,3126,3127],{"class":541}," `",[173,3129,3130],{"class":558},"Error: ",[173,3132,3133],{"class":541},"${",[173,3135,3136],{"class":545},"error ",[173,3138,3139],{"class":541},"instanceof",[173,3141,3142],{"class":885}," Error",[173,3144,3145],{"class":541}," ?",[173,3147,3148],{"class":545}," error",[173,3150,980],{"class":541},[173,3152,3153],{"class":545},"message ",[173,3155,592],{"class":541},[173,3157,3158],{"class":577}," String",[173,3160,3161],{"class":545},"(error)",[173,3163,3164],{"class":541},"}`",[173,3166,603],{"class":541},[173,3168,3169,3171,3173],{"class":175,"line":1824},[173,3170,3045],{"class":541},[173,3172,1025],{"class":588},[173,3174,603],{"class":541},[173,3176,3177,3180,3182,3186],{"class":175,"line":1835},[173,3178,3179],{"class":588},"        isError",[173,3181,592],{"class":541},[173,3183,3185],{"class":3184},"sfNiH"," true",[173,3187,603],{"class":541},[173,3189,3190],{"class":175,"line":1852},[173,3191,1688],{"class":541},[173,3193,3194],{"class":175,"line":1868},[173,3195,1033],{"class":541},[173,3197,3198],{"class":175,"line":1879},[173,3199,862],{"class":541},[173,3201,3202,3204],{"class":175,"line":1888},[173,3203,645],{"class":541},[173,3205,648],{"class":545},[145,3207,3208],{"id":3208},"分组与标签",[150,3210,1400,3211,688,3214,3217,3218,3221],{},[170,3212,3213],{},"group",[170,3215,3216],{},"tags"," 对资源进行分类组织。这些字段的用法与 ",[248,3219,46],{"href":3220},"\u002Fcore-concepts\u002Ftools#groups-and-tags"," 中的完全相同。",[162,3223,3226],{"className":527,"code":3224,"filename":3225,"language":530,"meta":168,"style":168},"import { defineMcpResource } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpResource({\n  group: 'config',\n  tags: ['readonly', 'settings'],\n  description: 'Application settings',\n  file: 'config\u002Fapp.json',\n})\n","server\u002Fmcp\u002Fresources\u002Fconfig\u002Fapp-settings.ts",[170,3227,3228,3246,3250,3262,3278,3307,3322,3337],{"__ignoreMap":168},[173,3229,3230,3232,3234,3236,3238,3240,3242,3244],{"class":175,"line":176},[173,3231,538],{"class":537},[173,3233,542],{"class":541},[173,3235,546],{"class":545},[173,3237,549],{"class":541},[173,3239,552],{"class":537},[173,3241,555],{"class":541},[173,3243,559],{"class":558},[173,3245,562],{"class":541},[173,3247,3248],{"class":175,"line":182},[173,3249,186],{"emptyLinePlaceholder":185},[173,3251,3252,3254,3256,3258,3260],{"class":175,"line":189},[173,3253,571],{"class":537},[173,3255,574],{"class":537},[173,3257,546],{"class":577},[173,3259,580],{"class":545},[173,3261,583],{"class":541},[173,3263,3264,3267,3269,3271,3274,3276],{"class":175,"line":195},[173,3265,3266],{"class":588},"  group",[173,3268,592],{"class":541},[173,3270,555],{"class":541},[173,3272,3273],{"class":558},"config",[173,3275,600],{"class":541},[173,3277,603],{"class":541},[173,3279,3280,3283,3285,3287,3289,3292,3294,3296,3298,3301,3303,3305],{"class":175,"line":201},[173,3281,3282],{"class":588},"  tags",[173,3284,592],{"class":541},[173,3286,964],{"class":545},[173,3288,600],{"class":541},[173,3290,3291],{"class":558},"readonly",[173,3293,600],{"class":541},[173,3295,636],{"class":541},[173,3297,555],{"class":541},[173,3299,3300],{"class":558},"settings",[173,3302,600],{"class":541},[173,3304,1025],{"class":545},[173,3306,603],{"class":541},[173,3308,3309,3311,3313,3315,3318,3320],{"class":175,"line":207},[173,3310,608],{"class":588},[173,3312,592],{"class":541},[173,3314,555],{"class":541},[173,3316,3317],{"class":558},"Application settings",[173,3319,600],{"class":541},[173,3321,603],{"class":541},[173,3323,3324,3326,3328,3330,3333,3335],{"class":175,"line":213},[173,3325,624],{"class":588},[173,3327,592],{"class":541},[173,3329,555],{"class":541},[173,3331,3332],{"class":558},"config\u002Fapp.json",[173,3334,600],{"class":541},[173,3336,603],{"class":541},[173,3338,3339,3341],{"class":175,"line":219},[173,3340,645],{"class":541},[173,3342,648],{"class":545},[150,3344,3345],{},"你也可以将资源文件放在子目录中，以自动推断分组：",[162,3347,3352],{"className":3348,"code":3350,"language":3351},[3349],"language-text","server\u002Fmcp\u002Fresources\u002F\n├── config\u002F\n│   └── app-settings.ts   → 分组: 'config'\n├── docs\u002F\n│   └── readme.ts         → 分组: 'docs'\n└── schema.ts             → 无分组\n","text",[170,3353,3350],{"__ignoreMap":168},[241,3355,3356,3357,688,3359,3361,3362,3364,3365,3371],{"color":505,"icon":506},"资源的 ",[170,3358,3213],{},[170,3360,3216],{}," 会存储在定义对象中，但尚未包含在 ",[170,3363,479],{}," 协议响应中。当 MCP SDK 采纳 ",[248,3366,3370],{"href":3367,"rel":3368},"https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fmodelcontextprotocol\u002Fissues\u002F1300",[3369],"nofollow","SEP-1300"," 后，将支持此功能。",[145,3373,3374],{"id":3374},"文件组织",[150,3376,3377,3378,3381],{},"将你的资源组织在 ",[170,3379,3380],{},"server\u002Fmcp\u002Fresources\u002F"," 目录中。支持扁平化和嵌套式布局：",[162,3383,3386],{"className":3384,"code":3385,"language":3351},[3349],"server\u002F\n└── mcp\u002F\n    └── resources\u002F\n        ├── readme.ts\n        ├── file.ts\n        └── config\u002F\n            └── app-settings.ts\n",[170,3387,3385],{"__ignoreMap":168},[150,3389,3390,3391,3393],{},"每个文件都应导出一个默认的资源定义。子目录会自动设置 ",[170,3392,3213],{},"。",[145,3395,3397],{"id":3396},"uri-方案","URI 方案",[150,3399,3400],{},"你可以根据用例使用任何合理的 URI 方案：",[363,3402,3403,3409,3415,3425],{},[366,3404,3405,3408],{},[170,3406,3407],{},"file:\u002F\u002F"," - 文件系统资源",[366,3410,3411,3414],{},[170,3412,3413],{},"api:\u002F\u002F"," - API 端点",[366,3416,3417,3420,3421,3424],{},[170,3418,3419],{},"http:\u002F\u002F"," \u002F ",[170,3422,3423],{},"https:\u002F\u002F"," - Web 资源",[366,3426,3427,3430],{},[170,3428,3429],{},"custom:\u002F\u002F"," - 自定义方案",[145,3432,3433],{"id":3433},"条件注册",[150,3435,3436,3437,3440],{},"你可以使用 ",[170,3438,3439],{},"enabled"," 守卫来控制资源是否对客户端可见：",[162,3442,3445],{"className":527,"code":3443,"filename":3444,"language":530,"meta":168,"style":168},"export default defineMcpResource({\n  name: 'internal-data',\n  uri: 'app:\u002F\u002Finternal',\n  enabled: event => event.context.user?.role === 'admin',\n  handler: async (uri) => ({\n    contents: [{ uri: uri.toString(), text: 'Internal data...' }],\n  }),\n})\n","server\u002Fmcp\u002Fresources\u002Finternal-data.ts",[170,3446,3447,3459,3474,3489,3531,3551,3593,3601],{"__ignoreMap":168},[173,3448,3449,3451,3453,3455,3457],{"class":175,"line":176},[173,3450,571],{"class":537},[173,3452,574],{"class":537},[173,3454,546],{"class":577},[173,3456,580],{"class":545},[173,3458,583],{"class":541},[173,3460,3461,3463,3465,3467,3470,3472],{"class":175,"line":182},[173,3462,589],{"class":588},[173,3464,592],{"class":541},[173,3466,555],{"class":541},[173,3468,3469],{"class":558},"internal-data",[173,3471,600],{"class":541},[173,3473,603],{"class":541},[173,3475,3476,3478,3480,3482,3485,3487],{"class":175,"line":189},[173,3477,821],{"class":588},[173,3479,592],{"class":541},[173,3481,555],{"class":541},[173,3483,3484],{"class":558},"app:\u002F\u002Finternal",[173,3486,600],{"class":541},[173,3488,603],{"class":541},[173,3490,3491,3494,3496,3499,3501,3503,3505,3508,3510,3513,3516,3519,3522,3524,3527,3529],{"class":175,"line":195},[173,3492,3493],{"class":577},"  enabled",[173,3495,592],{"class":541},[173,3497,3498],{"class":880}," event",[173,3500,892],{"class":873},[173,3502,3498],{"class":545},[173,3504,980],{"class":541},[173,3506,3507],{"class":545},"context",[173,3509,980],{"class":541},[173,3511,3512],{"class":545},"user",[173,3514,3515],{"class":541},"?.",[173,3517,3518],{"class":545},"role ",[173,3520,3521],{"class":541},"===",[173,3523,555],{"class":541},[173,3525,3526],{"class":558},"admin",[173,3528,600],{"class":541},[173,3530,603],{"class":541},[173,3532,3533,3535,3537,3539,3541,3543,3545,3547,3549],{"class":175,"line":201},[173,3534,868],{"class":577},[173,3536,592],{"class":541},[173,3538,874],{"class":873},[173,3540,877],{"class":541},[173,3542,687],{"class":880},[173,3544,889],{"class":541},[173,3546,892],{"class":873},[173,3548,877],{"class":545},[173,3550,583],{"class":541},[173,3552,3553,3555,3557,3559,3561,3563,3565,3567,3569,3571,3573,3575,3578,3580,3582,3585,3587,3589,3591],{"class":175,"line":207},[173,3554,2213],{"class":588},[173,3556,592],{"class":541},[173,3558,964],{"class":545},[173,3560,2680],{"class":541},[173,3562,977],{"class":588},[173,3564,592],{"class":541},[173,3566,977],{"class":545},[173,3568,980],{"class":541},[173,3570,983],{"class":577},[173,3572,986],{"class":545},[173,3574,636],{"class":541},[173,3576,3577],{"class":588}," text",[173,3579,592],{"class":541},[173,3581,555],{"class":541},[173,3583,3584],{"class":558},"Internal data...",[173,3586,600],{"class":541},[173,3588,549],{"class":541},[173,3590,1025],{"class":545},[173,3592,603],{"class":541},[173,3594,3595,3597,3599],{"class":175,"line":213},[173,3596,1698],{"class":541},[173,3598,889],{"class":545},[173,3600,603],{"class":541},[173,3602,3603,3605],{"class":175,"line":219},[173,3604,645],{"class":541},[173,3606,648],{"class":545},[241,3608,3609,3610,3612],{"color":243,"icon":13},"有关基于身份验证进行过滤的详细文档，请参阅 ",[248,3611,101],{"href":102}," 指南。",[145,3614,3615],{"id":3615},"下一步",[363,3617,3618,3623,3629,3634,3639],{},[366,3619,3620,3622],{},[248,3621,46],{"href":47}," - 创建用于执行操作的工具",[366,3624,3625,3628],{},[248,3626,3627],{"href":57},"提示词"," - 创建可复用的提示词",[366,3630,3631,3633],{},[248,3632,667],{"href":62}," - 创建自定义 MCP 端点",[366,3635,3636,3638],{},[248,3637,101],{"href":102}," - 条件化注册定义",[366,3640,3641,3643],{},[248,3642,111],{"href":132}," - 更多资源示例",[3645,3646,3647],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":168,"searchDepth":182,"depth":182,"links":3649},[3650,3651,3652,3653,3657,3658,3659,3660,3663,3664,3665,3666,3667,3668,3669,3670,3671],{"id":147,"depth":182,"text":148},{"id":268,"depth":182,"text":268},{"id":393,"depth":182,"text":393},{"id":510,"depth":182,"text":510,"children":3654},[3655,3656],{"id":517,"depth":189,"text":517},{"id":681,"depth":189,"text":681},{"id":1048,"depth":182,"text":1048},{"id":1167,"depth":182,"text":1167},{"id":1397,"depth":182,"text":1397},{"id":1905,"depth":182,"text":1403,"children":3661},[3662],{"id":2054,"depth":189,"text":2054},{"id":2166,"depth":182,"text":2166},{"id":2427,"depth":182,"text":2427},{"id":2520,"depth":182,"text":2520},{"id":2798,"depth":182,"text":2798},{"id":3208,"depth":182,"text":3208},{"id":3374,"depth":182,"text":3374},{"id":3396,"depth":182,"text":3397},{"id":3433,"depth":182,"text":3433},{"id":3615,"depth":182,"text":3615},"将只读数据源公开为 MCP 资源，以便为 AI 模型提供上下文。","md",null,{},{"icon":54},{"title":51,"description":3678},"创建 MCP 资源以公开具有静态或动态 URI 的只读数据源。","YUt0Tlqzb_wLjsSX3reI2BoHx1ZaJTCk2EUeHcaJaEc",[3681,3683],{"title":46,"path":47,"stem":48,"description":3682,"icon":49,"children":-1},"使用 Zod 验证和类型安全创建 MCP 工具。",{"title":56,"path":57,"stem":58,"description":3684,"icon":59,"children":-1},"为 AI 助手创建可复用的提示词，支持可选参数。",1775615723509]