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