[{"data":1,"prerenderedAt":3173},["ShallowReactive",2],{"navigation_docs":3,"-advanced-code-mode":282,"-advanced-code-mode-surround":3168},[4,40,70,99,122,156,189,253],{"title":5,"path":6,"stem":7,"children":8,"page":39},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24,29,34],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-book-open",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Configuration","\u002Fgetting-started\u002Fconfiguration","1.getting-started\u002F3.configuration","i-lucide-settings",{"title":25,"path":26,"stem":27,"icon":28},"Inspector","\u002Fgetting-started\u002Finspector","1.getting-started\u002F4.inspector","i-lucide-circuit-board",{"title":30,"path":31,"stem":32,"icon":33},"Connection","\u002Fgetting-started\u002Fconnection","1.getting-started\u002F5.connection","i-lucide-plug",{"title":35,"path":36,"stem":37,"icon":38},"Agent Skills","\u002Fgetting-started\u002Fagent-skills","1.getting-started\u002F6.agent-skills","i-lucide-sparkles",false,{"title":41,"path":42,"stem":43,"children":44,"page":39},"Tools","\u002Ftools","2.tools",[45,50,55,60,65],{"title":46,"path":47,"stem":48,"icon":49},"Overview","\u002Ftools\u002Foverview","2.tools\u002F0.overview","i-lucide-wrench",{"title":51,"path":52,"stem":53,"icon":54},"Schema, handler & returns","\u002Ftools\u002Fschema-handler","2.tools\u002F1.schema-handler","i-lucide-braces",{"title":56,"path":57,"stem":58,"icon":59},"Annotations & input examples","\u002Ftools\u002Fannotations","2.tools\u002F2.annotations","i-lucide-badge-info",{"title":61,"path":62,"stem":63,"icon":64},"Errors & caching","\u002Ftools\u002Ferrors-caching","2.tools\u002F3.errors-caching","i-lucide-shield",{"title":66,"path":67,"stem":68,"icon":69},"Groups, files & dynamic registration","\u002Ftools\u002Fgroups-organization","2.tools\u002F4.groups-organization","i-lucide-tags",{"title":71,"path":72,"stem":73,"children":74,"page":39},"Resources","\u002Fresources","3.resources",[75,79,84,89,94],{"title":46,"path":76,"stem":77,"icon":78},"\u002Fresources\u002Foverview","3.resources\u002F0.overview","i-lucide-package",{"title":80,"path":81,"stem":82,"icon":83},"Static resources & structure","\u002Fresources\u002Fstatic-and-structure","3.resources\u002F1.static-and-structure","i-lucide-file-stack",{"title":85,"path":86,"stem":87,"icon":88},"Templates & handlers","\u002Fresources\u002Ftemplates-and-handlers","3.resources\u002F2.templates-and-handlers","i-lucide-git-branch",{"title":90,"path":91,"stem":92,"icon":93},"Metadata, content & errors","\u002Fresources\u002Fcontent-metadata-errors","3.resources\u002F3.content-metadata-errors","i-lucide-layers",{"title":95,"path":96,"stem":97,"icon":98},"Groups & organization","\u002Fresources\u002Forganization","3.resources\u002F4.organization","i-lucide-folder-tree",{"title":100,"path":101,"stem":102,"children":103,"page":39},"Prompts","\u002Fprompts","4.prompts",[104,108,113,117],{"title":46,"path":105,"stem":106,"icon":107},"\u002Fprompts\u002Foverview","4.prompts\u002F0.overview","i-lucide-message-square",{"title":109,"path":110,"stem":111,"icon":112},"Authoring & structure","\u002Fprompts\u002Fauthoring","4.prompts\u002F1.authoring","i-lucide-pen-line",{"title":114,"path":115,"stem":116,"icon":93},"Input, handler & messages","\u002Fprompts\u002Finput-handler-messages","4.prompts\u002F2.input-handler-messages",{"title":118,"path":119,"stem":120,"icon":121},"Patterns & advanced","\u002Fprompts\u002Fpatterns-advanced","4.prompts\u002F3.patterns-advanced","i-lucide-line-chart",{"title":123,"path":124,"stem":125,"children":126,"page":39},"Handlers","\u002Fhandlers","5.handlers",[127,131,136,141,146,151],{"title":46,"path":128,"stem":129,"icon":130},"\u002Fhandlers\u002Foverview","5.handlers\u002F0.overview","i-lucide-server",{"title":132,"path":133,"stem":134,"icon":135},"Default & custom handlers","\u002Fhandlers\u002Fdefault-and-custom","5.handlers\u002F1.default-and-custom","i-lucide-toggle-left",{"title":137,"path":138,"stem":139,"icon":140},"Structure & options","\u002Fhandlers\u002Fstructure-and-options","5.handlers\u002F2.structure-and-options","i-lucide-sliders-horizontal",{"title":142,"path":143,"stem":144,"icon":145},"Examples & routing","\u002Fhandlers\u002Fexamples-routing","5.handlers\u002F3.examples-routing","i-lucide-route",{"title":147,"path":148,"stem":149,"icon":150},"Sharing & practices","\u002Fhandlers\u002Fsharing-practices","5.handlers\u002F4.sharing-practices","i-lucide-share-2",{"title":152,"path":153,"stem":154,"icon":155},"Multi-handler organization","\u002Fhandlers\u002Forganization","5.handlers\u002F5.organization","i-lucide-network",{"title":157,"path":158,"stem":159,"children":160,"page":39},"Apps","\u002Fapps","6.apps",[161,165,170,175,179,184],{"title":46,"path":162,"stem":163,"icon":164},"\u002Fapps\u002Foverview","6.apps\u002F0.overview","i-lucide-app-window",{"title":166,"path":167,"stem":168,"icon":169},"Authoring & defineMcpApp","\u002Fapps\u002Fauthoring","6.apps\u002F1.authoring","i-lucide-code-2",{"title":171,"path":172,"stem":173,"icon":174},"useMcpApp() bridge","\u002Fapps\u002Fuse-mcp-app","6.apps\u002F2.use-mcp-app","i-lucide-message-circle",{"title":176,"path":177,"stem":178,"icon":64},"CSP & build pipeline","\u002Fapps\u002Fcsp-and-wiring","6.apps\u002F3.csp-and-wiring",{"title":180,"path":181,"stem":182,"icon":183},"Testing & publishing","\u002Fapps\u002Ftesting-publishing","6.apps\u002F4.testing-publishing","i-lucide-rocket",{"title":185,"path":186,"stem":187,"icon":188},"Patterns & limits","\u002Fapps\u002Fpatterns-reference","6.apps\u002F5.patterns-reference","i-lucide-book-marked",{"title":190,"path":191,"stem":192,"children":193,"page":39},"Advanced Topics","\u002Fadvanced","7.advanced",[194,199,204,209,214,218,223,228,233,238,243,248],{"title":195,"path":196,"stem":197,"icon":198},"Custom Paths","\u002Fadvanced\u002Fcustom-paths","7.advanced\u002F1.custom-paths","i-lucide-folder",{"title":200,"path":201,"stem":202,"icon":203},"Logging","\u002Fadvanced\u002Flogging","7.advanced\u002F10.logging","i-lucide-scroll-text",{"title":205,"path":206,"stem":207,"icon":208},"MCP Apps Internals","\u002Fadvanced\u002Fmcp-apps-internals","7.advanced\u002F11.mcp-apps-internals","i-lucide-cog",{"title":210,"path":211,"stem":212,"icon":213},"Listing Definitions","\u002Fadvanced\u002Flisting-definitions","7.advanced\u002F12.listing-definitions","i-lucide-list",{"title":215,"path":216,"stem":217,"icon":64},"Middleware","\u002Fadvanced\u002Fmiddleware","7.advanced\u002F2.middleware",{"title":219,"path":220,"stem":221,"icon":222},"TypeScript","\u002Fadvanced\u002Ftypescript","7.advanced\u002F3.typescript","i-lucide-type",{"title":224,"path":225,"stem":226,"icon":227},"Hooks","\u002Fadvanced\u002Fhooks","7.advanced\u002F4.hooks","i-lucide-webhook",{"title":229,"path":230,"stem":231,"icon":232},"MCP Evals","\u002Fadvanced\u002Fevals","7.advanced\u002F5.evals","i-lucide-flask-conical",{"title":234,"path":235,"stem":236,"icon":237},"Sessions","\u002Fadvanced\u002Fsessions","7.advanced\u002F6.sessions","i-lucide-database",{"title":239,"path":240,"stem":241,"icon":242},"Dynamic Definitions","\u002Fadvanced\u002Fdynamic-definitions","7.advanced\u002F7.dynamic-definitions","i-lucide-toggle-right",{"title":244,"path":245,"stem":246,"icon":247},"Code Mode","\u002Fadvanced\u002Fcode-mode","7.advanced\u002F8.code-mode","i-lucide-code",{"title":249,"path":250,"stem":251,"icon":252},"Elicitation","\u002Fadvanced\u002Felicitation","7.advanced\u002F9.elicitation","i-lucide-message-square-quote",{"title":254,"path":255,"stem":256,"children":257,"page":39},"Examples","\u002Fexamples","8.examples",[258,263,268,273,278],{"title":259,"path":260,"stem":261,"icon":262},"Authentication","\u002Fexamples\u002Fauthentication","8.examples\u002F1.authentication","i-lucide-shield-check",{"title":264,"path":265,"stem":266,"icon":267},"API Integration","\u002Fexamples\u002Fapi-integration","8.examples\u002F2.api-integration","i-lucide-globe",{"title":269,"path":270,"stem":271,"icon":272},"Common Patterns","\u002Fexamples\u002Fcommon-patterns","8.examples\u002F3.common-patterns","i-lucide-lightbulb",{"title":274,"path":275,"stem":276,"icon":277},"File Operations","\u002Fexamples\u002Ffile-operations","8.examples\u002F4.file-operations","i-lucide-file",{"title":279,"path":280,"stem":281,"icon":107},"Prompt Examples","\u002Fexamples\u002Fprompt-examples","8.examples\u002F5.prompt-examples",{"id":283,"title":244,"body":284,"description":3160,"extension":3161,"links":3162,"meta":3163,"navigation":3164,"path":245,"seo":3165,"stem":246,"__hash__":3167},"docs\u002F7.advanced\u002F8.code-mode.md",{"type":285,"value":286,"toc":3130},"minimark",[287,292,300,359,433,442,446,453,458,468,561,568,581,585,588,627,631,635,644,715,731,735,742,888,894,898,901,923,927,942,1560,1564,1571,1714,1859,1862,1868,1885,1930,1933,1987,1990,1994,2000,2070,2079,2088,2092,2099,2103,2115,2157,2161,2164,2201,2205,2208,2236,2239,2243,2399,2403,2406,2436,2440,2447,2451,2458,2462,2465,2948,2967,2971,2977,3035,3044,3048,3054,3099,3103,3126],[288,289,291],"h2",{"id":290},"what-is-code-mode","What is Code Mode?",[293,294,295,296,299],"p",{},"Code Mode replaces the traditional multi-turn tool calling pattern with a single ",[297,298,297],"code",{}," tool. Instead of the LLM calling tools one at a time — each requiring a round-trip — it writes JavaScript code that orchestrates multiple tools in one execution.",[301,302,305,308,350],"prompt",{":actions":303,"description":304,"icon":247},"[\"copy\",\"cursor\",\"windsurf\"]","Enable Code Mode in the MCP server",[293,306,307],{},"Enable Code Mode in my Nuxt MCP server (@nuxtjs\u002Fmcp-toolkit).",[309,310,311,329,332,335,338,341,344,347],"ul",{},[312,313,314,315,318,319,318,322,318,325,328],"li",{},"Install secure-exec: ",[297,316,317],{},"pnpm add secure-exec"," or ",[297,320,321],{},"npm install secure-exec",[297,323,324],{},"yarn add secure-exec",[297,326,327],{},"bun add secure-exec"," (Node >=18.16.0)",[312,330,331],{},"Set experimental_codeMode: true on the handler in server\u002Fmcp\u002Findex.ts (via defineMcpHandler)",[312,333,334],{},"Code Mode replaces all registered tools with a single 'code' tool",[312,336,337],{},"The LLM writes JavaScript that calls tools via a codemode object (e.g. await codemode.listUsers())",[312,339,340],{},"This reduces round-trips and token usage — especially with many tools (10+ tools saves 50%+ tokens)",[312,342,343],{},"Code runs in a secure V8 sandbox (workerd) — no access to filesystem, network, or Node APIs",[312,345,346],{},"If there are many tools (10+), consider progressive mode (experimental_codeMode: { progressive: true }) to keep both individual tools and the code tool — for fewer tools, standard mode is sufficient",[312,348,349],{},"Code Mode is experimental — the API may evolve",[293,351,352,353],{},"Docs: ",[354,355,356],"a",{"href":356,"rel":357},"https:\u002F\u002Fmcp-toolkit.nuxt.dev\u002Fadvanced\u002Fcode-mode",[358],"nofollow",[360,361,362,376],"table",{},[363,364,365],"thead",{},[366,367,368,371,374],"tr",{},[369,370],"th",{},[369,372,373],{},"Traditional MCP",[369,375,244],{},[377,378,379,394,407,420],"tbody",{},[366,380,381,388,391],{},[382,383,384],"td",{},[385,386,387],"strong",{},"Pattern",[382,389,390],{},"LLM calls tools one by one",[382,392,393],{},"LLM writes JS that calls tools",[366,395,396,401,404],{},[382,397,398],{},[385,399,400],{},"Round-trips",[382,402,403],{},"One per tool call",[382,405,406],{},"One for all operations",[366,408,409,414,417],{},[382,410,411],{},[385,412,413],{},"Complex logic",[382,415,416],{},"Multiple turns for conditionals\u002Floops",[382,418,419],{},"Native JS control flow",[366,421,422,427,430],{},[382,423,424],{},[385,425,426],{},"Token usage",[382,428,429],{},"Higher (repeated context)",[382,431,432],{},"Lower (single invocation)",[434,435,437,438,441],"callout",{"color":436,"icon":232},"warning","Code Mode is ",[385,439,440],{},"experimental for now",". The API may evolve as we stabilize this feature based on feedback.",[288,443,445],{"id":444},"why-code-mode","Why Code Mode?",[293,447,448,449,452],{},"Every LLM round-trip resends ",[385,450,451],{},"all tool descriptions"," as context. With traditional MCP, a task that requires 5 steps with 50 tools sends the full tool catalog 5 times — that's 15,500 tokens just for tool descriptions. Code Mode sends compact TypeScript signatures in a single tool, cutting that to ~3,000 tokens.",[454,455,457],"h3",{"id":456},"the-scaling-problem","The scaling problem",[293,459,460,461,464,465,467],{},"In traditional MCP, tool description overhead scales as ",[385,462,463],{},"tools × round-trips",". Code Mode replaces all tools with one ",[297,466,297],{}," tool containing compact type signatures — and usually needs fewer round-trips.",[360,469,470,484],{},[363,471,472],{},[366,473,474,477,479,481],{},[369,475,476],{},"Server size",[369,478,373],{},[369,480,244],{},[369,482,483],{},"Savings",[377,485,486,505,524,543],{},[366,487,488,494,497,500],{},[382,489,490,493],{},[385,491,492],{},"10 tools",", 3-step task",[382,495,496],{},"~1,860 tokens in tool descriptions",[382,498,499],{},"~920 tokens",[382,501,502],{},[385,503,504],{},"-51%",[366,506,507,513,516,519],{},[382,508,509,512],{},[385,510,511],{},"25 tools",", 4-step task",[382,514,515],{},"~6,200 tokens",[382,517,518],{},"~1,700 tokens",[382,520,521],{},[385,522,523],{},"-73%",[366,525,526,532,535,538],{},[382,527,528,531],{},[385,529,530],{},"50 tools",", 5-step task",[382,533,534],{},"~15,500 tokens",[382,536,537],{},"~3,000 tokens",[382,539,540],{},[385,541,542],{},"-81%",[366,544,545,550,553,556],{},[382,546,547,531],{},[385,548,549],{},"100 tools",[382,551,552],{},"~31,000 tokens",[382,554,555],{},"~5,600 tokens",[382,557,558],{},[385,559,560],{},"-82%",[293,562,563,564,567],{},"These numbers represent tool description overhead only. Total savings depend on the task, but the trend is clear: ",[385,565,566],{},"the more tools you have, the bigger the savings",".",[434,569,572,573,576,577,580],{"color":570,"icon":571},"primary","i-lucide-zap","On a real benchmark with Claude Sonnet (9 tools, 7 tasks), Code Mode saved ",[385,574,575],{},"15% of total tokens overall"," and up to ",[385,578,579],{},"33% on complex batch operations"," — collapsing 8 tool calls into a single JavaScript block.",[454,582,584],{"id":583},"beyond-token-savings","Beyond token savings",[293,586,587],{},"Code Mode also unlocks patterns that traditional MCP cannot do efficiently:",[309,589,590,600,609,618],{},[312,591,592,595,596,599],{},[385,593,594],{},"Parallel execution"," — ",[297,597,598],{},"Promise.all()"," for independent calls instead of sequential round-trips",[312,601,602,595,605,608],{},[385,603,604],{},"Conditional logic",[297,606,607],{},"if\u002Felse"," branching without an extra LLM step",[312,610,611,595,614,617],{},[385,612,613],{},"Loops",[297,615,616],{},"for"," over data instead of repeating tool calls one by one",[312,619,620,595,623,626],{},[385,621,622],{},"Error handling",[297,624,625],{},"try\u002Fcatch"," to handle failures mid-workflow",[288,628,630],{"id":629},"setup","Setup",[454,632,634],{"id":633},"_1-install-secure-exec","1. Install secure-exec",[293,636,637,638,643],{},"Code Mode uses ",[354,639,642],{"href":640,"rel":641},"https:\u002F\u002Fgithub.com\u002Fnicolo-ribaudo\u002Fsecure-exec",[358],"secure-exec"," to run LLM-generated code in a secure V8 isolate:",[645,646,647,672,687,701],"code-group",{},[648,649,655],"pre",{"className":650,"code":651,"filename":652,"language":653,"meta":654,"style":654},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add secure-exec\n","pnpm","bash","",[297,656,657],{"__ignoreMap":654},[658,659,662,665,669],"span",{"class":660,"line":661},"line",1,[658,663,652],{"class":664},"sBMFI",[658,666,668],{"class":667},"sfazB"," add",[658,670,671],{"class":667}," secure-exec\n",[648,673,676],{"className":650,"code":674,"filename":675,"language":653,"meta":654,"style":654},"npm install secure-exec\n","npm",[297,677,678],{"__ignoreMap":654},[658,679,680,682,685],{"class":660,"line":661},[658,681,675],{"class":664},[658,683,684],{"class":667}," install",[658,686,671],{"class":667},[648,688,691],{"className":650,"code":689,"filename":690,"language":653,"meta":654,"style":654},"yarn add secure-exec\n","yarn",[297,692,693],{"__ignoreMap":654},[658,694,695,697,699],{"class":660,"line":661},[658,696,690],{"class":664},[658,698,668],{"class":667},[658,700,671],{"class":667},[648,702,705],{"className":650,"code":703,"filename":704,"language":653,"meta":654,"style":654},"bun add secure-exec\n","bun",[297,706,707],{"__ignoreMap":654},[658,708,709,711,713],{"class":660,"line":661},[658,710,704],{"class":664},[658,712,668],{"class":667},[658,714,671],{"class":667},[434,716,719,720,722,723,726,727,730],{"color":717,"icon":718},"info","i-lucide-info","Code Mode requires ",[297,721,642],{}," and Node.js ",[297,724,725],{},">=18.16.0",". The rest of the module still supports Node.js 18.x, but code mode depends on ",[297,728,729],{},"AsyncLocalStorage.snapshot()"," to preserve request context.",[454,732,734],{"id":733},"_2-enable-on-a-handler","2. Enable on a handler",[293,736,737,738,741],{},"Add ",[297,739,740],{},"experimental_codeMode"," to any handler:",[645,743,744,806],{},[648,745,750],{"className":746,"code":747,"filename":748,"language":749,"meta":654,"style":654},"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",[297,751,752,758,780,797],{"__ignoreMap":654},[658,753,754],{"class":660,"line":661},[658,755,757],{"class":756},"sHwdD","\u002F\u002F server\u002Fmcp\u002Findex.ts\n",[658,759,761,765,768,772,776],{"class":660,"line":760},2,[658,762,764],{"class":763},"s7zQu","export",[658,766,767],{"class":763}," default",[658,769,771],{"class":770},"s2Zo4"," defineMcpHandler",[658,773,775],{"class":774},"sTEyZ","(",[658,777,779],{"class":778},"sMK4o","{\n",[658,781,783,787,790,794],{"class":660,"line":782},3,[658,784,786],{"class":785},"swJcz","  experimental_codeMode",[658,788,789],{"class":778},":",[658,791,793],{"class":792},"sfNiH"," true",[658,795,796],{"class":778},",\n",[658,798,800,803],{"class":660,"line":799},4,[658,801,802],{"class":778},"}",[658,804,805],{"class":774},")\n",[648,807,810],{"className":746,"code":808,"filename":809,"language":749,"meta":654,"style":654},"\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",[297,811,812,817,829,847,857,881],{"__ignoreMap":654},[658,813,814],{"class":660,"line":661},[658,815,816],{"class":756},"\u002F\u002F server\u002Fmcp\u002Fai-agent.ts\n",[658,818,819,821,823,825,827],{"class":660,"line":760},[658,820,764],{"class":763},[658,822,767],{"class":763},[658,824,771],{"class":770},[658,826,775],{"class":774},[658,828,779],{"class":778},[658,830,831,834,836,839,842,845],{"class":660,"line":782},[658,832,833],{"class":785},"  name",[658,835,789],{"class":778},[658,837,838],{"class":778}," '",[658,840,841],{"class":667},"ai-agent",[658,843,844],{"class":778},"'",[658,846,796],{"class":778},[658,848,849,851,853,855],{"class":660,"line":799},[658,850,786],{"class":785},[658,852,789],{"class":778},[658,854,793],{"class":792},[658,856,796],{"class":778},[658,858,860,863,865,868,871,874,876,879],{"class":660,"line":859},5,[658,861,862],{"class":785},"  tools",[658,864,789],{"class":778},[658,866,867],{"class":774}," [getUserTool",[658,869,870],{"class":778},",",[658,872,873],{"class":774}," listTodosTool",[658,875,870],{"class":778},[658,877,878],{"class":774}," createTodoTool]",[658,880,796],{"class":778},[658,882,884,886],{"class":660,"line":883},6,[658,885,802],{"class":778},[658,887,805],{"class":774},[293,889,890,891,893],{},"That's it. The module replaces all your tools with a single ",[297,892,297],{}," tool that the LLM uses to orchestrate them.",[288,895,897],{"id":896},"how-it-works","How It Works",[293,899,900],{},"When Code Mode is enabled:",[902,903,904,907,913,920],"ol",{},[312,905,906],{},"All registered tools are converted to TypeScript type definitions",[312,908,909,910,912],{},"A ",[297,911,297],{}," tool is created with those types embedded in its description",[312,914,915,916,919],{},"The LLM writes JavaScript using a ",[297,917,918],{},"codemode"," object to call tools",[312,921,922],{},"The code runs in a V8 isolate with only RPC access to your tools",[454,924,926],{"id":925},"example-what-the-llm-generates","Example: what the LLM generates",[293,928,929,930,933,934,937,938,941],{},"Given tools ",[297,931,932],{},"get-user",", ",[297,935,936],{},"list-todos",", and ",[297,939,940],{},"create-todo",", the LLM receives type definitions and writes code like:",[645,943,944,1163,1336],{},[648,945,950],{"className":946,"code":947,"filename":948,"language":949,"meta":654,"style":654},"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",[297,951,952,1003,1044,1050,1075,1091,1107,1124,1134,1140,1145],{"__ignoreMap":654},[658,953,954,958,961,964,967,970,972,975,977,980,983,985,988,991,994,997,1000],{"class":660,"line":661},[658,955,957],{"class":956},"spNyl","const",[658,959,960],{"class":774}," user ",[658,962,963],{"class":778},"=",[658,965,966],{"class":763}," await",[658,968,969],{"class":774}," codemode",[658,971,567],{"class":778},[658,973,974],{"class":770},"get_user",[658,976,775],{"class":774},[658,978,979],{"class":778},"{",[658,981,982],{"class":785}," id",[658,984,789],{"class":778},[658,986,987],{"class":778}," \"",[658,989,990],{"class":667},"123",[658,992,993],{"class":778},"\"",[658,995,996],{"class":778}," }",[658,998,999],{"class":774},")",[658,1001,1002],{"class":778},";\n",[658,1004,1005,1007,1010,1012,1014,1016,1018,1021,1023,1025,1028,1030,1033,1035,1038,1040,1042],{"class":660,"line":760},[658,1006,957],{"class":956},[658,1008,1009],{"class":774}," todos ",[658,1011,963],{"class":778},[658,1013,966],{"class":763},[658,1015,969],{"class":774},[658,1017,567],{"class":778},[658,1019,1020],{"class":770},"list_todos",[658,1022,775],{"class":774},[658,1024,979],{"class":778},[658,1026,1027],{"class":785}," userId",[658,1029,789],{"class":778},[658,1031,1032],{"class":774}," user",[658,1034,567],{"class":778},[658,1036,1037],{"class":774},"id ",[658,1039,802],{"class":778},[658,1041,999],{"class":774},[658,1043,1002],{"class":778},[658,1045,1046],{"class":660,"line":782},[658,1047,1049],{"emptyLinePlaceholder":1048},true,"\n",[658,1051,1052,1055,1058,1060,1063,1066,1070,1073],{"class":660,"line":799},[658,1053,1054],{"class":763},"if",[658,1056,1057],{"class":774}," (todos",[658,1059,567],{"class":778},[658,1061,1062],{"class":774},"length ",[658,1064,1065],{"class":778},"===",[658,1067,1069],{"class":1068},"sbssI"," 0",[658,1071,1072],{"class":774},") ",[658,1074,779],{"class":778},[658,1076,1077,1080,1082,1084,1087,1089],{"class":660,"line":859},[658,1078,1079],{"class":763},"  await",[658,1081,969],{"class":774},[658,1083,567],{"class":778},[658,1085,1086],{"class":770},"create_todo",[658,1088,775],{"class":785},[658,1090,779],{"class":778},[658,1092,1093,1096,1098,1100,1103,1105],{"class":660,"line":883},[658,1094,1095],{"class":785},"    title",[658,1097,789],{"class":778},[658,1099,987],{"class":778},[658,1101,1102],{"class":667},"Welcome task",[658,1104,993],{"class":778},[658,1106,796],{"class":778},[658,1108,1110,1113,1115,1117,1119,1122],{"class":660,"line":1109},7,[658,1111,1112],{"class":785},"    userId",[658,1114,789],{"class":778},[658,1116,1032],{"class":774},[658,1118,567],{"class":778},[658,1120,1121],{"class":774},"id",[658,1123,796],{"class":778},[658,1125,1127,1130,1132],{"class":660,"line":1126},8,[658,1128,1129],{"class":778},"  }",[658,1131,999],{"class":785},[658,1133,1002],{"class":778},[658,1135,1137],{"class":660,"line":1136},9,[658,1138,1139],{"class":778},"}\n",[658,1141,1143],{"class":660,"line":1142},10,[658,1144,1049],{"emptyLinePlaceholder":1048},[658,1146,1148,1151,1154,1156,1158,1160],{"class":660,"line":1147},11,[658,1149,1150],{"class":763},"return",[658,1152,1153],{"class":778}," {",[658,1155,1032],{"class":774},[658,1157,870],{"class":778},[658,1159,1009],{"class":774},[658,1161,1162],{"class":778},"};\n",[648,1164,1167],{"className":946,"code":1165,"filename":1166,"language":949,"meta":654,"style":654},"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",[297,1168,1169,1208,1223,1236,1267,1274,1278,1285,1302,1317,1332],{"__ignoreMap":654},[658,1170,1171,1173,1176,1179,1181,1184,1186,1189,1192,1195,1197,1200,1202,1205],{"class":660,"line":661},[658,1172,957],{"class":956},[658,1174,1175],{"class":778}," [",[658,1177,1178],{"class":774},"users",[658,1180,870],{"class":778},[658,1182,1183],{"class":774}," products",[658,1185,870],{"class":778},[658,1187,1188],{"class":774}," orders",[658,1190,1191],{"class":778},"]",[658,1193,1194],{"class":778}," =",[658,1196,966],{"class":763},[658,1198,1199],{"class":664}," Promise",[658,1201,567],{"class":778},[658,1203,1204],{"class":770},"all",[658,1206,1207],{"class":774},"([\n",[658,1209,1210,1213,1215,1218,1221],{"class":660,"line":760},[658,1211,1212],{"class":774},"  codemode",[658,1214,567],{"class":778},[658,1216,1217],{"class":770},"list_users",[658,1219,1220],{"class":774},"()",[658,1222,796],{"class":778},[658,1224,1225,1227,1229,1232,1234],{"class":660,"line":782},[658,1226,1212],{"class":774},[658,1228,567],{"class":778},[658,1230,1231],{"class":770},"list_products",[658,1233,1220],{"class":774},[658,1235,796],{"class":778},[658,1237,1238,1240,1242,1245,1247,1249,1252,1254,1256,1259,1261,1263,1265],{"class":660,"line":799},[658,1239,1212],{"class":774},[658,1241,567],{"class":778},[658,1243,1244],{"class":770},"list_orders",[658,1246,775],{"class":774},[658,1248,979],{"class":778},[658,1250,1251],{"class":785}," status",[658,1253,789],{"class":778},[658,1255,987],{"class":778},[658,1257,1258],{"class":667},"pending",[658,1260,993],{"class":778},[658,1262,996],{"class":778},[658,1264,999],{"class":774},[658,1266,796],{"class":778},[658,1268,1269,1272],{"class":660,"line":859},[658,1270,1271],{"class":774},"])",[658,1273,1002],{"class":778},[658,1275,1276],{"class":660,"line":883},[658,1277,1049],{"emptyLinePlaceholder":1048},[658,1279,1280,1282],{"class":660,"line":1109},[658,1281,1150],{"class":763},[658,1283,1284],{"class":778}," {\n",[658,1286,1287,1290,1292,1295,1297,1300],{"class":660,"line":1126},[658,1288,1289],{"class":785},"  userCount",[658,1291,789],{"class":778},[658,1293,1294],{"class":774}," users",[658,1296,567],{"class":778},[658,1298,1299],{"class":774},"length",[658,1301,796],{"class":778},[658,1303,1304,1307,1309,1311,1313,1315],{"class":660,"line":1136},[658,1305,1306],{"class":785},"  productCount",[658,1308,789],{"class":778},[658,1310,1183],{"class":774},[658,1312,567],{"class":778},[658,1314,1299],{"class":774},[658,1316,796],{"class":778},[658,1318,1319,1322,1324,1326,1328,1330],{"class":660,"line":1142},[658,1320,1321],{"class":785},"  pendingOrders",[658,1323,789],{"class":778},[658,1325,1188],{"class":774},[658,1327,567],{"class":778},[658,1329,1299],{"class":774},[658,1331,796],{"class":778},[658,1333,1334],{"class":660,"line":1147},[658,1335,1162],{"class":778},[648,1337,1340],{"className":946,"code":1338,"filename":1339,"language":949,"meta":654,"style":654},"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",[297,1341,1342,1363,1377,1381,1400,1438,1475,1507,1531,1536,1540,1544],{"__ignoreMap":654},[658,1343,1344,1346,1349,1351,1353,1355,1357,1359,1361],{"class":660,"line":661},[658,1345,957],{"class":956},[658,1347,1348],{"class":774}," users ",[658,1350,963],{"class":778},[658,1352,966],{"class":763},[658,1354,969],{"class":774},[658,1356,567],{"class":778},[658,1358,1217],{"class":770},[658,1360,1220],{"class":774},[658,1362,1002],{"class":778},[658,1364,1365,1367,1370,1372,1375],{"class":660,"line":760},[658,1366,957],{"class":956},[658,1368,1369],{"class":774}," results ",[658,1371,963],{"class":778},[658,1373,1374],{"class":774}," []",[658,1376,1002],{"class":778},[658,1378,1379],{"class":660,"line":782},[658,1380,1049],{"emptyLinePlaceholder":1048},[658,1382,1383,1385,1388,1390,1392,1395,1398],{"class":660,"line":799},[658,1384,616],{"class":763},[658,1386,1387],{"class":774}," (",[658,1389,957],{"class":956},[658,1391,960],{"class":774},[658,1393,1394],{"class":778},"of",[658,1396,1397],{"class":774}," users) ",[658,1399,779],{"class":778},[658,1401,1402,1405,1408,1410,1412,1414,1416,1418,1420,1422,1424,1426,1428,1430,1432,1434,1436],{"class":660,"line":859},[658,1403,1404],{"class":956},"  const",[658,1406,1407],{"class":774}," todos",[658,1409,1194],{"class":778},[658,1411,966],{"class":763},[658,1413,969],{"class":774},[658,1415,567],{"class":778},[658,1417,1020],{"class":770},[658,1419,775],{"class":785},[658,1421,979],{"class":778},[658,1423,1027],{"class":785},[658,1425,789],{"class":778},[658,1427,1032],{"class":774},[658,1429,567],{"class":778},[658,1431,1121],{"class":774},[658,1433,996],{"class":778},[658,1435,999],{"class":785},[658,1437,1002],{"class":778},[658,1439,1440,1443,1445,1448,1450,1453,1455,1459,1462,1465,1467,1470,1473],{"class":660,"line":883},[658,1441,1442],{"class":763},"  if",[658,1444,1387],{"class":785},[658,1446,1447],{"class":774},"todos",[658,1449,567],{"class":778},[658,1451,1452],{"class":770},"some",[658,1454,775],{"class":785},[658,1456,1458],{"class":1457},"sHdIc","t",[658,1460,1461],{"class":956}," =>",[658,1463,1464],{"class":774}," t",[658,1466,567],{"class":778},[658,1468,1469],{"class":774},"overdue",[658,1471,1472],{"class":785},")) ",[658,1474,779],{"class":778},[658,1476,1477,1480,1482,1484,1487,1489,1491,1493,1495,1497,1499,1501,1503,1505],{"class":660,"line":1109},[658,1478,1479],{"class":763},"    await",[658,1481,969],{"class":774},[658,1483,567],{"class":778},[658,1485,1486],{"class":770},"send_reminder",[658,1488,775],{"class":785},[658,1490,979],{"class":778},[658,1492,1027],{"class":785},[658,1494,789],{"class":778},[658,1496,1032],{"class":774},[658,1498,567],{"class":778},[658,1500,1121],{"class":774},[658,1502,996],{"class":778},[658,1504,999],{"class":785},[658,1506,1002],{"class":778},[658,1508,1509,1512,1514,1517,1519,1522,1524,1527,1529],{"class":660,"line":1126},[658,1510,1511],{"class":774},"    results",[658,1513,567],{"class":778},[658,1515,1516],{"class":770},"push",[658,1518,775],{"class":785},[658,1520,1521],{"class":774},"user",[658,1523,567],{"class":778},[658,1525,1526],{"class":774},"name",[658,1528,999],{"class":785},[658,1530,1002],{"class":778},[658,1532,1533],{"class":660,"line":1136},[658,1534,1535],{"class":778},"  }\n",[658,1537,1538],{"class":660,"line":1142},[658,1539,1139],{"class":778},[658,1541,1542],{"class":660,"line":1147},[658,1543,1049],{"emptyLinePlaceholder":1048},[658,1545,1547,1549,1551,1554,1556,1558],{"class":660,"line":1546},12,[658,1548,1150],{"class":763},[658,1550,1153],{"class":778},[658,1552,1553],{"class":785}," reminded",[658,1555,789],{"class":778},[658,1557,1369],{"class":774},[658,1559,1162],{"class":778},[288,1561,1563],{"id":1562},"configuration-options","Configuration Options",[293,1565,1566,1567,1570],{},"Pass an options object instead of ",[297,1568,1569],{},"true"," for fine-grained control:",[648,1572,1575],{"className":746,"code":1573,"filename":1574,"language":749,"meta":654,"style":654},"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",[297,1576,1577,1589,1597,1609,1621,1633,1645,1656,1668,1680,1692,1702,1707],{"__ignoreMap":654},[658,1578,1579,1581,1583,1585,1587],{"class":660,"line":661},[658,1580,764],{"class":763},[658,1582,767],{"class":763},[658,1584,771],{"class":770},[658,1586,775],{"class":774},[658,1588,779],{"class":778},[658,1590,1591,1593,1595],{"class":660,"line":760},[658,1592,786],{"class":785},[658,1594,789],{"class":778},[658,1596,1284],{"class":778},[658,1598,1599,1602,1604,1607],{"class":660,"line":782},[658,1600,1601],{"class":785},"    memoryLimit",[658,1603,789],{"class":778},[658,1605,1606],{"class":1068}," 64",[658,1608,796],{"class":778},[658,1610,1611,1614,1616,1619],{"class":660,"line":799},[658,1612,1613],{"class":785},"    cpuTimeLimitMs",[658,1615,789],{"class":778},[658,1617,1618],{"class":1068}," 10_000",[658,1620,796],{"class":778},[658,1622,1623,1626,1628,1631],{"class":660,"line":859},[658,1624,1625],{"class":785},"    maxResultSize",[658,1627,789],{"class":778},[658,1629,1630],{"class":1068}," 102_400",[658,1632,796],{"class":778},[658,1634,1635,1638,1640,1643],{"class":660,"line":883},[658,1636,1637],{"class":785},"    maxRequestBodyBytes",[658,1639,789],{"class":778},[658,1641,1642],{"class":1068}," 1_048_576",[658,1644,796],{"class":778},[658,1646,1647,1650,1652,1654],{"class":660,"line":1109},[658,1648,1649],{"class":785},"    maxToolResponseSize",[658,1651,789],{"class":778},[658,1653,1642],{"class":1068},[658,1655,796],{"class":778},[658,1657,1658,1661,1663,1666],{"class":660,"line":1126},[658,1659,1660],{"class":785},"    wallTimeLimitMs",[658,1662,789],{"class":778},[658,1664,1665],{"class":1068}," 60_000",[658,1667,796],{"class":778},[658,1669,1670,1673,1675,1678],{"class":660,"line":1136},[658,1671,1672],{"class":785},"    maxToolCalls",[658,1674,789],{"class":778},[658,1676,1677],{"class":1068}," 200",[658,1679,796],{"class":778},[658,1681,1682,1685,1687,1690],{"class":660,"line":1142},[658,1683,1684],{"class":785},"    progressive",[658,1686,789],{"class":778},[658,1688,1689],{"class":792}," false",[658,1691,796],{"class":778},[658,1693,1694,1697,1699],{"class":660,"line":1147},[658,1695,1696],{"class":785},"    description",[658,1698,789],{"class":778},[658,1700,1701],{"class":778}," undefined,\n",[658,1703,1704],{"class":660,"line":1546},[658,1705,1706],{"class":778},"  },\n",[658,1708,1710,1712],{"class":660,"line":1709},13,[658,1711,802],{"class":778},[658,1713,805],{"class":774},[1715,1716,1717,1735,1746,1758,1780,1792,1810,1821,1838],"field-group",{},[1718,1719,1722,1728],"field",{"name":1720,"type":1721},"memoryLimit","number",[293,1723,1724,1725],{},"Default: ",[297,1726,1727],{},"64",[293,1729,1730,1731,1734],{},"V8 isolate memory limit in MB. Set once at first execution — call ",[297,1732,1733],{},"disposeCodeMode()"," to change.",[1718,1736,1738,1743],{"name":1737,"type":1721},"cpuTimeLimitMs",[293,1739,1724,1740],{},[297,1741,1742],{},"10000",[293,1744,1745],{},"CPU time limit per execution in milliseconds. The sandbox is killed after this duration.",[1718,1747,1749,1755],{"name":1748,"type":1721},"maxResultSize",[293,1750,1724,1751,1754],{},[297,1752,1753],{},"102400"," (100 KB)",[293,1756,1757],{},"Maximum result size in bytes before truncation. Large results are intelligently truncated — arrays by number of items, objects by number of keys.",[1718,1759,1761,1767],{"name":1760,"type":1721},"maxRequestBodyBytes",[293,1762,1724,1763,1766],{},[297,1764,1765],{},"1048576"," (1 MB)",[293,1768,1769,1770,1772,1773,1776,1777,1779],{},"Maximum bytes accepted in a single RPC request body from the sandbox. Returns HTTP 413 if exceeded. Prevents memory exhaustion from oversized payloads. Like ",[297,1771,1720],{},", this applies when the RPC server ",[385,1774,1775],{},"first"," starts; call ",[297,1778,1733],{}," before changing it.",[1718,1781,1783,1787],{"name":1782,"type":1721},"maxToolResponseSize",[293,1784,1724,1785,1766],{},[297,1786,1765],{},[293,1788,1789,1790,567],{},"Maximum bytes for individual tool RPC responses. Large results are truncated using the same strategy as ",[297,1791,1748],{},[1718,1793,1795,1801],{"name":1794,"type":1721},"wallTimeLimitMs",[293,1796,1724,1797,1800],{},[297,1798,1799],{},"60000"," (60 seconds)",[293,1802,1803,1804,1807,1808,567],{},"Per-execution deadline checked at the ",[385,1805,1806],{},"start of each"," sandbox→host RPC call (tool invocation or return value). After the deadline, the next RPC receives HTTP 408. This bounds host-side work (e.g. slow tools); pure CPU loops in the isolate are primarily limited by ",[297,1809,1737],{},[1718,1811,1813,1818],{"name":1812,"type":1721},"maxToolCalls",[293,1814,1724,1815],{},[297,1816,1817],{},"200",[293,1819,1820],{},"Maximum number of tool RPC calls per execution. Prevents runaway loops that repeatedly invoke expensive tools. Returns HTTP 429 when exceeded.",[1718,1822,1825,1830],{"name":1823,"type":1824},"progressive","boolean",[293,1826,1724,1827],{},[297,1828,1829],{},"false",[293,1831,1832,1833,1837],{},"Enable progressive disclosure mode. See ",[354,1834,1836],{"href":1835},"#progressive-mode","Progressive Mode"," below.",[1718,1839,1842,1845],{"name":1840,"type":1841},"description","string",[293,1843,1844],{},"Default: built-in template",[293,1846,1847,1848,1850,1851,1854,1855,1858],{},"Custom description for the ",[297,1849,297],{}," tool. Supports ",[297,1852,1853],{},"{{types}}"," and ",[297,1856,1857],{},"{{count}}"," placeholders.",[288,1860,1836],{"id":1861},"progressive-mode",[293,1863,1864,1865,1867],{},"When your server exposes many tools (50+), embedding all type definitions in the ",[297,1866,297],{}," tool description becomes expensive in tokens. Progressive mode solves this by splitting into two tools:",[902,1869,1870,1878],{},[312,1871,1872,1877],{},[385,1873,1874],{},[297,1875,1876],{},"search"," — discovers tools by keyword, returns their signatures",[312,1879,1880,1884],{},[385,1881,1882],{},[297,1883,297],{}," — executes code using discovered tools",[648,1886,1888],{"className":746,"code":1887,"filename":1574,"language":749,"meta":654,"style":654},"export default defineMcpHandler({\n  experimental_codeMode: {\n    progressive: true,\n  },\n})\n",[297,1889,1890,1902,1910,1920,1924],{"__ignoreMap":654},[658,1891,1892,1894,1896,1898,1900],{"class":660,"line":661},[658,1893,764],{"class":763},[658,1895,767],{"class":763},[658,1897,771],{"class":770},[658,1899,775],{"class":774},[658,1901,779],{"class":778},[658,1903,1904,1906,1908],{"class":660,"line":760},[658,1905,786],{"class":785},[658,1907,789],{"class":778},[658,1909,1284],{"class":778},[658,1911,1912,1914,1916,1918],{"class":660,"line":782},[658,1913,1684],{"class":785},[658,1915,789],{"class":778},[658,1917,793],{"class":792},[658,1919,796],{"class":778},[658,1921,1922],{"class":660,"line":799},[658,1923,1706],{"class":778},[658,1925,1926,1928],{"class":660,"line":859},[658,1927,802],{"class":778},[658,1929,805],{"class":774},[293,1931,1932],{},"The LLM workflow becomes:",[645,1934,1935,1967],{},[648,1936,1941],{"className":1937,"code":1938,"filename":1939,"language":1940,"meta":654,"style":654},"language-txt shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","LLM calls: search({ query: \"user\" })\n\n→ Found 2\u002F12 tools matching \"user\":\n  codemode.get_user: (input: { id: string }) => Promise\u003Cunknown>; \u002F\u002F Get user by ID\n  codemode.list_users: () => Promise\u003Cunknown>; \u002F\u002F List all users\n","Step 1 — Search","txt",[297,1942,1943,1948,1952,1957,1962],{"__ignoreMap":654},[658,1944,1945],{"class":660,"line":661},[658,1946,1947],{},"LLM calls: search({ query: \"user\" })\n",[658,1949,1950],{"class":660,"line":760},[658,1951,1049],{"emptyLinePlaceholder":1048},[658,1953,1954],{"class":660,"line":782},[658,1955,1956],{},"→ Found 2\u002F12 tools matching \"user\":\n",[658,1958,1959],{"class":660,"line":799},[658,1960,1961],{},"  codemode.get_user: (input: { id: string }) => Promise\u003Cunknown>; \u002F\u002F Get user by ID\n",[658,1963,1964],{"class":660,"line":859},[658,1965,1966],{},"  codemode.list_users: () => Promise\u003Cunknown>; \u002F\u002F List all users\n",[648,1968,1971],{"className":1937,"code":1969,"filename":1970,"language":1940,"meta":654,"style":654},"LLM calls: code({ code: \"...\" })\n\n→ Executes code using the discovered tools\n","Step 2 — Execute",[297,1972,1973,1978,1982],{"__ignoreMap":654},[658,1974,1975],{"class":660,"line":661},[658,1976,1977],{},"LLM calls: code({ code: \"...\" })\n",[658,1979,1980],{"class":660,"line":760},[658,1981,1049],{"emptyLinePlaceholder":1048},[658,1983,1984],{"class":660,"line":782},[658,1985,1986],{},"→ Executes code using the discovered tools\n",[434,1988,1989],{"color":717,"icon":718},"Progressive mode adds an extra tool call but significantly reduces the initial prompt size. Only use it when you have a large number of tools — for small toolsets, standard mode is more efficient.",[288,1991,1993],{"id":1992},"custom-description","Custom Description",[293,1995,1996,1997,1999],{},"Override the ",[297,1998,297],{}," tool description to customize LLM instructions:",[648,2001,2003],{"className":746,"code":2002,"filename":1574,"language":749,"meta":654,"style":654},"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",[297,2004,2005,2017,2025,2037,2041,2046,2050,2060,2064],{"__ignoreMap":654},[658,2006,2007,2009,2011,2013,2015],{"class":660,"line":661},[658,2008,764],{"class":763},[658,2010,767],{"class":763},[658,2012,771],{"class":770},[658,2014,775],{"class":774},[658,2016,779],{"class":778},[658,2018,2019,2021,2023],{"class":660,"line":760},[658,2020,786],{"class":785},[658,2022,789],{"class":778},[658,2024,1284],{"class":778},[658,2026,2027,2029,2031,2034],{"class":660,"line":782},[658,2028,1696],{"class":785},[658,2030,789],{"class":778},[658,2032,2033],{"class":778}," `",[658,2035,2036],{"class":667},"You have {{count}} tools available. Write JavaScript using the codemode object.\n",[658,2038,2039],{"class":660,"line":799},[658,2040,1049],{"emptyLinePlaceholder":1048},[658,2042,2043],{"class":660,"line":859},[658,2044,2045],{"class":667},"{{types}}\n",[658,2047,2048],{"class":660,"line":883},[658,2049,1049],{"emptyLinePlaceholder":1048},[658,2051,2052,2055,2058],{"class":660,"line":1109},[658,2053,2054],{"class":667},"Always combine related operations into a single code block.",[658,2056,2057],{"class":778},"`",[658,2059,796],{"class":778},[658,2061,2062],{"class":660,"line":1126},[658,2063,1706],{"class":778},[658,2065,2066,2068],{"class":660,"line":1136},[658,2067,802],{"class":778},[658,2069,805],{"class":774},[293,2071,2072,2073,2075,2076,2078],{},"The ",[297,2074,1853],{}," placeholder is replaced with the generated TypeScript definitions. The ",[297,2077,1857],{}," placeholder is replaced with the number of available tools.",[293,2080,2081,2082,2084,2085,2087],{},"In progressive mode, ",[297,2083,1853],{}," is not available since types are discovered via the ",[297,2086,1876],{}," tool.",[288,2089,2091],{"id":2090},"security","Security",[293,2093,2094,2095,2098],{},"Running LLM-generated code requires serious security measures. Code Mode implements ",[385,2096,2097],{},"defense in depth"," across 7 layers to ensure the sandbox cannot escape, access unauthorized resources, or exhaust host resources.",[454,2100,2102],{"id":2101},"sandbox-isolation","Sandbox Isolation",[293,2104,2105,2106,2111,2112,2114],{},"LLM-generated code runs in a separate ",[354,2107,2110],{"href":2108,"rel":2109},"https:\u002F\u002Fv8.dev\u002Fdocs\u002Fembed",[358],"V8 isolate"," via ",[297,2113,642],{},". This is the same isolation technology used by Cloudflare Workers and similar platforms. The sandbox has:",[309,2116,2117,2123,2145,2151],{},[312,2118,2119,2122],{},[385,2120,2121],{},"No filesystem access"," — cannot read, write, or list files",[312,2124,2125,2128,2129,933,2132,933,2135,933,2138,933,2141,2144],{},[385,2126,2127],{},"No Node.js APIs"," — no ",[297,2130,2131],{},"require()",[297,2133,2134],{},"import()",[297,2136,2137],{},"process",[297,2139,2140],{},"fs",[297,2142,2143],{},"child_process",", etc.",[312,2146,2147,2150],{},[385,2148,2149],{},"No environment variables"," — cannot read secrets or configuration",[312,2152,2153,2156],{},[385,2154,2155],{},"No host process access"," — cannot modify the parent process in any way",[454,2158,2160],{"id":2159},"network-restrictions","Network Restrictions",[293,2162,2163],{},"The sandbox can only communicate with the internal RPC server. All other network access is blocked:",[309,2165,2166,2172,2185,2191],{},[312,2167,2168,2171],{},[385,2169,2170],{},"Port-locked"," — Only the randomly-assigned RPC port is accessible. Other localhost services (databases, admin panels, other apps) are blocked.",[312,2173,2174,2177,2178,1854,2181,2184],{},[385,2175,2176],{},"Host-locked"," — Only ",[297,2179,2180],{},"127.0.0.1",[297,2182,2183],{},"localhost"," are allowed. External hosts are rejected.",[312,2186,2187,2190],{},[385,2188,2189],{},"No DNS"," — DNS resolution is disabled entirely.",[312,2192,2193,2196,2197,2200],{},[385,2194,2195],{},"No redirects"," — HTTP redirects are rejected (",[297,2198,2199],{},"redirect: 'error'","), preventing SSRF via open redirects.",[454,2202,2204],{"id":2203},"rpc-authentication","RPC Authentication",[293,2206,2207],{},"Communication between the sandbox and the host uses a per-session cryptographic token:",[309,2209,2210,2220,2230],{},[312,2211,2212,2215,2216,2219],{},[385,2213,2214],{},"256-bit token"," — Generated with ",[297,2217,2218],{},"crypto.randomBytes(32)"," at RPC server startup.",[312,2221,2222,2225,2226,2229],{},[385,2223,2224],{},"Header-based auth"," — Every request must include the token via ",[297,2227,2228],{},"x-rpc-token"," header.",[312,2231,2232,2235],{},[385,2233,2234],{},"403 on mismatch"," — Requests without a valid token are rejected immediately.",[293,2237,2238],{},"This prevents other local processes from calling your MCP tools through the RPC port.",[454,2240,2242],{"id":2241},"resource-limits","Resource Limits",[360,2244,2245,2261],{},[363,2246,2247],{},[366,2248,2249,2252,2255,2258],{},[369,2250,2251],{},"Resource",[369,2253,2254],{},"Default",[369,2256,2257],{},"Configurable",[369,2259,2260],{},"Protection",[377,2262,2263,2280,2297,2314,2331,2348,2364,2380],{},[366,2264,2265,2270,2273,2277],{},[382,2266,2267],{},[385,2268,2269],{},"CPU time",[382,2271,2272],{},"10 seconds",[382,2274,2275],{},[297,2276,1737],{},[382,2278,2279],{},"Sandbox is killed on timeout — prevents infinite loops",[366,2281,2282,2287,2290,2294],{},[382,2283,2284],{},[385,2285,2286],{},"Wall-clock deadline",[382,2288,2289],{},"60 seconds",[382,2291,2292],{},[297,2293,1794],{},[382,2295,2296],{},"Enforced on each RPC from the sandbox — stops further tool\u002Freturn RPCs after the deadline",[366,2298,2299,2304,2307,2311],{},[382,2300,2301],{},[385,2302,2303],{},"Memory",[382,2305,2306],{},"64 MB",[382,2308,2309],{},[297,2310,1720],{},[382,2312,2313],{},"V8 isolate hard limit — prevents OOM crashes",[366,2315,2316,2321,2324,2328],{},[382,2317,2318],{},[385,2319,2320],{},"Result size",[382,2322,2323],{},"100 KB",[382,2325,2326],{},[297,2327,1748],{},[382,2329,2330],{},"Intelligent truncation (arrays by items, objects by keys)",[366,2332,2333,2338,2341,2345],{},[382,2334,2335],{},[385,2336,2337],{},"Tool response size",[382,2339,2340],{},"1 MB",[382,2342,2343],{},[297,2344,1782],{},[382,2346,2347],{},"Per-call truncation before response delivery",[366,2349,2350,2355,2357,2361],{},[382,2351,2352],{},[385,2353,2354],{},"Request body size",[382,2356,2340],{},[382,2358,2359],{},[297,2360,1760],{},[382,2362,2363],{},"HTTP 413 early rejection — prevents memory exhaustion",[366,2365,2366,2371,2373,2377],{},[382,2367,2368],{},[385,2369,2370],{},"Tool calls per execution",[382,2372,1817],{},[382,2374,2375],{},[297,2376,1812],{},[382,2378,2379],{},"HTTP 429 rate limit — prevents runaway loops",[366,2381,2382,2387,2389,2392],{},[382,2383,2384],{},[385,2385,2386],{},"Log entries",[382,2388,1817],{},[382,2390,2391],{},"No",[382,2393,2394,2395,2398],{},"Console output capped — prevents ",[297,2396,2397],{},"console.log"," flooding",[454,2400,2402],{"id":2401},"input-validation","Input Validation",[293,2404,2405],{},"Tool names are interpolated into the sandbox code template. To prevent code injection:",[309,2407,2408,2418,2430],{},[312,2409,2410,2413,2414,2417],{},[385,2411,2412],{},"Strict identifier regex"," — Every tool name is validated against ",[297,2415,2416],{},"\u002F^[\\w$]+$\u002F"," before being injected into the sandbox template.",[312,2419,2420,2423,2424,2426,2427,2429],{},[385,2421,2422],{},"Sanitization"," — Names are sanitized upstream (",[297,2425,932],{}," → ",[297,2428,974],{},"), but a second validation layer at the template level ensures defense in depth.",[312,2431,2432,2435],{},[385,2433,2434],{},"Rejection"," — If a name fails validation, the execution throws immediately — no partial injection.",[454,2437,2439],{"id":2438},"error-sanitization","Error Sanitization",[293,2441,2442,2443,2446],{},"Infrastructure errors (file paths, stack traces) are sanitized before being returned to the sandbox or the MCP client. Full error details are logged server-side with the ",[297,2444,2445],{},"[nuxt-mcp-toolkit]"," prefix for debugging.",[454,2448,2450],{"id":2449},"summary","Summary",[434,2452,2453,2454,2457],{"color":717,"icon":64},"The sandbox can ",[385,2455,2456],{},"only"," communicate with your registered MCP tools via the authenticated RPC bridge. It cannot access the filesystem, network, environment, or any other host resources.",[288,2459,2461],{"id":2460},"usage-with-other-features","Usage with Other Features",[293,2463,2464],{},"Code Mode is fully compatible with other module features. Your tools remain unchanged — only the way they are exposed to the LLM changes.",[645,2466,2467,2603,2764],{},[648,2468,2471],{"className":746,"code":2469,"filename":2470,"language":749,"meta":654,"style":654},"\u002F\u002F server\u002Fmcp\u002Findex.ts\nexport default defineMcpHandler({\n  experimental_codeMode: true,\n  middleware: async (event) => {\n    const user = await getUser(event).catch(() => null)\n    if (user) event.context.user = user\n    \u002F\u002F Soft auth — see \u002Fadvanced\u002Fmiddleware. Use `enabled` guards to\n    \u002F\u002F hide tools from anonymous callers instead of throwing 401 here.\n  },\n})\n","With Middleware",[297,2472,2473,2477,2489,2499,2520,2556,2583,2588,2593,2597],{"__ignoreMap":654},[658,2474,2475],{"class":660,"line":661},[658,2476,757],{"class":756},[658,2478,2479,2481,2483,2485,2487],{"class":660,"line":760},[658,2480,764],{"class":763},[658,2482,767],{"class":763},[658,2484,771],{"class":770},[658,2486,775],{"class":774},[658,2488,779],{"class":778},[658,2490,2491,2493,2495,2497],{"class":660,"line":782},[658,2492,786],{"class":785},[658,2494,789],{"class":778},[658,2496,793],{"class":792},[658,2498,796],{"class":778},[658,2500,2501,2504,2506,2509,2511,2514,2516,2518],{"class":660,"line":799},[658,2502,2503],{"class":770},"  middleware",[658,2505,789],{"class":778},[658,2507,2508],{"class":956}," async",[658,2510,1387],{"class":778},[658,2512,2513],{"class":1457},"event",[658,2515,999],{"class":778},[658,2517,1461],{"class":956},[658,2519,1284],{"class":778},[658,2521,2522,2525,2527,2529,2531,2534,2536,2538,2540,2542,2545,2547,2549,2551,2554],{"class":660,"line":859},[658,2523,2524],{"class":956},"    const",[658,2526,1032],{"class":774},[658,2528,1194],{"class":778},[658,2530,966],{"class":763},[658,2532,2533],{"class":770}," getUser",[658,2535,775],{"class":785},[658,2537,2513],{"class":774},[658,2539,999],{"class":785},[658,2541,567],{"class":778},[658,2543,2544],{"class":770},"catch",[658,2546,775],{"class":785},[658,2548,1220],{"class":778},[658,2550,1461],{"class":956},[658,2552,2553],{"class":778}," null",[658,2555,805],{"class":785},[658,2557,2558,2561,2563,2565,2567,2569,2571,2574,2576,2578,2580],{"class":660,"line":883},[658,2559,2560],{"class":763},"    if",[658,2562,1387],{"class":785},[658,2564,1521],{"class":774},[658,2566,1072],{"class":785},[658,2568,2513],{"class":774},[658,2570,567],{"class":778},[658,2572,2573],{"class":774},"context",[658,2575,567],{"class":778},[658,2577,1521],{"class":774},[658,2579,1194],{"class":778},[658,2581,2582],{"class":774}," user\n",[658,2584,2585],{"class":660,"line":1109},[658,2586,2587],{"class":756},"    \u002F\u002F Soft auth — see \u002Fadvanced\u002Fmiddleware. Use `enabled` guards to\n",[658,2589,2590],{"class":660,"line":1126},[658,2591,2592],{"class":756},"    \u002F\u002F hide tools from anonymous callers instead of throwing 401 here.\n",[658,2594,2595],{"class":660,"line":1136},[658,2596,1706],{"class":778},[658,2598,2599,2601],{"class":660,"line":1142},[658,2600,802],{"class":778},[658,2602,805],{"class":774},[648,2604,2607],{"className":746,"code":2605,"filename":2606,"language":749,"meta":654,"style":654},"\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 Only visible in code mode when user is admin\n  },\n})\n","With Dynamic Definitions",[297,2608,2609,2614,2627,2642,2658,2697,2706,2724,2728,2749,2754,2758],{"__ignoreMap":654},[658,2610,2611],{"class":660,"line":661},[658,2612,2613],{"class":756},"\u002F\u002F server\u002Fmcp\u002Ftools\u002Fadmin-tool.ts\n",[658,2615,2616,2618,2620,2623,2625],{"class":660,"line":760},[658,2617,764],{"class":763},[658,2619,767],{"class":763},[658,2621,2622],{"class":770}," defineMcpTool",[658,2624,775],{"class":774},[658,2626,779],{"class":778},[658,2628,2629,2631,2633,2635,2638,2640],{"class":660,"line":782},[658,2630,833],{"class":785},[658,2632,789],{"class":778},[658,2634,838],{"class":778},[658,2636,2637],{"class":667},"admin-delete",[658,2639,844],{"class":778},[658,2641,796],{"class":778},[658,2643,2644,2647,2649,2651,2654,2656],{"class":660,"line":799},[658,2645,2646],{"class":785},"  description",[658,2648,789],{"class":778},[658,2650,838],{"class":778},[658,2652,2653],{"class":667},"Delete a resource (admin only)",[658,2655,844],{"class":778},[658,2657,796],{"class":778},[658,2659,2660,2663,2665,2668,2670,2672,2674,2676,2678,2680,2683,2686,2688,2690,2693,2695],{"class":660,"line":859},[658,2661,2662],{"class":770},"  enabled",[658,2664,789],{"class":778},[658,2666,2667],{"class":1457}," event",[658,2669,1461],{"class":956},[658,2671,2667],{"class":774},[658,2673,567],{"class":778},[658,2675,2573],{"class":774},[658,2677,567],{"class":778},[658,2679,1521],{"class":774},[658,2681,2682],{"class":778},"?.",[658,2684,2685],{"class":774},"role ",[658,2687,1065],{"class":778},[658,2689,838],{"class":778},[658,2691,2692],{"class":667},"admin",[658,2694,844],{"class":778},[658,2696,796],{"class":778},[658,2698,2699,2702,2704],{"class":660,"line":883},[658,2700,2701],{"class":785},"  inputSchema",[658,2703,789],{"class":778},[658,2705,1284],{"class":778},[658,2707,2708,2711,2713,2716,2718,2720,2722],{"class":660,"line":1109},[658,2709,2710],{"class":785},"    id",[658,2712,789],{"class":778},[658,2714,2715],{"class":774}," z",[658,2717,567],{"class":778},[658,2719,1841],{"class":770},[658,2721,1220],{"class":774},[658,2723,796],{"class":778},[658,2725,2726],{"class":660,"line":1126},[658,2727,1706],{"class":778},[658,2729,2730,2733,2735,2737,2740,2742,2745,2747],{"class":660,"line":1136},[658,2731,2732],{"class":770},"  handler",[658,2734,789],{"class":778},[658,2736,2508],{"class":956},[658,2738,2739],{"class":778}," ({",[658,2741,982],{"class":1457},[658,2743,2744],{"class":778}," })",[658,2746,1461],{"class":956},[658,2748,1284],{"class":778},[658,2750,2751],{"class":660,"line":1142},[658,2752,2753],{"class":756},"    \u002F\u002F Only visible in code mode when user is admin\n",[658,2755,2756],{"class":660,"line":1147},[658,2757,1706],{"class":778},[658,2759,2760,2762],{"class":660,"line":1546},[658,2761,802],{"class":778},[658,2763,805],{"class":774},[648,2765,2768],{"className":746,"code":2766,"filename":2767,"language":749,"meta":654,"style":654},"\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) return\n    const user = await getUserByApiKey(apiKey).catch(() => null)\n    if (user) event.context.user = user\n  },\n})\n","With Progressive + Auth",[297,2769,2770,2774,2786,2794,2804,2815,2819,2837,2864,2881,2914,2938,2942],{"__ignoreMap":654},[658,2771,2772],{"class":660,"line":661},[658,2773,757],{"class":756},[658,2775,2776,2778,2780,2782,2784],{"class":660,"line":760},[658,2777,764],{"class":763},[658,2779,767],{"class":763},[658,2781,771],{"class":770},[658,2783,775],{"class":774},[658,2785,779],{"class":778},[658,2787,2788,2790,2792],{"class":660,"line":782},[658,2789,786],{"class":785},[658,2791,789],{"class":778},[658,2793,1284],{"class":778},[658,2795,2796,2798,2800,2802],{"class":660,"line":799},[658,2797,1684],{"class":785},[658,2799,789],{"class":778},[658,2801,793],{"class":792},[658,2803,796],{"class":778},[658,2805,2806,2808,2810,2813],{"class":660,"line":859},[658,2807,1613],{"class":785},[658,2809,789],{"class":778},[658,2811,2812],{"class":1068}," 15_000",[658,2814,796],{"class":778},[658,2816,2817],{"class":660,"line":883},[658,2818,1706],{"class":778},[658,2820,2821,2823,2825,2827,2829,2831,2833,2835],{"class":660,"line":1109},[658,2822,2503],{"class":770},[658,2824,789],{"class":778},[658,2826,2508],{"class":956},[658,2828,1387],{"class":778},[658,2830,2513],{"class":1457},[658,2832,999],{"class":778},[658,2834,1461],{"class":956},[658,2836,1284],{"class":778},[658,2838,2839,2841,2844,2846,2849,2851,2853,2855,2857,2860,2862],{"class":660,"line":1126},[658,2840,2524],{"class":956},[658,2842,2843],{"class":774}," apiKey",[658,2845,1194],{"class":778},[658,2847,2848],{"class":770}," getHeader",[658,2850,775],{"class":785},[658,2852,2513],{"class":774},[658,2854,870],{"class":778},[658,2856,838],{"class":778},[658,2858,2859],{"class":667},"x-api-key",[658,2861,844],{"class":778},[658,2863,805],{"class":785},[658,2865,2866,2868,2870,2873,2876,2878],{"class":660,"line":1136},[658,2867,2560],{"class":763},[658,2869,1387],{"class":785},[658,2871,2872],{"class":778},"!",[658,2874,2875],{"class":774},"apiKey",[658,2877,1072],{"class":785},[658,2879,2880],{"class":763},"return\n",[658,2882,2883,2885,2887,2889,2891,2894,2896,2898,2900,2902,2904,2906,2908,2910,2912],{"class":660,"line":1142},[658,2884,2524],{"class":956},[658,2886,1032],{"class":774},[658,2888,1194],{"class":778},[658,2890,966],{"class":763},[658,2892,2893],{"class":770}," getUserByApiKey",[658,2895,775],{"class":785},[658,2897,2875],{"class":774},[658,2899,999],{"class":785},[658,2901,567],{"class":778},[658,2903,2544],{"class":770},[658,2905,775],{"class":785},[658,2907,1220],{"class":778},[658,2909,1461],{"class":956},[658,2911,2553],{"class":778},[658,2913,805],{"class":785},[658,2915,2916,2918,2920,2922,2924,2926,2928,2930,2932,2934,2936],{"class":660,"line":1147},[658,2917,2560],{"class":763},[658,2919,1387],{"class":785},[658,2921,1521],{"class":774},[658,2923,1072],{"class":785},[658,2925,2513],{"class":774},[658,2927,567],{"class":778},[658,2929,2573],{"class":774},[658,2931,567],{"class":778},[658,2933,1521],{"class":774},[658,2935,1194],{"class":778},[658,2937,2582],{"class":774},[658,2939,2940],{"class":660,"line":1546},[658,2941,1706],{"class":778},[658,2943,2944,2946],{"class":660,"line":1709},[658,2945,802],{"class":778},[658,2947,805],{"class":774},[293,2949,2950,2952,2953,2956,2957,2963,2964,2966],{},[354,2951,215],{"href":216}," runs before tool execution — your tools access ",[297,2954,2955],{},"event.context"," as usual. Tools with ",[354,2958,2959,2962],{"href":240},[297,2960,2961],{},"enabled"," guards"," are excluded from the generated type definitions and the ",[297,2965,918],{}," object.",[288,2968,2970],{"id":2969},"tool-name-sanitization","Tool Name Sanitization",[293,2972,2973,2974,2976],{},"MCP tool names (kebab-case) are automatically converted to valid JavaScript identifiers for the ",[297,2975,918],{}," object:",[360,2978,2979,2989],{},[363,2980,2981],{},[366,2982,2983,2986],{},[369,2984,2985],{},"MCP Name",[369,2987,2988],{},"JavaScript Name",[377,2990,2991,3001,3011,3023],{},[366,2992,2993,2997],{},[382,2994,2995],{},[297,2996,932],{},[382,2998,2999],{},[297,3000,974],{},[366,3002,3003,3007],{},[382,3004,3005],{},[297,3006,936],{},[382,3008,3009],{},[297,3010,1020],{},[366,3012,3013,3018],{},[382,3014,3015],{},[297,3016,3017],{},"123-tool",[382,3019,3020],{},[297,3021,3022],{},"_123_tool",[366,3024,3025,3030],{},[382,3026,3027],{},[297,3028,3029],{},"delete",[382,3031,3032],{},[297,3033,3034],{},"delete_",[293,3036,3037,3038,3041,3042,567],{},"Reserved JavaScript words are suffixed with ",[297,3039,3040],{},"_",". Names starting with a digit are prefixed with ",[297,3043,3040],{},[288,3045,3047],{"id":3046},"cleanup","Cleanup",[293,3049,3050,3051,3053],{},"Call ",[297,3052,1733],{}," during shutdown to release resources (V8 runtime, RPC server):",[648,3055,3057],{"className":746,"code":3056,"language":749,"meta":654,"style":654},"import { disposeCodeMode } from '#imports'\n\n\u002F\u002F In a shutdown hook or cleanup function\ndisposeCodeMode()\n",[297,3058,3059,3082,3086,3091],{"__ignoreMap":654},[658,3060,3061,3064,3066,3069,3071,3074,3076,3079],{"class":660,"line":661},[658,3062,3063],{"class":763},"import",[658,3065,1153],{"class":778},[658,3067,3068],{"class":774}," disposeCodeMode",[658,3070,996],{"class":778},[658,3072,3073],{"class":763}," from",[658,3075,838],{"class":778},[658,3077,3078],{"class":667},"#imports",[658,3080,3081],{"class":778},"'\n",[658,3083,3084],{"class":660,"line":760},[658,3085,1049],{"emptyLinePlaceholder":1048},[658,3087,3088],{"class":660,"line":782},[658,3089,3090],{"class":756},"\u002F\u002F In a shutdown hook or cleanup function\n",[658,3092,3093,3096],{"class":660,"line":799},[658,3094,3095],{"class":770},"disposeCodeMode",[658,3097,3098],{"class":774},"()\n",[288,3100,3102],{"id":3101},"next-steps","Next Steps",[309,3104,3105,3110,3115,3120],{},[312,3106,3107,3109],{},[354,3108,123],{"href":128}," - Create custom MCP endpoints",[312,3111,3112,3114],{},[354,3113,215],{"href":216}," - Add authentication",[312,3116,3117,3119],{},[354,3118,239],{"href":240}," - Conditionally register tools",[312,3121,3122,3125],{},[354,3123,3124],{"href":230},"Evals"," - Benchmark code mode vs standard MCP",[3127,3128,3129],"style",{},"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 .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 .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":654,"searchDepth":760,"depth":760,"links":3131},[3132,3133,3137,3141,3144,3145,3146,3147,3156,3157,3158,3159],{"id":290,"depth":760,"text":291},{"id":444,"depth":760,"text":445,"children":3134},[3135,3136],{"id":456,"depth":782,"text":457},{"id":583,"depth":782,"text":584},{"id":629,"depth":760,"text":630,"children":3138},[3139,3140],{"id":633,"depth":782,"text":634},{"id":733,"depth":782,"text":734},{"id":896,"depth":760,"text":897,"children":3142},[3143],{"id":925,"depth":782,"text":926},{"id":1562,"depth":760,"text":1563},{"id":1861,"depth":760,"text":1836},{"id":1992,"depth":760,"text":1993},{"id":2090,"depth":760,"text":2091,"children":3148},[3149,3150,3151,3152,3153,3154,3155],{"id":2101,"depth":782,"text":2102},{"id":2159,"depth":782,"text":2160},{"id":2203,"depth":782,"text":2204},{"id":2241,"depth":782,"text":2242},{"id":2401,"depth":782,"text":2402},{"id":2438,"depth":782,"text":2439},{"id":2449,"depth":782,"text":2450},{"id":2460,"depth":760,"text":2461},{"id":2969,"depth":760,"text":2970},{"id":3046,"depth":760,"text":3047},{"id":3101,"depth":760,"text":3102},"Let LLMs orchestrate multiple tool calls in a single JavaScript execution.","md",null,{},{"icon":247},{"title":244,"description":3166},"Reduce token usage and latency by letting LLMs write JavaScript that orchestrates MCP tools in a secure V8 sandbox.","cle_tP6RXOe0tZgdMHgH7Mk_nDmxAyZ-l6KZdsQau8s",[3169,3171],{"title":239,"path":240,"stem":241,"description":3170,"icon":242,"children":-1},"Conditionally register tools, resources, and prompts based on authentication, roles, or request context.",{"title":249,"path":250,"stem":251,"description":3172,"icon":252,"children":-1},"Ask the user for structured input or send them to a URL with useMcpElicitation().",1779545570234]