[{"data":1,"prerenderedAt":1956},["ShallowReactive",2],{"navigation_docs":3,"-advanced-logging":282,"-advanced-logging-surround":1951},[4,40,70,99,122,156,189,253],{"title":5,"path":6,"stem":7,"children":8,"page":39},"入门指南","\u002Fgetting-started","1.getting-started",[9,14,19,24,29,34],{"title":10,"path":11,"stem":12,"icon":13},"简介","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-book-open",{"title":15,"path":16,"stem":17,"icon":18},"安装","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"配置","\u002Fgetting-started\u002Fconfiguration","1.getting-started\u002F3.configuration","i-lucide-settings",{"title":25,"path":26,"stem":27,"icon":28},"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},"工具","\u002Ftools","2.tools",[45,50,55,60,65],{"title":46,"path":47,"stem":48,"icon":49},"概览","\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},"注释与输入示例","\u002Ftools\u002Fannotations","2.tools\u002F2.annotations","i-lucide-badge-info",{"title":61,"path":62,"stem":63,"icon":64},"错误与缓存","\u002Ftools\u002Ferrors-caching","2.tools\u002F3.errors-caching","i-lucide-shield",{"title":66,"path":67,"stem":68,"icon":69},"分组、文件与动态注册","\u002Ftools\u002Fgroups-organization","2.tools\u002F4.groups-organization","i-lucide-tags",{"title":71,"path":72,"stem":73,"children":74,"page":39},"资源","\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},"静态资源与结构","\u002Fresources\u002Fstatic-and-structure","3.resources\u002F1.static-and-structure","i-lucide-file-stack",{"title":85,"path":86,"stem":87,"icon":88},"模板与处理程序","\u002Fresources\u002Ftemplates-and-handlers","3.resources\u002F2.templates-and-handlers","i-lucide-git-branch",{"title":90,"path":91,"stem":92,"icon":93},"元数据、内容与错误","\u002Fresources\u002Fcontent-metadata-errors","3.resources\u002F3.content-metadata-errors","i-lucide-layers",{"title":95,"path":96,"stem":97,"icon":98},"分组与组织","\u002Fresources\u002Forganization","3.resources\u002F4.organization","i-lucide-folder-tree",{"title":100,"path":101,"stem":102,"children":103,"page":39},"提示词","\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},"编写与结构","\u002Fprompts\u002Fauthoring","4.prompts\u002F1.authoring","i-lucide-pen-line",{"title":114,"path":115,"stem":116,"icon":93},"输入、处理器与消息","\u002Fprompts\u002Finput-handler-messages","4.prompts\u002F2.input-handler-messages",{"title":118,"path":119,"stem":120,"icon":121},"模式与高级用法","\u002Fprompts\u002Fpatterns-advanced","4.prompts\u002F3.patterns-advanced","i-lucide-line-chart",{"title":123,"path":124,"stem":125,"children":126,"page":39},"处理器","\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},"默认与自定义处理器","\u002Fhandlers\u002Fdefault-and-custom","5.handlers\u002F1.default-and-custom","i-lucide-toggle-left",{"title":137,"path":138,"stem":139,"icon":140},"结构与选项","\u002Fhandlers\u002Fstructure-and-options","5.handlers\u002F2.structure-and-options","i-lucide-sliders-horizontal",{"title":142,"path":143,"stem":144,"icon":145},"示例与路由","\u002Fhandlers\u002Fexamples-routing","5.handlers\u002F3.examples-routing","i-lucide-route",{"title":147,"path":148,"stem":149,"icon":150},"分享与实践","\u002Fhandlers\u002Fsharing-practices","5.handlers\u002F4.sharing-practices","i-lucide-share-2",{"title":152,"path":153,"stem":154,"icon":155},"多处理器组织","\u002Fhandlers\u002Forganization","5.handlers\u002F5.organization","i-lucide-network",{"title":157,"path":158,"stem":159,"children":160,"page":39},"应用","\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},"编写与 defineMcpApp","\u002Fapps\u002Fauthoring","6.apps\u002F1.authoring","i-lucide-code-2",{"title":171,"path":172,"stem":173,"icon":174},"useMcpApp() 桥接","\u002Fapps\u002Fuse-mcp-app","6.apps\u002F2.use-mcp-app","i-lucide-message-circle",{"title":176,"path":177,"stem":178,"icon":64},"CSP 与构建流水线","\u002Fapps\u002Fcsp-and-wiring","6.apps\u002F3.csp-and-wiring",{"title":180,"path":181,"stem":182,"icon":183},"测试与发布","\u002Fapps\u002Ftesting-publishing","6.apps\u002F4.testing-publishing","i-lucide-rocket",{"title":185,"path":186,"stem":187,"icon":188},"模式与限制","\u002Fapps\u002Fpatterns-reference","6.apps\u002F5.patterns-reference","i-lucide-book-marked",{"title":190,"path":191,"stem":192,"children":193,"page":39},"进阶主题","\u002Fadvanced","7.advanced",[194,199,204,209,214,218,223,228,233,238,243,248],{"title":195,"path":196,"stem":197,"icon":198},"自定义路径","\u002Fadvanced\u002Fcustom-paths","7.advanced\u002F1.custom-paths","i-lucide-folder",{"title":200,"path":201,"stem":202,"icon":203},"日志","\u002Fadvanced\u002Flogging","7.advanced\u002F10.logging","i-lucide-scroll-text",{"title":205,"path":206,"stem":207,"icon":208},"MCP Apps 内部机制","\u002Fadvanced\u002Fmcp-apps-internals","7.advanced\u002F11.mcp-apps-internals","i-lucide-cog",{"title":210,"path":211,"stem":212,"icon":213},"列出定义","\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 评估","\u002Fadvanced\u002Fevals","7.advanced\u002F5.evals","i-lucide-flask-conical",{"title":234,"path":235,"stem":236,"icon":237},"会话","\u002Fadvanced\u002Fsessions","7.advanced\u002F6.sessions","i-lucide-database",{"title":239,"path":240,"stem":241,"icon":242},"动态定义","\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},"启发式询问","\u002Fadvanced\u002Felicitation","7.advanced\u002F9.elicitation","i-lucide-message-square-quote",{"title":254,"path":255,"stem":256,"children":257,"page":39},"示例","\u002Fexamples","8.examples",[258,263,268,273,278],{"title":259,"path":260,"stem":261,"icon":262},"身份验证","\u002Fexamples\u002Fauthentication","8.examples\u002F1.authentication","i-lucide-shield-check",{"title":264,"path":265,"stem":266,"icon":267},"API 集成","\u002Fexamples\u002Fapi-integration","8.examples\u002F2.api-integration","i-lucide-globe",{"title":269,"path":270,"stem":271,"icon":272},"常见模式","\u002Fexamples\u002Fcommon-patterns","8.examples\u002F3.common-patterns","i-lucide-lightbulb",{"title":274,"path":275,"stem":276,"icon":277},"文件操作","\u002Fexamples\u002Ffile-operations","8.examples\u002F4.file-operations","i-lucide-file",{"title":279,"path":280,"stem":281,"icon":107},"提示词示例","\u002Fexamples\u002Fprompt-examples","8.examples\u002F5.prompt-examples",{"id":283,"title":284,"body":285,"description":1942,"extension":1943,"links":1944,"meta":1945,"navigation":1946,"path":201,"seo":1947,"stem":202,"__hash__":1950},"docs\u002F7.advanced\u002F10.logging.md","捕获 MCP 日志和宽事件",{"type":286,"value":287,"toc":1930},"minimark",[288,296,376,383,425,429,441,512,630,641,645,648,755,773,777,783,888,892,950,953,958,1461,1464,1571,1574,1724,1736,1740,1746,1836,1863,1869,1878,1888,1891,1926],[289,290,291,295],"p",{},[292,293,294],"code",{},"useMcpLogger()"," 暴露了两个面向不同受众的通道：",[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],{},"终端用户 \u002F 代理 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],{},"你的开发终端以及 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],{},"客户端通道始终可用。服务器通道需要 ",[292,380,381],{},"evlog\u002Fnuxt","。",[384,385,388,391,416],"prompt",{":actions":386,"description":387,"icon":203},"[\"copy\",\"cursor\",\"windsurf\"]","为我的 Nuxt MCP 服务器添加 useMcpLogger 和 evlog 风格的 wide events",[289,389,390],{},"为我的 Nuxt MCP 服务器（@nuxtjs\u002Fmcp-toolkit）添加结构化日志。",[392,393,394,398,401,404,407,410,413],"ul",{},[395,396,397],"li",{},"在工具处理器中使用 useMcpLogger()（自动导入）",[395,399,400],{},"log.notify.info({ … }) 会向已连接的 MCP 客户端发送通知\u002F消息（遵循 logging\u002FsetLevel）",[395,402,403],{},"log.set({ … }) 会将上下文累积到请求的 evlog wide event 上",[395,405,406],{},"log.event(name, fields?) 会在同一个 wide event 中捕获一个离散事件",[395,408,409],{},"log.setUser({ id, email, name }) \u002F log.setSession({ id }) 使用规范化 schema",[395,411,412],{},"log.evlog 提供底层的 RequestLogger",[395,414,415],{},"安装 evlog 并注册 evlog\u002Fnuxt 以支持服务端 wide events；在 nuxt.config 顶层的 evlog: { … } 键中进行配置",[289,417,418,419],{},"文档：",[420,421,422],"a",{"href":422,"rel":423},"https:\u002F\u002Fmcp-toolkit.nuxt.dev\u002Fadvanced\u002Flogging",[424],"nofollow",[426,427,428],"h2",{"id":428},"设置",[289,430,431,432,437,438,440],{},"客户端通知开箱即用。对于服务端 wide events，请安装 ",[420,433,436],{"href":434,"rel":435},"https:\u002F\u002Fevlog.dev",[424],"evlog"," 并注册 ",[292,439,381],{},"：",[442,443,444,469,484,498],"code-group",{},[445,446,452],"pre",{"className":447,"code":448,"filename":449,"language":450,"meta":451,"style":451},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add evlog\n","pnpm","bash","",[292,453,454],{"__ignoreMap":451},[455,456,459,462,466],"span",{"class":457,"line":458},"line",1,[455,460,449],{"class":461},"sBMFI",[455,463,465],{"class":464},"sfazB"," add",[455,467,468],{"class":464}," evlog\n",[445,470,473],{"className":447,"code":471,"filename":472,"language":450,"meta":451,"style":451},"npm install evlog\n","npm",[292,474,475],{"__ignoreMap":451},[455,476,477,479,482],{"class":457,"line":458},[455,478,472],{"class":461},[455,480,481],{"class":464}," install",[455,483,468],{"class":464},[445,485,488],{"className":447,"code":486,"filename":487,"language":450,"meta":451,"style":451},"yarn add evlog\n","yarn",[292,489,490],{"__ignoreMap":451},[455,491,492,494,496],{"class":457,"line":458},[455,493,487],{"class":461},[455,495,465],{"class":464},[455,497,468],{"class":464},[445,499,502],{"className":447,"code":500,"filename":501,"language":450,"meta":451,"style":451},"bun add evlog\n","bun",[292,503,504],{"__ignoreMap":451},[455,505,506,508,510],{"class":457,"line":458},[455,507,501],{"class":461},[455,509,465],{"class":464},[455,511,468],{"class":464},[445,513,518],{"className":514,"code":515,"filename":516,"language":517,"meta":451,"style":451},"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,519,520,541,578,589,615,621],{"__ignoreMap":451},[455,521,522,526,529,533,537],{"class":457,"line":458},[455,523,525],{"class":524},"s7zQu","export",[455,527,528],{"class":524}," default",[455,530,532],{"class":531},"s2Zo4"," defineNuxtConfig",[455,534,536],{"class":535},"sTEyZ","(",[455,538,540],{"class":539},"sMK4o","{\n",[455,542,544,548,551,554,557,559,561,564,567,570,572,575],{"class":457,"line":543},2,[455,545,547],{"class":546},"swJcz","  modules",[455,549,550],{"class":539},":",[455,552,553],{"class":535}," [",[455,555,556],{"class":539},"'",[455,558,381],{"class":464},[455,560,556],{"class":539},[455,562,563],{"class":539},",",[455,565,566],{"class":539}," '",[455,568,569],{"class":464},"@nuxtjs\u002Fmcp-toolkit",[455,571,556],{"class":539},[455,573,574],{"class":535},"]",[455,576,577],{"class":539},",\n",[455,579,581,584,586],{"class":457,"line":580},3,[455,582,583],{"class":546},"  evlog",[455,585,550],{"class":539},[455,587,588],{"class":539}," {\n",[455,590,592,595,597,600,603,605,607,610,612],{"class":457,"line":591},4,[455,593,594],{"class":546},"    env",[455,596,550],{"class":539},[455,598,599],{"class":539}," {",[455,601,602],{"class":546}," service",[455,604,550],{"class":539},[455,606,566],{"class":539},[455,608,609],{"class":464},"my-app",[455,611,556],{"class":539},[455,613,614],{"class":539}," },\n",[455,616,618],{"class":457,"line":617},5,[455,619,620],{"class":539},"  },\n",[455,622,624,627],{"class":457,"line":623},6,[455,625,626],{"class":539},"}",[455,628,629],{"class":535},")\n",[289,631,632,633,636,637,382],{},"就是这样。你可以通过同一个 ",[292,634,635],{},"evlog: { … }"," 块来配置 drains、采样、脱敏和排除模式——完整 schema 请参阅 ",[420,638,640],{"href":434,"rel":639},[424],"evlog 文档",[642,643,644],"h3",{"id":644},"自动标记字段",[289,646,647],{},"每个 MCP wide event 在进入你的 drain 时都会预先标记：",[297,649,650,660],{},[300,651,652],{},[303,653,654,657],{},[306,655,656],{},"Field",[306,658,659],{},"Source",[316,661,662,684,700,719,731],{},[303,663,664,681],{},[321,665,666,339,669,339,672,339,675,339,678],{},[292,667,668],{},"mcp.transport",[292,670,671],{},"mcp.route",[292,673,674],{},"mcp.session_id",[292,676,677],{},"mcp.method",[292,679,680],{},"mcp.request_id",[321,682,683],{},"Transport headers",[303,685,686,697],{},[321,687,688,339,691,339,694],{},[292,689,690],{},"mcp.tool",[292,692,693],{},"mcp.resource",[292,695,696],{},"mcp.prompt",[321,698,699],{},"JSON-RPC payload",[303,701,702,713],{},[321,703,704,339,707,339,710],{},[292,705,706],{},"user.id",[292,708,709],{},"user.email",[292,711,712],{},"user.name",[321,714,715,718],{},[292,716,717],{},"event.context.user","（来自你的认证中间件——better-auth、API key，…）",[303,720,721,726],{},[321,722,723],{},[292,724,725],{},"session.id",[321,727,728],{},[292,729,730],{},"event.context.session.id",[303,732,733,738],{},[321,734,735],{},[292,736,737],{},"service",[321,739,740,743,744,747,748,751,752],{},[292,741,742],{},"\u003Cevlog.env.service>\u002Fmcp","（或 slug 化后的 ",[292,745,746],{},"mcp.name","）——会自动注入到 ",[292,749,750],{},"\u002Fmcp"," 和 ",[292,753,754],{},"\u002Fmcp\u002F**",[289,756,757,758,761,762,765,766,761,769,772],{},"批量 JSON-RPC 调用会将单数键（",[292,759,760],{},"method","、",[292,763,764],{},"tool","、…）切换为复数数组（",[292,767,768],{},"methods",[292,770,771],{},"tools","、…）。",[642,774,776],{"id":775},"覆盖自动-service","覆盖自动 service",[289,778,779,780,440],{},"将你自己的值固定下来，以退出派生的 ",[292,781,782],{},"\u003Cservice>\u002Fmcp",[445,784,786],{"className":514,"code":785,"filename":516,"language":517,"meta":451,"style":451},"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,787,788,796,817,826,854,878,882],{"__ignoreMap":451},[455,789,790,792,794],{"class":457,"line":458},[455,791,436],{"class":461},[455,793,550],{"class":539},[455,795,588],{"class":539},[455,797,798,801,803,805,807,809,811,813,815],{"class":457,"line":543},[455,799,800],{"class":461},"  env",[455,802,550],{"class":539},[455,804,599],{"class":539},[455,806,602],{"class":461},[455,808,550],{"class":539},[455,810,566],{"class":539},[455,812,609],{"class":464},[455,814,556],{"class":539},[455,816,614],{"class":539},[455,818,819,822,824],{"class":457,"line":580},[455,820,821],{"class":461},"  routes",[455,823,550],{"class":539},[455,825,588],{"class":539},[455,827,828,831,833,835,838,841,843,845,847,850,852],{"class":457,"line":591},[455,829,830],{"class":539},"    '",[455,832,750],{"class":464},[455,834,556],{"class":539},[455,836,837],{"class":546},": ",[455,839,840],{"class":539},"{",[455,842,602],{"class":546},[455,844,550],{"class":539},[455,846,566],{"class":539},[455,848,849],{"class":464},"my-app\u002Fagents",[455,851,556],{"class":539},[455,853,614],{"class":539},[455,855,856,858,860,862,864,866,868,870,872,874,876],{"class":457,"line":617},[455,857,830],{"class":539},[455,859,754],{"class":464},[455,861,556],{"class":539},[455,863,837],{"class":546},[455,865,840],{"class":539},[455,867,602],{"class":546},[455,869,550],{"class":539},[455,871,566],{"class":539},[455,873,849],{"class":464},[455,875,556],{"class":539},[455,877,614],{"class":539},[455,879,880],{"class":457,"line":623},[455,881,620],{"class":539},[455,883,885],{"class":457,"line":884},7,[455,886,887],{"class":539},"}\n",[642,889,891],{"id":890},"强制开启-选择退出","强制开启 \u002F 选择退出",[297,893,894,907],{},[300,895,896],{},[303,897,898,904],{},[306,899,900,903],{},[292,901,902],{},"mcp.logging"," 值",[306,905,906],{},"行为",[316,908,909,923,936],{},[303,910,911,917],{},[321,912,913,916],{},[292,914,915],{},"undefined","（默认）",[321,918,919,920,922],{},"如果注册了 ",[292,921,381],{}," 则开启，否则关闭。",[303,924,925,930],{},[321,926,927],{},[292,928,929],{},"true",[321,931,932,933,935],{},"断言已注册 ",[292,934,381],{},"。如果没有注册，构建会抛错。",[303,937,938,943],{},[321,939,940],{},[292,941,942],{},"false",[321,944,945,946,949],{},"选择退出。",[292,947,948],{},"log.notify(...)"," 仍然可用。",[426,951,952],{"id":952},"使用",[289,954,955,957],{},[292,956,294],{}," 会自动导入。请在工具、资源或 prompt 处理器内部调用它：",[445,959,962],{"className":514,"code":960,"filename":961,"language":517,"meta":451,"style":451},"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: '开始扣款', amount })\n\n    try {\n      const receipt = await charge(userId, amount)\n      log.event('charge_completed', { receiptId: receipt.id })\n      return `已扣款 ${amount}。`\n    }\n    catch (err) {\n      log.evlog.error('扣款失败', err)\n      await log.notify.error({ msg: '扣款失败', error: String(err) })\n      throw err\n    }\n  },\n})\n","server\u002Fmcp\u002Ftools\u002Fcharge.ts",[292,963,964,988,1008,1014,1026,1042,1094,1123,1149,1154,1184,1226,1231,1239,1267,1307,1332,1338,1355,1385,1435,1444,1449,1454],{"__ignoreMap":451},[455,965,966,969,971,974,977,980,982,985],{"class":457,"line":458},[455,967,968],{"class":524},"import",[455,970,599],{"class":539},[455,972,973],{"class":535}," z",[455,975,976],{"class":539}," }",[455,978,979],{"class":524}," from",[455,981,566],{"class":539},[455,983,984],{"class":464},"zod",[455,986,987],{"class":539},"'\n",[455,989,990,992,994,997,999,1001,1003,1006],{"class":457,"line":543},[455,991,968],{"class":524},[455,993,599],{"class":539},[455,995,996],{"class":535}," defineMcpTool",[455,998,976],{"class":539},[455,1000,979],{"class":524},[455,1002,566],{"class":539},[455,1004,1005],{"class":464},"@nuxtjs\u002Fmcp-toolkit\u002Fserver",[455,1007,987],{"class":539},[455,1009,1010],{"class":457,"line":580},[455,1011,1013],{"emptyLinePlaceholder":1012},true,"\n",[455,1015,1016,1018,1020,1022,1024],{"class":457,"line":591},[455,1017,525],{"class":524},[455,1019,528],{"class":524},[455,1021,996],{"class":531},[455,1023,536],{"class":535},[455,1025,540],{"class":539},[455,1027,1028,1031,1033,1035,1038,1040],{"class":457,"line":617},[455,1029,1030],{"class":546},"  name",[455,1032,550],{"class":539},[455,1034,566],{"class":539},[455,1036,1037],{"class":464},"charge_card",[455,1039,556],{"class":539},[455,1041,577],{"class":539},[455,1043,1044,1047,1049,1051,1054,1056,1058,1061,1064,1067,1069,1072,1074,1076,1078,1081,1083,1085,1088,1091],{"class":457,"line":623},[455,1045,1046],{"class":546},"  inputSchema",[455,1048,550],{"class":539},[455,1050,599],{"class":539},[455,1052,1053],{"class":546}," userId",[455,1055,550],{"class":539},[455,1057,973],{"class":535},[455,1059,1060],{"class":539},".",[455,1062,1063],{"class":531},"string",[455,1065,1066],{"class":535},"()",[455,1068,563],{"class":539},[455,1070,1071],{"class":546}," amount",[455,1073,550],{"class":539},[455,1075,973],{"class":535},[455,1077,1060],{"class":539},[455,1079,1080],{"class":531},"number",[455,1082,1066],{"class":535},[455,1084,1060],{"class":539},[455,1086,1087],{"class":531},"int",[455,1089,1090],{"class":535},"() ",[455,1092,1093],{"class":539},"},\n",[455,1095,1096,1099,1101,1105,1108,1111,1113,1115,1118,1121],{"class":457,"line":884},[455,1097,1098],{"class":531},"  handler",[455,1100,550],{"class":539},[455,1102,1104],{"class":1103},"spNyl"," async",[455,1106,1107],{"class":539}," ({",[455,1109,1053],{"class":1110},"sHdIc",[455,1112,563],{"class":539},[455,1114,1071],{"class":1110},[455,1116,1117],{"class":539}," })",[455,1119,1120],{"class":1103}," =>",[455,1122,588],{"class":539},[455,1124,1126,1129,1132,1135,1138,1140,1142,1145,1147],{"class":457,"line":1125},8,[455,1127,1128],{"class":1103},"    const",[455,1130,1131],{"class":535}," log",[455,1133,1134],{"class":539}," =",[455,1136,1137],{"class":531}," useMcpLogger",[455,1139,536],{"class":546},[455,1141,556],{"class":539},[455,1143,1144],{"class":464},"billing",[455,1146,556],{"class":539},[455,1148,629],{"class":546},[455,1150,1152],{"class":457,"line":1151},9,[455,1153,1013],{"emptyLinePlaceholder":1012},[455,1155,1157,1160,1162,1165,1167,1169,1172,1174,1176,1178,1180,1182],{"class":457,"line":1156},10,[455,1158,1159],{"class":535},"    log",[455,1161,1060],{"class":539},[455,1163,1164],{"class":531},"set",[455,1166,536],{"class":546},[455,1168,840],{"class":539},[455,1170,1171],{"class":546}," billing",[455,1173,550],{"class":539},[455,1175,599],{"class":539},[455,1177,1071],{"class":535},[455,1179,976],{"class":539},[455,1181,976],{"class":539},[455,1183,629],{"class":546},[455,1185,1187,1190,1192,1194,1197,1199,1202,1204,1206,1209,1211,1213,1216,1218,1220,1222,1224],{"class":457,"line":1186},11,[455,1188,1189],{"class":524},"    await",[455,1191,1131],{"class":535},[455,1193,1060],{"class":539},[455,1195,1196],{"class":535},"notify",[455,1198,1060],{"class":539},[455,1200,1201],{"class":531},"info",[455,1203,536],{"class":546},[455,1205,840],{"class":539},[455,1207,1208],{"class":546}," msg",[455,1210,550],{"class":539},[455,1212,566],{"class":539},[455,1214,1215],{"class":464},"开始扣款",[455,1217,556],{"class":539},[455,1219,563],{"class":539},[455,1221,1071],{"class":535},[455,1223,976],{"class":539},[455,1225,629],{"class":546},[455,1227,1229],{"class":457,"line":1228},12,[455,1230,1013],{"emptyLinePlaceholder":1012},[455,1232,1234,1237],{"class":457,"line":1233},13,[455,1235,1236],{"class":524},"    try",[455,1238,588],{"class":539},[455,1240,1242,1245,1248,1250,1253,1256,1258,1261,1263,1265],{"class":457,"line":1241},14,[455,1243,1244],{"class":1103},"      const",[455,1246,1247],{"class":535}," receipt",[455,1249,1134],{"class":539},[455,1251,1252],{"class":524}," await",[455,1254,1255],{"class":531}," charge",[455,1257,536],{"class":546},[455,1259,1260],{"class":535},"userId",[455,1262,563],{"class":539},[455,1264,1071],{"class":535},[455,1266,629],{"class":546},[455,1268,1270,1273,1275,1278,1280,1282,1285,1287,1289,1291,1294,1296,1298,1300,1303,1305],{"class":457,"line":1269},15,[455,1271,1272],{"class":535},"      log",[455,1274,1060],{"class":539},[455,1276,1277],{"class":531},"event",[455,1279,536],{"class":546},[455,1281,556],{"class":539},[455,1283,1284],{"class":464},"charge_completed",[455,1286,556],{"class":539},[455,1288,563],{"class":539},[455,1290,599],{"class":539},[455,1292,1293],{"class":546}," receiptId",[455,1295,550],{"class":539},[455,1297,1247],{"class":535},[455,1299,1060],{"class":539},[455,1301,1302],{"class":535},"id",[455,1304,976],{"class":539},[455,1306,629],{"class":546},[455,1308,1310,1313,1316,1319,1322,1325,1327,1329],{"class":457,"line":1309},16,[455,1311,1312],{"class":524},"      return",[455,1314,1315],{"class":539}," `",[455,1317,1318],{"class":464},"已扣款 ",[455,1320,1321],{"class":539},"${",[455,1323,1324],{"class":535},"amount",[455,1326,626],{"class":539},[455,1328,382],{"class":464},[455,1330,1331],{"class":539},"`\n",[455,1333,1335],{"class":457,"line":1334},17,[455,1336,1337],{"class":539},"    }\n",[455,1339,1341,1344,1347,1350,1353],{"class":457,"line":1340},18,[455,1342,1343],{"class":524},"    catch",[455,1345,1346],{"class":546}," (",[455,1348,1349],{"class":535},"err",[455,1351,1352],{"class":546},") ",[455,1354,540],{"class":539},[455,1356,1358,1360,1362,1364,1366,1369,1371,1373,1376,1378,1380,1383],{"class":457,"line":1357},19,[455,1359,1272],{"class":535},[455,1361,1060],{"class":539},[455,1363,436],{"class":535},[455,1365,1060],{"class":539},[455,1367,1368],{"class":531},"error",[455,1370,536],{"class":546},[455,1372,556],{"class":539},[455,1374,1375],{"class":464},"扣款失败",[455,1377,556],{"class":539},[455,1379,563],{"class":539},[455,1381,1382],{"class":535}," err",[455,1384,629],{"class":546},[455,1386,1388,1391,1393,1395,1397,1399,1401,1403,1405,1407,1409,1411,1413,1415,1417,1420,1422,1425,1427,1429,1431,1433],{"class":457,"line":1387},20,[455,1389,1390],{"class":524},"      await",[455,1392,1131],{"class":535},[455,1394,1060],{"class":539},[455,1396,1196],{"class":535},[455,1398,1060],{"class":539},[455,1400,1368],{"class":531},[455,1402,536],{"class":546},[455,1404,840],{"class":539},[455,1406,1208],{"class":546},[455,1408,550],{"class":539},[455,1410,566],{"class":539},[455,1412,1375],{"class":464},[455,1414,556],{"class":539},[455,1416,563],{"class":539},[455,1418,1419],{"class":546}," error",[455,1421,550],{"class":539},[455,1423,1424],{"class":531}," String",[455,1426,536],{"class":546},[455,1428,1349],{"class":535},[455,1430,1352],{"class":546},[455,1432,626],{"class":539},[455,1434,629],{"class":546},[455,1436,1438,1441],{"class":457,"line":1437},21,[455,1439,1440],{"class":524},"      throw",[455,1442,1443],{"class":535}," err\n",[455,1445,1447],{"class":457,"line":1446},22,[455,1448,1337],{"class":539},[455,1450,1452],{"class":457,"line":1451},23,[455,1453,620],{"class":539},[455,1455,1457,1459],{"class":457,"line":1456},24,[455,1458,626],{"class":539},[455,1460,629],{"class":535},[289,1462,1463],{},"在你的开发终端中：",[445,1465,1467],{"className":447,"code":1466,"language":450,"meta":451,"style":451},"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,1468,1469,1477,1497,1510,1524],{"__ignoreMap":451},[455,1470,1471,1474],{"class":457,"line":458},[455,1472,1473],{"class":461},"INFO",[455,1475,1476],{"class":535}," [my-app\u002Fmcp] POST \u002Fmcp 200 in 18ms\n",[455,1478,1479,1482,1485,1488,1491,1494],{"class":457,"line":543},[455,1480,1481],{"class":461},"├─",[455,1483,1484],{"class":464}," mcp:",[455,1486,1487],{"class":464}," transport=streamable-http",[455,1489,1490],{"class":464}," route=\u002Fmcp",[455,1492,1493],{"class":464}," method=tools\u002Fcall",[455,1495,1496],{"class":464}," tool=charge_card\n",[455,1498,1499,1501,1504,1507],{"class":457,"line":580},[455,1500,1481],{"class":461},[455,1502,1503],{"class":464}," user:",[455,1505,1506],{"class":464}," id=user-42",[455,1508,1509],{"class":464}," email=alice@example.com\n",[455,1511,1512,1514,1517,1520],{"class":457,"line":591},[455,1513,1481],{"class":461},[455,1515,1516],{"class":464}," billing:",[455,1518,1519],{"class":464}," amount=",[455,1521,1523],{"class":1522},"sbssI","1000\n",[455,1525,1526,1529,1532,1535,1538,1541,1543,1545,1547,1549,1551,1553,1555,1558,1560,1562,1564,1566,1568],{"class":457,"line":617},[455,1527,1528],{"class":461},"└─",[455,1530,1531],{"class":464}," requestLogs:",[455,1533,1534],{"class":464}," 0={",[455,1536,1537],{"class":539},"\"",[455,1539,1540],{"class":464},"level",[455,1542,1537],{"class":539},[455,1544,550],{"class":464},[455,1546,1537],{"class":539},[455,1548,1201],{"class":464},[455,1550,1537],{"class":539},[455,1552,563],{"class":464},[455,1554,1537],{"class":539},[455,1556,1557],{"class":464},"message",[455,1559,1537],{"class":539},[455,1561,550],{"class":464},[455,1563,1537],{"class":539},[455,1565,1284],{"class":464},[455,1567,1537],{"class":539},[455,1569,1570],{"class":464},",...}\n",[642,1572,314],{"id":1573},"api",[297,1575,1576,1588],{},[300,1577,1578],{},[303,1579,1580,1583,1585],{},[306,1581,1582],{},"Method",[306,1584,308],{},[306,1586,1587],{},"Description",[316,1589,1590,1611,1630,1643,1659,1678,1696],{},[303,1591,1592,1597,1600],{},[321,1593,1594],{},[292,1595,1596],{},"notify(level, data, logger?)",[321,1598,1599],{},"client",[321,1601,1602,1603,1606,1607,1610],{},"发送一个 ",[292,1604,1605],{},"notifications\u002Fmessage","。如果被 ",[292,1608,1609],{},"logging\u002FsetLevel"," 过滤掉，则静默丢弃。",[303,1612,1613,1625,1627],{},[321,1614,1615,339,1618,339,1620,339,1623],{},[292,1616,1617],{},"notify.debug",[292,1619,1201],{},[292,1621,1622],{},"warning",[292,1624,1368],{},[321,1626,1599],{},[321,1628,1629],{},"级别快捷方式。",[303,1631,1632,1637,1640],{},[321,1633,1634],{},[292,1635,1636],{},"set(fields)",[321,1638,1639],{},"server",[321,1641,1642],{},"将字段合并到 wide event 中。",[303,1644,1645,1650,1652],{},[321,1646,1647],{},[292,1648,1649],{},"event(name, fields?)",[321,1651,1639],{},[321,1653,1654,1655,1658],{},"向 wide event 的 ",[292,1656,1657],{},"requestLogs"," 追加一个离散事件。",[303,1660,1661,1666,1668],{},[321,1662,1663],{},[292,1664,1665],{},"setUser({ id, email, name })",[321,1667,1639],{},[321,1669,1670,1671,1674,1675,1677],{},"标记规范化的 ",[292,1672,1673],{},"user"," schema（会从 ",[292,1676,717],{}," 自动填充）。",[303,1679,1680,1685,1687],{},[321,1681,1682],{},[292,1683,1684],{},"setSession({ id })",[321,1686,1639],{},[321,1688,1689,1690,1692,1693,1677],{},"标记 ",[292,1691,725],{},"（会从 ",[292,1694,1695],{},"event.context.session",[303,1697,1698,1702,1704],{},[321,1699,1700],{},[292,1701,436],{},[321,1703,1639],{},[321,1705,1706,1707,1714,1715,761,1718,761,1720,1723],{},"底层的 ",[420,1708,1711],{"href":1709,"rel":1710},"https:\u002F\u002Fevlog.dev\u002Fdocs\u002Fapi\u002Frequest-logger",[424],[292,1712,1713],{},"RequestLogger","，用于 ",[292,1716,1717],{},"fork",[292,1719,1368],{},[292,1721,1722],{},"getContext","，…",[289,1725,1726,1729,1730,1732,1733,382],{},[292,1727,1728],{},"log.notify"," 始终会 resolve，且不会抛错——适合用于高频热路径。若未注册 ",[292,1731,381],{},"，服务器端方法会抛出 ",[292,1734,1735],{},"McpObservabilityNotEnabledError",[426,1737,1739],{"id":1738},"drains","Drains",[289,1741,1742,1743,440],{},"通过一个 Nitro 插件将每个 MCP wide event 发送到 ",[324,1744,1745],{},"Axiom、Sentry、OTLP、HyperDX、Datadog、Better Stack 或 PostHog",[445,1747,1750],{"className":514,"code":1748,"filename":1749,"language":517,"meta":451,"style":451},"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,1751,1752,1772,1776,1799,1830],{"__ignoreMap":451},[455,1753,1754,1756,1758,1761,1763,1765,1767,1770],{"class":457,"line":458},[455,1755,968],{"class":524},[455,1757,599],{"class":539},[455,1759,1760],{"class":535}," createAxiomDrain",[455,1762,976],{"class":539},[455,1764,979],{"class":524},[455,1766,566],{"class":539},[455,1768,1769],{"class":464},"evlog\u002Fadapters\u002Faxiom",[455,1771,987],{"class":539},[455,1773,1774],{"class":457,"line":543},[455,1775,1013],{"emptyLinePlaceholder":1012},[455,1777,1778,1780,1782,1785,1787,1789,1792,1795,1797],{"class":457,"line":580},[455,1779,525],{"class":524},[455,1781,528],{"class":524},[455,1783,1784],{"class":531}," defineNitroPlugin",[455,1786,536],{"class":535},[455,1788,536],{"class":539},[455,1790,1791],{"class":1110},"nitroApp",[455,1793,1794],{"class":539},")",[455,1796,1120],{"class":1103},[455,1798,588],{"class":539},[455,1800,1801,1804,1806,1809,1811,1814,1816,1818,1821,1823,1825,1827],{"class":457,"line":591},[455,1802,1803],{"class":535},"  nitroApp",[455,1805,1060],{"class":539},[455,1807,1808],{"class":535},"hooks",[455,1810,1060],{"class":539},[455,1812,1813],{"class":531},"hook",[455,1815,536],{"class":546},[455,1817,556],{"class":539},[455,1819,1820],{"class":464},"evlog:drain",[455,1822,556],{"class":539},[455,1824,563],{"class":539},[455,1826,1760],{"class":531},[455,1828,1829],{"class":546},"())\n",[455,1831,1832,1834],{"class":457,"line":617},[455,1833,626],{"class":539},[455,1835,629],{"class":535},[445,1837,1840],{"className":447,"code":1838,"filename":1839,"language":450,"meta":451,"style":451},"NUXT_AXIOM_TOKEN=xaat-...\nNUXT_AXIOM_DATASET=mcp-server\n",".env",[292,1841,1842,1853],{"__ignoreMap":451},[455,1843,1844,1847,1850],{"class":457,"line":458},[455,1845,1846],{"class":535},"NUXT_AXIOM_TOKEN",[455,1848,1849],{"class":539},"=",[455,1851,1852],{"class":464},"xaat-...\n",[455,1854,1855,1858,1860],{"class":457,"line":543},[455,1856,1857],{"class":535},"NUXT_AXIOM_DATASET",[455,1859,1849],{"class":539},[455,1861,1862],{"class":464},"mcp-server\n",[289,1864,1865,1866,382],{},"这个 hook 是可叠加的——可以并行注册多个 drains。自定义 drain 只是注册到同一个 hook 上的 ",[292,1867,1868],{},"(ctx) => Promise\u003Cvoid>",[1870,1871,1874,1875,382],"callout",{"icon":1872,"target":1873,"to":434},"i-lucide-arrow-up-right","_blank","有关全部适配器、采样、脱敏以及如何构建自定义 drains，请参阅 ",[420,1876,640],{"href":434,"rel":1877},[424],[1870,1879,1881,1883,1884,1887],{"icon":1880,"color":1622},"i-lucide-triangle-alert",[292,1882,294],{}," 需要 ",[292,1885,1886],{},"nitro.experimental.asyncContext: true","（自 Nuxt 3.8+ 起默认为 true）。",[426,1889,1890],{"id":1890},"下一步",[392,1892,1893,1903,1910,1920],{},[395,1894,1895,1898,1899,1902],{},[420,1896,1897],{"href":216},"中间件"," — 在你的处理器中间件里捕获 ",[292,1900,1901],{},"requestId","、耗时和工具名称。",[395,1904,1905,1907,1908,382],{},[420,1906,234],{"href":235}," — 自动为每个 wide event 标记 ",[292,1909,725],{},[395,1911,1912,1915,1916,339,1918,382],{},[420,1913,1914],{"href":260},"认证"," — 软认证会在每个事件上填充 ",[292,1917,706],{},[292,1919,709],{},[395,1921,1922,1925],{},[420,1923,640],{"href":434,"rel":1924},[424]," — drains、采样、脱敏和自定义适配器。",[1927,1928,1929],"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":451,"searchDepth":543,"depth":543,"links":1931},[1932,1937,1940,1941],{"id":428,"depth":543,"text":428,"children":1933},[1934,1935,1936],{"id":644,"depth":580,"text":644},{"id":775,"depth":580,"text":776},{"id":890,"depth":580,"text":891},{"id":952,"depth":543,"text":952,"children":1938},[1939],{"id":1573,"depth":580,"text":314},{"id":1738,"depth":543,"text":1739},{"id":1890,"depth":543,"text":1890},"使用 useMcpLogger() 将日志流式传递给 MCP 客户端，并捕获结构化的宽事件","md",null,{},{"title":200,"icon":203},{"title":1948,"description":1949},"MCP 日志与可观测性","向已连接的 MCP 客户端发送通知\u002F消息，并通过内置的 evlog 集成捕获结构化的服务器端全局事件。","b1iuA00uA0hh19hZcgFXDOkZdznuOXLYWv8FANRfdE0",[1952,1954],{"title":195,"path":196,"stem":197,"description":1953,"icon":198,"children":-1},"自定义模块查找 MCP 定义的位置。",{"title":205,"path":206,"stem":207,"description":1955,"icon":208,"children":-1},"该工具包如何打包、提供和连接 MCP Apps —— 以及你可以在其基础上构建的模式。",1778659577355]