[{"data":1,"prerenderedAt":1966},["ShallowReactive",2],{"navigation_docs":3,"-advanced-logging":287,"-advanced-logging-surround":1961},[4,40,70,99,122,156,189,258],{"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,219,223,228,233,238,243,248,253],{"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":218},"llms.txt discovery","\u002Fadvanced\u002Fllms-txt","7.advanced\u002F13.llms-txt","i-lucide-file-text",{"title":220,"path":221,"stem":222,"icon":64},"Middleware","\u002Fadvanced\u002Fmiddleware","7.advanced\u002F2.middleware",{"title":224,"path":225,"stem":226,"icon":227},"TypeScript","\u002Fadvanced\u002Ftypescript","7.advanced\u002F3.typescript","i-lucide-type",{"title":229,"path":230,"stem":231,"icon":232},"Hooks","\u002Fadvanced\u002Fhooks","7.advanced\u002F4.hooks","i-lucide-webhook",{"title":234,"path":235,"stem":236,"icon":237},"MCP Evals","\u002Fadvanced\u002Fevals","7.advanced\u002F5.evals","i-lucide-flask-conical",{"title":239,"path":240,"stem":241,"icon":242},"Sessions","\u002Fadvanced\u002Fsessions","7.advanced\u002F6.sessions","i-lucide-database",{"title":244,"path":245,"stem":246,"icon":247},"Dynamic Definitions","\u002Fadvanced\u002Fdynamic-definitions","7.advanced\u002F7.dynamic-definitions","i-lucide-toggle-right",{"title":249,"path":250,"stem":251,"icon":252},"Code Mode","\u002Fadvanced\u002Fcode-mode","7.advanced\u002F8.code-mode","i-lucide-code",{"title":254,"path":255,"stem":256,"icon":257},"Elicitation","\u002Fadvanced\u002Felicitation","7.advanced\u002F9.elicitation","i-lucide-message-square-quote",{"title":259,"path":260,"stem":261,"children":262,"page":39},"Examples","\u002Fexamples","8.examples",[263,268,273,278,283],{"title":264,"path":265,"stem":266,"icon":267},"Authentication","\u002Fexamples\u002Fauthentication","8.examples\u002F1.authentication","i-lucide-shield-check",{"title":269,"path":270,"stem":271,"icon":272},"API Integration","\u002Fexamples\u002Fapi-integration","8.examples\u002F2.api-integration","i-lucide-globe",{"title":274,"path":275,"stem":276,"icon":277},"Common Patterns","\u002Fexamples\u002Fcommon-patterns","8.examples\u002F3.common-patterns","i-lucide-lightbulb",{"title":279,"path":280,"stem":281,"icon":282},"File Operations","\u002Fexamples\u002Ffile-operations","8.examples\u002F4.file-operations","i-lucide-file",{"title":284,"path":285,"stem":286,"icon":107},"Prompt Examples","\u002Fexamples\u002Fprompt-examples","8.examples\u002F5.prompt-examples",{"id":288,"title":289,"body":290,"description":1952,"extension":1953,"links":1954,"meta":1955,"navigation":1956,"path":201,"seo":1957,"stem":202,"__hash__":1960},"docs\u002F7.advanced\u002F10.logging.md","Capture MCP logs and wide events",{"type":291,"value":292,"toc":1940},"minimark",[293,301,381,388,430,435,447,518,635,647,652,655,762,780,784,790,895,899,957,961,966,1468,1471,1578,1581,1729,1742,1746,1753,1843,1870,1877,1887,1897,1901,1936],[294,295,296,300],"p",{},[297,298,299],"code",{},"useMcpLogger()"," exposes two channels with two audiences:",[302,303,304,320],"table",{},[305,306,307],"thead",{},[308,309,310,314,317],"tr",{},[311,312,313],"th",{},"Channel",[311,315,316],{},"Goes to",[311,318,319],{},"API",[321,322,323,354],"tbody",{},[308,324,325,332,335],{},[326,327,328],"td",{},[329,330,331],"strong",{},"Client",[326,333,334],{},"The end user \u002F agent UI (Cursor, Claude, Inspector)",[326,336,337,340,341,344,345,344,348,344,351],{},[297,338,339],{},"log.notify(level, data)"," + ",[297,342,343],{},".debug"," \u002F ",[297,346,347],{},".info",[297,349,350],{},".warning",[297,352,353],{},".error",[308,355,356,361,364],{},[326,357,358],{},[329,359,360],{},"Server",[326,362,363],{},"Your dev terminal and drains (Axiom, Sentry, OTLP, …)",[326,365,366,344,369,344,372,344,375,344,378],{},[297,367,368],{},"log.set",[297,370,371],{},"log.event",[297,373,374],{},"log.setUser",[297,376,377],{},"log.setSession",[297,379,380],{},"log.evlog",[294,382,383,384,387],{},"The client channel always works. The server channel needs ",[297,385,386],{},"evlog\u002Fnuxt",".",[389,390,393,396,421],"prompt",{":actions":391,"description":392,"icon":203},"[\"copy\",\"cursor\",\"windsurf\"]","Add useMcpLogger and evlog-style wide events",[294,394,395],{},"Add structured logging to my Nuxt MCP server (@nuxtjs\u002Fmcp-toolkit).",[397,398,399,403,406,409,412,415,418],"ul",{},[400,401,402],"li",{},"Use useMcpLogger() inside a tool handler (auto-imported)",[400,404,405],{},"log.notify.info({ … }) sends notifications\u002Fmessage to the connected MCP client (respects logging\u002FsetLevel)",[400,407,408],{},"log.set({ … }) accumulates context onto the request's evlog wide event",[400,410,411],{},"log.event(name, fields?) captures a discrete event in the same wide event",[400,413,414],{},"log.setUser({ id, email, name }) \u002F log.setSession({ id }) for canonical schema",[400,416,417],{},"log.evlog gives you the underlying RequestLogger",[400,419,420],{},"Install evlog and register evlog\u002Fnuxt for server-side wide events; configure from the top-level evlog: { … } key in nuxt.config",[294,422,423,424],{},"Docs: ",[425,426,427],"a",{"href":427,"rel":428},"https:\u002F\u002Fmcp-toolkit.nuxt.dev\u002Fadvanced\u002Flogging",[429],"nofollow",[431,432,434],"h2",{"id":433},"setup","Setup",[294,436,437,438,443,444,446],{},"Client notifications work out of the box. For server-side wide events, install ",[425,439,442],{"href":440,"rel":441},"https:\u002F\u002Fevlog.dev",[429],"evlog"," and register ",[297,445,386],{},":",[448,449,450,475,490,504],"code-group",{},[451,452,458],"pre",{"className":453,"code":454,"filename":455,"language":456,"meta":457,"style":457},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add evlog\n","pnpm","bash","",[297,459,460],{"__ignoreMap":457},[461,462,465,468,472],"span",{"class":463,"line":464},"line",1,[461,466,455],{"class":467},"sBMFI",[461,469,471],{"class":470},"sfazB"," add",[461,473,474],{"class":470}," evlog\n",[451,476,479],{"className":453,"code":477,"filename":478,"language":456,"meta":457,"style":457},"npm install evlog\n","npm",[297,480,481],{"__ignoreMap":457},[461,482,483,485,488],{"class":463,"line":464},[461,484,478],{"class":467},[461,486,487],{"class":470}," install",[461,489,474],{"class":470},[451,491,494],{"className":453,"code":492,"filename":493,"language":456,"meta":457,"style":457},"yarn add evlog\n","yarn",[297,495,496],{"__ignoreMap":457},[461,497,498,500,502],{"class":463,"line":464},[461,499,493],{"class":467},[461,501,471],{"class":470},[461,503,474],{"class":470},[451,505,508],{"className":453,"code":506,"filename":507,"language":456,"meta":457,"style":457},"bun add evlog\n","bun",[297,509,510],{"__ignoreMap":457},[461,511,512,514,516],{"class":463,"line":464},[461,513,507],{"class":467},[461,515,471],{"class":470},[461,517,474],{"class":470},[451,519,524],{"className":520,"code":521,"filename":522,"language":523,"meta":457,"style":457},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  modules: ['evlog\u002Fnuxt', '@nuxtjs\u002Fmcp-toolkit'],\n  evlog: {\n    env: { service: 'my-app' },\n  },\n})\n","nuxt.config.ts","typescript",[297,525,526,547,583,594,620,626],{"__ignoreMap":457},[461,527,528,532,535,539,543],{"class":463,"line":464},[461,529,531],{"class":530},"s7zQu","export",[461,533,534],{"class":530}," default",[461,536,538],{"class":537},"s2Zo4"," defineNuxtConfig",[461,540,542],{"class":541},"sTEyZ","(",[461,544,546],{"class":545},"sMK4o","{\n",[461,548,550,554,556,559,562,564,566,569,572,575,577,580],{"class":463,"line":549},2,[461,551,553],{"class":552},"swJcz","  modules",[461,555,446],{"class":545},[461,557,558],{"class":541}," [",[461,560,561],{"class":545},"'",[461,563,386],{"class":470},[461,565,561],{"class":545},[461,567,568],{"class":545},",",[461,570,571],{"class":545}," '",[461,573,574],{"class":470},"@nuxtjs\u002Fmcp-toolkit",[461,576,561],{"class":545},[461,578,579],{"class":541},"]",[461,581,582],{"class":545},",\n",[461,584,586,589,591],{"class":463,"line":585},3,[461,587,588],{"class":552},"  evlog",[461,590,446],{"class":545},[461,592,593],{"class":545}," {\n",[461,595,597,600,602,605,608,610,612,615,617],{"class":463,"line":596},4,[461,598,599],{"class":552},"    env",[461,601,446],{"class":545},[461,603,604],{"class":545}," {",[461,606,607],{"class":552}," service",[461,609,446],{"class":545},[461,611,571],{"class":545},[461,613,614],{"class":470},"my-app",[461,616,561],{"class":545},[461,618,619],{"class":545}," },\n",[461,621,623],{"class":463,"line":622},5,[461,624,625],{"class":545},"  },\n",[461,627,629,632],{"class":463,"line":628},6,[461,630,631],{"class":545},"}",[461,633,634],{"class":541},")\n",[294,636,637,638,641,642,646],{},"That's it. Configure drains, sampling, redaction, and exclude patterns from the same ",[297,639,640],{},"evlog: { … }"," block — see the ",[425,643,645],{"href":440,"rel":644},[429],"evlog docs"," for the full schema.",[648,649,651],"h3",{"id":650},"auto-tagged-fields","Auto-tagged fields",[294,653,654],{},"Every MCP wide event lands in your drain pre-tagged:",[302,656,657,667],{},[305,658,659],{},[308,660,661,664],{},[311,662,663],{},"Field",[311,665,666],{},"Source",[321,668,669,691,707,726,738],{},[308,670,671,688],{},[326,672,673,344,676,344,679,344,682,344,685],{},[297,674,675],{},"mcp.transport",[297,677,678],{},"mcp.route",[297,680,681],{},"mcp.session_id",[297,683,684],{},"mcp.method",[297,686,687],{},"mcp.request_id",[326,689,690],{},"Transport headers",[308,692,693,704],{},[326,694,695,344,698,344,701],{},[297,696,697],{},"mcp.tool",[297,699,700],{},"mcp.resource",[297,702,703],{},"mcp.prompt",[326,705,706],{},"JSON-RPC payload",[308,708,709,720],{},[326,710,711,344,714,344,717],{},[297,712,713],{},"user.id",[297,715,716],{},"user.email",[297,718,719],{},"user.name",[326,721,722,725],{},[297,723,724],{},"event.context.user"," (from your auth middleware — better-auth, API key, …)",[308,727,728,733],{},[326,729,730],{},[297,731,732],{},"session.id",[326,734,735],{},[297,736,737],{},"event.context.session.id",[308,739,740,745],{},[326,741,742],{},[297,743,744],{},"service",[326,746,747,750,751,754,755,758,759],{},[297,748,749],{},"\u003Cevlog.env.service>\u002Fmcp"," (or slugified ",[297,752,753],{},"mcp.name",") — auto-injected on ",[297,756,757],{},"\u002Fmcp"," and ",[297,760,761],{},"\u002Fmcp\u002F**",[294,763,764,765,768,769,772,773,768,776,779],{},"Batched JSON-RPC calls flip the singular keys (",[297,766,767],{},"method",", ",[297,770,771],{},"tool",", …) to plural arrays (",[297,774,775],{},"methods",[297,777,778],{},"tools",", …).",[648,781,783],{"id":782},"override-the-auto-service","Override the auto service",[294,785,786,787,446],{},"Pin your own value to opt out of the derived ",[297,788,789],{},"\u003Cservice>\u002Fmcp",[451,791,793],{"className":520,"code":792,"filename":522,"language":523,"meta":457,"style":457},"evlog: {\n  env: { service: 'my-app' },\n  routes: {\n    '\u002Fmcp': { service: 'my-app\u002Fagents' },\n    '\u002Fmcp\u002F**': { service: 'my-app\u002Fagents' },\n  },\n}\n",[297,794,795,803,824,833,861,885,889],{"__ignoreMap":457},[461,796,797,799,801],{"class":463,"line":464},[461,798,442],{"class":467},[461,800,446],{"class":545},[461,802,593],{"class":545},[461,804,805,808,810,812,814,816,818,820,822],{"class":463,"line":549},[461,806,807],{"class":467},"  env",[461,809,446],{"class":545},[461,811,604],{"class":545},[461,813,607],{"class":467},[461,815,446],{"class":545},[461,817,571],{"class":545},[461,819,614],{"class":470},[461,821,561],{"class":545},[461,823,619],{"class":545},[461,825,826,829,831],{"class":463,"line":585},[461,827,828],{"class":467},"  routes",[461,830,446],{"class":545},[461,832,593],{"class":545},[461,834,835,838,840,842,845,848,850,852,854,857,859],{"class":463,"line":596},[461,836,837],{"class":545},"    '",[461,839,757],{"class":470},[461,841,561],{"class":545},[461,843,844],{"class":552},": ",[461,846,847],{"class":545},"{",[461,849,607],{"class":552},[461,851,446],{"class":545},[461,853,571],{"class":545},[461,855,856],{"class":470},"my-app\u002Fagents",[461,858,561],{"class":545},[461,860,619],{"class":545},[461,862,863,865,867,869,871,873,875,877,879,881,883],{"class":463,"line":622},[461,864,837],{"class":545},[461,866,761],{"class":470},[461,868,561],{"class":545},[461,870,844],{"class":552},[461,872,847],{"class":545},[461,874,607],{"class":552},[461,876,446],{"class":545},[461,878,571],{"class":545},[461,880,856],{"class":470},[461,882,561],{"class":545},[461,884,619],{"class":545},[461,886,887],{"class":463,"line":628},[461,888,625],{"class":545},[461,890,892],{"class":463,"line":891},7,[461,893,894],{"class":545},"}\n",[648,896,898],{"id":897},"force-on-opt-out","Force on \u002F opt out",[302,900,901,914],{},[305,902,903],{},[308,904,905,911],{},[311,906,907,910],{},[297,908,909],{},"mcp.logging"," value",[311,912,913],{},"Behavior",[321,915,916,930,943],{},[308,917,918,924],{},[326,919,920,923],{},[297,921,922],{},"undefined"," (default)",[326,925,926,927,929],{},"On if ",[297,928,386],{}," is registered, off otherwise.",[308,931,932,937],{},[326,933,934],{},[297,935,936],{},"true",[326,938,939,940,942],{},"Asserts ",[297,941,386],{}," is registered. Build throws if it isn't.",[308,944,945,950],{},[326,946,947],{},[297,948,949],{},"false",[326,951,952,953,956],{},"Opt out. ",[297,954,955],{},"log.notify(...)"," keeps working.",[431,958,960],{"id":959},"usage","Usage",[294,962,963,965],{},[297,964,299],{}," is auto-imported. Call it inside a tool, resource, or prompt handler:",[451,967,970],{"className":520,"code":968,"filename":969,"language":523,"meta":457,"style":457},"import { z } from 'zod'\nimport { defineMcpTool } from '@nuxtjs\u002Fmcp-toolkit\u002Fserver'\n\nexport default defineMcpTool({\n  name: 'charge_card',\n  inputSchema: { userId: z.string(), amount: z.number().int() },\n  handler: async ({ userId, amount }) => {\n    const log = useMcpLogger('billing')\n\n    log.set({ billing: { amount } })\n    await log.notify.info({ msg: 'starting charge', amount })\n\n    try {\n      const receipt = await charge(userId, amount)\n      log.event('charge_completed', { receiptId: receipt.id })\n      return `Charged ${amount}.`\n    }\n    catch (err) {\n      log.evlog.error('charge failed', err)\n      await log.notify.error({ msg: 'charge failed', error: String(err) })\n      throw err\n    }\n  },\n})\n","server\u002Fmcp\u002Ftools\u002Fcharge.ts",[297,971,972,996,1016,1022,1034,1050,1101,1130,1156,1161,1191,1233,1238,1246,1274,1314,1339,1345,1362,1392,1442,1451,1456,1461],{"__ignoreMap":457},[461,973,974,977,979,982,985,988,990,993],{"class":463,"line":464},[461,975,976],{"class":530},"import",[461,978,604],{"class":545},[461,980,981],{"class":541}," z",[461,983,984],{"class":545}," }",[461,986,987],{"class":530}," from",[461,989,571],{"class":545},[461,991,992],{"class":470},"zod",[461,994,995],{"class":545},"'\n",[461,997,998,1000,1002,1005,1007,1009,1011,1014],{"class":463,"line":549},[461,999,976],{"class":530},[461,1001,604],{"class":545},[461,1003,1004],{"class":541}," defineMcpTool",[461,1006,984],{"class":545},[461,1008,987],{"class":530},[461,1010,571],{"class":545},[461,1012,1013],{"class":470},"@nuxtjs\u002Fmcp-toolkit\u002Fserver",[461,1015,995],{"class":545},[461,1017,1018],{"class":463,"line":585},[461,1019,1021],{"emptyLinePlaceholder":1020},true,"\n",[461,1023,1024,1026,1028,1030,1032],{"class":463,"line":596},[461,1025,531],{"class":530},[461,1027,534],{"class":530},[461,1029,1004],{"class":537},[461,1031,542],{"class":541},[461,1033,546],{"class":545},[461,1035,1036,1039,1041,1043,1046,1048],{"class":463,"line":622},[461,1037,1038],{"class":552},"  name",[461,1040,446],{"class":545},[461,1042,571],{"class":545},[461,1044,1045],{"class":470},"charge_card",[461,1047,561],{"class":545},[461,1049,582],{"class":545},[461,1051,1052,1055,1057,1059,1062,1064,1066,1068,1071,1074,1076,1079,1081,1083,1085,1088,1090,1092,1095,1098],{"class":463,"line":628},[461,1053,1054],{"class":552},"  inputSchema",[461,1056,446],{"class":545},[461,1058,604],{"class":545},[461,1060,1061],{"class":552}," userId",[461,1063,446],{"class":545},[461,1065,981],{"class":541},[461,1067,387],{"class":545},[461,1069,1070],{"class":537},"string",[461,1072,1073],{"class":541},"()",[461,1075,568],{"class":545},[461,1077,1078],{"class":552}," amount",[461,1080,446],{"class":545},[461,1082,981],{"class":541},[461,1084,387],{"class":545},[461,1086,1087],{"class":537},"number",[461,1089,1073],{"class":541},[461,1091,387],{"class":545},[461,1093,1094],{"class":537},"int",[461,1096,1097],{"class":541},"() ",[461,1099,1100],{"class":545},"},\n",[461,1102,1103,1106,1108,1112,1115,1118,1120,1122,1125,1128],{"class":463,"line":891},[461,1104,1105],{"class":537},"  handler",[461,1107,446],{"class":545},[461,1109,1111],{"class":1110},"spNyl"," async",[461,1113,1114],{"class":545}," ({",[461,1116,1061],{"class":1117},"sHdIc",[461,1119,568],{"class":545},[461,1121,1078],{"class":1117},[461,1123,1124],{"class":545}," })",[461,1126,1127],{"class":1110}," =>",[461,1129,593],{"class":545},[461,1131,1133,1136,1139,1142,1145,1147,1149,1152,1154],{"class":463,"line":1132},8,[461,1134,1135],{"class":1110},"    const",[461,1137,1138],{"class":541}," log",[461,1140,1141],{"class":545}," =",[461,1143,1144],{"class":537}," useMcpLogger",[461,1146,542],{"class":552},[461,1148,561],{"class":545},[461,1150,1151],{"class":470},"billing",[461,1153,561],{"class":545},[461,1155,634],{"class":552},[461,1157,1159],{"class":463,"line":1158},9,[461,1160,1021],{"emptyLinePlaceholder":1020},[461,1162,1164,1167,1169,1172,1174,1176,1179,1181,1183,1185,1187,1189],{"class":463,"line":1163},10,[461,1165,1166],{"class":541},"    log",[461,1168,387],{"class":545},[461,1170,1171],{"class":537},"set",[461,1173,542],{"class":552},[461,1175,847],{"class":545},[461,1177,1178],{"class":552}," billing",[461,1180,446],{"class":545},[461,1182,604],{"class":545},[461,1184,1078],{"class":541},[461,1186,984],{"class":545},[461,1188,984],{"class":545},[461,1190,634],{"class":552},[461,1192,1194,1197,1199,1201,1204,1206,1209,1211,1213,1216,1218,1220,1223,1225,1227,1229,1231],{"class":463,"line":1193},11,[461,1195,1196],{"class":530},"    await",[461,1198,1138],{"class":541},[461,1200,387],{"class":545},[461,1202,1203],{"class":541},"notify",[461,1205,387],{"class":545},[461,1207,1208],{"class":537},"info",[461,1210,542],{"class":552},[461,1212,847],{"class":545},[461,1214,1215],{"class":552}," msg",[461,1217,446],{"class":545},[461,1219,571],{"class":545},[461,1221,1222],{"class":470},"starting charge",[461,1224,561],{"class":545},[461,1226,568],{"class":545},[461,1228,1078],{"class":541},[461,1230,984],{"class":545},[461,1232,634],{"class":552},[461,1234,1236],{"class":463,"line":1235},12,[461,1237,1021],{"emptyLinePlaceholder":1020},[461,1239,1241,1244],{"class":463,"line":1240},13,[461,1242,1243],{"class":530},"    try",[461,1245,593],{"class":545},[461,1247,1249,1252,1255,1257,1260,1263,1265,1268,1270,1272],{"class":463,"line":1248},14,[461,1250,1251],{"class":1110},"      const",[461,1253,1254],{"class":541}," receipt",[461,1256,1141],{"class":545},[461,1258,1259],{"class":530}," await",[461,1261,1262],{"class":537}," charge",[461,1264,542],{"class":552},[461,1266,1267],{"class":541},"userId",[461,1269,568],{"class":545},[461,1271,1078],{"class":541},[461,1273,634],{"class":552},[461,1275,1277,1280,1282,1285,1287,1289,1292,1294,1296,1298,1301,1303,1305,1307,1310,1312],{"class":463,"line":1276},15,[461,1278,1279],{"class":541},"      log",[461,1281,387],{"class":545},[461,1283,1284],{"class":537},"event",[461,1286,542],{"class":552},[461,1288,561],{"class":545},[461,1290,1291],{"class":470},"charge_completed",[461,1293,561],{"class":545},[461,1295,568],{"class":545},[461,1297,604],{"class":545},[461,1299,1300],{"class":552}," receiptId",[461,1302,446],{"class":545},[461,1304,1254],{"class":541},[461,1306,387],{"class":545},[461,1308,1309],{"class":541},"id",[461,1311,984],{"class":545},[461,1313,634],{"class":552},[461,1315,1317,1320,1323,1326,1329,1332,1334,1336],{"class":463,"line":1316},16,[461,1318,1319],{"class":530},"      return",[461,1321,1322],{"class":545}," `",[461,1324,1325],{"class":470},"Charged ",[461,1327,1328],{"class":545},"${",[461,1330,1331],{"class":541},"amount",[461,1333,631],{"class":545},[461,1335,387],{"class":470},[461,1337,1338],{"class":545},"`\n",[461,1340,1342],{"class":463,"line":1341},17,[461,1343,1344],{"class":545},"    }\n",[461,1346,1348,1351,1354,1357,1360],{"class":463,"line":1347},18,[461,1349,1350],{"class":530},"    catch",[461,1352,1353],{"class":552}," (",[461,1355,1356],{"class":541},"err",[461,1358,1359],{"class":552},") ",[461,1361,546],{"class":545},[461,1363,1365,1367,1369,1371,1373,1376,1378,1380,1383,1385,1387,1390],{"class":463,"line":1364},19,[461,1366,1279],{"class":541},[461,1368,387],{"class":545},[461,1370,442],{"class":541},[461,1372,387],{"class":545},[461,1374,1375],{"class":537},"error",[461,1377,542],{"class":552},[461,1379,561],{"class":545},[461,1381,1382],{"class":470},"charge failed",[461,1384,561],{"class":545},[461,1386,568],{"class":545},[461,1388,1389],{"class":541}," err",[461,1391,634],{"class":552},[461,1393,1395,1398,1400,1402,1404,1406,1408,1410,1412,1414,1416,1418,1420,1422,1424,1427,1429,1432,1434,1436,1438,1440],{"class":463,"line":1394},20,[461,1396,1397],{"class":530},"      await",[461,1399,1138],{"class":541},[461,1401,387],{"class":545},[461,1403,1203],{"class":541},[461,1405,387],{"class":545},[461,1407,1375],{"class":537},[461,1409,542],{"class":552},[461,1411,847],{"class":545},[461,1413,1215],{"class":552},[461,1415,446],{"class":545},[461,1417,571],{"class":545},[461,1419,1382],{"class":470},[461,1421,561],{"class":545},[461,1423,568],{"class":545},[461,1425,1426],{"class":552}," error",[461,1428,446],{"class":545},[461,1430,1431],{"class":537}," String",[461,1433,542],{"class":552},[461,1435,1356],{"class":541},[461,1437,1359],{"class":552},[461,1439,631],{"class":545},[461,1441,634],{"class":552},[461,1443,1445,1448],{"class":463,"line":1444},21,[461,1446,1447],{"class":530},"      throw",[461,1449,1450],{"class":541}," err\n",[461,1452,1454],{"class":463,"line":1453},22,[461,1455,1344],{"class":545},[461,1457,1459],{"class":463,"line":1458},23,[461,1460,625],{"class":545},[461,1462,1464,1466],{"class":463,"line":1463},24,[461,1465,631],{"class":545},[461,1467,634],{"class":541},[294,1469,1470],{},"In your dev terminal:",[451,1472,1474],{"className":453,"code":1473,"language":456,"meta":457,"style":457},"INFO [my-app\u002Fmcp] POST \u002Fmcp 200 in 18ms\n├─ mcp: transport=streamable-http route=\u002Fmcp method=tools\u002Fcall tool=charge_card\n├─ user: id=user-42 email=alice@example.com\n├─ billing: amount=1000\n└─ requestLogs: 0={\"level\":\"info\",\"message\":\"charge_completed\",...}\n",[297,1475,1476,1484,1504,1517,1531],{"__ignoreMap":457},[461,1477,1478,1481],{"class":463,"line":464},[461,1479,1480],{"class":467},"INFO",[461,1482,1483],{"class":541}," [my-app\u002Fmcp] POST \u002Fmcp 200 in 18ms\n",[461,1485,1486,1489,1492,1495,1498,1501],{"class":463,"line":549},[461,1487,1488],{"class":467},"├─",[461,1490,1491],{"class":470}," mcp:",[461,1493,1494],{"class":470}," transport=streamable-http",[461,1496,1497],{"class":470}," route=\u002Fmcp",[461,1499,1500],{"class":470}," method=tools\u002Fcall",[461,1502,1503],{"class":470}," tool=charge_card\n",[461,1505,1506,1508,1511,1514],{"class":463,"line":585},[461,1507,1488],{"class":467},[461,1509,1510],{"class":470}," user:",[461,1512,1513],{"class":470}," id=user-42",[461,1515,1516],{"class":470}," email=alice@example.com\n",[461,1518,1519,1521,1524,1527],{"class":463,"line":596},[461,1520,1488],{"class":467},[461,1522,1523],{"class":470}," billing:",[461,1525,1526],{"class":470}," amount=",[461,1528,1530],{"class":1529},"sbssI","1000\n",[461,1532,1533,1536,1539,1542,1545,1548,1550,1552,1554,1556,1558,1560,1562,1565,1567,1569,1571,1573,1575],{"class":463,"line":622},[461,1534,1535],{"class":467},"└─",[461,1537,1538],{"class":470}," requestLogs:",[461,1540,1541],{"class":470}," 0={",[461,1543,1544],{"class":545},"\"",[461,1546,1547],{"class":470},"level",[461,1549,1544],{"class":545},[461,1551,446],{"class":470},[461,1553,1544],{"class":545},[461,1555,1208],{"class":470},[461,1557,1544],{"class":545},[461,1559,568],{"class":470},[461,1561,1544],{"class":545},[461,1563,1564],{"class":470},"message",[461,1566,1544],{"class":545},[461,1568,446],{"class":470},[461,1570,1544],{"class":545},[461,1572,1291],{"class":470},[461,1574,1544],{"class":545},[461,1576,1577],{"class":470},",...}\n",[648,1579,319],{"id":1580},"api",[302,1582,1583,1595],{},[305,1584,1585],{},[308,1586,1587,1590,1592],{},[311,1588,1589],{},"Method",[311,1591,313],{},[311,1593,1594],{},"Description",[321,1596,1597,1617,1636,1649,1664,1683,1701],{},[308,1598,1599,1604,1607],{},[326,1600,1601],{},[297,1602,1603],{},"notify(level, data, logger?)",[326,1605,1606],{},"client",[326,1608,1609,1610,1613,1614,387],{},"Send a ",[297,1611,1612],{},"notifications\u002Fmessage",". Drops silently when filtered out by ",[297,1615,1616],{},"logging\u002FsetLevel",[308,1618,1619,1631,1633],{},[326,1620,1621,344,1624,344,1626,344,1629],{},[297,1622,1623],{},"notify.debug",[297,1625,1208],{},[297,1627,1628],{},"warning",[297,1630,1375],{},[326,1632,1606],{},[326,1634,1635],{},"Level shortcuts.",[308,1637,1638,1643,1646],{},[326,1639,1640],{},[297,1641,1642],{},"set(fields)",[326,1644,1645],{},"server",[326,1647,1648],{},"Merge fields into the wide event.",[308,1650,1651,1656,1658],{},[326,1652,1653],{},[297,1654,1655],{},"event(name, fields?)",[326,1657,1645],{},[326,1659,1660,1661,387],{},"Append a discrete event to the wide event's ",[297,1662,1663],{},"requestLogs",[308,1665,1666,1671,1673],{},[326,1667,1668],{},[297,1669,1670],{},"setUser({ id, email, name })",[326,1672,1645],{},[326,1674,1675,1676,1679,1680,1682],{},"Tag the canonical ",[297,1677,1678],{},"user"," schema (auto-filled from ",[297,1681,724],{},").",[308,1684,1685,1690,1692],{},[326,1686,1687],{},[297,1688,1689],{},"setSession({ id })",[326,1691,1645],{},[326,1693,1694,1695,1697,1698,1682],{},"Tag ",[297,1696,732],{}," (auto-filled from ",[297,1699,1700],{},"event.context.session",[308,1702,1703,1707,1709],{},[326,1704,1705],{},[297,1706,442],{},[326,1708,1645],{},[326,1710,1711,1712,1719,1720,768,1723,768,1725,1728],{},"Underlying ",[425,1713,1716],{"href":1714,"rel":1715},"https:\u002F\u002Fevlog.dev\u002Fdocs\u002Fapi\u002Frequest-logger",[429],[297,1717,1718],{},"RequestLogger"," for ",[297,1721,1722],{},"fork",[297,1724,1375],{},[297,1726,1727],{},"getContext",", …",[294,1730,1731,1734,1735,1738,1739,1741],{},[297,1732,1733],{},"log.notify"," always resolves and never throws — safe on hot paths. The server methods throw ",[297,1736,1737],{},"McpObservabilityNotEnabledError"," if ",[297,1740,386],{}," isn't registered.",[431,1743,1745],{"id":1744},"drains","Drains",[294,1747,1748,1749,1752],{},"Ship every MCP wide event to ",[329,1750,1751],{},"Axiom, Sentry, OTLP, HyperDX, Datadog, Better Stack, or PostHog"," with one Nitro plugin:",[451,1754,1757],{"className":520,"code":1755,"filename":1756,"language":523,"meta":457,"style":457},"import { createAxiomDrain } from 'evlog\u002Fadapters\u002Faxiom'\n\nexport default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', createAxiomDrain())\n})\n","server\u002Fplugins\u002Fevlog-axiom.ts",[297,1758,1759,1779,1783,1806,1837],{"__ignoreMap":457},[461,1760,1761,1763,1765,1768,1770,1772,1774,1777],{"class":463,"line":464},[461,1762,976],{"class":530},[461,1764,604],{"class":545},[461,1766,1767],{"class":541}," createAxiomDrain",[461,1769,984],{"class":545},[461,1771,987],{"class":530},[461,1773,571],{"class":545},[461,1775,1776],{"class":470},"evlog\u002Fadapters\u002Faxiom",[461,1778,995],{"class":545},[461,1780,1781],{"class":463,"line":549},[461,1782,1021],{"emptyLinePlaceholder":1020},[461,1784,1785,1787,1789,1792,1794,1796,1799,1802,1804],{"class":463,"line":585},[461,1786,531],{"class":530},[461,1788,534],{"class":530},[461,1790,1791],{"class":537}," defineNitroPlugin",[461,1793,542],{"class":541},[461,1795,542],{"class":545},[461,1797,1798],{"class":1117},"nitroApp",[461,1800,1801],{"class":545},")",[461,1803,1127],{"class":1110},[461,1805,593],{"class":545},[461,1807,1808,1811,1813,1816,1818,1821,1823,1825,1828,1830,1832,1834],{"class":463,"line":596},[461,1809,1810],{"class":541},"  nitroApp",[461,1812,387],{"class":545},[461,1814,1815],{"class":541},"hooks",[461,1817,387],{"class":545},[461,1819,1820],{"class":537},"hook",[461,1822,542],{"class":552},[461,1824,561],{"class":545},[461,1826,1827],{"class":470},"evlog:drain",[461,1829,561],{"class":545},[461,1831,568],{"class":545},[461,1833,1767],{"class":537},[461,1835,1836],{"class":552},"())\n",[461,1838,1839,1841],{"class":463,"line":622},[461,1840,631],{"class":545},[461,1842,634],{"class":541},[451,1844,1847],{"className":453,"code":1845,"filename":1846,"language":456,"meta":457,"style":457},"NUXT_AXIOM_TOKEN=xaat-...\nNUXT_AXIOM_DATASET=mcp-server\n",".env",[297,1848,1849,1860],{"__ignoreMap":457},[461,1850,1851,1854,1857],{"class":463,"line":464},[461,1852,1853],{"class":541},"NUXT_AXIOM_TOKEN",[461,1855,1856],{"class":545},"=",[461,1858,1859],{"class":470},"xaat-...\n",[461,1861,1862,1865,1867],{"class":463,"line":549},[461,1863,1864],{"class":541},"NUXT_AXIOM_DATASET",[461,1866,1856],{"class":545},[461,1868,1869],{"class":470},"mcp-server\n",[294,1871,1872,1873,1876],{},"The hook is additive — register multiple drains in parallel. Custom drains are just ",[297,1874,1875],{},"(ctx) => Promise\u003Cvoid>"," registered on the same hook.",[1878,1879,1882,1883,1886],"callout",{"icon":1880,"target":1881,"to":440},"i-lucide-arrow-up-right","_blank","See the ",[425,1884,645],{"href":440,"rel":1885},[429]," for the full list of adapters, sampling, redaction, and how to build custom drains.",[1878,1888,1890,1892,1893,1896],{"icon":1889,"color":1628},"i-lucide-triangle-alert",[297,1891,299],{}," requires ",[297,1894,1895],{},"nitro.experimental.asyncContext: true"," (default since Nuxt 3.8+).",[431,1898,1900],{"id":1899},"next-steps","Next Steps",[397,1902,1903,1912,1920,1930],{},[400,1904,1905,1907,1908,1911],{},[425,1906,220],{"href":221}," — capture ",[297,1909,1910],{},"requestId",", timing, and tool names in your handler middleware.",[400,1913,1914,1916,1917,1919],{},[425,1915,239],{"href":240}," — tag every wide event with ",[297,1918,732],{}," automatically.",[400,1921,1922,1924,1925,344,1927,1929],{},[425,1923,264],{"href":265}," — soft auth populates ",[297,1926,713],{},[297,1928,716],{}," on every event.",[400,1931,1932,1935],{},[425,1933,645],{"href":440,"rel":1934},[429]," — drains, sampling, redaction, and custom adapters.",[1937,1938,1939],"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 .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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":457,"searchDepth":549,"depth":549,"links":1941},[1942,1947,1950,1951],{"id":433,"depth":549,"text":434,"children":1943},[1944,1945,1946],{"id":650,"depth":585,"text":651},{"id":782,"depth":585,"text":783},{"id":897,"depth":585,"text":898},{"id":959,"depth":549,"text":960,"children":1948},[1949],{"id":1580,"depth":585,"text":319},{"id":1744,"depth":549,"text":1745},{"id":1899,"depth":549,"text":1900},"Stream logs to MCP clients and capture structured wide events with useMcpLogger().","md",null,{},{"title":200,"icon":203},{"title":1958,"description":1959},"MCP Logging & Observability","Send notifications\u002Fmessage to connected MCP clients and capture structured server-side wide events with the built-in evlog integration.","GpfCZV24O8sH3H9_j1hDfW4U4a276YoQNXgzEeQSarM",[1962,1964],{"title":195,"path":196,"stem":197,"description":1963,"icon":198,"children":-1},"Customize where the module looks for MCP definitions.",{"title":205,"path":206,"stem":207,"description":1965,"icon":208,"children":-1},"How the toolkit bundles, serves, and connects MCP Apps — and the patterns you can build on top.",1787670843635]