[{"data":1,"prerenderedAt":1590},["ShallowReactive",2],{"navigation":3,"-utils-mcp":189,"-utils-mcp-surround":1585},[4,91,138,166,173],{"title":5,"path":6,"stem":7,"children":8,"icon":90},"Guide","/guide","1.guide/0.index",[9,12,53,69],{"title":10,"path":6,"stem":7,"icon":11},"Getting Started","pixel:play",{"title":5,"icon":13,"path":14,"stem":15,"children":16,"page":52},"ph:book-open-duotone","/guide/basics","1.guide/1.basics",[17,22,27,32,37,42,47],{"title":18,"path":19,"stem":20,"icon":21},"Request Lifecycle","/guide/basics/lifecycle","1.guide/1.basics/1.lifecycle","icon-park-outline:handle-round",{"title":23,"path":24,"stem":25,"icon":26},"Routing","/guide/basics/routing","1.guide/1.basics/2.routing","solar:routing-bold",{"title":28,"path":29,"stem":30,"icon":31},"Middleware","/guide/basics/middleware","1.guide/1.basics/3.middleware","mdi:middleware-outline",{"title":33,"path":34,"stem":35,"icon":36},"Event Handlers","/guide/basics/handler","1.guide/1.basics/4.handler","mdi:function",{"title":38,"path":39,"stem":40,"icon":41},"Sending Response","/guide/basics/response","1.guide/1.basics/5.response","tabler:json",{"title":43,"path":44,"stem":45,"icon":46},"Error Handling","/guide/basics/error","1.guide/1.basics/6.error","tabler:error-404",{"title":48,"path":49,"stem":50,"icon":51},"Nested Apps","/guide/basics/nested-apps","1.guide/1.basics/7.nested-apps","material-symbols-light:layers-outline",false,{"title":54,"icon":55,"path":56,"stem":57,"children":58,"page":52},"API","material-symbols-light:api-rounded","/guide/api","1.guide/900.api",[59,64],{"title":60,"path":61,"stem":62,"icon":63},"H3","/guide/api/h3","1.guide/900.api/1.h3","material-symbols:bolt-rounded",{"title":65,"path":66,"stem":67,"icon":68},"H3Event","/guide/api/h3event","1.guide/900.api/2.h3event","material-symbols:data-object-rounded",{"title":70,"icon":71,"path":72,"stem":73,"children":74,"page":52},"Advanced","hugeicons:more-01","/guide/advanced","1.guide/901.advanced",[75,80,85],{"title":76,"path":77,"stem":78,"icon":79},"Plugins","/guide/advanced/plugins","1.guide/901.advanced/1.plugins","clarity:plugin-line",{"title":81,"path":82,"stem":83,"icon":84},"WebSockets","/guide/advanced/websocket","1.guide/901.advanced/2.websocket","hugeicons:live-streaming-02",{"title":86,"path":87,"stem":88,"icon":89},"Nightly Builds","/guide/advanced/nightly","1.guide/901.advanced/9.nightly","game-icons:barn-owl","i-ph:book-open-duotone",{"title":92,"path":93,"stem":94,"children":95,"icon":97},"Utils","/utils","2.utils/0.index",[96,98,103,108,113,118,123,128,133],{"title":92,"path":93,"stem":94,"icon":97},"ph:function-bold",{"title":99,"path":100,"stem":101,"icon":102},"Request","/utils/request","2.utils/1.request","material-symbols-light:input",{"title":104,"path":105,"stem":106,"icon":107},"Response","/utils/response","2.utils/2.response","material-symbols-light:output",{"title":109,"path":110,"stem":111,"icon":112},"Cookie","/utils/cookie","2.utils/3.cookie","material-symbols:cookie-outline",{"title":114,"path":115,"stem":116,"icon":117},"Security","/utils/security","2.utils/4.security","wpf:key-security",{"title":119,"path":120,"stem":121,"icon":122},"Proxy","/utils/proxy","2.utils/5.proxy","arcticons:super-proxy",{"title":124,"path":125,"stem":126,"icon":127},"MCP","/utils/mcp","2.utils/6.mcp","material-symbols:swap-calls",{"title":129,"path":130,"stem":131,"icon":132},"More utils","/utils/more","2.utils/9.more","mingcute:plus-line",{"title":134,"path":135,"stem":136,"icon":137},"Community","/utils/community","2.utils/99.community","lets-icons:external",{"title":139,"path":140,"stem":141,"children":142,"icon":144},"Examples","/examples","4.examples/0.index",[143,145,150,154,158,162],{"title":139,"path":140,"stem":141,"icon":144},"ph:code",{"title":146,"path":147,"stem":148,"icon":149},"Cookies","/examples/handle-cookie","4.examples/handle-cookie","ph:arrow-right",{"title":151,"path":152,"stem":153,"icon":149},"Sessions","/examples/handle-session","4.examples/handle-session",{"title":155,"path":156,"stem":157,"icon":149},"Static Assets","/examples/serve-static-assets","4.examples/serve-static-assets",{"title":159,"path":160,"stem":161,"icon":149},"Stream Response","/examples/stream-response","4.examples/stream-response",{"title":163,"path":164,"stem":165,"icon":149},"Validate Data","/examples/validate-data","4.examples/validate-data",{"title":167,"path":168,"stem":169,"children":170,"icon":172},"Migration","/migration","5.migration/0.index",[171],{"title":167,"path":168,"stem":169,"icon":172},"icons8:up-round",{"title":174,"path":175,"stem":176,"children":177},"Blog","/blog","99.blog",[178,181,185],{"title":174,"path":175,"stem":179,"icon":180},"99.blog/index","i-lucide-file-text",{"title":182,"path":183,"stem":184,"icon":180},"H3 1.8 - Towards the Edge of the Web","/blog/v1.8","99.blog/1.v1.8",{"title":186,"path":187,"stem":188,"icon":180},"H3 v2 beta","/blog/v2-beta","99.blog/2.v2-beta",{"id":190,"title":124,"body":191,"description":1578,"extension":1579,"meta":1580,"navigation":1582,"path":125,"seo":1583,"stem":126,"__hash__":1584},"content/2.utils/6.mcp.md",{"type":192,"value":193,"toc":1567,"icon":127},"minimark",[194,202,206,239,245,341,345,427,433,436,440,584,588,680,686,689,693,797,803,806,810,943,947,1027,1033,1036,1042,1049,1055,1058,1062,1222,1228,1231,1234,1238,1382,1386,1554,1560,1563],[195,196,198],"h3",{"id":197},"definemcphandleroptions",[199,200,201],"code",{},"defineMcpHandler(options)",[203,204,205],"p",{},"Define an H3 event handler that implements the Model Context Protocol (MCP) over HTTP using JSON-RPC 2.0 as the wire format.",[203,207,208,209,212,213,212,216,212,219,212,222,212,225,212,228,212,231,234,235,238],{},"Supports MCP methods: ",[199,210,211],{},"initialize",", ",[199,214,215],{},"ping",[199,217,218],{},"tools/list",[199,220,221],{},"tools/call",[199,223,224],{},"resources/list",[199,226,227],{},"resources/read",[199,229,230],{},"prompts/list",[199,232,233],{},"prompts/get",", and ",[199,236,237],{},"notifications/initialized",".",[203,240,241],{},[242,243,244],"strong",{},"Example:",[246,247,252],"pre",{"className":248,"code":249,"language":250,"meta":251,"style":251},"language-ts shiki shiki-themes github-light github-dark github-dark","app.all(\n  \"/mcp\",\n  defineMcpHandler({\n    name: \"my-server\",\n    version: \"1.0.0\",\n    tools: [echoTool],\n    resources: [readmeResource],\n    prompts: [greetPrompt],\n  }),\n);\n","ts","",[199,253,254,270,280,289,300,311,317,323,329,335],{"__ignoreMap":251},[255,256,259,263,267],"span",{"class":257,"line":258},"line",1,[255,260,262],{"class":261},"slsVL","app.",[255,264,266],{"class":265},"shcOC","all",[255,268,269],{"class":261},"(\n",[255,271,273,277],{"class":257,"line":272},2,[255,274,276],{"class":275},"sfrk1","  \"/mcp\"",[255,278,279],{"class":261},",\n",[255,281,283,286],{"class":257,"line":282},3,[255,284,285],{"class":265},"  defineMcpHandler",[255,287,288],{"class":261},"({\n",[255,290,292,295,298],{"class":257,"line":291},4,[255,293,294],{"class":261},"    name: ",[255,296,297],{"class":275},"\"my-server\"",[255,299,279],{"class":261},[255,301,303,306,309],{"class":257,"line":302},5,[255,304,305],{"class":261},"    version: ",[255,307,308],{"class":275},"\"1.0.0\"",[255,310,279],{"class":261},[255,312,314],{"class":257,"line":313},6,[255,315,316],{"class":261},"    tools: [echoTool],\n",[255,318,320],{"class":257,"line":319},7,[255,321,322],{"class":261},"    resources: [readmeResource],\n",[255,324,326],{"class":257,"line":325},8,[255,327,328],{"class":261},"    prompts: [greetPrompt],\n",[255,330,332],{"class":257,"line":331},9,[255,333,334],{"class":261},"  }),\n",[255,336,338],{"class":257,"line":337},10,[255,339,340],{"class":261},");\n",[203,342,343],{},[242,344,244],{},[246,346,348],{"className":248,"code":347,"language":250,"meta":251,"style":251},"// Dynamic options based on request context\napp.all(\n  \"/mcp\",\n  defineMcpHandler((event) => ({\n    name: \"my-server\",\n    version: \"1.0.0\",\n    tools: getToolsForUser(event),\n  })),\n);\n",[199,349,350,356,364,370,391,399,407,418,423],{"__ignoreMap":251},[255,351,352],{"class":257,"line":258},[255,353,355],{"class":354},"sCsY4","// Dynamic options based on request context\n",[255,357,358,360,362],{"class":257,"line":272},[255,359,262],{"class":261},[255,361,266],{"class":265},[255,363,269],{"class":261},[255,365,366,368],{"class":257,"line":282},[255,367,276],{"class":275},[255,369,279],{"class":261},[255,371,372,374,377,381,384,388],{"class":257,"line":291},[255,373,285],{"class":265},[255,375,376],{"class":261},"((",[255,378,380],{"class":379},"sQHwn","event",[255,382,383],{"class":261},") ",[255,385,387],{"class":386},"so5gQ","=>",[255,389,390],{"class":261}," ({\n",[255,392,393,395,397],{"class":257,"line":302},[255,394,294],{"class":261},[255,396,297],{"class":275},[255,398,279],{"class":261},[255,400,401,403,405],{"class":257,"line":313},[255,402,305],{"class":261},[255,404,308],{"class":275},[255,406,279],{"class":261},[255,408,409,412,415],{"class":257,"line":319},[255,410,411],{"class":261},"    tools: ",[255,413,414],{"class":265},"getToolsForUser",[255,416,417],{"class":261},"(event),\n",[255,419,420],{"class":257,"line":325},[255,421,422],{"class":261},"  })),\n",[255,424,425],{"class":257,"line":331},[255,426,340],{"class":261},[195,428,430],{"id":429},"definemcppromptdefinition",[199,431,432],{},"defineMcpPrompt(definition)",[203,434,435],{},"Define an MCP prompt with optional arguments and a handler that returns messages.",[203,437,438],{},[242,439,244],{},[246,441,443],{"className":248,"code":442,"language":250,"meta":251,"style":251},"// Prompt with arguments\nconst greetPrompt = defineMcpPrompt({\n  name: \"greet\",\n  description: \"Generate a greeting\",\n  args: [{ name: \"name\", required: true }],\n  handler: async (args, event) => ({\n    messages: [\n      { role: \"user\", content: { type: \"text\", text: `Hello ${args.name}!` } },\n    ],\n  }),\n});\n",[199,444,445,450,467,477,487,504,531,536,569,574,578],{"__ignoreMap":251},[255,446,447],{"class":257,"line":258},[255,448,449],{"class":354},"// Prompt with arguments\n",[255,451,452,455,459,462,465],{"class":257,"line":272},[255,453,454],{"class":386},"const",[255,456,458],{"class":457},"suiK_"," greetPrompt",[255,460,461],{"class":386}," =",[255,463,464],{"class":265}," defineMcpPrompt",[255,466,288],{"class":261},[255,468,469,472,475],{"class":257,"line":282},[255,470,471],{"class":261},"  name: ",[255,473,474],{"class":275},"\"greet\"",[255,476,279],{"class":261},[255,478,479,482,485],{"class":257,"line":291},[255,480,481],{"class":261},"  description: ",[255,483,484],{"class":275},"\"Generate a greeting\"",[255,486,279],{"class":261},[255,488,489,492,495,498,501],{"class":257,"line":302},[255,490,491],{"class":261},"  args: [{ name: ",[255,493,494],{"class":275},"\"name\"",[255,496,497],{"class":261},", required: ",[255,499,500],{"class":457},"true",[255,502,503],{"class":261}," }],\n",[255,505,506,509,512,515,518,521,523,525,527,529],{"class":257,"line":313},[255,507,508],{"class":265},"  handler",[255,510,511],{"class":261},": ",[255,513,514],{"class":386},"async",[255,516,517],{"class":261}," (",[255,519,520],{"class":379},"args",[255,522,212],{"class":261},[255,524,380],{"class":379},[255,526,383],{"class":261},[255,528,387],{"class":386},[255,530,390],{"class":261},[255,532,533],{"class":257,"line":319},[255,534,535],{"class":261},"    messages: [\n",[255,537,538,541,544,547,550,553,556,558,560,563,566],{"class":257,"line":325},[255,539,540],{"class":261},"      { role: ",[255,542,543],{"class":275},"\"user\"",[255,545,546],{"class":261},", content: { type: ",[255,548,549],{"class":275},"\"text\"",[255,551,552],{"class":261},", text: ",[255,554,555],{"class":275},"`Hello ${",[255,557,520],{"class":261},[255,559,238],{"class":275},[255,561,562],{"class":261},"name",[255,564,565],{"class":275},"}!`",[255,567,568],{"class":261}," } },\n",[255,570,571],{"class":257,"line":331},[255,572,573],{"class":261},"    ],\n",[255,575,576],{"class":257,"line":337},[255,577,334],{"class":261},[255,579,581],{"class":257,"line":580},11,[255,582,583],{"class":261},"});\n",[203,585,586],{},[242,587,244],{},[246,589,591],{"className":248,"code":590,"language":250,"meta":251,"style":251},"// Prompt without arguments\nconst helpPrompt = defineMcpPrompt({\n  name: \"help\",\n  description: \"Show help information\",\n  handler: async (event) => ({\n    messages: [\n      { role: \"user\", content: { type: \"text\", text: \"How can I help?\" } },\n    ],\n  }),\n});\n",[199,592,593,598,611,620,629,647,651,668,672,676],{"__ignoreMap":251},[255,594,595],{"class":257,"line":258},[255,596,597],{"class":354},"// Prompt without arguments\n",[255,599,600,602,605,607,609],{"class":257,"line":272},[255,601,454],{"class":386},[255,603,604],{"class":457}," helpPrompt",[255,606,461],{"class":386},[255,608,464],{"class":265},[255,610,288],{"class":261},[255,612,613,615,618],{"class":257,"line":282},[255,614,471],{"class":261},[255,616,617],{"class":275},"\"help\"",[255,619,279],{"class":261},[255,621,622,624,627],{"class":257,"line":291},[255,623,481],{"class":261},[255,625,626],{"class":275},"\"Show help information\"",[255,628,279],{"class":261},[255,630,631,633,635,637,639,641,643,645],{"class":257,"line":302},[255,632,508],{"class":265},[255,634,511],{"class":261},[255,636,514],{"class":386},[255,638,517],{"class":261},[255,640,380],{"class":379},[255,642,383],{"class":261},[255,644,387],{"class":386},[255,646,390],{"class":261},[255,648,649],{"class":257,"line":313},[255,650,535],{"class":261},[255,652,653,655,657,659,661,663,666],{"class":257,"line":319},[255,654,540],{"class":261},[255,656,543],{"class":275},[255,658,546],{"class":261},[255,660,549],{"class":275},[255,662,552],{"class":261},[255,664,665],{"class":275},"\"How can I help?\"",[255,667,568],{"class":261},[255,669,670],{"class":257,"line":325},[255,671,573],{"class":261},[255,673,674],{"class":257,"line":331},[255,675,334],{"class":261},[255,677,678],{"class":257,"line":337},[255,679,583],{"class":261},[195,681,683],{"id":682},"definemcpresourcedefinition",[199,684,685],{},"defineMcpResource(definition)",[203,687,688],{},"Define an MCP resource with a static URI and a handler that returns its contents.",[203,690,691],{},[242,692,244],{},[246,694,696],{"className":248,"code":695,"language":250,"meta":251,"style":251},"const readmeResource = defineMcpResource({\n  name: \"readme\",\n  uri: \"file:///readme\",\n  description: \"Project README\",\n  mimeType: \"text/markdown\",\n  handler: async (uri, event) => ({\n    contents: [{ uri: uri.toString(), text: \"# My Project\" }],\n  }),\n});\n",[199,697,698,712,721,731,740,750,773,789,793],{"__ignoreMap":251},[255,699,700,702,705,707,710],{"class":257,"line":258},[255,701,454],{"class":386},[255,703,704],{"class":457}," readmeResource",[255,706,461],{"class":386},[255,708,709],{"class":265}," defineMcpResource",[255,711,288],{"class":261},[255,713,714,716,719],{"class":257,"line":272},[255,715,471],{"class":261},[255,717,718],{"class":275},"\"readme\"",[255,720,279],{"class":261},[255,722,723,726,729],{"class":257,"line":282},[255,724,725],{"class":261},"  uri: ",[255,727,728],{"class":275},"\"file:///readme\"",[255,730,279],{"class":261},[255,732,733,735,738],{"class":257,"line":291},[255,734,481],{"class":261},[255,736,737],{"class":275},"\"Project README\"",[255,739,279],{"class":261},[255,741,742,745,748],{"class":257,"line":302},[255,743,744],{"class":261},"  mimeType: ",[255,746,747],{"class":275},"\"text/markdown\"",[255,749,279],{"class":261},[255,751,752,754,756,758,760,763,765,767,769,771],{"class":257,"line":313},[255,753,508],{"class":265},[255,755,511],{"class":261},[255,757,514],{"class":386},[255,759,517],{"class":261},[255,761,762],{"class":379},"uri",[255,764,212],{"class":261},[255,766,380],{"class":379},[255,768,383],{"class":261},[255,770,387],{"class":386},[255,772,390],{"class":261},[255,774,775,778,781,784,787],{"class":257,"line":319},[255,776,777],{"class":261},"    contents: [{ uri: uri.",[255,779,780],{"class":265},"toString",[255,782,783],{"class":261},"(), text: ",[255,785,786],{"class":275},"\"# My Project\"",[255,788,503],{"class":261},[255,790,791],{"class":257,"line":325},[255,792,334],{"class":261},[255,794,795],{"class":257,"line":331},[255,796,583],{"class":261},[195,798,800],{"id":799},"definemcptooldefinition",[199,801,802],{},"defineMcpTool(definition)",[203,804,805],{},"Define an MCP tool with a name, optional JSON Schema input, and a handler function.",[203,807,808],{},[242,809,244],{},[246,811,813],{"className":248,"code":812,"language":250,"meta":251,"style":251},"// Tool with input parameters\nconst echoTool = defineMcpTool({\n  name: \"echo\",\n  description: \"Echo back a message\",\n  inputSchema: {\n    type: \"object\",\n    properties: { message: { type: \"string\" } },\n    required: [\"message\"],\n  },\n  handler: async (args, event) => ({\n    content: [{ type: \"text\", text: args.message as string }],\n  }),\n});\n",[199,814,815,820,834,843,852,857,867,877,888,893,915,933,938],{"__ignoreMap":251},[255,816,817],{"class":257,"line":258},[255,818,819],{"class":354},"// Tool with input parameters\n",[255,821,822,824,827,829,832],{"class":257,"line":272},[255,823,454],{"class":386},[255,825,826],{"class":457}," echoTool",[255,828,461],{"class":386},[255,830,831],{"class":265}," defineMcpTool",[255,833,288],{"class":261},[255,835,836,838,841],{"class":257,"line":282},[255,837,471],{"class":261},[255,839,840],{"class":275},"\"echo\"",[255,842,279],{"class":261},[255,844,845,847,850],{"class":257,"line":291},[255,846,481],{"class":261},[255,848,849],{"class":275},"\"Echo back a message\"",[255,851,279],{"class":261},[255,853,854],{"class":257,"line":302},[255,855,856],{"class":261},"  inputSchema: {\n",[255,858,859,862,865],{"class":257,"line":313},[255,860,861],{"class":261},"    type: ",[255,863,864],{"class":275},"\"object\"",[255,866,279],{"class":261},[255,868,869,872,875],{"class":257,"line":319},[255,870,871],{"class":261},"    properties: { message: { type: ",[255,873,874],{"class":275},"\"string\"",[255,876,568],{"class":261},[255,878,879,882,885],{"class":257,"line":325},[255,880,881],{"class":261},"    required: [",[255,883,884],{"class":275},"\"message\"",[255,886,887],{"class":261},"],\n",[255,889,890],{"class":257,"line":331},[255,891,892],{"class":261},"  },\n",[255,894,895,897,899,901,903,905,907,909,911,913],{"class":257,"line":337},[255,896,508],{"class":265},[255,898,511],{"class":261},[255,900,514],{"class":386},[255,902,517],{"class":261},[255,904,520],{"class":379},[255,906,212],{"class":261},[255,908,380],{"class":379},[255,910,383],{"class":261},[255,912,387],{"class":386},[255,914,390],{"class":261},[255,916,917,920,922,925,928,931],{"class":257,"line":580},[255,918,919],{"class":261},"    content: [{ type: ",[255,921,549],{"class":275},[255,923,924],{"class":261},", text: args.message ",[255,926,927],{"class":386},"as",[255,929,930],{"class":457}," string",[255,932,503],{"class":261},[255,934,936],{"class":257,"line":935},12,[255,937,334],{"class":261},[255,939,941],{"class":257,"line":940},13,[255,942,583],{"class":261},[203,944,945],{},[242,946,244],{},[246,948,950],{"className":248,"code":949,"language":250,"meta":251,"style":251},"// Tool without input parameters\nconst pingTool = defineMcpTool({\n  name: \"ping\",\n  description: \"Returns pong\",\n  handler: async (event) => ({\n    content: [{ type: \"text\", text: \"pong\" }],\n  }),\n});\n",[199,951,952,957,970,979,988,1006,1019,1023],{"__ignoreMap":251},[255,953,954],{"class":257,"line":258},[255,955,956],{"class":354},"// Tool without input parameters\n",[255,958,959,961,964,966,968],{"class":257,"line":272},[255,960,454],{"class":386},[255,962,963],{"class":457}," pingTool",[255,965,461],{"class":386},[255,967,831],{"class":265},[255,969,288],{"class":261},[255,971,972,974,977],{"class":257,"line":282},[255,973,471],{"class":261},[255,975,976],{"class":275},"\"ping\"",[255,978,279],{"class":261},[255,980,981,983,986],{"class":257,"line":291},[255,982,481],{"class":261},[255,984,985],{"class":275},"\"Returns pong\"",[255,987,279],{"class":261},[255,989,990,992,994,996,998,1000,1002,1004],{"class":257,"line":302},[255,991,508],{"class":265},[255,993,511],{"class":261},[255,995,514],{"class":386},[255,997,517],{"class":261},[255,999,380],{"class":379},[255,1001,383],{"class":261},[255,1003,387],{"class":386},[255,1005,390],{"class":261},[255,1007,1008,1010,1012,1014,1017],{"class":257,"line":313},[255,1009,919],{"class":261},[255,1011,549],{"class":275},[255,1013,552],{"class":261},[255,1015,1016],{"class":275},"\"pong\"",[255,1018,503],{"class":261},[255,1020,1021],{"class":257,"line":319},[255,1022,334],{"class":261},[255,1024,1025],{"class":257,"line":325},[255,1026,583],{"class":261},[195,1028,1030],{"id":1029},"createjsonrpcerrorid-code-message-data",[199,1031,1032],{},"createJsonRpcError(id, code, message, data?)",[203,1034,1035],{},"Creates a JSON-RPC error response object.",[195,1037,1039],{"id":1038},"createmethodmapmethods",[199,1040,1041],{},"createMethodMap(methods)",[203,1043,1044,1045,1048],{},"Build a null-prototype lookup map to prevent prototype pollution. This ensures that method names like \"",[242,1046,1047],{},"proto","\", \"constructor\", \"toString\", \"hasOwnProperty\", etc. cannot resolve to inherited Object.prototype properties.",[195,1050,1052],{"id":1051},"definejsonrpchandler",[199,1053,1054],{},"defineJsonRpcHandler()",[203,1056,1057],{},"Creates an H3 event handler that implements the JSON-RPC 2.0 specification.",[203,1059,1060],{},[242,1061,244],{},[246,1063,1065],{"className":248,"code":1064,"language":250,"meta":251,"style":251},"app.post(\n  \"/rpc\",\n  defineJsonRpcHandler({\n    methods: {\n      echo: ({ params }, event) => {\n        return `Received \\`${params}\\` on path \\`${event.url.pathname}\\``;\n      },\n      sum: ({ params }, event) => {\n        return params.a + params.b;\n      },\n    },\n  }),\n);\n",[199,1066,1067,1076,1083,1090,1095,1118,1168,1173,1192,1205,1209,1214,1218],{"__ignoreMap":251},[255,1068,1069,1071,1074],{"class":257,"line":258},[255,1070,262],{"class":261},[255,1072,1073],{"class":265},"post",[255,1075,269],{"class":261},[255,1077,1078,1081],{"class":257,"line":272},[255,1079,1080],{"class":275},"  \"/rpc\"",[255,1082,279],{"class":261},[255,1084,1085,1088],{"class":257,"line":282},[255,1086,1087],{"class":265},"  defineJsonRpcHandler",[255,1089,288],{"class":261},[255,1091,1092],{"class":257,"line":291},[255,1093,1094],{"class":261},"    methods: {\n",[255,1096,1097,1100,1103,1106,1109,1111,1113,1115],{"class":257,"line":302},[255,1098,1099],{"class":265},"      echo",[255,1101,1102],{"class":261},": ({ ",[255,1104,1105],{"class":379},"params",[255,1107,1108],{"class":261}," }, ",[255,1110,380],{"class":379},[255,1112,383],{"class":261},[255,1114,387],{"class":386},[255,1116,1117],{"class":261}," {\n",[255,1119,1120,1123,1126,1129,1132,1134,1137,1139,1142,1144,1146,1148,1150,1153,1155,1158,1160,1162,1165],{"class":257,"line":313},[255,1121,1122],{"class":386},"        return",[255,1124,1125],{"class":275}," `Received ",[255,1127,1128],{"class":457},"\\`",[255,1130,1131],{"class":275},"${",[255,1133,1105],{"class":261},[255,1135,1136],{"class":275},"}",[255,1138,1128],{"class":457},[255,1140,1141],{"class":275}," on path ",[255,1143,1128],{"class":457},[255,1145,1131],{"class":275},[255,1147,380],{"class":261},[255,1149,238],{"class":275},[255,1151,1152],{"class":261},"url",[255,1154,238],{"class":275},[255,1156,1157],{"class":261},"pathname",[255,1159,1136],{"class":275},[255,1161,1128],{"class":457},[255,1163,1164],{"class":275},"`",[255,1166,1167],{"class":261},";\n",[255,1169,1170],{"class":257,"line":319},[255,1171,1172],{"class":261},"      },\n",[255,1174,1175,1178,1180,1182,1184,1186,1188,1190],{"class":257,"line":325},[255,1176,1177],{"class":265},"      sum",[255,1179,1102],{"class":261},[255,1181,1105],{"class":379},[255,1183,1108],{"class":261},[255,1185,380],{"class":379},[255,1187,383],{"class":261},[255,1189,387],{"class":386},[255,1191,1117],{"class":261},[255,1193,1194,1196,1199,1202],{"class":257,"line":331},[255,1195,1122],{"class":386},[255,1197,1198],{"class":261}," params.a ",[255,1200,1201],{"class":386},"+",[255,1203,1204],{"class":261}," params.b;\n",[255,1206,1207],{"class":257,"line":337},[255,1208,1172],{"class":261},[255,1210,1211],{"class":257,"line":580},[255,1212,1213],{"class":261},"    },\n",[255,1215,1216],{"class":257,"line":935},[255,1217,334],{"class":261},[255,1219,1220],{"class":257,"line":940},[255,1221,340],{"class":261},[195,1223,1225],{"id":1224},"definejsonrpcwebsockethandler",[199,1226,1227],{},"defineJsonRpcWebSocketHandler()",[203,1229,1230],{},"Creates an H3 event handler that implements JSON-RPC 2.0 over WebSocket.",[203,1232,1233],{},"This is an opt-in feature that allows JSON-RPC communication over WebSocket connections for bi-directional messaging. Each incoming WebSocket text message is processed as a JSON-RPC request, and responses are sent back to the peer.",[203,1235,1236],{},[242,1237,244],{},[246,1239,1241],{"className":248,"code":1240,"language":250,"meta":251,"style":251},"app.get(\n  \"/rpc/ws\",\n  defineJsonRpcWebSocketHandler({\n    methods: {\n      echo: ({ params }) => {\n        return `Received: ${Array.isArray(params) ? params[0] : params?.message}`;\n      },\n      sum: ({ params }) => {\n        return params.a + params.b;\n      },\n    },\n  }),\n);\n",[199,1242,1243,1252,1259,1266,1270,1285,1338,1342,1356,1366,1370,1374,1378],{"__ignoreMap":251},[255,1244,1245,1247,1250],{"class":257,"line":258},[255,1246,262],{"class":261},[255,1248,1249],{"class":265},"get",[255,1251,269],{"class":261},[255,1253,1254,1257],{"class":257,"line":272},[255,1255,1256],{"class":275},"  \"/rpc/ws\"",[255,1258,279],{"class":261},[255,1260,1261,1264],{"class":257,"line":282},[255,1262,1263],{"class":265},"  defineJsonRpcWebSocketHandler",[255,1265,288],{"class":261},[255,1267,1268],{"class":257,"line":291},[255,1269,1094],{"class":261},[255,1271,1272,1274,1276,1278,1281,1283],{"class":257,"line":302},[255,1273,1099],{"class":265},[255,1275,1102],{"class":261},[255,1277,1105],{"class":379},[255,1279,1280],{"class":261}," }) ",[255,1282,387],{"class":386},[255,1284,1117],{"class":261},[255,1286,1287,1289,1292,1295,1297,1300,1303,1305,1307,1310,1313,1316,1319,1322,1325,1327,1330,1333,1336],{"class":257,"line":313},[255,1288,1122],{"class":386},[255,1290,1291],{"class":275}," `Received: ${",[255,1293,1294],{"class":261},"Array",[255,1296,238],{"class":275},[255,1298,1299],{"class":265},"isArray",[255,1301,1302],{"class":275},"(",[255,1304,1105],{"class":261},[255,1306,383],{"class":275},[255,1308,1309],{"class":386},"?",[255,1311,1312],{"class":261}," params",[255,1314,1315],{"class":275},"[",[255,1317,1318],{"class":457},"0",[255,1320,1321],{"class":275},"] ",[255,1323,1324],{"class":386},":",[255,1326,1312],{"class":261},[255,1328,1329],{"class":275},"?.",[255,1331,1332],{"class":261},"message",[255,1334,1335],{"class":275},"}`",[255,1337,1167],{"class":261},[255,1339,1340],{"class":257,"line":319},[255,1341,1172],{"class":261},[255,1343,1344,1346,1348,1350,1352,1354],{"class":257,"line":325},[255,1345,1177],{"class":265},[255,1347,1102],{"class":261},[255,1349,1105],{"class":379},[255,1351,1280],{"class":261},[255,1353,387],{"class":386},[255,1355,1117],{"class":261},[255,1357,1358,1360,1362,1364],{"class":257,"line":331},[255,1359,1122],{"class":386},[255,1361,1198],{"class":261},[255,1363,1201],{"class":386},[255,1365,1204],{"class":261},[255,1367,1368],{"class":257,"line":337},[255,1369,1172],{"class":261},[255,1371,1372],{"class":257,"line":580},[255,1373,1213],{"class":261},[255,1375,1376],{"class":257,"line":935},[255,1377,334],{"class":261},[255,1379,1380],{"class":257,"line":940},[255,1381,340],{"class":261},[203,1383,1384],{},[242,1385,244],{},[246,1387,1389],{"className":248,"code":1388,"language":250,"meta":251,"style":251},"// With additional WebSocket hooks\napp.get(\n  \"/rpc/ws\",\n  defineJsonRpcWebSocketHandler({\n    methods: {\n      greet: ({ params }) => `Hello, ${params.name}!`,\n    },\n    hooks: {\n      open(peer) {\n        console.log(`Peer connected: ${peer.id}`);\n      },\n      close(peer, details) {\n        console.log(`Peer disconnected: ${peer.id}`, details);\n      },\n    },\n  }),\n);\n",[199,1390,1391,1396,1404,1410,1416,1420,1446,1450,1455,1468,1492,1496,1512,1534,1539,1544,1549],{"__ignoreMap":251},[255,1392,1393],{"class":257,"line":258},[255,1394,1395],{"class":354},"// With additional WebSocket hooks\n",[255,1397,1398,1400,1402],{"class":257,"line":272},[255,1399,262],{"class":261},[255,1401,1249],{"class":265},[255,1403,269],{"class":261},[255,1405,1406,1408],{"class":257,"line":282},[255,1407,1256],{"class":275},[255,1409,279],{"class":261},[255,1411,1412,1414],{"class":257,"line":291},[255,1413,1263],{"class":265},[255,1415,288],{"class":261},[255,1417,1418],{"class":257,"line":302},[255,1419,1094],{"class":261},[255,1421,1422,1425,1427,1429,1431,1433,1436,1438,1440,1442,1444],{"class":257,"line":313},[255,1423,1424],{"class":265},"      greet",[255,1426,1102],{"class":261},[255,1428,1105],{"class":379},[255,1430,1280],{"class":261},[255,1432,387],{"class":386},[255,1434,1435],{"class":275}," `Hello, ${",[255,1437,1105],{"class":261},[255,1439,238],{"class":275},[255,1441,562],{"class":261},[255,1443,565],{"class":275},[255,1445,279],{"class":261},[255,1447,1448],{"class":257,"line":319},[255,1449,1213],{"class":261},[255,1451,1452],{"class":257,"line":325},[255,1453,1454],{"class":261},"    hooks: {\n",[255,1456,1457,1460,1462,1465],{"class":257,"line":331},[255,1458,1459],{"class":265},"      open",[255,1461,1302],{"class":261},[255,1463,1464],{"class":379},"peer",[255,1466,1467],{"class":261},") {\n",[255,1469,1470,1473,1476,1478,1481,1483,1485,1488,1490],{"class":257,"line":337},[255,1471,1472],{"class":261},"        console.",[255,1474,1475],{"class":265},"log",[255,1477,1302],{"class":261},[255,1479,1480],{"class":275},"`Peer connected: ${",[255,1482,1464],{"class":261},[255,1484,238],{"class":275},[255,1486,1487],{"class":261},"id",[255,1489,1335],{"class":275},[255,1491,340],{"class":261},[255,1493,1494],{"class":257,"line":580},[255,1495,1172],{"class":261},[255,1497,1498,1501,1503,1505,1507,1510],{"class":257,"line":935},[255,1499,1500],{"class":265},"      close",[255,1502,1302],{"class":261},[255,1504,1464],{"class":379},[255,1506,212],{"class":261},[255,1508,1509],{"class":379},"details",[255,1511,1467],{"class":261},[255,1513,1514,1516,1518,1520,1523,1525,1527,1529,1531],{"class":257,"line":940},[255,1515,1472],{"class":261},[255,1517,1475],{"class":265},[255,1519,1302],{"class":261},[255,1521,1522],{"class":275},"`Peer disconnected: ${",[255,1524,1464],{"class":261},[255,1526,238],{"class":275},[255,1528,1487],{"class":261},[255,1530,1335],{"class":275},[255,1532,1533],{"class":261},", details);\n",[255,1535,1537],{"class":257,"line":1536},14,[255,1538,1172],{"class":261},[255,1540,1542],{"class":257,"line":1541},15,[255,1543,1213],{"class":261},[255,1545,1547],{"class":257,"line":1546},16,[255,1548,334],{"class":261},[255,1550,1552],{"class":257,"line":1551},17,[255,1553,340],{"class":261},[195,1555,1557],{"id":1556},"processjsonrpcbodybody-methodmap-context",[199,1558,1559],{},"processJsonRpcBody(body, methodMap, context)",[203,1561,1562],{},"Validates and processes a parsed JSON-RPC body (single or batch).",[1564,1565,1566],"style",{},"html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}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 .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sQHwn, html code.shiki .sQHwn{--shiki-light:#E36209;--shiki-default:#FFAB70;--shiki-dark:#FFAB70}html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}",{"title":251,"searchDepth":272,"depth":272,"links":1568},[1569,1570,1571,1572,1573,1574,1575,1576,1577],{"id":197,"depth":282,"text":201},{"id":429,"depth":282,"text":432},{"id":682,"depth":282,"text":685},{"id":799,"depth":282,"text":802},{"id":1029,"depth":282,"text":1032},{"id":1038,"depth":282,"text":1041},{"id":1051,"depth":282,"text":1054},{"id":1224,"depth":282,"text":1227},{"id":1556,"depth":282,"text":1559},"H3 MCP related utils.","md",{"automd":1581,"icon":127},true,{"icon":127},{"title":124,"description":1578},"M1OlZCT8Qp-C9xcyLTiA6mlefLd8erDcIj9Mtm-rrcI",[1586,1588],{"title":119,"path":120,"stem":121,"description":1587,"icon":122,"children":-1},"H3 proxy utilities.",{"title":129,"path":130,"stem":131,"description":1589,"icon":132,"children":-1},"More H3 utilities.",1772227922049]