[{"data":1,"prerenderedAt":3020},["ShallowReactive",2],{"navigation_docs":3,"-advanced-code-mode":139,"-advanced-code-mode-surround":3015},[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":106,"body":141,"description":3007,"extension":3008,"links":3009,"meta":3010,"navigation":3011,"path":107,"seo":3012,"stem":108,"__hash__":3014},"docs\u002F3.advanced\u002F8.code-mode.md",{"type":142,"value":143,"toc":2977},"minimark",[144,149,157,244,319,327,331,338,342,352,445,452,465,469,472,514,517,521,532,598,614,618,625,766,772,775,778,800,804,819,1430,1433,1440,1583,1727,1729,1735,1752,1797,1800,1852,1855,1858,1864,1934,1942,1951,1954,1961,1964,1976,2018,2021,2024,2061,2065,2068,2096,2099,2102,2257,2260,2263,2293,2296,2303,2306,2313,2316,2319,2796,2815,2818,2824,2882,2892,2895,2901,2946,2949,2973],[145,146,148],"h2",{"id":147},"什么是代码模式","什么是代码模式？",[150,151,152,153,156],"p",{},"代码模式使用单个 ",[154,155,154],"code",{}," 工具替代了传统的多轮工具调用模式。大语言模型不再逐个调用工具（每次都需要一次往返通信），而是编写 JavaScript 代码，在单次执行中编排多个工具。",[158,159,160],"code-collapse",{},[161,162,168],"pre",{"className":163,"code":164,"filename":165,"language":166,"meta":167,"style":167},"language-txt shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","在我的 Nuxt MCP 服务器 (@nuxtjs\u002Fmcp-toolkit) 中启用代码模式。\n\n- 安装 secure-exec：pnpm add secure-exec\n- 在 server\u002Fmcp\u002Findex.ts 的处理程序上设置 experimental_codeMode: true（通过 defineMcpHandler）\n- 代码模式会将所有已注册的工具替换为单个 'code' 工具\n- 大语言模型编写 JavaScript，通过 codemode 对象调用工具（例如 await codemode.listUsers()）\n- 这减少了往返通信和 Token 使用量——尤其是当工具较多时（10+ 个工具可节省 50%+ 的 Token）\n- 代码在安全的 V8 沙箱（workerd）中运行——无法访问文件系统、网络或 Node API\n- 如果工具很多（10+ 个），请考虑渐进模式（experimental_codeMode: { progressive: true }）以同时保留独立工具和代码工具——对于较少的工具，标准模式已足够\n- 代码模式目前处于实验阶段——API 可能会发生变化\n\n文档：https:\u002F\u002Fmcp-toolkit.nuxt.dev\u002Fadvanced\u002Fcode-mode\n","Prompt","txt","",[154,169,170,178,185,191,197,203,209,215,221,227,233,238],{"__ignoreMap":167},[171,172,175],"span",{"class":173,"line":174},"line",1,[171,176,177],{},"在我的 Nuxt MCP 服务器 (@nuxtjs\u002Fmcp-toolkit) 中启用代码模式。\n",[171,179,181],{"class":173,"line":180},2,[171,182,184],{"emptyLinePlaceholder":183},true,"\n",[171,186,188],{"class":173,"line":187},3,[171,189,190],{},"- 安装 secure-exec：pnpm add secure-exec\n",[171,192,194],{"class":173,"line":193},4,[171,195,196],{},"- 在 server\u002Fmcp\u002Findex.ts 的处理程序上设置 experimental_codeMode: true（通过 defineMcpHandler）\n",[171,198,200],{"class":173,"line":199},5,[171,201,202],{},"- 代码模式会将所有已注册的工具替换为单个 'code' 工具\n",[171,204,206],{"class":173,"line":205},6,[171,207,208],{},"- 大语言模型编写 JavaScript，通过 codemode 对象调用工具（例如 await codemode.listUsers()）\n",[171,210,212],{"class":173,"line":211},7,[171,213,214],{},"- 这减少了往返通信和 Token 使用量——尤其是当工具较多时（10+ 个工具可节省 50%+ 的 Token）\n",[171,216,218],{"class":173,"line":217},8,[171,219,220],{},"- 代码在安全的 V8 沙箱（workerd）中运行——无法访问文件系统、网络或 Node API\n",[171,222,224],{"class":173,"line":223},9,[171,225,226],{},"- 如果工具很多（10+ 个），请考虑渐进模式（experimental_codeMode: { progressive: true }）以同时保留独立工具和代码工具——对于较少的工具，标准模式已足够\n",[171,228,230],{"class":173,"line":229},10,[171,231,232],{},"- 代码模式目前处于实验阶段——API 可能会发生变化\n",[171,234,236],{"class":173,"line":235},11,[171,237,184],{"emptyLinePlaceholder":183},[171,239,241],{"class":173,"line":240},12,[171,242,243],{},"文档：https:\u002F\u002Fmcp-toolkit.nuxt.dev\u002Fadvanced\u002Fcode-mode\n",[245,246,247,262],"table",{},[248,249,250],"thead",{},[251,252,253,256,259],"tr",{},[254,255],"th",{},[254,257,258],{},"传统 MCP",[254,260,261],{},"代码模式",[263,264,265,280,293,306],"tbody",{},[251,266,267,274,277],{},[268,269,270],"td",{},[271,272,273],"strong",{},"模式",[268,275,276],{},"大语言模型逐个调用工具",[268,278,279],{},"大语言模型编写调用工具的 JS 代码",[251,281,282,287,290],{},[268,283,284],{},[271,285,286],{},"往返通信",[268,288,289],{},"每次工具调用一次",[268,291,292],{},"所有操作仅需一次",[251,294,295,300,303],{},[268,296,297],{},[271,298,299],{},"复杂逻辑",[268,301,302],{},"条件\u002F循环需要多轮对话",[268,304,305],{},"原生 JS 控制流",[251,307,308,313,316],{},[268,309,310],{},[271,311,312],{},"Token 使用量",[268,314,315],{},"较高（重复上下文）",[268,317,318],{},"较低（单次调用）",[320,321,261,323,326],"callout",{"color":322,"icon":94},"warning",[271,324,325],{},"目前处于实验阶段","。随着我们根据反馈稳定此功能，API 可能会发生变化。",[145,328,330],{"id":329},"为什么使用代码模式","为什么使用代码模式？",[150,332,333,334,337],{},"每次大语言模型往返通信都会将",[271,335,336],{},"所有工具描述","作为上下文重新发送。在传统 MCP 中，一个需要 5 个步骤且拥有 50 个工具的任务会将完整的工具目录发送 5 次——仅工具描述就消耗 15,500 个 Token。代码模式在单个工具中发送紧凑的 TypeScript 签名，将其降至约 3,000 个 Token。",[339,340,341],"h3",{"id":341},"扩展性问题",[150,343,344,345,348,349,351],{},"在传统 MCP 中，工具描述开销按 ",[271,346,347],{},"工具数量 × 往返次数"," 增长。代码模式将所有工具替换为一个包含紧凑类型签名的 ",[154,350,154],{}," 工具——并且通常需要更少的往返通信。",[245,353,354,368],{},[248,355,356],{},[251,357,358,361,363,365],{},[254,359,360],{},"服务器规模",[254,362,258],{},[254,364,261],{},[254,366,367],{},"节省比例",[263,369,370,389,408,427],{},[251,371,372,378,381,384],{},[268,373,374,377],{},[271,375,376],{},"10 个工具","，3 步任务",[268,379,380],{},"工具描述约 1,860 Token",[268,382,383],{},"约 920 Token",[268,385,386],{},[271,387,388],{},"-51%",[251,390,391,397,400,403],{},[268,392,393,396],{},[271,394,395],{},"25 个工具","，4 步任务",[268,398,399],{},"约 6,200 Token",[268,401,402],{},"约 1,700 Token",[268,404,405],{},[271,406,407],{},"-73%",[251,409,410,416,419,422],{},[268,411,412,415],{},[271,413,414],{},"50 个工具","，5 步任务",[268,417,418],{},"约 15,500 Token",[268,420,421],{},"约 3,000 Token",[268,423,424],{},[271,425,426],{},"-81%",[251,428,429,434,437,440],{},[268,430,431,415],{},[271,432,433],{},"100 个工具",[268,435,436],{},"约 31,000 Token",[268,438,439],{},"约 5,600 Token",[268,441,442],{},[271,443,444],{},"-82%",[150,446,447,448,451],{},"这些数字仅代表工具描述的开销。总节省量取决于具体任务，但趋势很明显：",[271,449,450],{},"工具越多，节省越大","。",[320,453,456,457,460,461,464],{"color":454,"icon":455},"primary","i-lucide-zap","在使用 Claude Sonnet 的真实基准测试中（9 个工具，7 个任务），代码模式",[271,458,459],{},"总体节省了 15% 的 Token","，在复杂批量操作中最高节省 ",[271,462,463],{},"33%","——将 8 次工具调用合并为单个 JavaScript 代码块。",[339,466,468],{"id":467},"超越-token-节省","超越 Token 节省",[150,470,471],{},"代码模式还解锁了传统 MCP 无法高效实现的模式：",[473,474,475,486,495,505],"ul",{},[476,477,478,481,482,485],"li",{},[271,479,480],{},"并行执行"," — 使用 ",[154,483,484],{},"Promise.all()"," 进行独立调用，而非顺序往返通信",[476,487,488,481,491,494],{},[271,489,490],{},"条件逻辑",[154,492,493],{},"if\u002Felse"," 分支，无需额外的 LLM 步骤",[476,496,497,500,501,504],{},[271,498,499],{},"循环"," — 对数据使用 ",[154,502,503],{},"for"," 循环，而非逐个重复调用工具",[476,506,507,481,510,513],{},[271,508,509],{},"错误处理",[154,511,512],{},"try\u002Fcatch"," 在工作流中途处理失败情况",[145,515,516],{"id":516},"设置",[339,518,520],{"id":519},"_1-安装-secure-exec","1. 安装 secure-exec",[150,522,523,524,531],{},"代码模式使用 ",[525,526,530],"a",{"href":527,"rel":528},"https:\u002F\u002Fgithub.com\u002Fnicolo-ribaudo\u002Fsecure-exec",[529],"nofollow","secure-exec"," 在安全的 V8 隔离环境中运行大语言模型生成的代码：",[533,534,535,555,570,584],"code-group",{},[161,536,541],{"className":537,"code":538,"filename":539,"language":540,"meta":167,"style":167},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add secure-exec\n","pnpm","bash",[154,542,543],{"__ignoreMap":167},[171,544,545,548,552],{"class":173,"line":174},[171,546,539],{"class":547},"sBMFI",[171,549,551],{"class":550},"sfazB"," add",[171,553,554],{"class":550}," secure-exec\n",[161,556,559],{"className":537,"code":557,"filename":558,"language":540,"meta":167,"style":167},"npm install secure-exec\n","npm",[154,560,561],{"__ignoreMap":167},[171,562,563,565,568],{"class":173,"line":174},[171,564,558],{"class":547},[171,566,567],{"class":550}," install",[171,569,554],{"class":550},[161,571,574],{"className":537,"code":572,"filename":573,"language":540,"meta":167,"style":167},"yarn add secure-exec\n","yarn",[154,575,576],{"__ignoreMap":167},[171,577,578,580,582],{"class":173,"line":174},[171,579,573],{"class":547},[171,581,551],{"class":550},[171,583,554],{"class":550},[161,585,588],{"className":537,"code":586,"filename":587,"language":540,"meta":167,"style":167},"bun add secure-exec\n","bun",[154,589,590],{"__ignoreMap":167},[171,591,592,594,596],{"class":173,"line":174},[171,593,587],{"class":547},[171,595,551],{"class":550},[171,597,554],{"class":550},[320,599,602,603,605,606,609,610,613],{"color":600,"icon":601},"info","i-lucide-info","代码模式需要 ",[154,604,530],{}," 和 Node.js ",[154,607,608],{},">=18.16.0","。模块的其余部分仍支持 Node.js 18.x，但代码模式依赖 ",[154,611,612],{},"AsyncLocalStorage.snapshot()"," 来保留请求上下文。",[339,615,617],{"id":616},"_2-在处理程序中启用","2. 在处理程序中启用",[150,619,620,621,624],{},"向任意处理程序添加 ",[154,622,623],{},"experimental_codeMode","：",[533,626,627,686],{},[161,628,633],{"className":629,"code":630,"filename":631,"language":632,"meta":167,"style":167},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F server\u002Fmcp\u002Findex.ts\nexport default defineMcpHandler({\n  experimental_codeMode: true,\n})\n","Default handler","typescript",[154,634,635,641,662,678],{"__ignoreMap":167},[171,636,637],{"class":173,"line":174},[171,638,640],{"class":639},"sHwdD","\u002F\u002F server\u002Fmcp\u002Findex.ts\n",[171,642,643,647,650,654,658],{"class":173,"line":180},[171,644,646],{"class":645},"s7zQu","export",[171,648,649],{"class":645}," default",[171,651,653],{"class":652},"s2Zo4"," defineMcpHandler",[171,655,657],{"class":656},"sTEyZ","(",[171,659,661],{"class":660},"sMK4o","{\n",[171,663,664,668,671,675],{"class":173,"line":187},[171,665,667],{"class":666},"swJcz","  experimental_codeMode",[171,669,670],{"class":660},":",[171,672,674],{"class":673},"sfNiH"," true",[171,676,677],{"class":660},",\n",[171,679,680,683],{"class":173,"line":193},[171,681,682],{"class":660},"}",[171,684,685],{"class":656},")\n",[161,687,690],{"className":629,"code":688,"filename":689,"language":632,"meta":167,"style":167},"\u002F\u002F server\u002Fmcp\u002Fai-agent.ts\nexport default defineMcpHandler({\n  name: 'ai-agent',\n  experimental_codeMode: true,\n  tools: [getUserTool, listTodosTool, createTodoTool],\n})\n","Custom handler",[154,691,692,697,709,727,737,760],{"__ignoreMap":167},[171,693,694],{"class":173,"line":174},[171,695,696],{"class":639},"\u002F\u002F server\u002Fmcp\u002Fai-agent.ts\n",[171,698,699,701,703,705,707],{"class":173,"line":180},[171,700,646],{"class":645},[171,702,649],{"class":645},[171,704,653],{"class":652},[171,706,657],{"class":656},[171,708,661],{"class":660},[171,710,711,714,716,719,722,725],{"class":173,"line":187},[171,712,713],{"class":666},"  name",[171,715,670],{"class":660},[171,717,718],{"class":660}," '",[171,720,721],{"class":550},"ai-agent",[171,723,724],{"class":660},"'",[171,726,677],{"class":660},[171,728,729,731,733,735],{"class":173,"line":193},[171,730,667],{"class":666},[171,732,670],{"class":660},[171,734,674],{"class":673},[171,736,677],{"class":660},[171,738,739,742,744,747,750,753,755,758],{"class":173,"line":199},[171,740,741],{"class":666},"  tools",[171,743,670],{"class":660},[171,745,746],{"class":656}," [getUserTool",[171,748,749],{"class":660},",",[171,751,752],{"class":656}," listTodosTool",[171,754,749],{"class":660},[171,756,757],{"class":656}," createTodoTool]",[171,759,677],{"class":660},[171,761,762,764],{"class":173,"line":205},[171,763,682],{"class":660},[171,765,685],{"class":656},[150,767,768,769,771],{},"就这么简单。该模块会将你所有的工具替换为单个 ",[154,770,154],{}," 工具，供大语言模型用来编排它们。",[145,773,774],{"id":774},"工作原理",[150,776,777],{},"当启用代码模式时：",[779,780,781,784,790,797],"ol",{},[476,782,783],{},"所有已注册的工具都会被转换为 TypeScript 类型定义",[476,785,786,787,789],{},"创建一个 ",[154,788,154],{}," 工具，并将这些类型嵌入其描述中",[476,791,792,793,796],{},"大语言模型使用 ",[154,794,795],{},"codemode"," 对象编写 JavaScript 来调用工具",[476,798,799],{},"代码在 V8 隔离环境中运行，仅能通过 RPC 访问你的工具",[339,801,803],{"id":802},"示例大语言模型生成的内容","示例：大语言模型生成的内容",[150,805,806,807,810,811,814,815,818],{},"假设存在 ",[154,808,809],{},"get-user","、",[154,812,813],{},"list-todos"," 和 ",[154,816,817],{},"create-todo"," 工具，大语言模型会接收类型定义并编写如下代码：",[533,820,821,1034,1207],{},[161,822,827],{"className":823,"code":824,"filename":825,"language":826,"meta":167,"style":167},"language-javascript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const user = await codemode.get_user({ id: \"123\" });\nconst todos = await codemode.list_todos({ userId: user.id });\n\nif (todos.length === 0) {\n  await codemode.create_todo({\n    title: \"Welcome task\",\n    userId: user.id,\n  });\n}\n\nreturn { user, todos };\n","Sequential calls","javascript",[154,828,829,881,922,926,951,967,983,999,1008,1013,1017],{"__ignoreMap":167},[171,830,831,835,838,841,844,847,850,853,855,858,861,863,866,869,872,875,878],{"class":173,"line":174},[171,832,834],{"class":833},"spNyl","const",[171,836,837],{"class":656}," user ",[171,839,840],{"class":660},"=",[171,842,843],{"class":645}," await",[171,845,846],{"class":656}," codemode",[171,848,849],{"class":660},".",[171,851,852],{"class":652},"get_user",[171,854,657],{"class":656},[171,856,857],{"class":660},"{",[171,859,860],{"class":666}," id",[171,862,670],{"class":660},[171,864,865],{"class":660}," \"",[171,867,868],{"class":550},"123",[171,870,871],{"class":660},"\"",[171,873,874],{"class":660}," }",[171,876,877],{"class":656},")",[171,879,880],{"class":660},";\n",[171,882,883,885,888,890,892,894,896,899,901,903,906,908,911,913,916,918,920],{"class":173,"line":180},[171,884,834],{"class":833},[171,886,887],{"class":656}," todos ",[171,889,840],{"class":660},[171,891,843],{"class":645},[171,893,846],{"class":656},[171,895,849],{"class":660},[171,897,898],{"class":652},"list_todos",[171,900,657],{"class":656},[171,902,857],{"class":660},[171,904,905],{"class":666}," userId",[171,907,670],{"class":660},[171,909,910],{"class":656}," user",[171,912,849],{"class":660},[171,914,915],{"class":656},"id ",[171,917,682],{"class":660},[171,919,877],{"class":656},[171,921,880],{"class":660},[171,923,924],{"class":173,"line":187},[171,925,184],{"emptyLinePlaceholder":183},[171,927,928,931,934,936,939,942,946,949],{"class":173,"line":193},[171,929,930],{"class":645},"if",[171,932,933],{"class":656}," (todos",[171,935,849],{"class":660},[171,937,938],{"class":656},"length ",[171,940,941],{"class":660},"===",[171,943,945],{"class":944},"sbssI"," 0",[171,947,948],{"class":656},") ",[171,950,661],{"class":660},[171,952,953,956,958,960,963,965],{"class":173,"line":199},[171,954,955],{"class":645},"  await",[171,957,846],{"class":656},[171,959,849],{"class":660},[171,961,962],{"class":652},"create_todo",[171,964,657],{"class":666},[171,966,661],{"class":660},[171,968,969,972,974,976,979,981],{"class":173,"line":205},[171,970,971],{"class":666},"    title",[171,973,670],{"class":660},[171,975,865],{"class":660},[171,977,978],{"class":550},"Welcome task",[171,980,871],{"class":660},[171,982,677],{"class":660},[171,984,985,988,990,992,994,997],{"class":173,"line":211},[171,986,987],{"class":666},"    userId",[171,989,670],{"class":660},[171,991,910],{"class":656},[171,993,849],{"class":660},[171,995,996],{"class":656},"id",[171,998,677],{"class":660},[171,1000,1001,1004,1006],{"class":173,"line":217},[171,1002,1003],{"class":660},"  }",[171,1005,877],{"class":666},[171,1007,880],{"class":660},[171,1009,1010],{"class":173,"line":223},[171,1011,1012],{"class":660},"}\n",[171,1014,1015],{"class":173,"line":229},[171,1016,184],{"emptyLinePlaceholder":183},[171,1018,1019,1022,1025,1027,1029,1031],{"class":173,"line":235},[171,1020,1021],{"class":645},"return",[171,1023,1024],{"class":660}," {",[171,1026,910],{"class":656},[171,1028,749],{"class":660},[171,1030,887],{"class":656},[171,1032,1033],{"class":660},"};\n",[161,1035,1038],{"className":823,"code":1036,"filename":1037,"language":826,"meta":167,"style":167},"const [users, products, orders] = await Promise.all([\n  codemode.list_users(),\n  codemode.list_products(),\n  codemode.list_orders({ status: \"pending\" }),\n]);\n\nreturn {\n  userCount: users.length,\n  productCount: products.length,\n  pendingOrders: orders.length,\n};\n","Parallel calls",[154,1039,1040,1079,1094,1107,1138,1145,1149,1156,1173,1188,1203],{"__ignoreMap":167},[171,1041,1042,1044,1047,1050,1052,1055,1057,1060,1063,1066,1068,1071,1073,1076],{"class":173,"line":174},[171,1043,834],{"class":833},[171,1045,1046],{"class":660}," [",[171,1048,1049],{"class":656},"users",[171,1051,749],{"class":660},[171,1053,1054],{"class":656}," products",[171,1056,749],{"class":660},[171,1058,1059],{"class":656}," orders",[171,1061,1062],{"class":660},"]",[171,1064,1065],{"class":660}," =",[171,1067,843],{"class":645},[171,1069,1070],{"class":547}," Promise",[171,1072,849],{"class":660},[171,1074,1075],{"class":652},"all",[171,1077,1078],{"class":656},"([\n",[171,1080,1081,1084,1086,1089,1092],{"class":173,"line":180},[171,1082,1083],{"class":656},"  codemode",[171,1085,849],{"class":660},[171,1087,1088],{"class":652},"list_users",[171,1090,1091],{"class":656},"()",[171,1093,677],{"class":660},[171,1095,1096,1098,1100,1103,1105],{"class":173,"line":187},[171,1097,1083],{"class":656},[171,1099,849],{"class":660},[171,1101,1102],{"class":652},"list_products",[171,1104,1091],{"class":656},[171,1106,677],{"class":660},[171,1108,1109,1111,1113,1116,1118,1120,1123,1125,1127,1130,1132,1134,1136],{"class":173,"line":193},[171,1110,1083],{"class":656},[171,1112,849],{"class":660},[171,1114,1115],{"class":652},"list_orders",[171,1117,657],{"class":656},[171,1119,857],{"class":660},[171,1121,1122],{"class":666}," status",[171,1124,670],{"class":660},[171,1126,865],{"class":660},[171,1128,1129],{"class":550},"pending",[171,1131,871],{"class":660},[171,1133,874],{"class":660},[171,1135,877],{"class":656},[171,1137,677],{"class":660},[171,1139,1140,1143],{"class":173,"line":199},[171,1141,1142],{"class":656},"])",[171,1144,880],{"class":660},[171,1146,1147],{"class":173,"line":205},[171,1148,184],{"emptyLinePlaceholder":183},[171,1150,1151,1153],{"class":173,"line":211},[171,1152,1021],{"class":645},[171,1154,1155],{"class":660}," {\n",[171,1157,1158,1161,1163,1166,1168,1171],{"class":173,"line":217},[171,1159,1160],{"class":666},"  userCount",[171,1162,670],{"class":660},[171,1164,1165],{"class":656}," users",[171,1167,849],{"class":660},[171,1169,1170],{"class":656},"length",[171,1172,677],{"class":660},[171,1174,1175,1178,1180,1182,1184,1186],{"class":173,"line":223},[171,1176,1177],{"class":666},"  productCount",[171,1179,670],{"class":660},[171,1181,1054],{"class":656},[171,1183,849],{"class":660},[171,1185,1170],{"class":656},[171,1187,677],{"class":660},[171,1189,1190,1193,1195,1197,1199,1201],{"class":173,"line":229},[171,1191,1192],{"class":666},"  pendingOrders",[171,1194,670],{"class":660},[171,1196,1059],{"class":656},[171,1198,849],{"class":660},[171,1200,1170],{"class":656},[171,1202,677],{"class":660},[171,1204,1205],{"class":173,"line":235},[171,1206,1033],{"class":660},[161,1208,1211],{"className":823,"code":1209,"filename":1210,"language":826,"meta":167,"style":167},"const users = await codemode.list_users();\nconst results = [];\n\nfor (const user of users) {\n  const todos = await codemode.list_todos({ userId: user.id });\n  if (todos.some(t => t.overdue)) {\n    await codemode.send_reminder({ userId: user.id });\n    results.push(user.name);\n  }\n}\n\nreturn { reminded: results };\n","Loop + conditional",[154,1212,1213,1234,1248,1252,1271,1309,1346,1378,1402,1407,1411,1415],{"__ignoreMap":167},[171,1214,1215,1217,1220,1222,1224,1226,1228,1230,1232],{"class":173,"line":174},[171,1216,834],{"class":833},[171,1218,1219],{"class":656}," users ",[171,1221,840],{"class":660},[171,1223,843],{"class":645},[171,1225,846],{"class":656},[171,1227,849],{"class":660},[171,1229,1088],{"class":652},[171,1231,1091],{"class":656},[171,1233,880],{"class":660},[171,1235,1236,1238,1241,1243,1246],{"class":173,"line":180},[171,1237,834],{"class":833},[171,1239,1240],{"class":656}," results ",[171,1242,840],{"class":660},[171,1244,1245],{"class":656}," []",[171,1247,880],{"class":660},[171,1249,1250],{"class":173,"line":187},[171,1251,184],{"emptyLinePlaceholder":183},[171,1253,1254,1256,1259,1261,1263,1266,1269],{"class":173,"line":193},[171,1255,503],{"class":645},[171,1257,1258],{"class":656}," (",[171,1260,834],{"class":833},[171,1262,837],{"class":656},[171,1264,1265],{"class":660},"of",[171,1267,1268],{"class":656}," users) ",[171,1270,661],{"class":660},[171,1272,1273,1276,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307],{"class":173,"line":199},[171,1274,1275],{"class":833},"  const",[171,1277,1278],{"class":656}," todos",[171,1280,1065],{"class":660},[171,1282,843],{"class":645},[171,1284,846],{"class":656},[171,1286,849],{"class":660},[171,1288,898],{"class":652},[171,1290,657],{"class":666},[171,1292,857],{"class":660},[171,1294,905],{"class":666},[171,1296,670],{"class":660},[171,1298,910],{"class":656},[171,1300,849],{"class":660},[171,1302,996],{"class":656},[171,1304,874],{"class":660},[171,1306,877],{"class":666},[171,1308,880],{"class":660},[171,1310,1311,1314,1316,1319,1321,1324,1326,1330,1333,1336,1338,1341,1344],{"class":173,"line":205},[171,1312,1313],{"class":645},"  if",[171,1315,1258],{"class":666},[171,1317,1318],{"class":656},"todos",[171,1320,849],{"class":660},[171,1322,1323],{"class":652},"some",[171,1325,657],{"class":666},[171,1327,1329],{"class":1328},"sHdIc","t",[171,1331,1332],{"class":833}," =>",[171,1334,1335],{"class":656}," t",[171,1337,849],{"class":660},[171,1339,1340],{"class":656},"overdue",[171,1342,1343],{"class":666},")) ",[171,1345,661],{"class":660},[171,1347,1348,1351,1353,1355,1358,1360,1362,1364,1366,1368,1370,1372,1374,1376],{"class":173,"line":211},[171,1349,1350],{"class":645},"    await",[171,1352,846],{"class":656},[171,1354,849],{"class":660},[171,1356,1357],{"class":652},"send_reminder",[171,1359,657],{"class":666},[171,1361,857],{"class":660},[171,1363,905],{"class":666},[171,1365,670],{"class":660},[171,1367,910],{"class":656},[171,1369,849],{"class":660},[171,1371,996],{"class":656},[171,1373,874],{"class":660},[171,1375,877],{"class":666},[171,1377,880],{"class":660},[171,1379,1380,1383,1385,1388,1390,1393,1395,1398,1400],{"class":173,"line":217},[171,1381,1382],{"class":656},"    results",[171,1384,849],{"class":660},[171,1386,1387],{"class":652},"push",[171,1389,657],{"class":666},[171,1391,1392],{"class":656},"user",[171,1394,849],{"class":660},[171,1396,1397],{"class":656},"name",[171,1399,877],{"class":666},[171,1401,880],{"class":660},[171,1403,1404],{"class":173,"line":223},[171,1405,1406],{"class":660},"  }\n",[171,1408,1409],{"class":173,"line":229},[171,1410,1012],{"class":660},[171,1412,1413],{"class":173,"line":235},[171,1414,184],{"emptyLinePlaceholder":183},[171,1416,1417,1419,1421,1424,1426,1428],{"class":173,"line":240},[171,1418,1021],{"class":645},[171,1420,1024],{"class":660},[171,1422,1423],{"class":666}," reminded",[171,1425,670],{"class":660},[171,1427,1240],{"class":656},[171,1429,1033],{"class":660},[145,1431,1432],{"id":1432},"配置选项",[150,1434,1435,1436,1439],{},"传入选项对象而非 ",[154,1437,1438],{},"true"," 以实现更精细的控制：",[161,1441,1444],{"className":629,"code":1442,"filename":1443,"language":632,"meta":167,"style":167},"export default defineMcpHandler({\n  experimental_codeMode: {\n    memoryLimit: 64,\n    cpuTimeLimitMs: 10_000,\n    maxResultSize: 102_400,\n    maxRequestBodyBytes: 1_048_576,\n    maxToolResponseSize: 1_048_576,\n    wallTimeLimitMs: 60_000,\n    maxToolCalls: 200,\n    progressive: false,\n    description: undefined,\n  },\n})\n","server\u002Fmcp\u002Findex.ts",[154,1445,1446,1458,1466,1478,1490,1502,1514,1525,1537,1549,1561,1571,1576],{"__ignoreMap":167},[171,1447,1448,1450,1452,1454,1456],{"class":173,"line":174},[171,1449,646],{"class":645},[171,1451,649],{"class":645},[171,1453,653],{"class":652},[171,1455,657],{"class":656},[171,1457,661],{"class":660},[171,1459,1460,1462,1464],{"class":173,"line":180},[171,1461,667],{"class":666},[171,1463,670],{"class":660},[171,1465,1155],{"class":660},[171,1467,1468,1471,1473,1476],{"class":173,"line":187},[171,1469,1470],{"class":666},"    memoryLimit",[171,1472,670],{"class":660},[171,1474,1475],{"class":944}," 64",[171,1477,677],{"class":660},[171,1479,1480,1483,1485,1488],{"class":173,"line":193},[171,1481,1482],{"class":666},"    cpuTimeLimitMs",[171,1484,670],{"class":660},[171,1486,1487],{"class":944}," 10_000",[171,1489,677],{"class":660},[171,1491,1492,1495,1497,1500],{"class":173,"line":199},[171,1493,1494],{"class":666},"    maxResultSize",[171,1496,670],{"class":660},[171,1498,1499],{"class":944}," 102_400",[171,1501,677],{"class":660},[171,1503,1504,1507,1509,1512],{"class":173,"line":205},[171,1505,1506],{"class":666},"    maxRequestBodyBytes",[171,1508,670],{"class":660},[171,1510,1511],{"class":944}," 1_048_576",[171,1513,677],{"class":660},[171,1515,1516,1519,1521,1523],{"class":173,"line":211},[171,1517,1518],{"class":666},"    maxToolResponseSize",[171,1520,670],{"class":660},[171,1522,1511],{"class":944},[171,1524,677],{"class":660},[171,1526,1527,1530,1532,1535],{"class":173,"line":217},[171,1528,1529],{"class":666},"    wallTimeLimitMs",[171,1531,670],{"class":660},[171,1533,1534],{"class":944}," 60_000",[171,1536,677],{"class":660},[171,1538,1539,1542,1544,1547],{"class":173,"line":223},[171,1540,1541],{"class":666},"    maxToolCalls",[171,1543,670],{"class":660},[171,1545,1546],{"class":944}," 200",[171,1548,677],{"class":660},[171,1550,1551,1554,1556,1559],{"class":173,"line":229},[171,1552,1553],{"class":666},"    progressive",[171,1555,670],{"class":660},[171,1557,1558],{"class":673}," false",[171,1560,677],{"class":660},[171,1562,1563,1566,1568],{"class":173,"line":235},[171,1564,1565],{"class":666},"    description",[171,1567,670],{"class":660},[171,1569,1570],{"class":660}," undefined,\n",[171,1572,1573],{"class":173,"line":240},[171,1574,1575],{"class":660},"  },\n",[171,1577,1579,1581],{"class":173,"line":1578},13,[171,1580,682],{"class":660},[171,1582,685],{"class":656},[1584,1585,1586,1604,1615,1627,1648,1661,1680,1691,1707],"field-group",{},[1587,1588,1591,1597],"field",{"name":1589,"type":1590},"memoryLimit","number",[150,1592,1593,1594],{},"默认值：",[154,1595,1596],{},"64",[150,1598,1599,1600,1603],{},"V8 隔离环境的内存限制（单位：MB）。在首次执行时设置一次——调用 ",[154,1601,1602],{},"disposeCodeMode()"," 可更改。",[1587,1605,1607,1612],{"name":1606,"type":1590},"cpuTimeLimitMs",[150,1608,1593,1609],{},[154,1610,1611],{},"10000",[150,1613,1614],{},"每次执行的 CPU 时间限制（单位：毫秒）。超过此时长后沙箱将被终止。",[1587,1616,1618,1624],{"name":1617,"type":1590},"maxResultSize",[150,1619,1593,1620,1623],{},[154,1621,1622],{},"102400","（100 KB）",[150,1625,1626],{},"截断前的最大结果大小（单位：字节）。大型结果会被智能截断——数组按项目数量截断，对象按键数量截断。",[1587,1628,1630,1636],{"name":1629,"type":1590},"maxRequestBodyBytes",[150,1631,1593,1632,1635],{},[154,1633,1634],{},"1048576","（1 MB）",[150,1637,1638,1639,1641,1642,1645,1646,451],{},"沙箱发出的单个 RPC 请求体允许的最大字节数。超出将返回 HTTP 413。防止因负载过大导致内存耗尽。与 ",[154,1640,1589],{}," 类似，此设置在 RPC 服务器",[271,1643,1644],{},"首次","启动时生效；更改前请调用 ",[154,1647,1602],{},[1587,1649,1651,1655],{"name":1650,"type":1590},"maxToolResponseSize",[150,1652,1593,1653,1635],{},[154,1654,1634],{},[150,1656,1657,1658,1660],{},"单个工具 RPC 响应的最大字节数。大型结果使用与 ",[154,1659,1617],{}," 相同的策略进行截断。",[1587,1662,1664,1670],{"name":1663,"type":1590},"wallTimeLimitMs",[150,1665,1593,1666,1669],{},[154,1667,1668],{},"60000","（60 秒）",[150,1671,1672,1673,1676,1677,1679],{},"每次执行的截止时间，在",[271,1674,1675],{},"每次","沙箱→主机 RPC 调用（工具调用或返回值）开始时检查。超过截止时间后，下一次 RPC 将收到 HTTP 408。这限制了主机端的工作（例如缓慢的工具）；隔离环境中的纯 CPU 循环主要受 ",[154,1678,1606],{}," 限制。",[1587,1681,1683,1688],{"name":1682,"type":1590},"maxToolCalls",[150,1684,1593,1685],{},[154,1686,1687],{},"200",[150,1689,1690],{},"每次执行允许的最大工具 RPC 调用次数。防止反复调用昂贵工具的失控循环。超出时将返回 HTTP 429。",[1587,1692,1695,1700],{"name":1693,"type":1694},"progressive","boolean",[150,1696,1593,1697],{},[154,1698,1699],{},"false",[150,1701,1702,1703,451],{},"启用渐进式披露模式。请参阅下方的 ",[525,1704,1706],{"href":1705},"#progressive-mode","渐进模式",[1587,1708,1711,1714],{"name":1709,"type":1710},"description","string",[150,1712,1713],{},"默认值：内置模板",[150,1715,1716,1717,1719,1720,814,1723,1726],{},"自定义 ",[154,1718,154],{}," 工具的描述。支持 ",[154,1721,1722],{},"{{types}}",[154,1724,1725],{},"{{count}}"," 占位符。",[145,1728,1706],{"id":1706},[150,1730,1731,1732,1734],{},"当你的服务器暴露大量工具（50+）时，将所有类型定义嵌入 ",[154,1733,154],{}," 工具描述中会消耗大量 Token。渐进模式通过将其拆分为两个工具来解决此问题：",[779,1736,1737,1745],{},[476,1738,1739,1744],{},[271,1740,1741],{},[154,1742,1743],{},"search"," — 通过关键词发现工具，返回其签名",[476,1746,1747,1751],{},[271,1748,1749],{},[154,1750,154],{}," — 使用已发现的工具执行代码",[161,1753,1755],{"className":629,"code":1754,"filename":1443,"language":632,"meta":167,"style":167},"export default defineMcpHandler({\n  experimental_codeMode: {\n    progressive: true,\n  },\n})\n",[154,1756,1757,1769,1777,1787,1791],{"__ignoreMap":167},[171,1758,1759,1761,1763,1765,1767],{"class":173,"line":174},[171,1760,646],{"class":645},[171,1762,649],{"class":645},[171,1764,653],{"class":652},[171,1766,657],{"class":656},[171,1768,661],{"class":660},[171,1770,1771,1773,1775],{"class":173,"line":180},[171,1772,667],{"class":666},[171,1774,670],{"class":660},[171,1776,1155],{"class":660},[171,1778,1779,1781,1783,1785],{"class":173,"line":187},[171,1780,1553],{"class":666},[171,1782,670],{"class":660},[171,1784,674],{"class":673},[171,1786,677],{"class":660},[171,1788,1789],{"class":173,"line":193},[171,1790,1575],{"class":660},[171,1792,1793,1795],{"class":173,"line":199},[171,1794,682],{"class":660},[171,1796,685],{"class":656},[150,1798,1799],{},"大语言模型的工作流程变为：",[533,1801,1802,1832],{},[161,1803,1806],{"className":163,"code":1804,"filename":1805,"language":166,"meta":167,"style":167},"大语言模型调用：search({ query: \"user\" })\n\n→ 找到 2\u002F12 个匹配 \"user\" 的工具：\n  codemode.get_user: (input: { id: string }) => Promise\u003Cunknown>; \u002F\u002F 根据 ID 获取用户\n  codemode.list_users: () => Promise\u003Cunknown>; \u002F\u002F 列出所有用户\n","Step 1 — Search",[154,1807,1808,1813,1817,1822,1827],{"__ignoreMap":167},[171,1809,1810],{"class":173,"line":174},[171,1811,1812],{},"大语言模型调用：search({ query: \"user\" })\n",[171,1814,1815],{"class":173,"line":180},[171,1816,184],{"emptyLinePlaceholder":183},[171,1818,1819],{"class":173,"line":187},[171,1820,1821],{},"→ 找到 2\u002F12 个匹配 \"user\" 的工具：\n",[171,1823,1824],{"class":173,"line":193},[171,1825,1826],{},"  codemode.get_user: (input: { id: string }) => Promise\u003Cunknown>; \u002F\u002F 根据 ID 获取用户\n",[171,1828,1829],{"class":173,"line":199},[171,1830,1831],{},"  codemode.list_users: () => Promise\u003Cunknown>; \u002F\u002F 列出所有用户\n",[161,1833,1836],{"className":163,"code":1834,"filename":1835,"language":166,"meta":167,"style":167},"大语言模型调用：code({ code: \"...\" })\n\n→ 使用已发现的工具执行代码\n","Step 2 — Execute",[154,1837,1838,1843,1847],{"__ignoreMap":167},[171,1839,1840],{"class":173,"line":174},[171,1841,1842],{},"大语言模型调用：code({ code: \"...\" })\n",[171,1844,1845],{"class":173,"line":180},[171,1846,184],{"emptyLinePlaceholder":183},[171,1848,1849],{"class":173,"line":187},[171,1850,1851],{},"→ 使用已发现的工具执行代码\n",[320,1853,1854],{"color":600,"icon":601},"渐进模式会增加一次额外的工具调用，但能显著减少初始提示词的大小。仅在工具数量庞大时使用——对于小型工具集，标准模式效率更高。",[145,1856,1857],{"id":1857},"自定义描述",[150,1859,1860,1861,1863],{},"覆盖 ",[154,1862,154],{}," 工具的描述以自定义 LLM 指令：",[161,1865,1867],{"className":629,"code":1866,"filename":1443,"language":632,"meta":167,"style":167},"export default defineMcpHandler({\n  experimental_codeMode: {\n    description: `You have {{count}} tools available. Write JavaScript using the codemode object.\n\n{{types}}\n\nAlways combine related operations into a single code block.`,\n  },\n})\n",[154,1868,1869,1881,1889,1901,1905,1910,1914,1924,1928],{"__ignoreMap":167},[171,1870,1871,1873,1875,1877,1879],{"class":173,"line":174},[171,1872,646],{"class":645},[171,1874,649],{"class":645},[171,1876,653],{"class":652},[171,1878,657],{"class":656},[171,1880,661],{"class":660},[171,1882,1883,1885,1887],{"class":173,"line":180},[171,1884,667],{"class":666},[171,1886,670],{"class":660},[171,1888,1155],{"class":660},[171,1890,1891,1893,1895,1898],{"class":173,"line":187},[171,1892,1565],{"class":666},[171,1894,670],{"class":660},[171,1896,1897],{"class":660}," `",[171,1899,1900],{"class":550},"You have {{count}} tools available. Write JavaScript using the codemode object.\n",[171,1902,1903],{"class":173,"line":193},[171,1904,184],{"emptyLinePlaceholder":183},[171,1906,1907],{"class":173,"line":199},[171,1908,1909],{"class":550},"{{types}}\n",[171,1911,1912],{"class":173,"line":205},[171,1913,184],{"emptyLinePlaceholder":183},[171,1915,1916,1919,1922],{"class":173,"line":211},[171,1917,1918],{"class":550},"Always combine related operations into a single code block.",[171,1920,1921],{"class":660},"`",[171,1923,677],{"class":660},[171,1925,1926],{"class":173,"line":217},[171,1927,1575],{"class":660},[171,1929,1930,1932],{"class":173,"line":223},[171,1931,682],{"class":660},[171,1933,685],{"class":656},[150,1935,1936,1938,1939,1941],{},[154,1937,1722],{}," 占位符将被替换为生成的 TypeScript 类型定义。",[154,1940,1725],{}," 占位符将被替换为可用工具的数量。",[150,1943,1944,1945,1947,1948,1950],{},"在渐进模式（progressive mode）下，",[154,1946,1722],{}," 不可用，因为类型是通过 ",[154,1949,1743],{}," 工具动态发现的。",[145,1952,1953],{"id":1953},"安全性",[150,1955,1956,1957,1960],{},"运行 LLM 生成的代码需要严格的安全措施。Code Mode 在 7 个层级上实现了",[271,1958,1959],{},"纵深防御（defense in depth）","，以确保沙箱无法逃逸、访问未授权资源或耗尽主机资源。",[339,1962,1963],{"id":1963},"沙箱隔离",[150,1965,1966,1967,1969,1970,1975],{},"LLM 生成的代码通过 ",[154,1968,530],{}," 在独立的 ",[525,1971,1974],{"href":1972,"rel":1973},"https:\u002F\u002Fv8.dev\u002Fdocs\u002Fembed",[529],"V8 isolate"," 中运行。这与 Cloudflare Workers 及类似平台使用的隔离技术相同。沙箱具有以下限制：",[473,1977,1978,1984,2006,2012],{},[476,1979,1980,1983],{},[271,1981,1982],{},"无文件系统访问权限"," — 无法读取、写入或列出文件",[476,1985,1986,1989,1990,810,1993,810,1996,810,1999,810,2002,2005],{},[271,1987,1988],{},"无 Node.js API"," — 不支持 ",[154,1991,1992],{},"require()",[154,1994,1995],{},"import()",[154,1997,1998],{},"process",[154,2000,2001],{},"fs",[154,2003,2004],{},"child_process"," 等",[476,2007,2008,2011],{},[271,2009,2010],{},"无环境变量"," — 无法读取密钥或配置",[476,2013,2014,2017],{},[271,2015,2016],{},"无主机进程访问权限"," — 无法以任何方式修改父进程",[339,2019,2020],{"id":2020},"网络限制",[150,2022,2023],{},"沙箱只能与内部 RPC 服务器通信。所有其他网络访问均被阻止：",[473,2025,2026,2032,2045,2051],{},[476,2027,2028,2031],{},[271,2029,2030],{},"端口锁定"," — 仅可访问随机分配的 RPC 端口。其他 localhost 服务（数据库、管理面板、其他应用）均被阻止。",[476,2033,2034,2037,2038,814,2041,2044],{},[271,2035,2036],{},"主机锁定"," — 仅允许 ",[154,2039,2040],{},"127.0.0.1",[154,2042,2043],{},"localhost","。外部主机将被拒绝。",[476,2046,2047,2050],{},[271,2048,2049],{},"无 DNS"," — 完全禁用 DNS 解析。",[476,2052,2053,2056,2057,2060],{},[271,2054,2055],{},"无重定向"," — HTTP 重定向将被拒绝（",[154,2058,2059],{},"redirect: 'error'","），防止通过开放重定向引发 SSRF 攻击。",[339,2062,2064],{"id":2063},"rpc-身份验证","RPC 身份验证",[150,2066,2067],{},"沙箱与主机之间的通信使用基于会话的加密令牌：",[473,2069,2070,2080,2090],{},[476,2071,2072,2075,2076,2079],{},[271,2073,2074],{},"256 位令牌"," — 在 RPC 服务器启动时使用 ",[154,2077,2078],{},"crypto.randomBytes(32)"," 生成。",[476,2081,2082,2085,2086,2089],{},[271,2083,2084],{},"基于请求头的认证"," — 每个请求都必须通过 ",[154,2087,2088],{},"x-rpc-token"," 请求头携带该令牌。",[476,2091,2092,2095],{},[271,2093,2094],{},"不匹配返回 403"," — 没有有效令牌的请求将被立即拒绝。",[150,2097,2098],{},"这可以防止其他本地进程通过 RPC 端口调用你的 MCP 工具。",[339,2100,2101],{"id":2101},"资源限制",[245,2103,2104,2119],{},[248,2105,2106],{},[251,2107,2108,2110,2113,2116],{},[254,2109,51],{},[254,2111,2112],{},"默认值",[254,2114,2115],{},"可配置",[254,2117,2118],{},"保护机制",[263,2120,2121,2138,2155,2172,2189,2206,2222,2238],{},[251,2122,2123,2128,2131,2135],{},[268,2124,2125],{},[271,2126,2127],{},"CPU 时间",[268,2129,2130],{},"10 秒",[268,2132,2133],{},[154,2134,1606],{},[268,2136,2137],{},"超时后终止沙箱 — 防止无限循环",[251,2139,2140,2145,2148,2152],{},[268,2141,2142],{},[271,2143,2144],{},"挂钟时间（绝对时间）限制",[268,2146,2147],{},"60 秒",[268,2149,2150],{},[154,2151,1663],{},[268,2153,2154],{},"对沙箱发出的每次 RPC 强制执行 — 超过截止时间后停止后续的工具\u002F返回 RPC 调用",[251,2156,2157,2162,2165,2169],{},[268,2158,2159],{},[271,2160,2161],{},"内存",[268,2163,2164],{},"64 MB",[268,2166,2167],{},[154,2168,1589],{},[268,2170,2171],{},"V8 isolate 硬性限制 — 防止 OOM 崩溃",[251,2173,2174,2179,2182,2186],{},[268,2175,2176],{},[271,2177,2178],{},"结果大小",[268,2180,2181],{},"100 KB",[268,2183,2184],{},[154,2185,1617],{},[268,2187,2188],{},"智能截断（数组按元素，对象按键）",[251,2190,2191,2196,2199,2203],{},[268,2192,2193],{},[271,2194,2195],{},"工具响应大小",[268,2197,2198],{},"1 MB",[268,2200,2201],{},[154,2202,1650],{},[268,2204,2205],{},"每次调用在返回前进行截断",[251,2207,2208,2213,2215,2219],{},[268,2209,2210],{},[271,2211,2212],{},"请求体大小",[268,2214,2198],{},[268,2216,2217],{},[154,2218,1629],{},[268,2220,2221],{},"HTTP 413 提前拒绝 — 防止内存耗尽",[251,2223,2224,2229,2231,2235],{},[268,2225,2226],{},[271,2227,2228],{},"每次执行的工具调用次数",[268,2230,1687],{},[268,2232,2233],{},[154,2234,1682],{},[268,2236,2237],{},"HTTP 429 速率限制 — 防止失控循环",[251,2239,2240,2245,2247,2250],{},[268,2241,2242],{},[271,2243,2244],{},"日志条目",[268,2246,1687],{},[268,2248,2249],{},"否",[268,2251,2252,2253,2256],{},"限制控制台输出 — 防止 ",[154,2254,2255],{},"console.log"," 泛滥",[339,2258,2259],{"id":2259},"输入验证",[150,2261,2262],{},"工具名称会被插值到沙箱代码模板中。为防止代码注入：",[473,2264,2265,2275,2287],{},[476,2266,2267,2270,2271,2274],{},[271,2268,2269],{},"严格的标识符正则"," — 每个工具名称在注入沙箱模板前都会通过 ",[154,2272,2273],{},"\u002F^[\\w$]+$\u002F"," 进行验证。",[476,2276,2277,2280,2281,2283,2284,2286],{},[271,2278,2279],{},"清洗处理"," — 名称在上游已进行清洗（",[154,2282,809],{}," → ",[154,2285,852],{},"），但在模板级别增加了第二层验证以确保纵深防御。",[476,2288,2289,2292],{},[271,2290,2291],{},"拒绝执行"," — 如果名称验证失败，执行将立即抛出错误 — 不会进行部分注入。",[339,2294,2295],{"id":2295},"错误信息清洗",[150,2297,2298,2299,2302],{},"基础设施错误（文件路径、堆栈跟踪）在返回给沙箱或 MCP 客户端之前会经过清洗。完整的错误详情会在服务器端以 ",[154,2300,2301],{},"[nuxt-mcp-toolkit]"," 为前缀记录日志，以便调试。",[339,2304,2305],{"id":2305},"总结",[320,2307,2308,2309,2312],{"color":600,"icon":79},"沙箱",[271,2310,2311],{},"只能","通过经过身份验证的 RPC 桥接器与你注册的 MCP 工具通信。它无法访问文件系统、网络、环境或任何其他主机资源。",[145,2314,2315],{"id":2315},"与其他功能配合使用",[150,2317,2318],{},"Code Mode 与模块的其他功能完全兼容。你的工具保持不变 — 仅改变它们向 LLM 暴露的方式。",[533,2320,2321,2468,2629],{},[161,2322,2325],{"className":629,"code":2323,"filename":2324,"language":632,"meta":167,"style":167},"\u002F\u002F server\u002Fmcp\u002Findex.ts\nexport default defineMcpHandler({\n  experimental_codeMode: true,\n  middleware: async (event) => {\n    const user = await getUser(event)\n    if (!user) {\n      throw createError({ statusCode: 401 })\n    }\n    event.context.user = user\n  },\n})\n","With Middleware",[154,2326,2327,2331,2343,2353,2374,2394,2410,2434,2439,2458,2462],{"__ignoreMap":167},[171,2328,2329],{"class":173,"line":174},[171,2330,640],{"class":639},[171,2332,2333,2335,2337,2339,2341],{"class":173,"line":180},[171,2334,646],{"class":645},[171,2336,649],{"class":645},[171,2338,653],{"class":652},[171,2340,657],{"class":656},[171,2342,661],{"class":660},[171,2344,2345,2347,2349,2351],{"class":173,"line":187},[171,2346,667],{"class":666},[171,2348,670],{"class":660},[171,2350,674],{"class":673},[171,2352,677],{"class":660},[171,2354,2355,2358,2360,2363,2365,2368,2370,2372],{"class":173,"line":193},[171,2356,2357],{"class":652},"  middleware",[171,2359,670],{"class":660},[171,2361,2362],{"class":833}," async",[171,2364,1258],{"class":660},[171,2366,2367],{"class":1328},"event",[171,2369,877],{"class":660},[171,2371,1332],{"class":833},[171,2373,1155],{"class":660},[171,2375,2376,2379,2381,2383,2385,2388,2390,2392],{"class":173,"line":199},[171,2377,2378],{"class":833},"    const",[171,2380,910],{"class":656},[171,2382,1065],{"class":660},[171,2384,843],{"class":645},[171,2386,2387],{"class":652}," getUser",[171,2389,657],{"class":666},[171,2391,2367],{"class":656},[171,2393,685],{"class":666},[171,2395,2396,2399,2401,2404,2406,2408],{"class":173,"line":205},[171,2397,2398],{"class":645},"    if",[171,2400,1258],{"class":666},[171,2402,2403],{"class":660},"!",[171,2405,1392],{"class":656},[171,2407,948],{"class":666},[171,2409,661],{"class":660},[171,2411,2412,2415,2418,2420,2422,2425,2427,2430,2432],{"class":173,"line":211},[171,2413,2414],{"class":645},"      throw",[171,2416,2417],{"class":652}," createError",[171,2419,657],{"class":666},[171,2421,857],{"class":660},[171,2423,2424],{"class":666}," statusCode",[171,2426,670],{"class":660},[171,2428,2429],{"class":944}," 401",[171,2431,874],{"class":660},[171,2433,685],{"class":666},[171,2435,2436],{"class":173,"line":217},[171,2437,2438],{"class":660},"    }\n",[171,2440,2441,2444,2446,2449,2451,2453,2455],{"class":173,"line":223},[171,2442,2443],{"class":656},"    event",[171,2445,849],{"class":660},[171,2447,2448],{"class":656},"context",[171,2450,849],{"class":660},[171,2452,1392],{"class":656},[171,2454,1065],{"class":660},[171,2456,2457],{"class":656}," user\n",[171,2459,2460],{"class":173,"line":229},[171,2461,1575],{"class":660},[171,2463,2464,2466],{"class":173,"line":235},[171,2465,682],{"class":660},[171,2467,685],{"class":656},[161,2469,2472],{"className":629,"code":2470,"filename":2471,"language":632,"meta":167,"style":167},"\u002F\u002F server\u002Fmcp\u002Ftools\u002Fadmin-tool.ts\nexport default defineMcpTool({\n  name: 'admin-delete',\n  description: 'Delete a resource (admin only)',\n  enabled: event => event.context.user?.role === 'admin',\n  inputSchema: {\n    id: z.string(),\n  },\n  handler: async ({ id }) => {\n    \u002F\u002F 仅当用户为管理员时在代码模式下可见\n  },\n})\n","With Dynamic Definitions",[154,2473,2474,2479,2492,2507,2523,2562,2571,2589,2593,2614,2619,2623],{"__ignoreMap":167},[171,2475,2476],{"class":173,"line":174},[171,2477,2478],{"class":639},"\u002F\u002F server\u002Fmcp\u002Ftools\u002Fadmin-tool.ts\n",[171,2480,2481,2483,2485,2488,2490],{"class":173,"line":180},[171,2482,646],{"class":645},[171,2484,649],{"class":645},[171,2486,2487],{"class":652}," defineMcpTool",[171,2489,657],{"class":656},[171,2491,661],{"class":660},[171,2493,2494,2496,2498,2500,2503,2505],{"class":173,"line":187},[171,2495,713],{"class":666},[171,2497,670],{"class":660},[171,2499,718],{"class":660},[171,2501,2502],{"class":550},"admin-delete",[171,2504,724],{"class":660},[171,2506,677],{"class":660},[171,2508,2509,2512,2514,2516,2519,2521],{"class":173,"line":193},[171,2510,2511],{"class":666},"  description",[171,2513,670],{"class":660},[171,2515,718],{"class":660},[171,2517,2518],{"class":550},"Delete a resource (admin only)",[171,2520,724],{"class":660},[171,2522,677],{"class":660},[171,2524,2525,2528,2530,2533,2535,2537,2539,2541,2543,2545,2548,2551,2553,2555,2558,2560],{"class":173,"line":199},[171,2526,2527],{"class":652},"  enabled",[171,2529,670],{"class":660},[171,2531,2532],{"class":1328}," event",[171,2534,1332],{"class":833},[171,2536,2532],{"class":656},[171,2538,849],{"class":660},[171,2540,2448],{"class":656},[171,2542,849],{"class":660},[171,2544,1392],{"class":656},[171,2546,2547],{"class":660},"?.",[171,2549,2550],{"class":656},"role ",[171,2552,941],{"class":660},[171,2554,718],{"class":660},[171,2556,2557],{"class":550},"admin",[171,2559,724],{"class":660},[171,2561,677],{"class":660},[171,2563,2564,2567,2569],{"class":173,"line":205},[171,2565,2566],{"class":666},"  inputSchema",[171,2568,670],{"class":660},[171,2570,1155],{"class":660},[171,2572,2573,2576,2578,2581,2583,2585,2587],{"class":173,"line":211},[171,2574,2575],{"class":666},"    id",[171,2577,670],{"class":660},[171,2579,2580],{"class":656}," z",[171,2582,849],{"class":660},[171,2584,1710],{"class":652},[171,2586,1091],{"class":656},[171,2588,677],{"class":660},[171,2590,2591],{"class":173,"line":217},[171,2592,1575],{"class":660},[171,2594,2595,2598,2600,2602,2605,2607,2610,2612],{"class":173,"line":223},[171,2596,2597],{"class":652},"  handler",[171,2599,670],{"class":660},[171,2601,2362],{"class":833},[171,2603,2604],{"class":660}," ({",[171,2606,860],{"class":1328},[171,2608,2609],{"class":660}," })",[171,2611,1332],{"class":833},[171,2613,1155],{"class":660},[171,2615,2616],{"class":173,"line":229},[171,2617,2618],{"class":639},"    \u002F\u002F 仅当用户为管理员时在代码模式下可见\n",[171,2620,2621],{"class":173,"line":235},[171,2622,1575],{"class":660},[171,2624,2625,2627],{"class":173,"line":240},[171,2626,682],{"class":660},[171,2628,685],{"class":656},[161,2630,2633],{"className":629,"code":2631,"filename":2632,"language":632,"meta":167,"style":167},"\u002F\u002F server\u002Fmcp\u002Findex.ts\nexport default defineMcpHandler({\n  experimental_codeMode: {\n    progressive: true,\n    cpuTimeLimitMs: 15_000,\n  },\n  middleware: async (event) => {\n    const apiKey = getHeader(event, 'x-api-key')\n    if (!apiKey) throw createError({ statusCode: 401 })\n    event.context.user = await getUserByApiKey(apiKey)\n  },\n})\n","With Progressive + Auth",[154,2634,2635,2639,2651,2659,2669,2680,2684,2702,2729,2761,2786,2790],{"__ignoreMap":167},[171,2636,2637],{"class":173,"line":174},[171,2638,640],{"class":639},[171,2640,2641,2643,2645,2647,2649],{"class":173,"line":180},[171,2642,646],{"class":645},[171,2644,649],{"class":645},[171,2646,653],{"class":652},[171,2648,657],{"class":656},[171,2650,661],{"class":660},[171,2652,2653,2655,2657],{"class":173,"line":187},[171,2654,667],{"class":666},[171,2656,670],{"class":660},[171,2658,1155],{"class":660},[171,2660,2661,2663,2665,2667],{"class":173,"line":193},[171,2662,1553],{"class":666},[171,2664,670],{"class":660},[171,2666,674],{"class":673},[171,2668,677],{"class":660},[171,2670,2671,2673,2675,2678],{"class":173,"line":199},[171,2672,1482],{"class":666},[171,2674,670],{"class":660},[171,2676,2677],{"class":944}," 15_000",[171,2679,677],{"class":660},[171,2681,2682],{"class":173,"line":205},[171,2683,1575],{"class":660},[171,2685,2686,2688,2690,2692,2694,2696,2698,2700],{"class":173,"line":211},[171,2687,2357],{"class":652},[171,2689,670],{"class":660},[171,2691,2362],{"class":833},[171,2693,1258],{"class":660},[171,2695,2367],{"class":1328},[171,2697,877],{"class":660},[171,2699,1332],{"class":833},[171,2701,1155],{"class":660},[171,2703,2704,2706,2709,2711,2714,2716,2718,2720,2722,2725,2727],{"class":173,"line":217},[171,2705,2378],{"class":833},[171,2707,2708],{"class":656}," apiKey",[171,2710,1065],{"class":660},[171,2712,2713],{"class":652}," getHeader",[171,2715,657],{"class":666},[171,2717,2367],{"class":656},[171,2719,749],{"class":660},[171,2721,718],{"class":660},[171,2723,2724],{"class":550},"x-api-key",[171,2726,724],{"class":660},[171,2728,685],{"class":666},[171,2730,2731,2733,2735,2737,2740,2742,2745,2747,2749,2751,2753,2755,2757,2759],{"class":173,"line":223},[171,2732,2398],{"class":645},[171,2734,1258],{"class":666},[171,2736,2403],{"class":660},[171,2738,2739],{"class":656},"apiKey",[171,2741,948],{"class":666},[171,2743,2744],{"class":645},"throw",[171,2746,2417],{"class":652},[171,2748,657],{"class":666},[171,2750,857],{"class":660},[171,2752,2424],{"class":666},[171,2754,670],{"class":660},[171,2756,2429],{"class":944},[171,2758,874],{"class":660},[171,2760,685],{"class":666},[171,2762,2763,2765,2767,2769,2771,2773,2775,2777,2780,2782,2784],{"class":173,"line":229},[171,2764,2443],{"class":656},[171,2766,849],{"class":660},[171,2768,2448],{"class":656},[171,2770,849],{"class":660},[171,2772,1392],{"class":656},[171,2774,1065],{"class":660},[171,2776,843],{"class":645},[171,2778,2779],{"class":652}," getUserByApiKey",[171,2781,657],{"class":666},[171,2783,2739],{"class":656},[171,2785,685],{"class":666},[171,2787,2788],{"class":173,"line":235},[171,2789,1575],{"class":660},[171,2791,2792,2794],{"class":173,"line":240},[171,2793,682],{"class":660},[171,2795,685],{"class":656},[150,2797,2798,2800,2801,2804,2805,2811,2812,2814],{},[525,2799,76],{"href":77}," 在工具执行前运行 — 你的工具照常访问 ",[154,2802,2803],{},"event.context","。带有 ",[525,2806,2807,2810],{"href":102},[154,2808,2809],{},"enabled"," 守卫"," 的工具将从生成的类型定义和 ",[154,2813,795],{}," 对象中排除。",[145,2816,2817],{"id":2817},"工具名称清洗",[150,2819,2820,2821,2823],{},"MCP 工具名称（短横线命名法）会自动转换为 ",[154,2822,795],{}," 对象中有效的 JavaScript 标识符：",[245,2825,2826,2836],{},[248,2827,2828],{},[251,2829,2830,2833],{},[254,2831,2832],{},"MCP 名称",[254,2834,2835],{},"JavaScript 名称",[263,2837,2838,2848,2858,2870],{},[251,2839,2840,2844],{},[268,2841,2842],{},[154,2843,809],{},[268,2845,2846],{},[154,2847,852],{},[251,2849,2850,2854],{},[268,2851,2852],{},[154,2853,813],{},[268,2855,2856],{},[154,2857,898],{},[251,2859,2860,2865],{},[268,2861,2862],{},[154,2863,2864],{},"123-tool",[268,2866,2867],{},[154,2868,2869],{},"_123_tool",[251,2871,2872,2877],{},[268,2873,2874],{},[154,2875,2876],{},"delete",[268,2878,2879],{},[154,2880,2881],{},"delete_",[150,2883,2884,2885,2888,2889,2891],{},"保留的 JavaScript 关键字会添加 ",[154,2886,2887],{},"_"," 后缀。以数字开头的名称会添加 ",[154,2890,2887],{}," 前缀。",[145,2893,2894],{"id":2894},"清理资源",[150,2896,2897,2898,2900],{},"在关闭期间调用 ",[154,2899,1602],{}," 以释放资源（V8 运行时、RPC 服务器）：",[161,2902,2904],{"className":629,"code":2903,"language":632,"meta":167,"style":167},"import { disposeCodeMode } from '#imports'\n\n\u002F\u002F 在关闭钩子或清理函数中\ndisposeCodeMode()\n",[154,2905,2906,2929,2933,2938],{"__ignoreMap":167},[171,2907,2908,2911,2913,2916,2918,2921,2923,2926],{"class":173,"line":174},[171,2909,2910],{"class":645},"import",[171,2912,1024],{"class":660},[171,2914,2915],{"class":656}," disposeCodeMode",[171,2917,874],{"class":660},[171,2919,2920],{"class":645}," from",[171,2922,718],{"class":660},[171,2924,2925],{"class":550},"#imports",[171,2927,2928],{"class":660},"'\n",[171,2930,2931],{"class":173,"line":180},[171,2932,184],{"emptyLinePlaceholder":183},[171,2934,2935],{"class":173,"line":187},[171,2936,2937],{"class":639},"\u002F\u002F 在关闭钩子或清理函数中\n",[171,2939,2940,2943],{"class":173,"line":193},[171,2941,2942],{"class":652},"disposeCodeMode",[171,2944,2945],{"class":656},"()\n",[145,2947,2948],{"id":2948},"下一步",[473,2950,2951,2957,2962,2967],{},[476,2952,2953,2956],{},[525,2954,2955],{"href":62},"处理器"," - 创建自定义 MCP 端点",[476,2958,2959,2961],{},[525,2960,76],{"href":77}," - 添加身份验证",[476,2963,2964,2966],{},[525,2965,101],{"href":102}," - 条件性注册工具",[476,2968,2969,2972],{},[525,2970,2971],{"href":92},"评估"," - 对比代码模式与标准 MCP 的基准测试",[2974,2975,2976],"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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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}",{"title":167,"searchDepth":180,"depth":180,"links":2978},[2979,2980,2984,2988,2991,2992,2993,2994,3003,3004,3005,3006],{"id":147,"depth":180,"text":148},{"id":329,"depth":180,"text":330,"children":2981},[2982,2983],{"id":341,"depth":187,"text":341},{"id":467,"depth":187,"text":468},{"id":516,"depth":180,"text":516,"children":2985},[2986,2987],{"id":519,"depth":187,"text":520},{"id":616,"depth":187,"text":617},{"id":774,"depth":180,"text":774,"children":2989},[2990],{"id":802,"depth":187,"text":803},{"id":1432,"depth":180,"text":1432},{"id":1706,"depth":180,"text":1706},{"id":1857,"depth":180,"text":1857},{"id":1953,"depth":180,"text":1953,"children":2995},[2996,2997,2998,2999,3000,3001,3002],{"id":1963,"depth":187,"text":1963},{"id":2020,"depth":187,"text":2020},{"id":2063,"depth":187,"text":2064},{"id":2101,"depth":187,"text":2101},{"id":2259,"depth":187,"text":2259},{"id":2295,"depth":187,"text":2295},{"id":2305,"depth":187,"text":2305},{"id":2315,"depth":180,"text":2315},{"id":2817,"depth":180,"text":2817},{"id":2894,"depth":180,"text":2894},{"id":2948,"depth":180,"text":2948},"让大语言模型在单次 JavaScript 执行中编排多次工具调用。","md",null,{},{"icon":109},{"title":106,"description":3013},"通过让大语言模型编写 JavaScript 代码，在安全的 V8 沙箱中编排 MCP 工具，从而减少 Token 使用量和延迟。","IwAvLQ_QM8gOnijs-4qnbdS5wSaiUwjmptsSlxSyARk",[3016,3018],{"title":101,"path":102,"stem":103,"description":3017,"icon":104,"children":-1},"根据身份验证、角色或请求上下文有条件地注册工具、资源和提示词。",{"title":116,"path":117,"stem":118,"description":3019,"icon":119,"children":-1},"使用 Bearer 令牌身份验证保护您的 MCP 端点。",1775615721144]