[{"data":1,"prerenderedAt":7031},["ShallowReactive",2],{"navigation":3,"\u002Fadvanced\u002Fmcp":189,"\u002Fadvanced\u002Fmcp-surround":7026},[4,35,57,75,101,123,149,171],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":34},"第 1 章：认识 Claude Code","i-lucide-rocket","\u002Fintro","1.intro",[10,14,18,22,26,30],{"title":11,"path":12,"stem":13},"什么是 Claude Code","\u002Fintro\u002Fwhat-is-claude-code","1.intro\u002F1.what-is-claude-code",{"title":15,"path":16,"stem":17},"Claude Code 与 Copilot、Cursor、Windsurf 的本质区别","\u002Fintro\u002Fvs-competitors","1.intro\u002F2.vs-competitors",{"title":19,"path":20,"stem":21},"AI 编程助手生态全景与选型指南","\u002Fintro\u002Fecosystem-guide","1.intro\u002F3.ecosystem-guide",{"title":23,"path":24,"stem":25},"LLM 的概率本质","\u002Fintro\u002Fllm-probability","1.intro\u002F4.llm-probability",{"title":27,"path":28,"stem":29},"从聊天机器人到 Agent","\u002Fintro\u002Ffrom-chatbot-to-agent","1.intro\u002F5.from-chatbot-to-agent",{"title":31,"path":32,"stem":33},"Claude Code 的 Agentic Loop 全拆解","\u002Fintro\u002Fagentic-loop","1.intro\u002F6.agentic-loop",false,{"title":36,"icon":37,"path":38,"stem":39,"children":40,"page":34},"第 2 章：安装与配置","i-lucide-settings","\u002Fsetup","2.setup",[41,45,49,53],{"title":42,"path":43,"stem":44},"系统要求与安装方式","\u002Fsetup\u002Fsystem-requirements","2.setup\u002F1.system-requirements",{"title":46,"path":47,"stem":48},"认证、登录与多账户管理","\u002Fsetup\u002Fauthentication","2.setup\u002F2.authentication",{"title":50,"path":51,"stem":52},"选择你的界面","\u002Fsetup\u002Fchoose-interface","2.setup\u002F3.choose-interface",{"title":54,"path":55,"stem":56},"Coding Plan","\u002Fsetup\u002Fcoding-plan","2.setup\u002F4.coding-plan",{"title":58,"icon":59,"path":60,"stem":61,"children":62,"page":34},"第 3 章：快速上手","i-lucide-hand","\u002Fquickstart","3.quickstart",[63,67,71],{"title":64,"path":65,"stem":66},"启动、交互模式与基本命令","\u002Fquickstart\u002Fstartup","3.quickstart\u002F1.startup",{"title":68,"path":69,"stem":70},"让 Claude 理解你的项目","\u002Fquickstart\u002Fcodebase-understanding","3.quickstart\u002F2.codebase-understanding",{"title":72,"path":73,"stem":74},"第一次代码变更","\u002Fquickstart\u002Ffirst-change","3.quickstart\u002F3.first-change",{"title":76,"icon":77,"path":78,"stem":79,"children":80,"page":34},"第 4 章：核心功能","i-lucide-laptop","\u002Fcore-features","4.core-features",[81,85,89,93,97],{"title":82,"path":83,"stem":84},"代码库全景扫描与模块关系分析","\u002Fcore-features\u002Fcodebase-scan","4.core-features\u002F1.codebase-scan",{"title":86,"path":87,"stem":88},"代码编辑与生成","\u002Fcore-features\u002Fedit-generate","4.core-features\u002F2.edit-generate",{"title":90,"path":91,"stem":92},"测试与调试","\u002Fcore-features\u002Ftest-debug","4.core-features\u002F3.test-debug",{"title":94,"path":95,"stem":96},"Git 工作流","\u002Fcore-features\u002Fgit-workflow","4.core-features\u002F4.git-workflow",{"title":98,"path":99,"stem":100},"工具链执行","\u002Fcore-features\u002Ftoolchain","4.core-features\u002F5.toolchain",{"title":102,"icon":103,"path":104,"stem":105,"children":106,"page":34},"第 5 章：进阶配置","i-lucide-wrench","\u002Fadvanced","5.advanced",[107,111,115,119],{"title":108,"path":109,"stem":110},"CLAUDE.md","\u002Fadvanced\u002Fclaude-md","5.advanced\u002F1.claude-md",{"title":112,"path":113,"stem":114},"Skills","\u002Fadvanced\u002Fskills","5.advanced\u002F2.skills",{"title":116,"path":117,"stem":118},"MCP","\u002Fadvanced\u002Fmcp","5.advanced\u002F3.mcp",{"title":120,"path":121,"stem":122},"Hooks 与 Plan 模式","\u002Fadvanced\u002Fhooks-plan","5.advanced\u002F4.hooks-plan",{"title":124,"icon":125,"path":126,"stem":127,"children":128,"page":34},"第 6 章：实战开发","i-lucide-hammer","\u002Fpractice","6.practice",[129,133,137,141,145],{"title":130,"path":131,"stem":132},"需求分析与架构设计","\u002Fpractice\u002Frequirements-architecture","6.practice\u002F1.requirements-architecture",{"title":134,"path":135,"stem":136},"项目脚手架搭建与技术选型","\u002Fpractice\u002Fscaffolding","6.practice\u002F2.scaffolding",{"title":138,"path":139,"stem":140},"核心功能实现","\u002Fpractice\u002Fcore-features","6.practice\u002F3.core-features",{"title":142,"path":143,"stem":144},"测试覆盖、代码审查与质量调优","\u002Fpractice\u002Ftesting-quality","6.practice\u002F4.testing-quality",{"title":146,"path":147,"stem":148},"部署上线与成果分享","\u002Fpractice\u002Fdeployment","6.practice\u002F5.deployment",{"title":150,"icon":151,"path":152,"stem":153,"children":154,"page":34},"第 7 章：心法层","i-lucide-brain","\u002Fmindset","7.mindset",[155,159,163,167],{"title":156,"path":157,"stem":158},"提示词设计原则","\u002Fmindset\u002Fprompt-design","7.mindset\u002F1.prompt-design",{"title":160,"path":161,"stem":162},"上下文管理策略","\u002Fmindset\u002Fcontext-management","7.mindset\u002F2.context-management",{"title":164,"path":165,"stem":166},"安全与权限控制","\u002Fmindset\u002Fsecurity","7.mindset\u002F3.security",{"title":168,"path":169,"stem":170},"Boris Cherny 的 9 条实战心法与团队推广经验","\u002Fmindset\u002Fboris-cherny-tips","7.mindset\u002F4.boris-cherny-tips",{"title":172,"icon":173,"path":174,"stem":175,"children":176,"page":34},"附录","i-lucide-paperclip","\u002Fappendix","8.appendix",[177,181,185],{"title":178,"path":179,"stem":180},"常用命令速查表","\u002Fappendix\u002Fa.command-cheatsheet","8.appendix\u002Fa.command-cheatsheet",{"title":182,"path":183,"stem":184},"AI 核心术语汇编","\u002Fappendix\u002Fb.ai-terminology","8.appendix\u002Fb.ai-terminology",{"title":186,"path":187,"stem":188},"资源链接与延伸阅读","\u002Fappendix\u002Fc.resources","8.appendix\u002Fc.resources",{"id":190,"title":116,"body":191,"description":7019,"extension":7020,"links":7021,"meta":7022,"navigation":1856,"path":117,"seo":7024,"stem":118,"__hash__":7025},"docs\u002F5.advanced\u002F3.mcp.md",{"type":192,"value":193,"toc":6963},"minimark",[194,199,204,208,211,214,218,221,282,286,289,311,315,319,326,337,343,349,355,359,362,443,447,450,455,462,472,729,735,1005,1014,1062,1066,1069,1073,1094,1098,1101,1198,1202,1205,1272,1286,1290,1293,1336,1340,1343,1347,1469,1473,1729,1733,1736,1780,1784,1788,1791,1795,1798,1923,1927,1992,1996,1999,2180,2184,2187,2260,2353,2359,2452,2456,2548,2552,2557,2680,2683,2704,2708,2711,2752,2755,2761,2764,2806,2809,2815,2818,2841,2844,2850,2854,2864,2870,2876,2900,2906,2910,2914,2993,2996,3114,3118,3541,3545,4231,4235,4618,4622,4887,4891,5463,5467,5503,5509,5636,5640,5701,5704,5947,5951,5955,6049,6053,6065,6069,6072,6078,6081,6095,6101,6105,6123,6127,6131,6137,6143,6187,6192,6198,6203,6214,6218,6223,6227,6260,6264,6270,6274,6279,6283,6306,6309,6313,6319,6323,6328,6334,6338,6342,6345,6428,6432,6436,6458,6462,6484,6488,6502,6506,6517,6521,6535,6539,6563,6567,6581,6585,6599,6603,6606,6641,6644,6865,6869,6959],[195,196,198],"h2",{"id":197},"_1-mcp-是什么","1. MCP 是什么",[200,201,203],"h3",{"id":202},"_11-定义与起源","1.1 定义与起源",[205,206,207],"p",{},"MCP（Model Context Protocol，模型上下文协议）是 Anthropic 于 2024 年 11 月推出的开放协议，旨在标准化大语言模型（LLM）应用程序与外部数据源、工具之间的集成方式。官方将其比喻为\"AI 世界的 USB-C 接口\"——如同 USB-C 统一了各类电子设备的连接标准，MCP 试图统一 AI 应用与外部世界的通信方式。",[205,209,210],{},"在 MCP 出现之前，如果你想让 AI 访问某个数据源，需要为每个 AI 工具单独编写适配层：给 Claude 写一个插件，给 Cursor 写一个扩展，给 Windsurf 再写一个……复杂度是 N x M（N 个数据源 x M 个 AI 工具）。有了 MCP 之后，你只需要编写一次 MCP Server，所有支持 MCP 的客户端都能直接调用，复杂度降到了 N + M。",[205,212,213],{},"MCP 的设计深受 LSP（Language Server Protocol，语言服务器协议）的启发。LSP 标准化了如何在各种开发工具中添加编程语言支持，而 MCP 则标准化了如何将额外的上下文和工具集成到 AI 应用生态中。",[200,215,217],{"id":216},"_12-设计哲学","1.2 设计哲学",[205,219,220],{},"MCP 基于以下核心设计原则：",[222,223,224,237],"table",{},[225,226,227],"thead",{},[228,229,230,234],"tr",{},[231,232,233],"th",{},"原则",[231,235,236],{},"含义",[238,239,240,252,262,272],"tbody",{},[228,241,242,249],{},[243,244,245],"td",{},[246,247,248],"strong",{},"服务器应极其易于构建",[243,250,251],{},"宿主应用处理复杂的编排职责，服务器专注于特定、明确定义的能力",[228,253,254,259],{},[243,255,256],{},[246,257,258],{},"服务器应高度可组合",[243,260,261],{},"每个服务器提供隔离的聚焦功能，多个服务器可无缝组合",[228,263,264,269],{},[243,265,266],{},[246,267,268],{},"服务器不应读取整个对话",[243,270,271],{},"服务器仅接收必要的上下文信息，完整对话历史保留在宿主",[228,273,274,279],{},[243,275,276],{},[246,277,278],{},"功能可逐步添加",[243,280,281],{},"核心协议提供最低限度的必需功能，可根据需要协商额外能力",[200,283,285],{"id":284},"_13-解决的问题","1.3 解决的问题",[205,287,288],{},"MCP 主要解决三个核心问题：",[290,291,292,299,305],"ol",{},[293,294,295,298],"li",{},[246,296,297],{},"集成碎片化","：每个 AI 工具都需要为每个数据源编写自定义集成代码",[293,300,301,304],{},[246,302,303],{},"上下文传递困难","：LLM 难以获取实时、私有、领域特定的数据",[293,306,307,310],{},[246,308,309],{},"工具发现不一致","：不同平台对\"工具\"的定义和调用方式各不相同",[195,312,314],{"id":313},"_2-核心架构","2. 核心架构",[200,316,318],{"id":317},"_21-三层组件模型","2.1 三层组件模型",[205,320,321,322,325],{},"MCP 采用",[246,323,324],{},"客户端-宿主-服务器","架构，其中每个宿主可以运行多个客户端实例：",[327,328,333],"pre",{"className":329,"code":331,"language":332},[330],"language-text","+-------------------------------------------------------------+\n|                        MCP Host                             |\n|  (Claude Desktop \u002F Claude Code \u002F Cursor \u002F Windsurf ...)     |\n|                                                             |\n|  +----------------+    +----------------+                   |\n|  |  MCP Client 1  |    |  MCP Client 2  |  ...             |\n|  |  (连接 Server A)|    |  (连接 Server B)|                  |\n|  +-------+--------+    +-------+--------+                   |\n+----------|-------------------|------------------------------+\n           |                   |\n           v                   v\n    +-------------+      +-------------+\n    | MCP Server A|      | MCP Server B|\n    | (GitHub API)|      | (PostgreSQL)|\n    +-------------+      +-------------+\n","text",[334,335,331],"code",{"__ignoreMap":336},"",[205,338,339,342],{},[246,340,341],{},"宿主（Host）","：LLM 应用本身，作为容器和协调者。它创建并管理多个客户端实例，控制连接权限和生命周期，执行安全策略和同意要求，处理用户授权决策，协调 AI\u002FLLM 集成和采样。",[205,344,345,348],{},[246,346,347],{},"客户端（Client）","：由宿主创建，维护一个与特定服务器的一对一连接。每个客户端建立一个有状态的会话，处理协议协商和能力交换，双向路由协议消息，管理订阅和通知，在服务器之间维护安全边界。",[205,350,351,354],{},[246,352,353],{},"服务器（Server）","：提供专门的上下文和能力。通过 MCP 原语暴露资源、工具和提示，独立运行并承担明确职责，通过客户端接口请求采样，必须遵守安全限制，可以是本地进程或远程服务。",[200,356,358],{"id":357},"_22-协议规范基于-json-rpc-20","2.2 协议规范：基于 JSON-RPC 2.0",[205,360,361],{},"MCP 基于 JSON-RPC 2.0 构建，提供了一种有状态的会话协议。它定义了三种核心消息类型：",[222,363,364,377],{},[225,365,366],{},[228,367,368,371,374],{},[231,369,370],{},"消息类型",[231,372,373],{},"特征",[231,375,376],{},"用途",[238,378,379,404,427],{},[228,380,381,386,401],{},[243,382,383],{},[246,384,385],{},"请求（Request）",[243,387,388,389,392,393,396,397,400],{},"具有 ",[334,390,391],{},"id","、",[334,394,395],{},"method"," 和 ",[334,398,399],{},"params","，期望响应",[243,402,403],{},"调用工具、列出资源、获取提示",[228,405,406,411,424],{},[243,407,408],{},[246,409,410],{},"响应（Response）",[243,412,413,414,416,417,420,421],{},"匹配特定请求 ",[334,415,391],{}," 的成功 ",[334,418,419],{},"result"," 或 ",[334,422,423],{},"error",[243,425,426],{},"返回操作结果",[228,428,429,434,440],{},[243,430,431],{},[246,432,433],{},"通知（Notification）",[243,435,436,437,439],{},"无需响应的单向消息，无 ",[334,438,391],{}," 字段",[243,441,442],{},"状态变更、初始化完成信号",[200,444,446],{"id":445},"_23-生命周期从握手到关闭","2.3 生命周期：从握手到关闭",[205,448,449],{},"MCP 定义了严格的三阶段连接生命周期：",[451,452,454],"h4",{"id":453},"阶段一初始化initialization","阶段一：初始化（Initialization）",[205,456,457,458,461],{},"初始化是客户端与服务器的第一次交互，",[246,459,460],{},"必须","在任何其他操作之前完成。",[205,463,464,467,468,471],{},[246,465,466],{},"步骤 1","：客户端发送 ",[334,469,470],{},"initialize"," 请求",[327,473,477],{"className":474,"code":475,"language":476,"meta":336,"style":336},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"initialize\",\n  \"params\": {\n    \"protocolVersion\": \"2025-03-26\",\n    \"capabilities\": {\n      \"roots\": { \"listChanged\": true },\n      \"sampling\": {}\n    },\n    \"clientInfo\": {\n      \"name\": \"ClaudeCode\",\n      \"version\": \"2.1.0\"\n    }\n  }\n}\n","json",[334,478,479,488,516,533,552,566,589,603,635,650,656,670,691,711,717,723],{"__ignoreMap":336},[480,481,484],"span",{"class":482,"line":483},"line",1,[480,485,487],{"class":486},"sMK4o","{\n",[480,489,491,494,498,501,504,507,511,513],{"class":482,"line":490},2,[480,492,493],{"class":486},"  \"",[480,495,497],{"class":496},"spNyl","jsonrpc",[480,499,500],{"class":486},"\"",[480,502,503],{"class":486},":",[480,505,506],{"class":486}," \"",[480,508,510],{"class":509},"sfazB","2.0",[480,512,500],{"class":486},[480,514,515],{"class":486},",\n",[480,517,519,521,523,525,527,531],{"class":482,"line":518},3,[480,520,493],{"class":486},[480,522,391],{"class":496},[480,524,500],{"class":486},[480,526,503],{"class":486},[480,528,530],{"class":529},"sbssI"," 1",[480,532,515],{"class":486},[480,534,536,538,540,542,544,546,548,550],{"class":482,"line":535},4,[480,537,493],{"class":486},[480,539,395],{"class":496},[480,541,500],{"class":486},[480,543,503],{"class":486},[480,545,506],{"class":486},[480,547,470],{"class":509},[480,549,500],{"class":486},[480,551,515],{"class":486},[480,553,555,557,559,561,563],{"class":482,"line":554},5,[480,556,493],{"class":486},[480,558,399],{"class":496},[480,560,500],{"class":486},[480,562,503],{"class":486},[480,564,565],{"class":486}," {\n",[480,567,569,572,576,578,580,582,585,587],{"class":482,"line":568},6,[480,570,571],{"class":486},"    \"",[480,573,575],{"class":574},"sBMFI","protocolVersion",[480,577,500],{"class":486},[480,579,503],{"class":486},[480,581,506],{"class":486},[480,583,584],{"class":509},"2025-03-26",[480,586,500],{"class":486},[480,588,515],{"class":486},[480,590,592,594,597,599,601],{"class":482,"line":591},7,[480,593,571],{"class":486},[480,595,596],{"class":574},"capabilities",[480,598,500],{"class":486},[480,600,503],{"class":486},[480,602,565],{"class":486},[480,604,606,609,612,614,616,619,621,625,627,629,632],{"class":482,"line":605},8,[480,607,608],{"class":486},"      \"",[480,610,611],{"class":529},"roots",[480,613,500],{"class":486},[480,615,503],{"class":486},[480,617,618],{"class":486}," {",[480,620,506],{"class":486},[480,622,624],{"class":623},"swJcz","listChanged",[480,626,500],{"class":486},[480,628,503],{"class":486},[480,630,631],{"class":486}," true",[480,633,634],{"class":486}," },\n",[480,636,638,640,643,645,647],{"class":482,"line":637},9,[480,639,608],{"class":486},[480,641,642],{"class":529},"sampling",[480,644,500],{"class":486},[480,646,503],{"class":486},[480,648,649],{"class":486}," {}\n",[480,651,653],{"class":482,"line":652},10,[480,654,655],{"class":486},"    },\n",[480,657,659,661,664,666,668],{"class":482,"line":658},11,[480,660,571],{"class":486},[480,662,663],{"class":574},"clientInfo",[480,665,500],{"class":486},[480,667,503],{"class":486},[480,669,565],{"class":486},[480,671,673,675,678,680,682,684,687,689],{"class":482,"line":672},12,[480,674,608],{"class":486},[480,676,677],{"class":529},"name",[480,679,500],{"class":486},[480,681,503],{"class":486},[480,683,506],{"class":486},[480,685,686],{"class":509},"ClaudeCode",[480,688,500],{"class":486},[480,690,515],{"class":486},[480,692,694,696,699,701,703,705,708],{"class":482,"line":693},13,[480,695,608],{"class":486},[480,697,698],{"class":529},"version",[480,700,500],{"class":486},[480,702,503],{"class":486},[480,704,506],{"class":486},[480,706,707],{"class":509},"2.1.0",[480,709,710],{"class":486},"\"\n",[480,712,714],{"class":482,"line":713},14,[480,715,716],{"class":486},"    }\n",[480,718,720],{"class":482,"line":719},15,[480,721,722],{"class":486},"  }\n",[480,724,726],{"class":482,"line":725},16,[480,727,728],{"class":486},"}\n",[205,730,731,734],{},[246,732,733],{},"步骤 2","：服务器响应其能力和信息",[327,736,738],{"className":474,"code":737,"language":476,"meta":336,"style":336},"{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"result\": {\n    \"protocolVersion\": \"2025-03-26\",\n    \"capabilities\": {\n      \"logging\": {},\n      \"prompts\": { \"listChanged\": true },\n      \"resources\": { \"subscribe\": true, \"listChanged\": true },\n      \"tools\": { \"listChanged\": true }\n    },\n    \"serverInfo\": {\n      \"name\": \"github-server\",\n      \"version\": \"1.0.0\"\n    },\n    \"instructions\": \"Optional instructions for the client\"\n  }\n}\n",[334,739,740,744,762,776,788,806,818,832,857,894,920,924,937,956,973,977,995,1000],{"__ignoreMap":336},[480,741,742],{"class":482,"line":483},[480,743,487],{"class":486},[480,745,746,748,750,752,754,756,758,760],{"class":482,"line":490},[480,747,493],{"class":486},[480,749,497],{"class":496},[480,751,500],{"class":486},[480,753,503],{"class":486},[480,755,506],{"class":486},[480,757,510],{"class":509},[480,759,500],{"class":486},[480,761,515],{"class":486},[480,763,764,766,768,770,772,774],{"class":482,"line":518},[480,765,493],{"class":486},[480,767,391],{"class":496},[480,769,500],{"class":486},[480,771,503],{"class":486},[480,773,530],{"class":529},[480,775,515],{"class":486},[480,777,778,780,782,784,786],{"class":482,"line":535},[480,779,493],{"class":486},[480,781,419],{"class":496},[480,783,500],{"class":486},[480,785,503],{"class":486},[480,787,565],{"class":486},[480,789,790,792,794,796,798,800,802,804],{"class":482,"line":554},[480,791,571],{"class":486},[480,793,575],{"class":574},[480,795,500],{"class":486},[480,797,503],{"class":486},[480,799,506],{"class":486},[480,801,584],{"class":509},[480,803,500],{"class":486},[480,805,515],{"class":486},[480,807,808,810,812,814,816],{"class":482,"line":568},[480,809,571],{"class":486},[480,811,596],{"class":574},[480,813,500],{"class":486},[480,815,503],{"class":486},[480,817,565],{"class":486},[480,819,820,822,825,827,829],{"class":482,"line":591},[480,821,608],{"class":486},[480,823,824],{"class":529},"logging",[480,826,500],{"class":486},[480,828,503],{"class":486},[480,830,831],{"class":486}," {},\n",[480,833,834,836,839,841,843,845,847,849,851,853,855],{"class":482,"line":605},[480,835,608],{"class":486},[480,837,838],{"class":529},"prompts",[480,840,500],{"class":486},[480,842,503],{"class":486},[480,844,618],{"class":486},[480,846,506],{"class":486},[480,848,624],{"class":623},[480,850,500],{"class":486},[480,852,503],{"class":486},[480,854,631],{"class":486},[480,856,634],{"class":486},[480,858,859,861,864,866,868,870,872,875,877,879,882,884,886,888,890,892],{"class":482,"line":637},[480,860,608],{"class":486},[480,862,863],{"class":529},"resources",[480,865,500],{"class":486},[480,867,503],{"class":486},[480,869,618],{"class":486},[480,871,506],{"class":486},[480,873,874],{"class":623},"subscribe",[480,876,500],{"class":486},[480,878,503],{"class":486},[480,880,881],{"class":486}," true,",[480,883,506],{"class":486},[480,885,624],{"class":623},[480,887,500],{"class":486},[480,889,503],{"class":486},[480,891,631],{"class":486},[480,893,634],{"class":486},[480,895,896,898,901,903,905,907,909,911,913,915,917],{"class":482,"line":652},[480,897,608],{"class":486},[480,899,900],{"class":529},"tools",[480,902,500],{"class":486},[480,904,503],{"class":486},[480,906,618],{"class":486},[480,908,506],{"class":486},[480,910,624],{"class":623},[480,912,500],{"class":486},[480,914,503],{"class":486},[480,916,631],{"class":486},[480,918,919],{"class":486}," }\n",[480,921,922],{"class":482,"line":658},[480,923,655],{"class":486},[480,925,926,928,931,933,935],{"class":482,"line":672},[480,927,571],{"class":486},[480,929,930],{"class":574},"serverInfo",[480,932,500],{"class":486},[480,934,503],{"class":486},[480,936,565],{"class":486},[480,938,939,941,943,945,947,949,952,954],{"class":482,"line":693},[480,940,608],{"class":486},[480,942,677],{"class":529},[480,944,500],{"class":486},[480,946,503],{"class":486},[480,948,506],{"class":486},[480,950,951],{"class":509},"github-server",[480,953,500],{"class":486},[480,955,515],{"class":486},[480,957,958,960,962,964,966,968,971],{"class":482,"line":713},[480,959,608],{"class":486},[480,961,698],{"class":529},[480,963,500],{"class":486},[480,965,503],{"class":486},[480,967,506],{"class":486},[480,969,970],{"class":509},"1.0.0",[480,972,710],{"class":486},[480,974,975],{"class":482,"line":719},[480,976,655],{"class":486},[480,978,979,981,984,986,988,990,993],{"class":482,"line":725},[480,980,571],{"class":486},[480,982,983],{"class":574},"instructions",[480,985,500],{"class":486},[480,987,503],{"class":486},[480,989,506],{"class":486},[480,991,992],{"class":509},"Optional instructions for the client",[480,994,710],{"class":486},[480,996,998],{"class":482,"line":997},17,[480,999,722],{"class":486},[480,1001,1003],{"class":482,"line":1002},18,[480,1004,728],{"class":486},[205,1006,1007,467,1010,1013],{},[246,1008,1009],{},"步骤 3",[334,1011,1012],{},"initialized"," 通知确认就绪",[327,1015,1017],{"className":474,"code":1016,"language":476,"meta":336,"style":336},"{\n  \"jsonrpc\": \"2.0\",\n  \"method\": \"notifications\u002Finitialized\"\n}\n",[334,1018,1019,1023,1041,1058],{"__ignoreMap":336},[480,1020,1021],{"class":482,"line":483},[480,1022,487],{"class":486},[480,1024,1025,1027,1029,1031,1033,1035,1037,1039],{"class":482,"line":490},[480,1026,493],{"class":486},[480,1028,497],{"class":496},[480,1030,500],{"class":486},[480,1032,503],{"class":486},[480,1034,506],{"class":486},[480,1036,510],{"class":509},[480,1038,500],{"class":486},[480,1040,515],{"class":486},[480,1042,1043,1045,1047,1049,1051,1053,1056],{"class":482,"line":518},[480,1044,493],{"class":486},[480,1046,395],{"class":496},[480,1048,500],{"class":486},[480,1050,503],{"class":486},[480,1052,506],{"class":486},[480,1054,1055],{"class":509},"notifications\u002Finitialized",[480,1057,710],{"class":486},[480,1059,1060],{"class":482,"line":535},[480,1061,728],{"class":486},[451,1063,1065],{"id":1064},"阶段二运行operation","阶段二：运行（Operation）",[205,1067,1068],{},"双方根据协商的能力交换消息。客户端可以请求工具列表、调用工具、读取资源、获取提示；服务器可以发送能力变更通知。",[451,1070,1072],{"id":1071},"阶段三关闭shutdown","阶段三：关闭（Shutdown）",[1074,1075,1076,1088],"ul",{},[293,1077,1078,1081,1082,420,1085],{},[246,1079,1080],{},"stdio 传输","：客户端关闭输入流，等待服务器退出，必要时发送 ",[334,1083,1084],{},"SIGTERM",[334,1086,1087],{},"SIGKILL",[293,1089,1090,1093],{},[246,1091,1092],{},"HTTP 传输","：关闭关联的 HTTP 连接",[200,1095,1097],{"id":1096},"_24-能力协商","2.4 能力协商",[205,1099,1100],{},"MCP 使用基于能力的协商系统，客户端和服务器在初始化期间显式声明支持的功能：",[222,1102,1103,1116],{},[225,1104,1105],{},[228,1106,1107,1110,1113],{},[231,1108,1109],{},"类别",[231,1111,1112],{},"能力",[231,1114,1115],{},"描述",[238,1117,1118,1130,1141,1153,1164,1175,1186],{},[228,1119,1120,1123,1127],{},[243,1121,1122],{},"客户端",[243,1124,1125],{},[334,1126,611],{},[243,1128,1129],{},"提供文件系统根目录的能力",[228,1131,1132,1134,1138],{},[243,1133,1122],{},[243,1135,1136],{},[334,1137,642],{},[243,1139,1140],{},"支持 LLM 采样请求",[228,1142,1143,1146,1150],{},[243,1144,1145],{},"服务器",[243,1147,1148],{},[334,1149,838],{},[243,1151,1152],{},"提供提示模板",[228,1154,1155,1157,1161],{},[243,1156,1145],{},[243,1158,1159],{},[334,1160,863],{},[243,1162,1163],{},"提供可读资源",[228,1165,1166,1168,1172],{},[243,1167,1145],{},[243,1169,1170],{},[334,1171,900],{},[243,1173,1174],{},"暴露可调用的工具",[228,1176,1177,1179,1183],{},[243,1178,1145],{},[243,1180,1181],{},[334,1182,824],{},[243,1184,1185],{},"发送结构化日志消息",[228,1187,1188,1190,1195],{},[243,1189,1145],{},[243,1191,1192],{},[334,1193,1194],{},"completions",[243,1196,1197],{},"支持参数自动补全",[200,1199,1201],{"id":1200},"_25-三种核心原语","2.5 三种核心原语",[205,1203,1204],{},"MCP Server 通过三种原语暴露功能：",[222,1206,1207,1222],{},[225,1208,1209],{},[228,1210,1211,1214,1217,1219],{},[231,1212,1213],{},"原语",[231,1215,1216],{},"类型",[231,1218,376],{},[231,1220,1221],{},"示例",[238,1223,1224,1240,1256],{},[228,1225,1226,1231,1234,1237],{},[243,1227,1228],{},[246,1229,1230],{},"Tools（工具）",[243,1232,1233],{},"可执行",[243,1235,1236],{},"执行操作、副作用",[243,1238,1239],{},"查询数据库、发送消息、创建文件",[228,1241,1242,1247,1250,1253],{},[243,1243,1244],{},[246,1245,1246],{},"Resources（资源）",[243,1248,1249],{},"只读",[243,1251,1252],{},"提供数据、上下文",[243,1254,1255],{},"文件内容、API 返回、配置信息",[228,1257,1258,1263,1266,1269],{},[243,1259,1260],{},[246,1261,1262],{},"Prompts（提示）",[243,1264,1265],{},"模板",[243,1267,1268],{},"预定义对话模板",[243,1270,1271],{},"代码审查模板、日报生成模板",[205,1273,1274,1277,1278,1281,1282,1285],{},[246,1275,1276],{},"Tools"," 是 AI 可以调用的\"函数\"，执行某个动作并返回结果。",[246,1279,1280],{},"Resources"," 是 AI 可以读取的\"数据源\"。",[246,1283,1284],{},"Prompts"," 是帮助 AI 更快理解任务的\"模板\"。",[200,1287,1289],{"id":1288},"_26-传输方式","2.6 传输方式",[205,1291,1292],{},"MCP 支持两种传输方式：",[222,1294,1295,1308],{},[225,1296,1297],{},[228,1298,1299,1302,1305],{},[231,1300,1301],{},"传输方式",[231,1303,1304],{},"适用场景",[231,1306,1307],{},"特点",[238,1309,1310,1323],{},[228,1311,1312,1317,1320],{},[243,1313,1314],{},[246,1315,1316],{},"stdio",[243,1318,1319],{},"本地进程通信",[243,1321,1322],{},"通过标准输入输出传输，适合本地工具，安全性高",[228,1324,1325,1330,1333],{},[243,1326,1327],{},[246,1328,1329],{},"HTTP \u002F SSE",[243,1331,1332],{},"远程服务通信",[243,1334,1335],{},"基于 HTTP 或 Server-Sent Events，适合云端服务，需处理认证",[195,1337,1339],{"id":1338},"_3-内置-mcp-server-列表","3. 内置 MCP Server 列表",[205,1341,1342],{},"MCP 生态已发展出数百个 Server，覆盖开发、数据、通信、自动化等多个领域。以下是官方和社区维护的核心 Server：",[200,1344,1346],{"id":1345},"_31-官方参考实现","3.1 官方参考实现",[222,1348,1349,1362],{},[225,1350,1351],{},[228,1352,1353,1356,1359],{},[231,1354,1355],{},"Server",[231,1357,1358],{},"功能",[231,1360,1361],{},"安装方式",[238,1363,1364,1379,1394,1409,1424,1439,1454],{},[228,1365,1366,1371,1374],{},[243,1367,1368],{},[246,1369,1370],{},"Everything",[243,1372,1373],{},"参考测试服务器，包含 prompts、resources、tools 完整示例",[243,1375,1376],{},[334,1377,1378],{},"npx -y @modelcontextprotocol\u002Fserver-everything",[228,1380,1381,1386,1389],{},[243,1382,1383],{},[246,1384,1385],{},"Fetch",[243,1387,1388],{},"Web 内容获取和转换，优化 LLM 使用效率",[243,1390,1391],{},[334,1392,1393],{},"npx -y @modelcontextprotocol\u002Fserver-fetch",[228,1395,1396,1401,1404],{},[243,1397,1398],{},[246,1399,1400],{},"Filesystem",[243,1402,1403],{},"安全文件操作，支持可配置访问控制",[243,1405,1406],{},[334,1407,1408],{},"npx -y @modelcontextprotocol\u002Fserver-filesystem \u002Fallowed\u002Fpath",[228,1410,1411,1416,1419],{},[243,1412,1413],{},[246,1414,1415],{},"Git",[243,1417,1418],{},"读取、搜索和操作 Git 仓库",[243,1420,1421],{},[334,1422,1423],{},"uvx mcp-server-git",[228,1425,1426,1431,1434],{},[243,1427,1428],{},[246,1429,1430],{},"Memory",[243,1432,1433],{},"基于知识图谱的持久化记忆系统",[243,1435,1436],{},[334,1437,1438],{},"npx -y @modelcontextprotocol\u002Fserver-memory",[228,1440,1441,1446,1449],{},[243,1442,1443],{},[246,1444,1445],{},"Sequential Thinking",[243,1447,1448],{},"动态反思式问题求解",[243,1450,1451],{},[334,1452,1453],{},"npx -y @modelcontextprotocol\u002Fserver-sequentialthinking",[228,1455,1456,1461,1464],{},[243,1457,1458],{},[246,1459,1460],{},"Time",[243,1462,1463],{},"时间和时区转换",[243,1465,1466],{},[334,1467,1468],{},"npx -y @modelcontextprotocol\u002Fserver-time",[200,1470,1472],{"id":1471},"_32-常用第三方-server","3.2 常用第三方 Server",[222,1474,1475,1487],{},[225,1476,1477],{},[228,1478,1479,1481,1483,1485],{},[231,1480,1109],{},[231,1482,1355],{},[231,1484,1358],{},[231,1486,1361],{},[238,1488,1489,1505,1522,1540,1557,1572,1590,1606,1621,1637,1653,1669,1684,1699,1714],{},[228,1490,1491,1494,1499,1502],{},[243,1492,1493],{},"代码托管",[243,1495,1496],{},[246,1497,1498],{},"GitHub",[243,1500,1501],{},"仓库管理、PR、Issue、代码搜索",[243,1503,1504],{},"远程 HTTP Server，需 GitHub PAT",[228,1506,1507,1509,1514,1517],{},[243,1508,1493],{},[243,1510,1511],{},[246,1512,1513],{},"GitLab",[243,1515,1516],{},"GitLab API、项目管理",[243,1518,1519],{},[334,1520,1521],{},"npx -y @modelcontextprotocol\u002Fserver-gitlab",[228,1523,1524,1527,1532,1535],{},[243,1525,1526],{},"数据库",[243,1528,1529],{},[246,1530,1531],{},"PostgreSQL",[243,1533,1534],{},"只读数据库访问、Schema 检查",[243,1536,1537],{},[334,1538,1539],{},"npx -y @modelcontextprotocol\u002Fserver-postgres \u003Cdsn>",[228,1541,1542,1544,1549,1552],{},[243,1543,1526],{},[243,1545,1546],{},[246,1547,1548],{},"SQLite",[243,1550,1551],{},"数据库交互和商业智能",[243,1553,1554],{},[334,1555,1556],{},"npx -y @modelcontextprotocol\u002Fserver-sqlite",[228,1558,1559,1561,1566,1569],{},[243,1560,1526],{},[243,1562,1563],{},[246,1564,1565],{},"MySQL",[243,1567,1568],{},"SQL 查询执行",[243,1570,1571],{},"社区实现",[228,1573,1574,1577,1582,1585],{},[243,1575,1576],{},"浏览器",[243,1578,1579],{},[246,1580,1581],{},"Puppeteer",[243,1583,1584],{},"浏览器自动化和网页抓取",[243,1586,1587],{},[334,1588,1589],{},"npx -y @modelcontextprotocol\u002Fserver-puppeteer",[228,1591,1592,1595,1600,1603],{},[243,1593,1594],{},"通信",[243,1596,1597],{},[246,1598,1599],{},"Slack",[243,1601,1602],{},"频道管理和消息功能",[243,1604,1605],{},"远程 HTTP Server，OAuth 认证",[228,1607,1608,1610,1615,1618],{},[243,1609,1594],{},[243,1611,1612],{},[246,1613,1614],{},"Email (Gmail)",[243,1616,1617],{},"邮件发送和搜索",[243,1619,1620],{},"OAuth 2.0 认证",[228,1622,1623,1626,1631,1634],{},[243,1624,1625],{},"搜索",[243,1627,1628],{},[246,1629,1630],{},"Brave Search",[243,1632,1633],{},"Web 和本地搜索",[243,1635,1636],{},"需 Brave Search API Key",[228,1638,1639,1642,1647,1650],{},[243,1640,1641],{},"监控",[243,1643,1644],{},[246,1645,1646],{},"Sentry",[243,1648,1649],{},"检索和分析 Sentry 问题",[243,1651,1652],{},"远程 HTTP Server",[228,1654,1655,1658,1663,1666],{},[243,1656,1657],{},"地图",[243,1659,1660],{},[246,1661,1662],{},"Google Maps",[243,1664,1665],{},"位置服务、路线、地点详情",[243,1667,1668],{},"需 Google Maps API Key",[228,1670,1671,1674,1679,1682],{},[243,1672,1673],{},"网盘",[243,1675,1676],{},[246,1677,1678],{},"Google Drive",[243,1680,1681],{},"文件访问和搜索",[243,1683,1620],{},[228,1685,1686,1689,1694,1697],{},[243,1687,1688],{},"文档",[243,1690,1691],{},[246,1692,1693],{},"Notion",[243,1695,1696],{},"页面、数据库、块操作",[243,1698,1605],{},[228,1700,1701,1704,1709,1712],{},[243,1702,1703],{},"设计",[243,1705,1706],{},[246,1707,1708],{},"Figma",[243,1710,1711],{},"设计文件访问",[243,1713,1571],{},[228,1715,1716,1719,1724,1727],{},[243,1717,1718],{},"支付",[243,1720,1721],{},[246,1722,1723],{},"Stripe",[243,1725,1726],{},"支付操作和管理",[243,1728,1652],{},[200,1730,1732],{"id":1731},"_33-server-生态发现","3.3 Server 生态发现",[205,1734,1735],{},"社区维护的 Server 目录：",[1074,1737,1738,1748,1756,1764,1772],{},[293,1739,1740,1747],{},[1741,1742,1746],"a",{"href":1743,"rel":1744},"https:\u002F\u002Fmodelcontextprotocol.io\u002Fexamples",[1745],"nofollow","MCP Registry"," — 官方示例和参考实现",[293,1749,1750,1755],{},[1741,1751,1754],{"href":1752,"rel":1753},"https:\u002F\u002Fmcpservers.org\u002F",[1745],"Awesome MCP Servers"," — 社区精选 Server 集合",[293,1757,1758,1763],{},[1741,1759,1762],{"href":1760,"rel":1761},"https:\u002F\u002Fwww.mcphub.ai\u002Fservers",[1745],"MCPHub"," — 带用户评价的 Server 目录",[293,1765,1766,1771],{},[1741,1767,1770],{"href":1768,"rel":1769},"https:\u002F\u002Fmcppedia.org\u002F",[1745],"MCPpedia"," — 17000+ Server 的安全评分和比较",[293,1773,1774,1779],{},[1741,1775,1778],{"href":1776,"rel":1777},"https:\u002F\u002Fwww.pulsemcp.com\u002F",[1745],"PulseMCP"," — 社区中心和每周 newsletter",[195,1781,1783],{"id":1782},"_4-在-claude-code-中安装与配置-mcp-server","4. 在 Claude Code 中安装与配置 MCP Server",[200,1785,1787],{"id":1786},"_41-三种安装方式","4.1 三种安装方式",[205,1789,1790],{},"Claude Code 支持三种方式添加 MCP Server：",[451,1792,1794],{"id":1793},"方式一远程-http-server推荐","方式一：远程 HTTP Server（推荐）",[205,1796,1797],{},"适合连接云端服务，是最广泛支持的传输方式：",[327,1799,1803],{"className":1800,"code":1801,"language":1802,"meta":336,"style":336},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# 基本语法\nclaude mcp add --transport http \u003Cname> \u003Curl>\n\n# 连接 Notion\nclaude mcp add --transport http notion https:\u002F\u002Fmcp.notion.com\u002Fmcp\n\n# 带 Bearer Token 的认证\nclaude mcp add --transport http secure-api https:\u002F\u002Fapi.example.com\u002Fmcp \\\n  --header \"Authorization: Bearer your-token\"\n","bash",[334,1804,1805,1811,1852,1858,1863,1881,1885,1890,1911],{"__ignoreMap":336},[480,1806,1807],{"class":482,"line":483},[480,1808,1810],{"class":1809},"sHwdD","# 基本语法\n",[480,1812,1813,1816,1819,1822,1825,1828,1831,1834,1838,1841,1843,1846,1849],{"class":482,"line":490},[480,1814,1815],{"class":574},"claude",[480,1817,1818],{"class":509}," mcp",[480,1820,1821],{"class":509}," add",[480,1823,1824],{"class":509}," --transport",[480,1826,1827],{"class":509}," http",[480,1829,1830],{"class":486}," \u003C",[480,1832,1833],{"class":509},"nam",[480,1835,1837],{"class":1836},"sTEyZ","e",[480,1839,1840],{"class":486},">",[480,1842,1830],{"class":486},[480,1844,1845],{"class":509},"ur",[480,1847,1848],{"class":1836},"l",[480,1850,1851],{"class":486},">\n",[480,1853,1854],{"class":482,"line":518},[480,1855,1857],{"emptyLinePlaceholder":1856},true,"\n",[480,1859,1860],{"class":482,"line":535},[480,1861,1862],{"class":1809},"# 连接 Notion\n",[480,1864,1865,1867,1869,1871,1873,1875,1878],{"class":482,"line":554},[480,1866,1815],{"class":574},[480,1868,1818],{"class":509},[480,1870,1821],{"class":509},[480,1872,1824],{"class":509},[480,1874,1827],{"class":509},[480,1876,1877],{"class":509}," notion",[480,1879,1880],{"class":509}," https:\u002F\u002Fmcp.notion.com\u002Fmcp\n",[480,1882,1883],{"class":482,"line":568},[480,1884,1857],{"emptyLinePlaceholder":1856},[480,1886,1887],{"class":482,"line":591},[480,1888,1889],{"class":1809},"# 带 Bearer Token 的认证\n",[480,1891,1892,1894,1896,1898,1900,1902,1905,1908],{"class":482,"line":605},[480,1893,1815],{"class":574},[480,1895,1818],{"class":509},[480,1897,1821],{"class":509},[480,1899,1824],{"class":509},[480,1901,1827],{"class":509},[480,1903,1904],{"class":509}," secure-api",[480,1906,1907],{"class":509}," https:\u002F\u002Fapi.example.com\u002Fmcp",[480,1909,1910],{"class":1836}," \\\n",[480,1912,1913,1916,1918,1921],{"class":482,"line":637},[480,1914,1915],{"class":509},"  --header",[480,1917,506],{"class":486},[480,1919,1920],{"class":509},"Authorization: Bearer your-token",[480,1922,710],{"class":486},[451,1924,1926],{"id":1925},"方式二远程-sse-server","方式二：远程 SSE Server",[327,1928,1930],{"className":1800,"code":1929,"language":1802,"meta":336,"style":336},"# 基本语法\nclaude mcp add --transport sse \u003Cname> \u003Curl>\n\n# 连接 Asana\nclaude mcp add --transport sse asana https:\u002F\u002Fmcp.asana.com\u002Fsse\n",[334,1931,1932,1936,1965,1969,1974],{"__ignoreMap":336},[480,1933,1934],{"class":482,"line":483},[480,1935,1810],{"class":1809},[480,1937,1938,1940,1942,1944,1946,1949,1951,1953,1955,1957,1959,1961,1963],{"class":482,"line":490},[480,1939,1815],{"class":574},[480,1941,1818],{"class":509},[480,1943,1821],{"class":509},[480,1945,1824],{"class":509},[480,1947,1948],{"class":509}," sse",[480,1950,1830],{"class":486},[480,1952,1833],{"class":509},[480,1954,1837],{"class":1836},[480,1956,1840],{"class":486},[480,1958,1830],{"class":486},[480,1960,1845],{"class":509},[480,1962,1848],{"class":1836},[480,1964,1851],{"class":486},[480,1966,1967],{"class":482,"line":518},[480,1968,1857],{"emptyLinePlaceholder":1856},[480,1970,1971],{"class":482,"line":535},[480,1972,1973],{"class":1809},"# 连接 Asana\n",[480,1975,1976,1978,1980,1982,1984,1986,1989],{"class":482,"line":554},[480,1977,1815],{"class":574},[480,1979,1818],{"class":509},[480,1981,1821],{"class":509},[480,1983,1824],{"class":509},[480,1985,1948],{"class":509},[480,1987,1988],{"class":509}," asana",[480,1990,1991],{"class":509}," https:\u002F\u002Fmcp.asana.com\u002Fsse\n",[451,1993,1995],{"id":1994},"方式三本地-stdio-server","方式三：本地 stdio Server",[205,1997,1998],{},"适合需要直接系统访问或自定义脚本的工具：",[327,2000,2002],{"className":1800,"code":2001,"language":1802,"meta":336,"style":336},"# 基本语法\nclaude mcp add [options] \u003Cname> -- \u003Ccommand> [args...]\n\n# 连接 Airtable\nclaude mcp add --transport stdio --env AIRTABLE_API_KEY=YOUR_KEY airtable \\\n  -- npx -y airtable-mcp-server\n\n# 连接 PostgreSQL 数据库\nclaude mcp add --transport stdio db -- npx -y @modelcontextprotocol\u002Fserver-postgres \\\n  \"postgresql:\u002F\u002Fuser:pass@localhost:5432\u002Fmydb\"\n\n# 连接文件系统（限制访问目录）\nclaude mcp add --transport stdio fs -- npx -y @modelcontextprotocol\u002Fserver-filesystem \\\n  \u002FUsers\u002Flionad\u002Fprojects \u002FUsers\u002Flionad\u002Fdocuments\n",[334,2003,2004,2008,2045,2049,2054,2078,2092,2096,2101,2128,2137,2141,2146,2172],{"__ignoreMap":336},[480,2005,2006],{"class":482,"line":483},[480,2007,1810],{"class":1809},[480,2009,2010,2012,2014,2016,2019,2022,2024,2026,2029,2031,2034,2036,2039,2042],{"class":482,"line":490},[480,2011,1815],{"class":574},[480,2013,1818],{"class":509},[480,2015,1821],{"class":509},[480,2017,2018],{"class":1836}," [options] ",[480,2020,2021],{"class":486},"\u003C",[480,2023,677],{"class":1836},[480,2025,1840],{"class":486},[480,2027,2028],{"class":1836}," -- ",[480,2030,2021],{"class":486},[480,2032,2033],{"class":1836},"command",[480,2035,1840],{"class":486},[480,2037,2038],{"class":486}," [",[480,2040,2041],{"class":1836},"args...",[480,2043,2044],{"class":486},"]\n",[480,2046,2047],{"class":482,"line":518},[480,2048,1857],{"emptyLinePlaceholder":1856},[480,2050,2051],{"class":482,"line":535},[480,2052,2053],{"class":1809},"# 连接 Airtable\n",[480,2055,2056,2058,2060,2062,2064,2067,2070,2073,2076],{"class":482,"line":554},[480,2057,1815],{"class":574},[480,2059,1818],{"class":509},[480,2061,1821],{"class":509},[480,2063,1824],{"class":509},[480,2065,2066],{"class":509}," stdio",[480,2068,2069],{"class":509}," --env",[480,2071,2072],{"class":509}," AIRTABLE_API_KEY=YOUR_KEY",[480,2074,2075],{"class":509}," airtable",[480,2077,1910],{"class":1836},[480,2079,2080,2083,2086,2089],{"class":482,"line":568},[480,2081,2082],{"class":509},"  --",[480,2084,2085],{"class":509}," npx",[480,2087,2088],{"class":509}," -y",[480,2090,2091],{"class":509}," airtable-mcp-server\n",[480,2093,2094],{"class":482,"line":591},[480,2095,1857],{"emptyLinePlaceholder":1856},[480,2097,2098],{"class":482,"line":605},[480,2099,2100],{"class":1809},"# 连接 PostgreSQL 数据库\n",[480,2102,2103,2105,2107,2109,2111,2113,2116,2119,2121,2123,2126],{"class":482,"line":637},[480,2104,1815],{"class":574},[480,2106,1818],{"class":509},[480,2108,1821],{"class":509},[480,2110,1824],{"class":509},[480,2112,2066],{"class":509},[480,2114,2115],{"class":509}," db",[480,2117,2118],{"class":509}," --",[480,2120,2085],{"class":509},[480,2122,2088],{"class":509},[480,2124,2125],{"class":509}," @modelcontextprotocol\u002Fserver-postgres",[480,2127,1910],{"class":1836},[480,2129,2130,2132,2135],{"class":482,"line":652},[480,2131,493],{"class":486},[480,2133,2134],{"class":509},"postgresql:\u002F\u002Fuser:pass@localhost:5432\u002Fmydb",[480,2136,710],{"class":486},[480,2138,2139],{"class":482,"line":658},[480,2140,1857],{"emptyLinePlaceholder":1856},[480,2142,2143],{"class":482,"line":672},[480,2144,2145],{"class":1809},"# 连接文件系统（限制访问目录）\n",[480,2147,2148,2150,2152,2154,2156,2158,2161,2163,2165,2167,2170],{"class":482,"line":693},[480,2149,1815],{"class":574},[480,2151,1818],{"class":509},[480,2153,1821],{"class":509},[480,2155,1824],{"class":509},[480,2157,2066],{"class":509},[480,2159,2160],{"class":509}," fs",[480,2162,2118],{"class":509},[480,2164,2085],{"class":509},[480,2166,2088],{"class":509},[480,2168,2169],{"class":509}," @modelcontextprotocol\u002Fserver-filesystem",[480,2171,1910],{"class":1836},[480,2173,2174,2177],{"class":482,"line":713},[480,2175,2176],{"class":509},"  \u002FUsers\u002Flionad\u002Fprojects",[480,2178,2179],{"class":509}," \u002FUsers\u002Flionad\u002Fdocuments\n",[200,2181,2183],{"id":2182},"_42-三种配置作用域","4.2 三种配置作用域",[205,2185,2186],{},"Claude Code 支持三个配置作用域：",[222,2188,2189,2205],{},[225,2190,2191],{},[228,2192,2193,2196,2199,2202],{},[231,2194,2195],{},"作用域",[231,2197,2198],{},"加载范围",[231,2200,2201],{},"团队共享",[231,2203,2204],{},"存储位置",[238,2206,2207,2226,2244],{},[228,2208,2209,2215,2218,2221],{},[243,2210,2211,2214],{},[246,2212,2213],{},"Local","（默认）",[243,2216,2217],{},"仅当前项目",[243,2219,2220],{},"否",[243,2222,2223],{},[334,2224,2225],{},"~\u002F.claude.json",[228,2227,2228,2233,2235,2238],{},[243,2229,2230],{},[246,2231,2232],{},"Project",[243,2234,2217],{},[243,2236,2237],{},"是（通过版本控制）",[243,2239,2240,2243],{},[334,2241,2242],{},".mcp.json","（项目根目录）",[228,2245,2246,2251,2254,2256],{},[243,2247,2248],{},[246,2249,2250],{},"User",[243,2252,2253],{},"所有项目",[243,2255,2220],{},[243,2257,2258],{},[334,2259,2225],{},[327,2261,2263],{"className":1800,"code":2262,"language":1802,"meta":336,"style":336},"# Local 作用域（默认）\nclaude mcp add --transport http stripe https:\u002F\u002Fmcp.stripe.com\n\n# Project 作用域（团队共享）\nclaude mcp add --transport http paypal --scope project https:\u002F\u002Fmcp.paypal.com\u002Fmcp\n\n# User 作用域（跨项目）\nclaude mcp add --transport http hubspot --scope user https:\u002F\u002Fmcp.hubspot.com\u002Fanthropic\n",[334,2264,2265,2270,2288,2292,2297,2321,2325,2330],{"__ignoreMap":336},[480,2266,2267],{"class":482,"line":483},[480,2268,2269],{"class":1809},"# Local 作用域（默认）\n",[480,2271,2272,2274,2276,2278,2280,2282,2285],{"class":482,"line":490},[480,2273,1815],{"class":574},[480,2275,1818],{"class":509},[480,2277,1821],{"class":509},[480,2279,1824],{"class":509},[480,2281,1827],{"class":509},[480,2283,2284],{"class":509}," stripe",[480,2286,2287],{"class":509}," https:\u002F\u002Fmcp.stripe.com\n",[480,2289,2290],{"class":482,"line":518},[480,2291,1857],{"emptyLinePlaceholder":1856},[480,2293,2294],{"class":482,"line":535},[480,2295,2296],{"class":1809},"# Project 作用域（团队共享）\n",[480,2298,2299,2301,2303,2305,2307,2309,2312,2315,2318],{"class":482,"line":554},[480,2300,1815],{"class":574},[480,2302,1818],{"class":509},[480,2304,1821],{"class":509},[480,2306,1824],{"class":509},[480,2308,1827],{"class":509},[480,2310,2311],{"class":509}," paypal",[480,2313,2314],{"class":509}," --scope",[480,2316,2317],{"class":509}," project",[480,2319,2320],{"class":509}," https:\u002F\u002Fmcp.paypal.com\u002Fmcp\n",[480,2322,2323],{"class":482,"line":568},[480,2324,1857],{"emptyLinePlaceholder":1856},[480,2326,2327],{"class":482,"line":591},[480,2328,2329],{"class":1809},"# User 作用域（跨项目）\n",[480,2331,2332,2334,2336,2338,2340,2342,2345,2347,2350],{"class":482,"line":605},[480,2333,1815],{"class":574},[480,2335,1818],{"class":509},[480,2337,1821],{"class":509},[480,2339,1824],{"class":509},[480,2341,1827],{"class":509},[480,2343,2344],{"class":509}," hubspot",[480,2346,2314],{"class":509},[480,2348,2349],{"class":509}," user",[480,2351,2352],{"class":509}," https:\u002F\u002Fmcp.hubspot.com\u002Fanthropic\n",[205,2354,2355,2356,2358],{},"Project 作用域的配置文件 ",[334,2357,2242],{}," 示例：",[327,2360,2362],{"className":474,"code":2361,"language":476,"meta":336,"style":336},"{\n  \"mcpServers\": {\n    \"shared-server\": {\n      \"command\": \"\u002Fpath\u002Fto\u002Fserver\",\n      \"args\": [],\n      \"env\": {}\n    }\n  }\n}\n",[334,2363,2364,2368,2381,2394,2413,2427,2440,2444,2448],{"__ignoreMap":336},[480,2365,2366],{"class":482,"line":483},[480,2367,487],{"class":486},[480,2369,2370,2372,2375,2377,2379],{"class":482,"line":490},[480,2371,493],{"class":486},[480,2373,2374],{"class":496},"mcpServers",[480,2376,500],{"class":486},[480,2378,503],{"class":486},[480,2380,565],{"class":486},[480,2382,2383,2385,2388,2390,2392],{"class":482,"line":518},[480,2384,571],{"class":486},[480,2386,2387],{"class":574},"shared-server",[480,2389,500],{"class":486},[480,2391,503],{"class":486},[480,2393,565],{"class":486},[480,2395,2396,2398,2400,2402,2404,2406,2409,2411],{"class":482,"line":535},[480,2397,608],{"class":486},[480,2399,2033],{"class":529},[480,2401,500],{"class":486},[480,2403,503],{"class":486},[480,2405,506],{"class":486},[480,2407,2408],{"class":509},"\u002Fpath\u002Fto\u002Fserver",[480,2410,500],{"class":486},[480,2412,515],{"class":486},[480,2414,2415,2417,2420,2422,2424],{"class":482,"line":554},[480,2416,608],{"class":486},[480,2418,2419],{"class":529},"args",[480,2421,500],{"class":486},[480,2423,503],{"class":486},[480,2425,2426],{"class":486}," [],\n",[480,2428,2429,2431,2434,2436,2438],{"class":482,"line":568},[480,2430,608],{"class":486},[480,2432,2433],{"class":529},"env",[480,2435,500],{"class":486},[480,2437,503],{"class":486},[480,2439,649],{"class":486},[480,2441,2442],{"class":482,"line":591},[480,2443,716],{"class":486},[480,2445,2446],{"class":482,"line":605},[480,2447,722],{"class":486},[480,2449,2450],{"class":482,"line":637},[480,2451,728],{"class":486},[200,2453,2455],{"id":2454},"_43-管理命令","4.3 管理命令",[327,2457,2459],{"className":1800,"code":2458,"language":1802,"meta":336,"style":336},"# 列出所有配置的 Server\nclaude mcp list\n\n# 查看特定 Server 详情\nclaude mcp get github\n\n# 移除 Server\nclaude mcp remove github\n\n# 重置项目作用域的批准选择\nclaude mcp reset-project-choices\n\n# 在 Claude Code 内检查 Server 状态\n\u002Fmcp\n",[334,2460,2461,2466,2475,2479,2484,2496,2500,2505,2516,2520,2525,2534,2538,2543],{"__ignoreMap":336},[480,2462,2463],{"class":482,"line":483},[480,2464,2465],{"class":1809},"# 列出所有配置的 Server\n",[480,2467,2468,2470,2472],{"class":482,"line":490},[480,2469,1815],{"class":574},[480,2471,1818],{"class":509},[480,2473,2474],{"class":509}," list\n",[480,2476,2477],{"class":482,"line":518},[480,2478,1857],{"emptyLinePlaceholder":1856},[480,2480,2481],{"class":482,"line":535},[480,2482,2483],{"class":1809},"# 查看特定 Server 详情\n",[480,2485,2486,2488,2490,2493],{"class":482,"line":554},[480,2487,1815],{"class":574},[480,2489,1818],{"class":509},[480,2491,2492],{"class":509}," get",[480,2494,2495],{"class":509}," github\n",[480,2497,2498],{"class":482,"line":568},[480,2499,1857],{"emptyLinePlaceholder":1856},[480,2501,2502],{"class":482,"line":591},[480,2503,2504],{"class":1809},"# 移除 Server\n",[480,2506,2507,2509,2511,2514],{"class":482,"line":605},[480,2508,1815],{"class":574},[480,2510,1818],{"class":509},[480,2512,2513],{"class":509}," remove",[480,2515,2495],{"class":509},[480,2517,2518],{"class":482,"line":637},[480,2519,1857],{"emptyLinePlaceholder":1856},[480,2521,2522],{"class":482,"line":652},[480,2523,2524],{"class":1809},"# 重置项目作用域的批准选择\n",[480,2526,2527,2529,2531],{"class":482,"line":658},[480,2528,1815],{"class":574},[480,2530,1818],{"class":509},[480,2532,2533],{"class":509}," reset-project-choices\n",[480,2535,2536],{"class":482,"line":672},[480,2537,1857],{"emptyLinePlaceholder":1856},[480,2539,2540],{"class":482,"line":693},[480,2541,2542],{"class":1809},"# 在 Claude Code 内检查 Server 状态\n",[480,2544,2545],{"class":482,"line":713},[480,2546,2547],{"class":574},"\u002Fmcp\n",[200,2549,2551],{"id":2550},"_44-环境变量扩展","4.4 环境变量扩展",[205,2553,2554,2556],{},[334,2555,2242],{}," 支持环境变量扩展，方便团队共享配置同时保护敏感信息：",[327,2558,2560],{"className":474,"code":2559,"language":476,"meta":336,"style":336},"{\n  \"mcpServers\": {\n    \"api-server\": {\n      \"type\": \"http\",\n      \"url\": \"${API_BASE_URL:-https:\u002F\u002Fapi.example.com}\u002Fmcp\",\n      \"headers\": {\n        \"Authorization\": \"Bearer ${API_KEY}\"\n      }\n    }\n  }\n}\n",[334,2561,2562,2566,2578,2591,2611,2631,2644,2663,2668,2672,2676],{"__ignoreMap":336},[480,2563,2564],{"class":482,"line":483},[480,2565,487],{"class":486},[480,2567,2568,2570,2572,2574,2576],{"class":482,"line":490},[480,2569,493],{"class":486},[480,2571,2374],{"class":496},[480,2573,500],{"class":486},[480,2575,503],{"class":486},[480,2577,565],{"class":486},[480,2579,2580,2582,2585,2587,2589],{"class":482,"line":518},[480,2581,571],{"class":486},[480,2583,2584],{"class":574},"api-server",[480,2586,500],{"class":486},[480,2588,503],{"class":486},[480,2590,565],{"class":486},[480,2592,2593,2595,2598,2600,2602,2604,2607,2609],{"class":482,"line":535},[480,2594,608],{"class":486},[480,2596,2597],{"class":529},"type",[480,2599,500],{"class":486},[480,2601,503],{"class":486},[480,2603,506],{"class":486},[480,2605,2606],{"class":509},"http",[480,2608,500],{"class":486},[480,2610,515],{"class":486},[480,2612,2613,2615,2618,2620,2622,2624,2627,2629],{"class":482,"line":554},[480,2614,608],{"class":486},[480,2616,2617],{"class":529},"url",[480,2619,500],{"class":486},[480,2621,503],{"class":486},[480,2623,506],{"class":486},[480,2625,2626],{"class":509},"${API_BASE_URL:-https:\u002F\u002Fapi.example.com}\u002Fmcp",[480,2628,500],{"class":486},[480,2630,515],{"class":486},[480,2632,2633,2635,2638,2640,2642],{"class":482,"line":568},[480,2634,608],{"class":486},[480,2636,2637],{"class":529},"headers",[480,2639,500],{"class":486},[480,2641,503],{"class":486},[480,2643,565],{"class":486},[480,2645,2646,2649,2652,2654,2656,2658,2661],{"class":482,"line":591},[480,2647,2648],{"class":486},"        \"",[480,2650,2651],{"class":623},"Authorization",[480,2653,500],{"class":486},[480,2655,503],{"class":486},[480,2657,506],{"class":486},[480,2659,2660],{"class":509},"Bearer ${API_KEY}",[480,2662,710],{"class":486},[480,2664,2665],{"class":482,"line":605},[480,2666,2667],{"class":486},"      }\n",[480,2669,2670],{"class":482,"line":637},[480,2671,716],{"class":486},[480,2673,2674],{"class":482,"line":652},[480,2675,722],{"class":486},[480,2677,2678],{"class":482,"line":658},[480,2679,728],{"class":486},[205,2681,2682],{},"支持的语法：",[1074,2684,2685,2695],{},[293,2686,2687,2690,2691,2694],{},[334,2688,2689],{},"${VAR}"," — 展开为环境变量 ",[334,2692,2693],{},"VAR"," 的值",[293,2696,2697,2700,2701,2703],{},[334,2698,2699],{},"${VAR:-default}"," — 若 ",[334,2702,2693],{}," 已设置则使用其值，否则使用默认值",[200,2705,2707],{"id":2706},"_45-常用-server-配置示例","4.5 常用 Server 配置示例",[451,2709,1498],{"id":2710},"github",[327,2712,2714],{"className":1800,"code":2713,"language":1802,"meta":336,"style":336},"# 使用 GitHub Personal Access Token\nclaude mcp add --transport http github https:\u002F\u002Fapi.githubcopilot.com\u002Fmcp\u002F \\\n  --header \"Authorization: Bearer YOUR_GITHUB_PAT\"\n",[334,2715,2716,2721,2741],{"__ignoreMap":336},[480,2717,2718],{"class":482,"line":483},[480,2719,2720],{"class":1809},"# 使用 GitHub Personal Access Token\n",[480,2722,2723,2725,2727,2729,2731,2733,2736,2739],{"class":482,"line":490},[480,2724,1815],{"class":574},[480,2726,1818],{"class":509},[480,2728,1821],{"class":509},[480,2730,1824],{"class":509},[480,2732,1827],{"class":509},[480,2734,2735],{"class":509}," github",[480,2737,2738],{"class":509}," https:\u002F\u002Fapi.githubcopilot.com\u002Fmcp\u002F",[480,2740,1910],{"class":1836},[480,2742,2743,2745,2747,2750],{"class":482,"line":518},[480,2744,1915],{"class":509},[480,2746,506],{"class":486},[480,2748,2749],{"class":509},"Authorization: Bearer YOUR_GITHUB_PAT",[480,2751,710],{"class":486},[205,2753,2754],{},"配置后可直接使用自然语言操作：",[327,2756,2759],{"className":2757,"code":2758,"language":332},[330],"Review PR #456 and suggest improvements\nCreate a new issue for the bug we just found\nShow me all open PRs assigned to me\n",[334,2760,2758],{"__ignoreMap":336},[451,2762,1531],{"id":2763},"postgresql",[327,2765,2767],{"className":1800,"code":2766,"language":1802,"meta":336,"style":336},"claude mcp add --transport stdio db -- npx -y @bytebase\u002Fdbhub \\\n  --dsn \"postgresql:\u002F\u002Freadonly:pass@prod.db.com:5432\u002Fanalytics\"\n",[334,2768,2769,2794],{"__ignoreMap":336},[480,2770,2771,2773,2775,2777,2779,2781,2783,2785,2787,2789,2792],{"class":482,"line":483},[480,2772,1815],{"class":574},[480,2774,1818],{"class":509},[480,2776,1821],{"class":509},[480,2778,1824],{"class":509},[480,2780,2066],{"class":509},[480,2782,2115],{"class":509},[480,2784,2118],{"class":509},[480,2786,2085],{"class":509},[480,2788,2088],{"class":509},[480,2790,2791],{"class":509}," @bytebase\u002Fdbhub",[480,2793,1910],{"class":1836},[480,2795,2796,2799,2801,2804],{"class":482,"line":490},[480,2797,2798],{"class":509},"  --dsn",[480,2800,506],{"class":486},[480,2802,2803],{"class":509},"postgresql:\u002F\u002Freadonly:pass@prod.db.com:5432\u002Fanalytics",[480,2805,710],{"class":486},[205,2807,2808],{},"配置后可直接查询：",[327,2810,2813],{"className":2811,"code":2812,"language":332},[330],"What's our total revenue this month?\nShow me the schema for the orders table\nFind customers who haven't made a purchase in 90 days\n",[334,2814,2812],{"__ignoreMap":336},[451,2816,1646],{"id":2817},"sentry",[327,2819,2821],{"className":1800,"code":2820,"language":1802,"meta":336,"style":336},"claude mcp add --transport http sentry https:\u002F\u002Fmcp.sentry.dev\u002Fmcp\n",[334,2822,2823],{"__ignoreMap":336},[480,2824,2825,2827,2829,2831,2833,2835,2838],{"class":482,"line":483},[480,2826,1815],{"class":574},[480,2828,1818],{"class":509},[480,2830,1821],{"class":509},[480,2832,1824],{"class":509},[480,2834,1827],{"class":509},[480,2836,2837],{"class":509}," sentry",[480,2839,2840],{"class":509}," https:\u002F\u002Fmcp.sentry.dev\u002Fmcp\n",[205,2842,2843],{},"配置后可调试生产问题：",[327,2845,2848],{"className":2846,"code":2847,"language":332},[330],"What are the most common errors in the last 24 hours?\nShow me the stack trace for error ID abc123\nWhich deployment introduced these new errors?\n",[334,2849,2847],{"__ignoreMap":336},[200,2851,2853],{"id":2852},"_46-高级功能","4.6 高级功能",[205,2855,2856,2859,2860,2863],{},[246,2857,2858],{},"动态工具更新","：Claude Code 支持 MCP ",[334,2861,2862],{},"list_changed"," 通知，Server 可动态更新可用工具而无需重新连接。",[205,2865,2866,2869],{},[246,2867,2868],{},"自动重连","：HTTP\u002FSSE Server 断开后，Claude Code 会自动以指数退避重连（最多 5 次，从 1 秒开始翻倍）。",[205,2871,2872,2875],{},[246,2873,2874],{},"输出限制","：默认最大输出 25000 tokens，可通过环境变量调整：",[327,2877,2879],{"className":1800,"code":2878,"language":1802,"meta":336,"style":336},"export MAX_MCP_OUTPUT_TOKENS=50000\nclaude\n",[334,2880,2881,2895],{"__ignoreMap":336},[480,2882,2883,2886,2889,2892],{"class":482,"line":483},[480,2884,2885],{"class":496},"export",[480,2887,2888],{"class":1836}," MAX_MCP_OUTPUT_TOKENS",[480,2890,2891],{"class":486},"=",[480,2893,2894],{"class":529},"50000\n",[480,2896,2897],{"class":482,"line":490},[480,2898,2899],{"class":574},"claude\n",[205,2901,2902,2905],{},[246,2903,2904],{},"工具搜索","：默认启用工具延迟加载，只有 Claude 实际使用的工具才会进入上下文，减少对上下文窗口的占用。",[195,2907,2909],{"id":2908},"_5-自定义-mcp-server从零开发","5. 自定义 MCP Server：从零开发",[200,2911,2913],{"id":2912},"_51-环境准备","5.1 环境准备",[327,2915,2917],{"className":1800,"code":2916,"language":1802,"meta":336,"style":336},"# 创建项目目录\nmkdir mcp-weather-server && cd mcp-weather-server\n\n# 初始化（使用 Bun 或 npm）\nbun init -y\n# 或 npm init -y\n\n# 安装 MCP TypeScript SDK 和 Zod\nbun add @modelcontextprotocol\u002Fsdk zod\n# 或 npm install @modelcontextprotocol\u002Fsdk zod\n",[334,2918,2919,2924,2942,2946,2951,2962,2967,2971,2976,2988],{"__ignoreMap":336},[480,2920,2921],{"class":482,"line":483},[480,2922,2923],{"class":1809},"# 创建项目目录\n",[480,2925,2926,2929,2932,2935,2939],{"class":482,"line":490},[480,2927,2928],{"class":574},"mkdir",[480,2930,2931],{"class":509}," mcp-weather-server",[480,2933,2934],{"class":486}," &&",[480,2936,2938],{"class":2937},"s2Zo4"," cd",[480,2940,2941],{"class":509}," mcp-weather-server\n",[480,2943,2944],{"class":482,"line":518},[480,2945,1857],{"emptyLinePlaceholder":1856},[480,2947,2948],{"class":482,"line":535},[480,2949,2950],{"class":1809},"# 初始化（使用 Bun 或 npm）\n",[480,2952,2953,2956,2959],{"class":482,"line":554},[480,2954,2955],{"class":574},"bun",[480,2957,2958],{"class":509}," init",[480,2960,2961],{"class":509}," -y\n",[480,2963,2964],{"class":482,"line":568},[480,2965,2966],{"class":1809},"# 或 npm init -y\n",[480,2968,2969],{"class":482,"line":591},[480,2970,1857],{"emptyLinePlaceholder":1856},[480,2972,2973],{"class":482,"line":605},[480,2974,2975],{"class":1809},"# 安装 MCP TypeScript SDK 和 Zod\n",[480,2977,2978,2980,2982,2985],{"class":482,"line":637},[480,2979,2955],{"class":574},[480,2981,1821],{"class":509},[480,2983,2984],{"class":509}," @modelcontextprotocol\u002Fsdk",[480,2986,2987],{"class":509}," zod\n",[480,2989,2990],{"class":482,"line":652},[480,2991,2992],{"class":1809},"# 或 npm install @modelcontextprotocol\u002Fsdk zod\n",[205,2994,2995],{},"TypeScript 配置要点：",[327,2997,2999],{"className":474,"code":2998,"language":476,"meta":336,"style":336},"{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"module\": \"ESNext\",\n    \"moduleResolution\": \"bundler\",\n    \"esModuleInterop\": true,\n    \"strict\": true\n  }\n}\n",[334,3000,3001,3005,3018,3038,3058,3078,3092,3106,3110],{"__ignoreMap":336},[480,3002,3003],{"class":482,"line":483},[480,3004,487],{"class":486},[480,3006,3007,3009,3012,3014,3016],{"class":482,"line":490},[480,3008,493],{"class":486},[480,3010,3011],{"class":496},"compilerOptions",[480,3013,500],{"class":486},[480,3015,503],{"class":486},[480,3017,565],{"class":486},[480,3019,3020,3022,3025,3027,3029,3031,3034,3036],{"class":482,"line":518},[480,3021,571],{"class":486},[480,3023,3024],{"class":574},"target",[480,3026,500],{"class":486},[480,3028,503],{"class":486},[480,3030,506],{"class":486},[480,3032,3033],{"class":509},"ES2022",[480,3035,500],{"class":486},[480,3037,515],{"class":486},[480,3039,3040,3042,3045,3047,3049,3051,3054,3056],{"class":482,"line":535},[480,3041,571],{"class":486},[480,3043,3044],{"class":574},"module",[480,3046,500],{"class":486},[480,3048,503],{"class":486},[480,3050,506],{"class":486},[480,3052,3053],{"class":509},"ESNext",[480,3055,500],{"class":486},[480,3057,515],{"class":486},[480,3059,3060,3062,3065,3067,3069,3071,3074,3076],{"class":482,"line":554},[480,3061,571],{"class":486},[480,3063,3064],{"class":574},"moduleResolution",[480,3066,500],{"class":486},[480,3068,503],{"class":486},[480,3070,506],{"class":486},[480,3072,3073],{"class":509},"bundler",[480,3075,500],{"class":486},[480,3077,515],{"class":486},[480,3079,3080,3082,3085,3087,3089],{"class":482,"line":568},[480,3081,571],{"class":486},[480,3083,3084],{"class":574},"esModuleInterop",[480,3086,500],{"class":486},[480,3088,503],{"class":486},[480,3090,3091],{"class":486}," true,\n",[480,3093,3094,3096,3099,3101,3103],{"class":482,"line":591},[480,3095,571],{"class":486},[480,3097,3098],{"class":574},"strict",[480,3100,500],{"class":486},[480,3102,503],{"class":486},[480,3104,3105],{"class":486}," true\n",[480,3107,3108],{"class":482,"line":605},[480,3109,722],{"class":486},[480,3111,3112],{"class":482,"line":637},[480,3113,728],{"class":486},[200,3115,3117],{"id":3116},"_52-创建-server-骨架","5.2 创建 Server 骨架",[327,3119,3123],{"className":3120,"code":3121,"language":3122,"meta":336,"style":336},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F src\u002Findex.ts\nimport { McpServer } from \"@modelcontextprotocol\u002Fsdk\u002Fserver\u002Fmcp.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol\u002Fsdk\u002Fserver\u002Fstdio.js\";\nimport { z } from \"zod\";\n\n\u002F\u002F 创建服务器实例\nconst server = new McpServer({\n  name: \"weather-service\",\n  version: \"1.0.0\",\n});\n\n\u002F\u002F 注册工具（Tools）\nserver.tool(\n  \"get_weather\",\n  \"获取指定城市的当前天气信息\",\n  {\n    city: z.string().describe(\"城市名称，如：北京、上海\"),\n  },\n  async ({ city }) => {\n    \u002F\u002F 工具实现见下文\n    return { content: [{ type: \"text\", text: `查询 ${city} 的天气...` }] };\n  }\n);\n\n\u002F\u002F 启动服务器\nconst transport = new StdioServerTransport();\nawait server.connect(transport);\n\nconsole.error(\"MCP Weather Server 已启动，等待连接...\");\n","typescript",[334,3124,3125,3130,3157,3179,3201,3205,3210,3230,3246,3261,3271,3275,3280,3294,3305,3316,3321,3356,3361,3382,3388,3453,3458,3465,3470,3476,3494,3513,3518],{"__ignoreMap":336},[480,3126,3127],{"class":482,"line":483},[480,3128,3129],{"class":1809},"\u002F\u002F src\u002Findex.ts\n",[480,3131,3132,3136,3138,3141,3144,3147,3149,3152,3154],{"class":482,"line":490},[480,3133,3135],{"class":3134},"s7zQu","import",[480,3137,618],{"class":486},[480,3139,3140],{"class":1836}," McpServer",[480,3142,3143],{"class":486}," }",[480,3145,3146],{"class":3134}," from",[480,3148,506],{"class":486},[480,3150,3151],{"class":509},"@modelcontextprotocol\u002Fsdk\u002Fserver\u002Fmcp.js",[480,3153,500],{"class":486},[480,3155,3156],{"class":486},";\n",[480,3158,3159,3161,3163,3166,3168,3170,3172,3175,3177],{"class":482,"line":518},[480,3160,3135],{"class":3134},[480,3162,618],{"class":486},[480,3164,3165],{"class":1836}," StdioServerTransport",[480,3167,3143],{"class":486},[480,3169,3146],{"class":3134},[480,3171,506],{"class":486},[480,3173,3174],{"class":509},"@modelcontextprotocol\u002Fsdk\u002Fserver\u002Fstdio.js",[480,3176,500],{"class":486},[480,3178,3156],{"class":486},[480,3180,3181,3183,3185,3188,3190,3192,3194,3197,3199],{"class":482,"line":535},[480,3182,3135],{"class":3134},[480,3184,618],{"class":486},[480,3186,3187],{"class":1836}," z",[480,3189,3143],{"class":486},[480,3191,3146],{"class":3134},[480,3193,506],{"class":486},[480,3195,3196],{"class":509},"zod",[480,3198,500],{"class":486},[480,3200,3156],{"class":486},[480,3202,3203],{"class":482,"line":554},[480,3204,1857],{"emptyLinePlaceholder":1856},[480,3206,3207],{"class":482,"line":568},[480,3208,3209],{"class":1809},"\u002F\u002F 创建服务器实例\n",[480,3211,3212,3215,3218,3220,3223,3225,3228],{"class":482,"line":591},[480,3213,3214],{"class":496},"const",[480,3216,3217],{"class":1836}," server ",[480,3219,2891],{"class":486},[480,3221,3222],{"class":486}," new",[480,3224,3140],{"class":2937},[480,3226,3227],{"class":1836},"(",[480,3229,487],{"class":486},[480,3231,3232,3235,3237,3239,3242,3244],{"class":482,"line":605},[480,3233,3234],{"class":623},"  name",[480,3236,503],{"class":486},[480,3238,506],{"class":486},[480,3240,3241],{"class":509},"weather-service",[480,3243,500],{"class":486},[480,3245,515],{"class":486},[480,3247,3248,3251,3253,3255,3257,3259],{"class":482,"line":637},[480,3249,3250],{"class":623},"  version",[480,3252,503],{"class":486},[480,3254,506],{"class":486},[480,3256,970],{"class":509},[480,3258,500],{"class":486},[480,3260,515],{"class":486},[480,3262,3263,3266,3269],{"class":482,"line":652},[480,3264,3265],{"class":486},"}",[480,3267,3268],{"class":1836},")",[480,3270,3156],{"class":486},[480,3272,3273],{"class":482,"line":658},[480,3274,1857],{"emptyLinePlaceholder":1856},[480,3276,3277],{"class":482,"line":672},[480,3278,3279],{"class":1809},"\u002F\u002F 注册工具（Tools）\n",[480,3281,3282,3285,3288,3291],{"class":482,"line":693},[480,3283,3284],{"class":1836},"server",[480,3286,3287],{"class":486},".",[480,3289,3290],{"class":2937},"tool",[480,3292,3293],{"class":1836},"(\n",[480,3295,3296,3298,3301,3303],{"class":482,"line":713},[480,3297,493],{"class":486},[480,3299,3300],{"class":509},"get_weather",[480,3302,500],{"class":486},[480,3304,515],{"class":486},[480,3306,3307,3309,3312,3314],{"class":482,"line":719},[480,3308,493],{"class":486},[480,3310,3311],{"class":509},"获取指定城市的当前天气信息",[480,3313,500],{"class":486},[480,3315,515],{"class":486},[480,3317,3318],{"class":482,"line":725},[480,3319,3320],{"class":486},"  {\n",[480,3322,3323,3326,3328,3330,3332,3335,3338,3340,3343,3345,3347,3350,3352,3354],{"class":482,"line":997},[480,3324,3325],{"class":623},"    city",[480,3327,503],{"class":486},[480,3329,3187],{"class":1836},[480,3331,3287],{"class":486},[480,3333,3334],{"class":2937},"string",[480,3336,3337],{"class":1836},"()",[480,3339,3287],{"class":486},[480,3341,3342],{"class":2937},"describe",[480,3344,3227],{"class":1836},[480,3346,500],{"class":486},[480,3348,3349],{"class":509},"城市名称，如：北京、上海",[480,3351,500],{"class":486},[480,3353,3268],{"class":1836},[480,3355,515],{"class":486},[480,3357,3358],{"class":482,"line":1002},[480,3359,3360],{"class":486},"  },\n",[480,3362,3364,3367,3370,3374,3377,3380],{"class":482,"line":3363},19,[480,3365,3366],{"class":496},"  async",[480,3368,3369],{"class":486}," ({",[480,3371,3373],{"class":3372},"sHdIc"," city",[480,3375,3376],{"class":486}," })",[480,3378,3379],{"class":496}," =>",[480,3381,565],{"class":486},[480,3383,3385],{"class":482,"line":3384},20,[480,3386,3387],{"class":1809},"    \u002F\u002F 工具实现见下文\n",[480,3389,3391,3394,3396,3399,3401,3403,3406,3409,3411,3413,3415,3417,3420,3423,3425,3428,3431,3434,3437,3439,3442,3445,3447,3450],{"class":482,"line":3390},21,[480,3392,3393],{"class":3134},"    return",[480,3395,618],{"class":486},[480,3397,3398],{"class":623}," content",[480,3400,503],{"class":486},[480,3402,2038],{"class":623},[480,3404,3405],{"class":486},"{",[480,3407,3408],{"class":623}," type",[480,3410,503],{"class":486},[480,3412,506],{"class":486},[480,3414,332],{"class":509},[480,3416,500],{"class":486},[480,3418,3419],{"class":486},",",[480,3421,3422],{"class":623}," text",[480,3424,503],{"class":486},[480,3426,3427],{"class":486}," `",[480,3429,3430],{"class":509},"查询 ",[480,3432,3433],{"class":486},"${",[480,3435,3436],{"class":1836},"city",[480,3438,3265],{"class":486},[480,3440,3441],{"class":509}," 的天气...",[480,3443,3444],{"class":486},"`",[480,3446,3143],{"class":486},[480,3448,3449],{"class":623},"] ",[480,3451,3452],{"class":486},"};\n",[480,3454,3456],{"class":482,"line":3455},22,[480,3457,722],{"class":486},[480,3459,3461,3463],{"class":482,"line":3460},23,[480,3462,3268],{"class":1836},[480,3464,3156],{"class":486},[480,3466,3468],{"class":482,"line":3467},24,[480,3469,1857],{"emptyLinePlaceholder":1856},[480,3471,3473],{"class":482,"line":3472},25,[480,3474,3475],{"class":1809},"\u002F\u002F 启动服务器\n",[480,3477,3479,3481,3484,3486,3488,3490,3492],{"class":482,"line":3478},26,[480,3480,3214],{"class":496},[480,3482,3483],{"class":1836}," transport ",[480,3485,2891],{"class":486},[480,3487,3222],{"class":486},[480,3489,3165],{"class":2937},[480,3491,3337],{"class":1836},[480,3493,3156],{"class":486},[480,3495,3497,3500,3503,3505,3508,3511],{"class":482,"line":3496},27,[480,3498,3499],{"class":3134},"await",[480,3501,3502],{"class":1836}," server",[480,3504,3287],{"class":486},[480,3506,3507],{"class":2937},"connect",[480,3509,3510],{"class":1836},"(transport)",[480,3512,3156],{"class":486},[480,3514,3516],{"class":482,"line":3515},28,[480,3517,1857],{"emptyLinePlaceholder":1856},[480,3519,3521,3524,3526,3528,3530,3532,3535,3537,3539],{"class":482,"line":3520},29,[480,3522,3523],{"class":1836},"console",[480,3525,3287],{"class":486},[480,3527,423],{"class":2937},[480,3529,3227],{"class":1836},[480,3531,500],{"class":486},[480,3533,3534],{"class":509},"MCP Weather Server 已启动，等待连接...",[480,3536,500],{"class":486},[480,3538,3268],{"class":1836},[480,3540,3156],{"class":486},[200,3542,3544],{"id":3543},"_53-实现工具tools","5.3 实现工具（Tools）",[327,3546,3548],{"className":3120,"code":3547,"language":3122,"meta":336,"style":336},"\u002F\u002F 天气查询工具实现\nserver.tool(\n  \"get_weather\",\n  \"获取指定城市的当前天气信息\",\n  {\n    city: z.string().describe(\"城市名称，如：北京、上海\"),\n  },\n  async ({ city }) => {\n    const API_KEY = process.env.OPENWEATHER_API_KEY;\n    const url = `https:\u002F\u002Fapi.openweathermap.org\u002Fdata\u002F2.5\u002Fweather?q=${encodeURIComponent(city)}&appid=${API_KEY}&units=metric&lang=zh_cn`;\n\n    try {\n      const response = await fetch(url);\n      if (!response.ok) {\n        throw new Error(`API 请求失败：${response.status}`);\n      }\n\n      const data = await response.json();\n\n      return {\n        content: [\n          {\n            type: \"text\",\n            text: JSON.stringify({\n              city: data.name,\n              temperature: `${data.main.temp}°C`,\n              feels_like: `${data.main.feels_like}°C`,\n              description: data.weather[0].description,\n              humidity: `${data.main.humidity}%`,\n              wind_speed: `${data.wind.speed} m\u002Fs`,\n            }, null, 2),\n          },\n        ],\n      };\n    } catch (error) {\n      return {\n        content: [\n          {\n            type: \"text\",\n            text: `查询失败：${error instanceof Error ? error.message : '未知错误'}`,\n          },\n        ],\n        isError: true,\n      };\n    }\n  }\n);\n",[334,3549,3550,3555,3565,3575,3585,3589,3619,3623,3637,3662,3703,3707,3714,3738,3762,3795,3799,3803,3824,3828,3835,3845,3850,3865,3884,3899,3931,3959,3989,4018,4049,4065,4071,4079,4085,4102,4109,4118,4123,4138,4184,4189,4196,4209,4214,4219,4224],{"__ignoreMap":336},[480,3551,3552],{"class":482,"line":483},[480,3553,3554],{"class":1809},"\u002F\u002F 天气查询工具实现\n",[480,3556,3557,3559,3561,3563],{"class":482,"line":490},[480,3558,3284],{"class":1836},[480,3560,3287],{"class":486},[480,3562,3290],{"class":2937},[480,3564,3293],{"class":1836},[480,3566,3567,3569,3571,3573],{"class":482,"line":518},[480,3568,493],{"class":486},[480,3570,3300],{"class":509},[480,3572,500],{"class":486},[480,3574,515],{"class":486},[480,3576,3577,3579,3581,3583],{"class":482,"line":535},[480,3578,493],{"class":486},[480,3580,3311],{"class":509},[480,3582,500],{"class":486},[480,3584,515],{"class":486},[480,3586,3587],{"class":482,"line":554},[480,3588,3320],{"class":486},[480,3590,3591,3593,3595,3597,3599,3601,3603,3605,3607,3609,3611,3613,3615,3617],{"class":482,"line":568},[480,3592,3325],{"class":623},[480,3594,503],{"class":486},[480,3596,3187],{"class":1836},[480,3598,3287],{"class":486},[480,3600,3334],{"class":2937},[480,3602,3337],{"class":1836},[480,3604,3287],{"class":486},[480,3606,3342],{"class":2937},[480,3608,3227],{"class":1836},[480,3610,500],{"class":486},[480,3612,3349],{"class":509},[480,3614,500],{"class":486},[480,3616,3268],{"class":1836},[480,3618,515],{"class":486},[480,3620,3621],{"class":482,"line":591},[480,3622,3360],{"class":486},[480,3624,3625,3627,3629,3631,3633,3635],{"class":482,"line":605},[480,3626,3366],{"class":496},[480,3628,3369],{"class":486},[480,3630,3373],{"class":3372},[480,3632,3376],{"class":486},[480,3634,3379],{"class":496},[480,3636,565],{"class":486},[480,3638,3639,3642,3645,3648,3651,3653,3655,3657,3660],{"class":482,"line":637},[480,3640,3641],{"class":496},"    const",[480,3643,3644],{"class":1836}," API_KEY",[480,3646,3647],{"class":486}," =",[480,3649,3650],{"class":1836}," process",[480,3652,3287],{"class":486},[480,3654,2433],{"class":1836},[480,3656,3287],{"class":486},[480,3658,3659],{"class":1836},"OPENWEATHER_API_KEY",[480,3661,3156],{"class":486},[480,3663,3664,3666,3669,3671,3673,3676,3678,3681,3684,3686,3689,3691,3694,3696,3699,3701],{"class":482,"line":652},[480,3665,3641],{"class":496},[480,3667,3668],{"class":1836}," url",[480,3670,3647],{"class":486},[480,3672,3427],{"class":486},[480,3674,3675],{"class":509},"https:\u002F\u002Fapi.openweathermap.org\u002Fdata\u002F2.5\u002Fweather?q=",[480,3677,3433],{"class":486},[480,3679,3680],{"class":2937},"encodeURIComponent",[480,3682,3683],{"class":1836},"(city)",[480,3685,3265],{"class":486},[480,3687,3688],{"class":509},"&appid=",[480,3690,3433],{"class":486},[480,3692,3693],{"class":1836},"API_KEY",[480,3695,3265],{"class":486},[480,3697,3698],{"class":509},"&units=metric&lang=zh_cn",[480,3700,3444],{"class":486},[480,3702,3156],{"class":486},[480,3704,3705],{"class":482,"line":658},[480,3706,1857],{"emptyLinePlaceholder":1856},[480,3708,3709,3712],{"class":482,"line":672},[480,3710,3711],{"class":3134},"    try",[480,3713,565],{"class":486},[480,3715,3716,3719,3722,3724,3727,3730,3732,3734,3736],{"class":482,"line":693},[480,3717,3718],{"class":496},"      const",[480,3720,3721],{"class":1836}," response",[480,3723,3647],{"class":486},[480,3725,3726],{"class":3134}," await",[480,3728,3729],{"class":2937}," fetch",[480,3731,3227],{"class":623},[480,3733,2617],{"class":1836},[480,3735,3268],{"class":623},[480,3737,3156],{"class":486},[480,3739,3740,3743,3746,3749,3752,3754,3757,3760],{"class":482,"line":713},[480,3741,3742],{"class":3134},"      if",[480,3744,3745],{"class":623}," (",[480,3747,3748],{"class":486},"!",[480,3750,3751],{"class":1836},"response",[480,3753,3287],{"class":486},[480,3755,3756],{"class":1836},"ok",[480,3758,3759],{"class":623},") ",[480,3761,487],{"class":486},[480,3763,3764,3767,3769,3772,3774,3776,3779,3781,3783,3785,3788,3791,3793],{"class":482,"line":719},[480,3765,3766],{"class":3134},"        throw",[480,3768,3222],{"class":486},[480,3770,3771],{"class":2937}," Error",[480,3773,3227],{"class":623},[480,3775,3444],{"class":486},[480,3777,3778],{"class":509},"API 请求失败：",[480,3780,3433],{"class":486},[480,3782,3751],{"class":1836},[480,3784,3287],{"class":486},[480,3786,3787],{"class":1836},"status",[480,3789,3790],{"class":486},"}`",[480,3792,3268],{"class":623},[480,3794,3156],{"class":486},[480,3796,3797],{"class":482,"line":725},[480,3798,2667],{"class":486},[480,3800,3801],{"class":482,"line":997},[480,3802,1857],{"emptyLinePlaceholder":1856},[480,3804,3805,3807,3810,3812,3814,3816,3818,3820,3822],{"class":482,"line":1002},[480,3806,3718],{"class":496},[480,3808,3809],{"class":1836}," data",[480,3811,3647],{"class":486},[480,3813,3726],{"class":3134},[480,3815,3721],{"class":1836},[480,3817,3287],{"class":486},[480,3819,476],{"class":2937},[480,3821,3337],{"class":623},[480,3823,3156],{"class":486},[480,3825,3826],{"class":482,"line":3363},[480,3827,1857],{"emptyLinePlaceholder":1856},[480,3829,3830,3833],{"class":482,"line":3384},[480,3831,3832],{"class":3134},"      return",[480,3834,565],{"class":486},[480,3836,3837,3840,3842],{"class":482,"line":3390},[480,3838,3839],{"class":623},"        content",[480,3841,503],{"class":486},[480,3843,3844],{"class":623}," [\n",[480,3846,3847],{"class":482,"line":3455},[480,3848,3849],{"class":486},"          {\n",[480,3851,3852,3855,3857,3859,3861,3863],{"class":482,"line":3460},[480,3853,3854],{"class":623},"            type",[480,3856,503],{"class":486},[480,3858,506],{"class":486},[480,3860,332],{"class":509},[480,3862,500],{"class":486},[480,3864,515],{"class":486},[480,3866,3867,3870,3872,3875,3877,3880,3882],{"class":482,"line":3467},[480,3868,3869],{"class":623},"            text",[480,3871,503],{"class":486},[480,3873,3874],{"class":1836}," JSON",[480,3876,3287],{"class":486},[480,3878,3879],{"class":2937},"stringify",[480,3881,3227],{"class":623},[480,3883,487],{"class":486},[480,3885,3886,3889,3891,3893,3895,3897],{"class":482,"line":3472},[480,3887,3888],{"class":623},"              city",[480,3890,503],{"class":486},[480,3892,3809],{"class":1836},[480,3894,3287],{"class":486},[480,3896,677],{"class":1836},[480,3898,515],{"class":486},[480,3900,3901,3904,3906,3909,3912,3914,3917,3919,3922,3924,3927,3929],{"class":482,"line":3478},[480,3902,3903],{"class":623},"              temperature",[480,3905,503],{"class":486},[480,3907,3908],{"class":486}," `${",[480,3910,3911],{"class":1836},"data",[480,3913,3287],{"class":486},[480,3915,3916],{"class":1836},"main",[480,3918,3287],{"class":486},[480,3920,3921],{"class":1836},"temp",[480,3923,3265],{"class":486},[480,3925,3926],{"class":509},"°C",[480,3928,3444],{"class":486},[480,3930,515],{"class":486},[480,3932,3933,3936,3938,3940,3942,3944,3946,3948,3951,3953,3955,3957],{"class":482,"line":3496},[480,3934,3935],{"class":623},"              feels_like",[480,3937,503],{"class":486},[480,3939,3908],{"class":486},[480,3941,3911],{"class":1836},[480,3943,3287],{"class":486},[480,3945,3916],{"class":1836},[480,3947,3287],{"class":486},[480,3949,3950],{"class":1836},"feels_like",[480,3952,3265],{"class":486},[480,3954,3926],{"class":509},[480,3956,3444],{"class":486},[480,3958,515],{"class":486},[480,3960,3961,3964,3966,3968,3970,3973,3976,3979,3982,3984,3987],{"class":482,"line":3515},[480,3962,3963],{"class":623},"              description",[480,3965,503],{"class":486},[480,3967,3809],{"class":1836},[480,3969,3287],{"class":486},[480,3971,3972],{"class":1836},"weather",[480,3974,3975],{"class":623},"[",[480,3977,3978],{"class":529},"0",[480,3980,3981],{"class":623},"]",[480,3983,3287],{"class":486},[480,3985,3986],{"class":1836},"description",[480,3988,515],{"class":486},[480,3990,3991,3994,3996,3998,4000,4002,4004,4006,4009,4011,4014,4016],{"class":482,"line":3520},[480,3992,3993],{"class":623},"              humidity",[480,3995,503],{"class":486},[480,3997,3908],{"class":486},[480,3999,3911],{"class":1836},[480,4001,3287],{"class":486},[480,4003,3916],{"class":1836},[480,4005,3287],{"class":486},[480,4007,4008],{"class":1836},"humidity",[480,4010,3265],{"class":486},[480,4012,4013],{"class":509},"%",[480,4015,3444],{"class":486},[480,4017,515],{"class":486},[480,4019,4021,4024,4026,4028,4030,4032,4035,4037,4040,4042,4045,4047],{"class":482,"line":4020},30,[480,4022,4023],{"class":623},"              wind_speed",[480,4025,503],{"class":486},[480,4027,3908],{"class":486},[480,4029,3911],{"class":1836},[480,4031,3287],{"class":486},[480,4033,4034],{"class":1836},"wind",[480,4036,3287],{"class":486},[480,4038,4039],{"class":1836},"speed",[480,4041,3265],{"class":486},[480,4043,4044],{"class":509}," m\u002Fs",[480,4046,3444],{"class":486},[480,4048,515],{"class":486},[480,4050,4052,4055,4058,4061,4063],{"class":482,"line":4051},31,[480,4053,4054],{"class":486},"            },",[480,4056,4057],{"class":486}," null,",[480,4059,4060],{"class":529}," 2",[480,4062,3268],{"class":623},[480,4064,515],{"class":486},[480,4066,4068],{"class":482,"line":4067},32,[480,4069,4070],{"class":486},"          },\n",[480,4072,4074,4077],{"class":482,"line":4073},33,[480,4075,4076],{"class":623},"        ]",[480,4078,515],{"class":486},[480,4080,4082],{"class":482,"line":4081},34,[480,4083,4084],{"class":486},"      };\n",[480,4086,4088,4091,4094,4096,4098,4100],{"class":482,"line":4087},35,[480,4089,4090],{"class":486},"    }",[480,4092,4093],{"class":3134}," catch",[480,4095,3745],{"class":623},[480,4097,423],{"class":1836},[480,4099,3759],{"class":623},[480,4101,487],{"class":486},[480,4103,4105,4107],{"class":482,"line":4104},36,[480,4106,3832],{"class":3134},[480,4108,565],{"class":486},[480,4110,4112,4114,4116],{"class":482,"line":4111},37,[480,4113,3839],{"class":623},[480,4115,503],{"class":486},[480,4117,3844],{"class":623},[480,4119,4121],{"class":482,"line":4120},38,[480,4122,3849],{"class":486},[480,4124,4126,4128,4130,4132,4134,4136],{"class":482,"line":4125},39,[480,4127,3854],{"class":623},[480,4129,503],{"class":486},[480,4131,506],{"class":486},[480,4133,332],{"class":509},[480,4135,500],{"class":486},[480,4137,515],{"class":486},[480,4139,4141,4143,4145,4147,4150,4152,4155,4158,4160,4163,4166,4168,4171,4173,4176,4179,4182],{"class":482,"line":4140},40,[480,4142,3869],{"class":623},[480,4144,503],{"class":486},[480,4146,3427],{"class":486},[480,4148,4149],{"class":509},"查询失败：",[480,4151,3433],{"class":486},[480,4153,4154],{"class":1836},"error ",[480,4156,4157],{"class":486},"instanceof",[480,4159,3771],{"class":574},[480,4161,4162],{"class":486}," ?",[480,4164,4165],{"class":1836}," error",[480,4167,3287],{"class":486},[480,4169,4170],{"class":1836},"message ",[480,4172,503],{"class":486},[480,4174,4175],{"class":486}," '",[480,4177,4178],{"class":509},"未知错误",[480,4180,4181],{"class":486},"'}`",[480,4183,515],{"class":486},[480,4185,4187],{"class":482,"line":4186},41,[480,4188,4070],{"class":486},[480,4190,4192,4194],{"class":482,"line":4191},42,[480,4193,4076],{"class":623},[480,4195,515],{"class":486},[480,4197,4199,4202,4204,4207],{"class":482,"line":4198},43,[480,4200,4201],{"class":623},"        isError",[480,4203,503],{"class":486},[480,4205,631],{"class":4206},"sfNiH",[480,4208,515],{"class":486},[480,4210,4212],{"class":482,"line":4211},44,[480,4213,4084],{"class":486},[480,4215,4217],{"class":482,"line":4216},45,[480,4218,716],{"class":486},[480,4220,4222],{"class":482,"line":4221},46,[480,4223,722],{"class":486},[480,4225,4227,4229],{"class":482,"line":4226},47,[480,4228,3268],{"class":1836},[480,4230,3156],{"class":486},[200,4232,4234],{"id":4233},"_54-添加资源resources","5.4 添加资源（Resources）",[327,4236,4238],{"className":3120,"code":4237,"language":3122,"meta":336,"style":336},"\u002F\u002F 提供服务器状态信息\nserver.resource(\n  \"server-status\",\n  \"status:\u002F\u002Fserver\",\n  async (uri) => ({\n    contents: [\n      {\n        uri: uri.href,\n        text: JSON.stringify({\n          name: \"Weather Service\",\n          version: \"1.0.0\",\n          status: \"running\",\n          timestamp: new Date().toISOString(),\n        }, null, 2),\n      },\n    ],\n  })\n);\n\n\u002F\u002F 提供 API 文档\nserver.resource(\n  \"api-docs\",\n  \"docs:\u002F\u002Fapi\",\n  async (uri) => ({\n    contents: [\n      {\n        uri: uri.href,\n        text: `\n# Weather MCP Server API\n\n## Tools\n- get_weather(city: string): 获取指定城市天气\n\n## Resources\n- status:\u002F\u002Fserver - 服务器状态\n- docs:\u002F\u002Fapi - API 文档\n        `.trim(),\n      },\n    ],\n  })\n);\n",[334,4239,4240,4245,4256,4267,4278,4295,4304,4309,4326,4343,4359,4374,4390,4413,4426,4431,4438,4446,4452,4456,4461,4471,4482,4493,4509,4517,4521,4535,4544,4549,4553,4558,4563,4567,4572,4577,4582,4596,4600,4606,4612],{"__ignoreMap":336},[480,4241,4242],{"class":482,"line":483},[480,4243,4244],{"class":1809},"\u002F\u002F 提供服务器状态信息\n",[480,4246,4247,4249,4251,4254],{"class":482,"line":490},[480,4248,3284],{"class":1836},[480,4250,3287],{"class":486},[480,4252,4253],{"class":2937},"resource",[480,4255,3293],{"class":1836},[480,4257,4258,4260,4263,4265],{"class":482,"line":518},[480,4259,493],{"class":486},[480,4261,4262],{"class":509},"server-status",[480,4264,500],{"class":486},[480,4266,515],{"class":486},[480,4268,4269,4271,4274,4276],{"class":482,"line":535},[480,4270,493],{"class":486},[480,4272,4273],{"class":509},"status:\u002F\u002Fserver",[480,4275,500],{"class":486},[480,4277,515],{"class":486},[480,4279,4280,4282,4284,4287,4289,4291,4293],{"class":482,"line":554},[480,4281,3366],{"class":496},[480,4283,3745],{"class":486},[480,4285,4286],{"class":3372},"uri",[480,4288,3268],{"class":486},[480,4290,3379],{"class":496},[480,4292,3745],{"class":1836},[480,4294,487],{"class":486},[480,4296,4297,4300,4302],{"class":482,"line":568},[480,4298,4299],{"class":623},"    contents",[480,4301,503],{"class":486},[480,4303,3844],{"class":1836},[480,4305,4306],{"class":482,"line":591},[480,4307,4308],{"class":486},"      {\n",[480,4310,4311,4314,4316,4319,4321,4324],{"class":482,"line":605},[480,4312,4313],{"class":623},"        uri",[480,4315,503],{"class":486},[480,4317,4318],{"class":1836}," uri",[480,4320,3287],{"class":486},[480,4322,4323],{"class":1836},"href",[480,4325,515],{"class":486},[480,4327,4328,4331,4333,4335,4337,4339,4341],{"class":482,"line":637},[480,4329,4330],{"class":623},"        text",[480,4332,503],{"class":486},[480,4334,3874],{"class":1836},[480,4336,3287],{"class":486},[480,4338,3879],{"class":2937},[480,4340,3227],{"class":1836},[480,4342,487],{"class":486},[480,4344,4345,4348,4350,4352,4355,4357],{"class":482,"line":652},[480,4346,4347],{"class":623},"          name",[480,4349,503],{"class":486},[480,4351,506],{"class":486},[480,4353,4354],{"class":509},"Weather Service",[480,4356,500],{"class":486},[480,4358,515],{"class":486},[480,4360,4361,4364,4366,4368,4370,4372],{"class":482,"line":658},[480,4362,4363],{"class":623},"          version",[480,4365,503],{"class":486},[480,4367,506],{"class":486},[480,4369,970],{"class":509},[480,4371,500],{"class":486},[480,4373,515],{"class":486},[480,4375,4376,4379,4381,4383,4386,4388],{"class":482,"line":672},[480,4377,4378],{"class":623},"          status",[480,4380,503],{"class":486},[480,4382,506],{"class":486},[480,4384,4385],{"class":509},"running",[480,4387,500],{"class":486},[480,4389,515],{"class":486},[480,4391,4392,4395,4397,4399,4402,4404,4406,4409,4411],{"class":482,"line":693},[480,4393,4394],{"class":623},"          timestamp",[480,4396,503],{"class":486},[480,4398,3222],{"class":486},[480,4400,4401],{"class":2937}," Date",[480,4403,3337],{"class":1836},[480,4405,3287],{"class":486},[480,4407,4408],{"class":2937},"toISOString",[480,4410,3337],{"class":1836},[480,4412,515],{"class":486},[480,4414,4415,4418,4420,4422,4424],{"class":482,"line":713},[480,4416,4417],{"class":486},"        },",[480,4419,4057],{"class":486},[480,4421,4060],{"class":529},[480,4423,3268],{"class":1836},[480,4425,515],{"class":486},[480,4427,4428],{"class":482,"line":719},[480,4429,4430],{"class":486},"      },\n",[480,4432,4433,4436],{"class":482,"line":725},[480,4434,4435],{"class":1836},"    ]",[480,4437,515],{"class":486},[480,4439,4440,4443],{"class":482,"line":997},[480,4441,4442],{"class":486},"  }",[480,4444,4445],{"class":1836},")\n",[480,4447,4448,4450],{"class":482,"line":1002},[480,4449,3268],{"class":1836},[480,4451,3156],{"class":486},[480,4453,4454],{"class":482,"line":3363},[480,4455,1857],{"emptyLinePlaceholder":1856},[480,4457,4458],{"class":482,"line":3384},[480,4459,4460],{"class":1809},"\u002F\u002F 提供 API 文档\n",[480,4462,4463,4465,4467,4469],{"class":482,"line":3390},[480,4464,3284],{"class":1836},[480,4466,3287],{"class":486},[480,4468,4253],{"class":2937},[480,4470,3293],{"class":1836},[480,4472,4473,4475,4478,4480],{"class":482,"line":3455},[480,4474,493],{"class":486},[480,4476,4477],{"class":509},"api-docs",[480,4479,500],{"class":486},[480,4481,515],{"class":486},[480,4483,4484,4486,4489,4491],{"class":482,"line":3460},[480,4485,493],{"class":486},[480,4487,4488],{"class":509},"docs:\u002F\u002Fapi",[480,4490,500],{"class":486},[480,4492,515],{"class":486},[480,4494,4495,4497,4499,4501,4503,4505,4507],{"class":482,"line":3467},[480,4496,3366],{"class":496},[480,4498,3745],{"class":486},[480,4500,4286],{"class":3372},[480,4502,3268],{"class":486},[480,4504,3379],{"class":496},[480,4506,3745],{"class":1836},[480,4508,487],{"class":486},[480,4510,4511,4513,4515],{"class":482,"line":3472},[480,4512,4299],{"class":623},[480,4514,503],{"class":486},[480,4516,3844],{"class":1836},[480,4518,4519],{"class":482,"line":3478},[480,4520,4308],{"class":486},[480,4522,4523,4525,4527,4529,4531,4533],{"class":482,"line":3496},[480,4524,4313],{"class":623},[480,4526,503],{"class":486},[480,4528,4318],{"class":1836},[480,4530,3287],{"class":486},[480,4532,4323],{"class":1836},[480,4534,515],{"class":486},[480,4536,4537,4539,4541],{"class":482,"line":3515},[480,4538,4330],{"class":623},[480,4540,503],{"class":486},[480,4542,4543],{"class":486}," `\n",[480,4545,4546],{"class":482,"line":3520},[480,4547,4548],{"class":509},"# Weather MCP Server API\n",[480,4550,4551],{"class":482,"line":4020},[480,4552,1857],{"emptyLinePlaceholder":1856},[480,4554,4555],{"class":482,"line":4051},[480,4556,4557],{"class":509},"## Tools\n",[480,4559,4560],{"class":482,"line":4067},[480,4561,4562],{"class":509},"- get_weather(city: string): 获取指定城市天气\n",[480,4564,4565],{"class":482,"line":4073},[480,4566,1857],{"emptyLinePlaceholder":1856},[480,4568,4569],{"class":482,"line":4081},[480,4570,4571],{"class":509},"## Resources\n",[480,4573,4574],{"class":482,"line":4087},[480,4575,4576],{"class":509},"- status:\u002F\u002Fserver - 服务器状态\n",[480,4578,4579],{"class":482,"line":4104},[480,4580,4581],{"class":509},"- docs:\u002F\u002Fapi - API 文档\n",[480,4583,4584,4587,4589,4592,4594],{"class":482,"line":4111},[480,4585,4586],{"class":486},"        `",[480,4588,3287],{"class":486},[480,4590,4591],{"class":2937},"trim",[480,4593,3337],{"class":1836},[480,4595,515],{"class":486},[480,4597,4598],{"class":482,"line":4120},[480,4599,4430],{"class":486},[480,4601,4602,4604],{"class":482,"line":4125},[480,4603,4435],{"class":1836},[480,4605,515],{"class":486},[480,4607,4608,4610],{"class":482,"line":4140},[480,4609,4442],{"class":486},[480,4611,4445],{"class":1836},[480,4613,4614,4616],{"class":482,"line":4186},[480,4615,3268],{"class":1836},[480,4617,3156],{"class":486},[200,4619,4621],{"id":4620},"_55-添加提示模板prompts","5.5 添加提示模板（Prompts）",[327,4623,4625],{"className":3120,"code":4624,"language":3122,"meta":336,"style":336},"\u002F\u002F 预定义的天气报告模板\nserver.prompt(\n  \"weather_report\",\n  \"生成一份格式化的天气报告\",\n  {\n    city: z.string().describe(\"城市名称\"),\n    include_tips: z.boolean().optional().describe(\"是否包含穿衣建议\"),\n  },\n  ({ city, include_tips }) => ({\n    messages: [\n      {\n        role: \"user\",\n        content: {\n          type: \"text\",\n          text: `请为${city}生成一份天气报告。${include_tips ? \"同时提供穿衣建议。\" : \"\"}`,\n        },\n      },\n    ],\n  })\n);\n",[334,4626,4627,4632,4643,4654,4665,4669,4700,4740,4744,4764,4773,4777,4793,4801,4816,4860,4865,4869,4875,4881],{"__ignoreMap":336},[480,4628,4629],{"class":482,"line":483},[480,4630,4631],{"class":1809},"\u002F\u002F 预定义的天气报告模板\n",[480,4633,4634,4636,4638,4641],{"class":482,"line":490},[480,4635,3284],{"class":1836},[480,4637,3287],{"class":486},[480,4639,4640],{"class":2937},"prompt",[480,4642,3293],{"class":1836},[480,4644,4645,4647,4650,4652],{"class":482,"line":518},[480,4646,493],{"class":486},[480,4648,4649],{"class":509},"weather_report",[480,4651,500],{"class":486},[480,4653,515],{"class":486},[480,4655,4656,4658,4661,4663],{"class":482,"line":535},[480,4657,493],{"class":486},[480,4659,4660],{"class":509},"生成一份格式化的天气报告",[480,4662,500],{"class":486},[480,4664,515],{"class":486},[480,4666,4667],{"class":482,"line":554},[480,4668,3320],{"class":486},[480,4670,4671,4673,4675,4677,4679,4681,4683,4685,4687,4689,4691,4694,4696,4698],{"class":482,"line":568},[480,4672,3325],{"class":623},[480,4674,503],{"class":486},[480,4676,3187],{"class":1836},[480,4678,3287],{"class":486},[480,4680,3334],{"class":2937},[480,4682,3337],{"class":1836},[480,4684,3287],{"class":486},[480,4686,3342],{"class":2937},[480,4688,3227],{"class":1836},[480,4690,500],{"class":486},[480,4692,4693],{"class":509},"城市名称",[480,4695,500],{"class":486},[480,4697,3268],{"class":1836},[480,4699,515],{"class":486},[480,4701,4702,4705,4707,4709,4711,4714,4716,4718,4721,4723,4725,4727,4729,4731,4734,4736,4738],{"class":482,"line":591},[480,4703,4704],{"class":623},"    include_tips",[480,4706,503],{"class":486},[480,4708,3187],{"class":1836},[480,4710,3287],{"class":486},[480,4712,4713],{"class":2937},"boolean",[480,4715,3337],{"class":1836},[480,4717,3287],{"class":486},[480,4719,4720],{"class":2937},"optional",[480,4722,3337],{"class":1836},[480,4724,3287],{"class":486},[480,4726,3342],{"class":2937},[480,4728,3227],{"class":1836},[480,4730,500],{"class":486},[480,4732,4733],{"class":509},"是否包含穿衣建议",[480,4735,500],{"class":486},[480,4737,3268],{"class":1836},[480,4739,515],{"class":486},[480,4741,4742],{"class":482,"line":605},[480,4743,3360],{"class":486},[480,4745,4746,4749,4751,4753,4756,4758,4760,4762],{"class":482,"line":637},[480,4747,4748],{"class":486},"  ({",[480,4750,3373],{"class":3372},[480,4752,3419],{"class":486},[480,4754,4755],{"class":3372}," include_tips",[480,4757,3376],{"class":486},[480,4759,3379],{"class":496},[480,4761,3745],{"class":1836},[480,4763,487],{"class":486},[480,4765,4766,4769,4771],{"class":482,"line":652},[480,4767,4768],{"class":623},"    messages",[480,4770,503],{"class":486},[480,4772,3844],{"class":1836},[480,4774,4775],{"class":482,"line":658},[480,4776,4308],{"class":486},[480,4778,4779,4782,4784,4786,4789,4791],{"class":482,"line":672},[480,4780,4781],{"class":623},"        role",[480,4783,503],{"class":486},[480,4785,506],{"class":486},[480,4787,4788],{"class":509},"user",[480,4790,500],{"class":486},[480,4792,515],{"class":486},[480,4794,4795,4797,4799],{"class":482,"line":693},[480,4796,3839],{"class":623},[480,4798,503],{"class":486},[480,4800,565],{"class":486},[480,4802,4803,4806,4808,4810,4812,4814],{"class":482,"line":713},[480,4804,4805],{"class":623},"          type",[480,4807,503],{"class":486},[480,4809,506],{"class":486},[480,4811,332],{"class":509},[480,4813,500],{"class":486},[480,4815,515],{"class":486},[480,4817,4818,4821,4823,4825,4828,4830,4832,4834,4837,4839,4842,4845,4847,4850,4852,4855,4858],{"class":482,"line":719},[480,4819,4820],{"class":623},"          text",[480,4822,503],{"class":486},[480,4824,3427],{"class":486},[480,4826,4827],{"class":509},"请为",[480,4829,3433],{"class":486},[480,4831,3436],{"class":1836},[480,4833,3265],{"class":486},[480,4835,4836],{"class":509},"生成一份天气报告。",[480,4838,3433],{"class":486},[480,4840,4841],{"class":1836},"include_tips ",[480,4843,4844],{"class":486},"?",[480,4846,506],{"class":486},[480,4848,4849],{"class":509},"同时提供穿衣建议。",[480,4851,500],{"class":486},[480,4853,4854],{"class":486}," :",[480,4856,4857],{"class":486}," \"\"}`",[480,4859,515],{"class":486},[480,4861,4862],{"class":482,"line":725},[480,4863,4864],{"class":486},"        },\n",[480,4866,4867],{"class":482,"line":997},[480,4868,4430],{"class":486},[480,4870,4871,4873],{"class":482,"line":1002},[480,4872,4435],{"class":1836},[480,4874,515],{"class":486},[480,4876,4877,4879],{"class":482,"line":3363},[480,4878,4442],{"class":486},[480,4880,4445],{"class":1836},[480,4882,4883,4885],{"class":482,"line":3384},[480,4884,3268],{"class":1836},[480,4886,3156],{"class":486},[200,4888,4890],{"id":4889},"_56-完整入口文件","5.6 完整入口文件",[327,4892,4894],{"className":3120,"code":4893,"language":3122,"meta":336,"style":336},"\u002F\u002F src\u002Findex.ts（完整版）\nimport { McpServer } from \"@modelcontextprotocol\u002Fsdk\u002Fserver\u002Fmcp.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol\u002Fsdk\u002Fserver\u002Fstdio.js\";\nimport { z } from \"zod\";\n\nconst server = new McpServer({\n  name: \"weather-service\",\n  version: \"1.0.0\",\n});\n\n\u002F\u002F ===== Tools =====\nserver.tool(\"get_weather\", \u002F* ... *\u002F);\n\n\u002F\u002F ===== Resources =====\nserver.resource(\"server-status\", \u002F* ... *\u002F);\nserver.resource(\"api-docs\", \u002F* ... *\u002F);\n\n\u002F\u002F ===== Prompts =====\nserver.prompt(\"weather_report\", \u002F* ... *\u002F);\n\n\u002F\u002F ===== 错误处理 =====\nprocess.stdin.on(\"error\", (err) => {\n  console.error(\"标准输入错误:\", err);\n  process.exit(1);\n});\n\nprocess.stdout.on(\"error\", (err) => {\n  console.error(\"标准输出错误:\", err);\n  process.exit(1);\n});\n\n\u002F\u002F 优雅退出\nprocess.on(\"SIGINT\", async () => {\n  await server.close();\n  process.exit(0);\n});\n\n\u002F\u002F 启动\nconst transport = new StdioServerTransport();\nawait server.connect(transport);\nconsole.error(\"MCP Weather Server 已启动，等待连接...\");\n",[334,4895,4896,4901,4921,4941,4961,4965,4981,4995,5009,5017,5021,5026,5051,5055,5060,5084,5108,5112,5117,5141,5145,5150,5186,5213,5232,5240,5244,5277,5302,5318,5326,5330,5335,5364,5380,5396,5404,5408,5413,5429,5443],{"__ignoreMap":336},[480,4897,4898],{"class":482,"line":483},[480,4899,4900],{"class":1809},"\u002F\u002F src\u002Findex.ts（完整版）\n",[480,4902,4903,4905,4907,4909,4911,4913,4915,4917,4919],{"class":482,"line":490},[480,4904,3135],{"class":3134},[480,4906,618],{"class":486},[480,4908,3140],{"class":1836},[480,4910,3143],{"class":486},[480,4912,3146],{"class":3134},[480,4914,506],{"class":486},[480,4916,3151],{"class":509},[480,4918,500],{"class":486},[480,4920,3156],{"class":486},[480,4922,4923,4925,4927,4929,4931,4933,4935,4937,4939],{"class":482,"line":518},[480,4924,3135],{"class":3134},[480,4926,618],{"class":486},[480,4928,3165],{"class":1836},[480,4930,3143],{"class":486},[480,4932,3146],{"class":3134},[480,4934,506],{"class":486},[480,4936,3174],{"class":509},[480,4938,500],{"class":486},[480,4940,3156],{"class":486},[480,4942,4943,4945,4947,4949,4951,4953,4955,4957,4959],{"class":482,"line":535},[480,4944,3135],{"class":3134},[480,4946,618],{"class":486},[480,4948,3187],{"class":1836},[480,4950,3143],{"class":486},[480,4952,3146],{"class":3134},[480,4954,506],{"class":486},[480,4956,3196],{"class":509},[480,4958,500],{"class":486},[480,4960,3156],{"class":486},[480,4962,4963],{"class":482,"line":554},[480,4964,1857],{"emptyLinePlaceholder":1856},[480,4966,4967,4969,4971,4973,4975,4977,4979],{"class":482,"line":568},[480,4968,3214],{"class":496},[480,4970,3217],{"class":1836},[480,4972,2891],{"class":486},[480,4974,3222],{"class":486},[480,4976,3140],{"class":2937},[480,4978,3227],{"class":1836},[480,4980,487],{"class":486},[480,4982,4983,4985,4987,4989,4991,4993],{"class":482,"line":591},[480,4984,3234],{"class":623},[480,4986,503],{"class":486},[480,4988,506],{"class":486},[480,4990,3241],{"class":509},[480,4992,500],{"class":486},[480,4994,515],{"class":486},[480,4996,4997,4999,5001,5003,5005,5007],{"class":482,"line":605},[480,4998,3250],{"class":623},[480,5000,503],{"class":486},[480,5002,506],{"class":486},[480,5004,970],{"class":509},[480,5006,500],{"class":486},[480,5008,515],{"class":486},[480,5010,5011,5013,5015],{"class":482,"line":637},[480,5012,3265],{"class":486},[480,5014,3268],{"class":1836},[480,5016,3156],{"class":486},[480,5018,5019],{"class":482,"line":652},[480,5020,1857],{"emptyLinePlaceholder":1856},[480,5022,5023],{"class":482,"line":658},[480,5024,5025],{"class":1809},"\u002F\u002F ===== Tools =====\n",[480,5027,5028,5030,5032,5034,5036,5038,5040,5042,5044,5047,5049],{"class":482,"line":672},[480,5029,3284],{"class":1836},[480,5031,3287],{"class":486},[480,5033,3290],{"class":2937},[480,5035,3227],{"class":1836},[480,5037,500],{"class":486},[480,5039,3300],{"class":509},[480,5041,500],{"class":486},[480,5043,3419],{"class":486},[480,5045,5046],{"class":1809}," \u002F* ... *\u002F",[480,5048,3268],{"class":1836},[480,5050,3156],{"class":486},[480,5052,5053],{"class":482,"line":693},[480,5054,1857],{"emptyLinePlaceholder":1856},[480,5056,5057],{"class":482,"line":713},[480,5058,5059],{"class":1809},"\u002F\u002F ===== Resources =====\n",[480,5061,5062,5064,5066,5068,5070,5072,5074,5076,5078,5080,5082],{"class":482,"line":719},[480,5063,3284],{"class":1836},[480,5065,3287],{"class":486},[480,5067,4253],{"class":2937},[480,5069,3227],{"class":1836},[480,5071,500],{"class":486},[480,5073,4262],{"class":509},[480,5075,500],{"class":486},[480,5077,3419],{"class":486},[480,5079,5046],{"class":1809},[480,5081,3268],{"class":1836},[480,5083,3156],{"class":486},[480,5085,5086,5088,5090,5092,5094,5096,5098,5100,5102,5104,5106],{"class":482,"line":725},[480,5087,3284],{"class":1836},[480,5089,3287],{"class":486},[480,5091,4253],{"class":2937},[480,5093,3227],{"class":1836},[480,5095,500],{"class":486},[480,5097,4477],{"class":509},[480,5099,500],{"class":486},[480,5101,3419],{"class":486},[480,5103,5046],{"class":1809},[480,5105,3268],{"class":1836},[480,5107,3156],{"class":486},[480,5109,5110],{"class":482,"line":997},[480,5111,1857],{"emptyLinePlaceholder":1856},[480,5113,5114],{"class":482,"line":1002},[480,5115,5116],{"class":1809},"\u002F\u002F ===== Prompts =====\n",[480,5118,5119,5121,5123,5125,5127,5129,5131,5133,5135,5137,5139],{"class":482,"line":3363},[480,5120,3284],{"class":1836},[480,5122,3287],{"class":486},[480,5124,4640],{"class":2937},[480,5126,3227],{"class":1836},[480,5128,500],{"class":486},[480,5130,4649],{"class":509},[480,5132,500],{"class":486},[480,5134,3419],{"class":486},[480,5136,5046],{"class":1809},[480,5138,3268],{"class":1836},[480,5140,3156],{"class":486},[480,5142,5143],{"class":482,"line":3384},[480,5144,1857],{"emptyLinePlaceholder":1856},[480,5146,5147],{"class":482,"line":3390},[480,5148,5149],{"class":1809},"\u002F\u002F ===== 错误处理 =====\n",[480,5151,5152,5155,5157,5160,5162,5165,5167,5169,5171,5173,5175,5177,5180,5182,5184],{"class":482,"line":3455},[480,5153,5154],{"class":1836},"process",[480,5156,3287],{"class":486},[480,5158,5159],{"class":1836},"stdin",[480,5161,3287],{"class":486},[480,5163,5164],{"class":2937},"on",[480,5166,3227],{"class":1836},[480,5168,500],{"class":486},[480,5170,423],{"class":509},[480,5172,500],{"class":486},[480,5174,3419],{"class":486},[480,5176,3745],{"class":486},[480,5178,5179],{"class":3372},"err",[480,5181,3268],{"class":486},[480,5183,3379],{"class":496},[480,5185,565],{"class":486},[480,5187,5188,5191,5193,5195,5197,5199,5202,5204,5206,5209,5211],{"class":482,"line":3460},[480,5189,5190],{"class":1836},"  console",[480,5192,3287],{"class":486},[480,5194,423],{"class":2937},[480,5196,3227],{"class":623},[480,5198,500],{"class":486},[480,5200,5201],{"class":509},"标准输入错误:",[480,5203,500],{"class":486},[480,5205,3419],{"class":486},[480,5207,5208],{"class":1836}," err",[480,5210,3268],{"class":623},[480,5212,3156],{"class":486},[480,5214,5215,5218,5220,5223,5225,5228,5230],{"class":482,"line":3467},[480,5216,5217],{"class":1836},"  process",[480,5219,3287],{"class":486},[480,5221,5222],{"class":2937},"exit",[480,5224,3227],{"class":623},[480,5226,5227],{"class":529},"1",[480,5229,3268],{"class":623},[480,5231,3156],{"class":486},[480,5233,5234,5236,5238],{"class":482,"line":3472},[480,5235,3265],{"class":486},[480,5237,3268],{"class":1836},[480,5239,3156],{"class":486},[480,5241,5242],{"class":482,"line":3478},[480,5243,1857],{"emptyLinePlaceholder":1856},[480,5245,5246,5248,5250,5253,5255,5257,5259,5261,5263,5265,5267,5269,5271,5273,5275],{"class":482,"line":3496},[480,5247,5154],{"class":1836},[480,5249,3287],{"class":486},[480,5251,5252],{"class":1836},"stdout",[480,5254,3287],{"class":486},[480,5256,5164],{"class":2937},[480,5258,3227],{"class":1836},[480,5260,500],{"class":486},[480,5262,423],{"class":509},[480,5264,500],{"class":486},[480,5266,3419],{"class":486},[480,5268,3745],{"class":486},[480,5270,5179],{"class":3372},[480,5272,3268],{"class":486},[480,5274,3379],{"class":496},[480,5276,565],{"class":486},[480,5278,5279,5281,5283,5285,5287,5289,5292,5294,5296,5298,5300],{"class":482,"line":3515},[480,5280,5190],{"class":1836},[480,5282,3287],{"class":486},[480,5284,423],{"class":2937},[480,5286,3227],{"class":623},[480,5288,500],{"class":486},[480,5290,5291],{"class":509},"标准输出错误:",[480,5293,500],{"class":486},[480,5295,3419],{"class":486},[480,5297,5208],{"class":1836},[480,5299,3268],{"class":623},[480,5301,3156],{"class":486},[480,5303,5304,5306,5308,5310,5312,5314,5316],{"class":482,"line":3520},[480,5305,5217],{"class":1836},[480,5307,3287],{"class":486},[480,5309,5222],{"class":2937},[480,5311,3227],{"class":623},[480,5313,5227],{"class":529},[480,5315,3268],{"class":623},[480,5317,3156],{"class":486},[480,5319,5320,5322,5324],{"class":482,"line":4020},[480,5321,3265],{"class":486},[480,5323,3268],{"class":1836},[480,5325,3156],{"class":486},[480,5327,5328],{"class":482,"line":4051},[480,5329,1857],{"emptyLinePlaceholder":1856},[480,5331,5332],{"class":482,"line":4067},[480,5333,5334],{"class":1809},"\u002F\u002F 优雅退出\n",[480,5336,5337,5339,5341,5343,5345,5347,5350,5352,5354,5357,5360,5362],{"class":482,"line":4073},[480,5338,5154],{"class":1836},[480,5340,3287],{"class":486},[480,5342,5164],{"class":2937},[480,5344,3227],{"class":1836},[480,5346,500],{"class":486},[480,5348,5349],{"class":509},"SIGINT",[480,5351,500],{"class":486},[480,5353,3419],{"class":486},[480,5355,5356],{"class":496}," async",[480,5358,5359],{"class":486}," ()",[480,5361,3379],{"class":496},[480,5363,565],{"class":486},[480,5365,5366,5369,5371,5373,5376,5378],{"class":482,"line":4081},[480,5367,5368],{"class":3134},"  await",[480,5370,3502],{"class":1836},[480,5372,3287],{"class":486},[480,5374,5375],{"class":2937},"close",[480,5377,3337],{"class":623},[480,5379,3156],{"class":486},[480,5381,5382,5384,5386,5388,5390,5392,5394],{"class":482,"line":4087},[480,5383,5217],{"class":1836},[480,5385,3287],{"class":486},[480,5387,5222],{"class":2937},[480,5389,3227],{"class":623},[480,5391,3978],{"class":529},[480,5393,3268],{"class":623},[480,5395,3156],{"class":486},[480,5397,5398,5400,5402],{"class":482,"line":4104},[480,5399,3265],{"class":486},[480,5401,3268],{"class":1836},[480,5403,3156],{"class":486},[480,5405,5406],{"class":482,"line":4111},[480,5407,1857],{"emptyLinePlaceholder":1856},[480,5409,5410],{"class":482,"line":4120},[480,5411,5412],{"class":1809},"\u002F\u002F 启动\n",[480,5414,5415,5417,5419,5421,5423,5425,5427],{"class":482,"line":4125},[480,5416,3214],{"class":496},[480,5418,3483],{"class":1836},[480,5420,2891],{"class":486},[480,5422,3222],{"class":486},[480,5424,3165],{"class":2937},[480,5426,3337],{"class":1836},[480,5428,3156],{"class":486},[480,5430,5431,5433,5435,5437,5439,5441],{"class":482,"line":4140},[480,5432,3499],{"class":3134},[480,5434,3502],{"class":1836},[480,5436,3287],{"class":486},[480,5438,3507],{"class":2937},[480,5440,3510],{"class":1836},[480,5442,3156],{"class":486},[480,5444,5445,5447,5449,5451,5453,5455,5457,5459,5461],{"class":482,"line":4186},[480,5446,3523],{"class":1836},[480,5448,3287],{"class":486},[480,5450,423],{"class":2937},[480,5452,3227],{"class":1836},[480,5454,500],{"class":486},[480,5456,3534],{"class":509},[480,5458,500],{"class":486},[480,5460,3268],{"class":1836},[480,5462,3156],{"class":486},[200,5464,5466],{"id":5465},"_57-配置-claude-code-使用自定义-server","5.7 配置 Claude Code 使用自定义 Server",[327,5468,5470],{"className":1800,"code":5469,"language":1802,"meta":336,"style":336},"# 使用绝对路径配置\nclaude mcp add --transport stdio weather -- bun run \u002Fabsolute\u002Fpath\u002Fto\u002Fmcp-weather-server\u002Fsrc\u002Findex.ts\n",[334,5471,5472,5477],{"__ignoreMap":336},[480,5473,5474],{"class":482,"line":483},[480,5475,5476],{"class":1809},"# 使用绝对路径配置\n",[480,5478,5479,5481,5483,5485,5487,5489,5492,5494,5497,5500],{"class":482,"line":490},[480,5480,1815],{"class":574},[480,5482,1818],{"class":509},[480,5484,1821],{"class":509},[480,5486,1824],{"class":509},[480,5488,2066],{"class":509},[480,5490,5491],{"class":509}," weather",[480,5493,2118],{"class":509},[480,5495,5496],{"class":509}," bun",[480,5498,5499],{"class":509}," run",[480,5501,5502],{"class":509}," \u002Fabsolute\u002Fpath\u002Fto\u002Fmcp-weather-server\u002Fsrc\u002Findex.ts\n",[205,5504,5505,5506,5508],{},"或在 ",[334,5507,2242],{}," 中配置：",[327,5510,5512],{"className":474,"code":5511,"language":476,"meta":336,"style":336},"{\n  \"mcpServers\": {\n    \"weather\": {\n      \"command\": \"bun\",\n      \"args\": [\"run\", \"\u002Fabsolute\u002Fpath\u002Fto\u002Fmcp-weather-server\u002Fsrc\u002Findex.ts\"],\n      \"env\": {\n        \"OPENWEATHER_API_KEY\": \"your-api-key\"\n      }\n    }\n  }\n}\n",[334,5513,5514,5518,5530,5542,5560,5591,5603,5620,5624,5628,5632],{"__ignoreMap":336},[480,5515,5516],{"class":482,"line":483},[480,5517,487],{"class":486},[480,5519,5520,5522,5524,5526,5528],{"class":482,"line":490},[480,5521,493],{"class":486},[480,5523,2374],{"class":496},[480,5525,500],{"class":486},[480,5527,503],{"class":486},[480,5529,565],{"class":486},[480,5531,5532,5534,5536,5538,5540],{"class":482,"line":518},[480,5533,571],{"class":486},[480,5535,3972],{"class":574},[480,5537,500],{"class":486},[480,5539,503],{"class":486},[480,5541,565],{"class":486},[480,5543,5544,5546,5548,5550,5552,5554,5556,5558],{"class":482,"line":535},[480,5545,608],{"class":486},[480,5547,2033],{"class":529},[480,5549,500],{"class":486},[480,5551,503],{"class":486},[480,5553,506],{"class":486},[480,5555,2955],{"class":509},[480,5557,500],{"class":486},[480,5559,515],{"class":486},[480,5561,5562,5564,5566,5568,5570,5572,5574,5577,5579,5581,5583,5586,5588],{"class":482,"line":554},[480,5563,608],{"class":486},[480,5565,2419],{"class":529},[480,5567,500],{"class":486},[480,5569,503],{"class":486},[480,5571,2038],{"class":486},[480,5573,500],{"class":486},[480,5575,5576],{"class":509},"run",[480,5578,500],{"class":486},[480,5580,3419],{"class":486},[480,5582,506],{"class":486},[480,5584,5585],{"class":509},"\u002Fabsolute\u002Fpath\u002Fto\u002Fmcp-weather-server\u002Fsrc\u002Findex.ts",[480,5587,500],{"class":486},[480,5589,5590],{"class":486},"],\n",[480,5592,5593,5595,5597,5599,5601],{"class":482,"line":568},[480,5594,608],{"class":486},[480,5596,2433],{"class":529},[480,5598,500],{"class":486},[480,5600,503],{"class":486},[480,5602,565],{"class":486},[480,5604,5605,5607,5609,5611,5613,5615,5618],{"class":482,"line":591},[480,5606,2648],{"class":486},[480,5608,3659],{"class":623},[480,5610,500],{"class":486},[480,5612,503],{"class":486},[480,5614,506],{"class":486},[480,5616,5617],{"class":509},"your-api-key",[480,5619,710],{"class":486},[480,5621,5622],{"class":482,"line":605},[480,5623,2667],{"class":486},[480,5625,5626],{"class":482,"line":637},[480,5627,716],{"class":486},[480,5629,5630],{"class":482,"line":652},[480,5631,722],{"class":486},[480,5633,5634],{"class":482,"line":658},[480,5635,728],{"class":486},[200,5637,5639],{"id":5638},"_58-生产环境部署选项","5.8 生产环境部署选项",[222,5641,5642,5657],{},[225,5643,5644],{},[228,5645,5646,5649,5651,5654],{},[231,5647,5648],{},"部署方式",[231,5650,1304],{},[231,5652,5653],{},"优点",[231,5655,5656],{},"缺点",[238,5658,5659,5673,5687],{},[228,5660,5661,5664,5667,5670],{},[243,5662,5663],{},"本地 stdio",[243,5665,5666],{},"个人使用、开发测试",[243,5668,5669],{},"简单、安全",[243,5671,5672],{},"无法共享",[228,5674,5675,5678,5681,5684],{},[243,5676,5677],{},"HTTP\u002FSSE",[243,5679,5680],{},"团队共享、多用户",[243,5682,5683],{},"可远程访问",[243,5685,5686],{},"需处理认证",[228,5688,5689,5692,5695,5698],{},[243,5690,5691],{},"Serverless",[243,5693,5694],{},"生产环境",[243,5696,5697],{},"自动扩缩容",[243,5699,5700],{},"冷启动延迟",[205,5702,5703],{},"生产环境注意事项：",[327,5705,5707],{"className":3120,"code":5706,"language":3122,"meta":336,"style":336},"\u002F\u002F 认证检查\nconst apiKey = request.headers.get(\"Authorization\");\nif (apiKey !== `Bearer ${process.env.API_KEY}`) {\n  return new Response(\"Unauthorized\", { status: 401 });\n}\n\n\u002F\u002F 日志记录\nimport pino from \"pino\";\nconst logger = pino();\n\nserver.tool(\"get_weather\", \u002F* ... *\u002F, async ({ city }) => {\n  logger.info({ city }, \"查询天气\");\n  \u002F\u002F ...\n});\n",[334,5708,5709,5714,5747,5781,5818,5822,5826,5831,5850,5866,5870,5904,5934,5939],{"__ignoreMap":336},[480,5710,5711],{"class":482,"line":483},[480,5712,5713],{"class":1809},"\u002F\u002F 认证检查\n",[480,5715,5716,5718,5721,5723,5726,5728,5730,5732,5735,5737,5739,5741,5743,5745],{"class":482,"line":490},[480,5717,3214],{"class":496},[480,5719,5720],{"class":1836}," apiKey ",[480,5722,2891],{"class":486},[480,5724,5725],{"class":1836}," request",[480,5727,3287],{"class":486},[480,5729,2637],{"class":1836},[480,5731,3287],{"class":486},[480,5733,5734],{"class":2937},"get",[480,5736,3227],{"class":1836},[480,5738,500],{"class":486},[480,5740,2651],{"class":509},[480,5742,500],{"class":486},[480,5744,3268],{"class":1836},[480,5746,3156],{"class":486},[480,5748,5749,5752,5755,5758,5760,5763,5765,5767,5769,5771,5773,5775,5777,5779],{"class":482,"line":518},[480,5750,5751],{"class":3134},"if",[480,5753,5754],{"class":1836}," (apiKey ",[480,5756,5757],{"class":486},"!==",[480,5759,3427],{"class":486},[480,5761,5762],{"class":509},"Bearer ",[480,5764,3433],{"class":486},[480,5766,5154],{"class":1836},[480,5768,3287],{"class":486},[480,5770,2433],{"class":1836},[480,5772,3287],{"class":486},[480,5774,3693],{"class":1836},[480,5776,3790],{"class":486},[480,5778,3759],{"class":1836},[480,5780,487],{"class":486},[480,5782,5783,5786,5788,5791,5793,5795,5798,5800,5802,5804,5807,5809,5812,5814,5816],{"class":482,"line":535},[480,5784,5785],{"class":3134},"  return",[480,5787,3222],{"class":486},[480,5789,5790],{"class":2937}," Response",[480,5792,3227],{"class":623},[480,5794,500],{"class":486},[480,5796,5797],{"class":509},"Unauthorized",[480,5799,500],{"class":486},[480,5801,3419],{"class":486},[480,5803,618],{"class":486},[480,5805,5806],{"class":623}," status",[480,5808,503],{"class":486},[480,5810,5811],{"class":529}," 401",[480,5813,3143],{"class":486},[480,5815,3268],{"class":623},[480,5817,3156],{"class":486},[480,5819,5820],{"class":482,"line":554},[480,5821,728],{"class":486},[480,5823,5824],{"class":482,"line":568},[480,5825,1857],{"emptyLinePlaceholder":1856},[480,5827,5828],{"class":482,"line":591},[480,5829,5830],{"class":1809},"\u002F\u002F 日志记录\n",[480,5832,5833,5835,5838,5841,5843,5846,5848],{"class":482,"line":605},[480,5834,3135],{"class":3134},[480,5836,5837],{"class":1836}," pino ",[480,5839,5840],{"class":3134},"from",[480,5842,506],{"class":486},[480,5844,5845],{"class":509},"pino",[480,5847,500],{"class":486},[480,5849,3156],{"class":486},[480,5851,5852,5854,5857,5859,5862,5864],{"class":482,"line":637},[480,5853,3214],{"class":496},[480,5855,5856],{"class":1836}," logger ",[480,5858,2891],{"class":486},[480,5860,5861],{"class":2937}," pino",[480,5863,3337],{"class":1836},[480,5865,3156],{"class":486},[480,5867,5868],{"class":482,"line":652},[480,5869,1857],{"emptyLinePlaceholder":1856},[480,5871,5872,5874,5876,5878,5880,5882,5884,5886,5888,5890,5892,5894,5896,5898,5900,5902],{"class":482,"line":658},[480,5873,3284],{"class":1836},[480,5875,3287],{"class":486},[480,5877,3290],{"class":2937},[480,5879,3227],{"class":1836},[480,5881,500],{"class":486},[480,5883,3300],{"class":509},[480,5885,500],{"class":486},[480,5887,3419],{"class":486},[480,5889,5046],{"class":1809},[480,5891,3419],{"class":486},[480,5893,5356],{"class":496},[480,5895,3369],{"class":486},[480,5897,3373],{"class":3372},[480,5899,3376],{"class":486},[480,5901,3379],{"class":496},[480,5903,565],{"class":486},[480,5905,5906,5909,5911,5914,5916,5918,5920,5923,5925,5928,5930,5932],{"class":482,"line":672},[480,5907,5908],{"class":1836},"  logger",[480,5910,3287],{"class":486},[480,5912,5913],{"class":2937},"info",[480,5915,3227],{"class":623},[480,5917,3405],{"class":486},[480,5919,3373],{"class":1836},[480,5921,5922],{"class":486}," },",[480,5924,506],{"class":486},[480,5926,5927],{"class":509},"查询天气",[480,5929,500],{"class":486},[480,5931,3268],{"class":623},[480,5933,3156],{"class":486},[480,5935,5936],{"class":482,"line":693},[480,5937,5938],{"class":1809},"  \u002F\u002F ...\n",[480,5940,5941,5943,5945],{"class":482,"line":713},[480,5942,3265],{"class":486},[480,5944,3268],{"class":1836},[480,5946,3156],{"class":486},[195,5948,5950],{"id":5949},"_6-mcp-与-function-call-的区别和关系","6. MCP 与 Function Call 的区别和关系",[200,5952,5954],{"id":5953},"_61-核心区别","6.1 核心区别",[222,5956,5957,5969],{},[225,5958,5959],{},[228,5960,5961,5964,5967],{},[231,5962,5963],{},"维度",[231,5965,5966],{},"Function Call",[231,5968,116],{},[238,5970,5971,5984,5997,6010,6023,6036],{},[228,5972,5973,5978,5981],{},[243,5974,5975],{},[246,5976,5977],{},"本质",[243,5979,5980],{},"模型内置能力（如 OpenAI 的 JSON 格式指令）",[243,5982,5983],{},"跨模型协议标准（独立于具体模型）",[228,5985,5986,5991,5994],{},[243,5987,5988],{},[246,5989,5990],{},"定位",[243,5992,5993],{},"单模型调用外部工具的实现方式",[243,5995,5996],{},"多模型调用工具的通信规范",[228,5998,5999,6004,6007],{},[243,6000,6001],{},[246,6002,6003],{},"发起方",[243,6005,6006],{},"由大模型主动生成调用指令",[243,6008,6009],{},"由标准化客户端\u002F服务器架构传递指令",[228,6011,6012,6017,6020],{},[243,6013,6014],{},[246,6015,6016],{},"依赖关系",[243,6018,6019],{},"深度绑定特定模型",[243,6021,6022],{},"模型无关（兼容 Claude\u002FGPT\u002F通义等）",[228,6024,6025,6030,6033],{},[243,6026,6027],{},[246,6028,6029],{},"工具热插拔",[243,6031,6032],{},"需重新部署模型",[243,6034,6035],{},"工具可动态注册\u002F卸载",[228,6037,6038,6043,6046],{},[243,6039,6040],{},[246,6041,6042],{},"跨设备调用",[243,6044,6045],{},"限于本地环境",[243,6047,6048],{},"支持远程\u002F云工具调用",[200,6050,6052],{"id":6051},"_62-简单比喻","6.2 简单比喻",[1074,6054,6055,6060],{},[293,6056,6057,6059],{},[246,6058,5966],{}," = 手机的语音助手（只能控制本机 App）",[293,6061,6062,6064],{},[246,6063,116],{}," = 蓝牙协议（让任何手机连接任何耳机）",[200,6066,6068],{"id":6067},"_63-协同工作模式","6.3 协同工作模式",[205,6070,6071],{},"二者实际可形成互补的上下游关系：",[327,6073,6076],{"className":6074,"code":6075,"language":332},[330],"用户请求 → 大模型生成 Function Call → 转换为 MCP 请求 → 调用工具 → 结果返回模型\n",[334,6077,6075],{"__ignoreMap":336},[205,6079,6080],{},"具体协作流程：",[290,6082,6083,6086,6089,6092],{},[293,6084,6085],{},"模型通过 Function Call 解析用户意图",[293,6087,6088],{},"将函数调用参数转换为 MCP 标准报文",[293,6090,6091],{},"MCP 客户端分发给对应工具服务器",[293,6093,6094],{},"结果通过 MCP 返回模型生成回答",[205,6096,6097,6100],{},[246,6098,6099],{},"优势","：保留 Function Call 的意图解析能力，获得 MCP 的工具生态扩展性。",[200,6102,6104],{"id":6103},"_64-技术演进趋势","6.4 技术演进趋势",[1074,6106,6107,6112,6117,6120],{},[293,6108,6109,6111],{},[246,6110,5966],{}," 将作为模型原生基础能力持续进化",[293,6113,6114,6116],{},[246,6115,116],{}," 正在成为企业 AI 基础设施的事实标准协议",[293,6118,6119],{},"二者边界逐渐模糊，最终形成\"模型解析 → 协议传输 → 工具执行\"分层架构",[293,6121,6122],{},"OpenAI 等厂商已支持 Function Call 转 MCP 网关",[195,6124,6126],{"id":6125},"_7-实际案例","7. 实际案例",[200,6128,6130],{"id":6129},"_71-案例一连接-postgresql-数据库","7.1 案例一：连接 PostgreSQL 数据库",[205,6132,6133,6136],{},[246,6134,6135],{},"场景","：让 Claude 用自然语言查询数据库。",[205,6138,6139,6142],{},[246,6140,6141],{},"配置","：",[327,6144,6146],{"className":1800,"code":6145,"language":1802,"meta":336,"style":336},"claude mcp add --transport stdio postgres -- npx -y \\\n  @modelcontextprotocol\u002Fserver-postgres \\\n  \"postgresql:\u002F\u002Freadonly:pass@localhost:5432\u002Fanalytics\"\n",[334,6147,6148,6171,6178],{"__ignoreMap":336},[480,6149,6150,6152,6154,6156,6158,6160,6163,6165,6167,6169],{"class":482,"line":483},[480,6151,1815],{"class":574},[480,6153,1818],{"class":509},[480,6155,1821],{"class":509},[480,6157,1824],{"class":509},[480,6159,2066],{"class":509},[480,6161,6162],{"class":509}," postgres",[480,6164,2118],{"class":509},[480,6166,2085],{"class":509},[480,6168,2088],{"class":509},[480,6170,1910],{"class":1836},[480,6172,6173,6176],{"class":482,"line":490},[480,6174,6175],{"class":509},"  @modelcontextprotocol\u002Fserver-postgres",[480,6177,1910],{"class":1836},[480,6179,6180,6182,6185],{"class":482,"line":518},[480,6181,493],{"class":486},[480,6183,6184],{"class":509},"postgresql:\u002F\u002Freadonly:pass@localhost:5432\u002Fanalytics",[480,6186,710],{"class":486},[205,6188,6189,6142],{},[246,6190,6191],{},"使用",[327,6193,6196],{"className":6194,"code":6195,"language":332},[330],"> 本月总收入是多少？\n[Claude 自动调用 MCP 工具查询数据库]\n\n> 显示 orders 表的 Schema\n[Claude 自动调用 schema 查询工具]\n\n> 找出 90 天内未购买的客户\n[Claude 生成并执行 SQL 查询]\n",[334,6197,6195],{"__ignoreMap":336},[205,6199,6200,6142],{},[246,6201,6202],{},"最佳实践",[290,6204,6205,6208,6211],{},[293,6206,6207],{},"使用只读账号连接生产数据库",[293,6209,6210],{},"提供数据库 Schema 文件帮助 AI 理解表结构",[293,6212,6213],{},"准备示例查询文件提升生成质量",[200,6215,6217],{"id":6216},"_72-案例二操作-github","7.2 案例二：操作 GitHub",[205,6219,6220,6222],{},[246,6221,6135],{},"：在 Claude Code 中直接管理代码仓库。",[205,6224,6225,6142],{},[246,6226,6141],{},[327,6228,6230],{"className":1800,"code":6229,"language":1802,"meta":336,"style":336},"claude mcp add --transport http github https:\u002F\u002Fapi.githubcopilot.com\u002Fmcp\u002F \\\n  --header \"Authorization: Bearer YOUR_GITHUB_PAT\"\n",[334,6231,6232,6250],{"__ignoreMap":336},[480,6233,6234,6236,6238,6240,6242,6244,6246,6248],{"class":482,"line":483},[480,6235,1815],{"class":574},[480,6237,1818],{"class":509},[480,6239,1821],{"class":509},[480,6241,1824],{"class":509},[480,6243,1827],{"class":509},[480,6245,2735],{"class":509},[480,6247,2738],{"class":509},[480,6249,1910],{"class":1836},[480,6251,6252,6254,6256,6258],{"class":482,"line":490},[480,6253,1915],{"class":509},[480,6255,506],{"class":486},[480,6257,2749],{"class":509},[480,6259,710],{"class":486},[205,6261,6262,6142],{},[246,6263,6191],{},[327,6265,6268],{"className":6266,"code":6267,"language":332},[330],"> Review PR #456 并给出改进建议\n[Claude 读取 PR  diff、评论、CI 状态，生成审查报告]\n\n> 为刚发现的 bug 创建一个新 Issue\n[Claude 自动创建 Issue，包含复现步骤和堆栈跟踪]\n\n> 显示分配给我的所有开放 PR\n[Claude 查询并列出 PR 列表]\n\n> 实现 JIRA 工单 ENG-4521 描述的功能并在 GitHub 创建 PR\n[Claude 读取工单 → 编写代码 → 提交 → 创建 PR]\n",[334,6269,6267],{"__ignoreMap":336},[200,6271,6273],{"id":6272},"_73-案例三读取-slack-消息","7.3 案例三：读取 Slack 消息",[205,6275,6276,6278],{},[246,6277,6135],{},"：将 Slack 消息作为上下文输入 Claude。",[205,6280,6281,6142],{},[246,6282,6141],{},[327,6284,6286],{"className":1800,"code":6285,"language":1802,"meta":336,"style":336},"claude mcp add --transport http slack https:\u002F\u002Fmcp.slack.com\u002Fmcp\n",[334,6287,6288],{"__ignoreMap":336},[480,6289,6290,6292,6294,6296,6298,6300,6303],{"class":482,"line":483},[480,6291,1815],{"class":574},[480,6293,1818],{"class":509},[480,6295,1821],{"class":509},[480,6297,1824],{"class":509},[480,6299,1827],{"class":509},[480,6301,6302],{"class":509}," slack",[480,6304,6305],{"class":509}," https:\u002F\u002Fmcp.slack.com\u002Fmcp\n",[205,6307,6308],{},"Slack 官方远程 Server 使用 OAuth 认证，尊重现有权限。",[205,6310,6311,6142],{},[246,6312,6191],{},[327,6314,6317],{"className":6315,"code":6316,"language":332},[330],"> 总结 #engineering 频道今天的讨论\n[Claude 读取频道消息并生成摘要]\n\n> 根据 Slack 中发布的新 Figma 设计更新邮件模板\n[Claude 读取 Slack 中的设计链接 → 获取 Figma 内容 → 更新代码]\n\n> 给参与讨论的 10 位用户发送反馈会议邀请\n[Claude 提取用户列表 → 生成邮件草稿]\n",[334,6318,6316],{"__ignoreMap":336},[200,6320,6322],{"id":6321},"_74-案例四多-mcp-串联工作流","7.4 案例四：多 MCP 串联工作流",[205,6324,6325,6327],{},[246,6326,6135],{},"：将多个 MCP Server 串联完成复杂任务。",[327,6329,6332],{"className":6330,"code":6331,"language":332},[330],"用户: \"实现 JIRA 工单 ENG-4521 的功能，基于我们的设计规范，\n       然后创建 PR 并通知团队\"\n\nClaude 的执行流程：\n1. [JIRA MCP] 读取 ENG-4521 的详细描述\n2. [Figma MCP] 获取相关设计稿\n3. [Git MCP] 检查当前分支状态\n4. [Filesystem MCP] 读取项目代码规范\n5. 编写代码实现功能\n6. [Git MCP] 提交代码\n7. [GitHub MCP] 创建 PR\n8. [Slack MCP] 在 #engineering 频道通知团队\n",[334,6333,6331],{"__ignoreMap":336},[195,6335,6337],{"id":6336},"_8-安全考量","8. 安全考量",[200,6339,6341],{"id":6340},"_81-核心安全风险","8.1 核心安全风险",[205,6343,6344],{},"MCP 引入了全新的攻击面：AI 代理基于自然语言动态执行工具，访问敏感系统。OWASP 已发布专门的 MCP 安全速查表，识别出以下关键风险：",[222,6346,6347,6356],{},[225,6348,6349],{},[228,6350,6351,6354],{},[231,6352,6353],{},"风险",[231,6355,1115],{},[238,6357,6358,6368,6378,6388,6398,6408,6418],{},[228,6359,6360,6365],{},[243,6361,6362],{},[246,6363,6364],{},"Tool Poisoning（工具投毒）",[243,6366,6367],{},"恶意指令隐藏在工具描述、参数 Schema 或返回值中，操纵 LLM 行为",[228,6369,6370,6375],{},[243,6371,6372],{},[246,6373,6374],{},"Rug Pull 攻击",[243,6376,6377],{},"Server 在初始用户批准后更改工具定义，将可信工具变为恶意工具",[228,6379,6380,6385],{},[243,6381,6382],{},[246,6383,6384],{},"Tool Shadowing",[243,6386,6387],{},"恶意 Server 的工具描述操纵代理对其他可信 Server 工具的行为",[228,6389,6390,6395],{},[243,6391,6392],{},[246,6393,6394],{},"Confused Deputy（混淆代理）",[243,6396,6397],{},"MCP Server 使用自身（往往过于宽泛的）权限执行操作，而非请求用户的权限",[228,6399,6400,6405],{},[243,6401,6402],{},[246,6403,6404],{},"数据外泄",[243,6406,6407],{},"通过提示注入将敏感数据编码到看似正常的工具调用中",[228,6409,6410,6415],{},[243,6411,6412],{},[246,6413,6414],{},"供应链攻击",[243,6416,6417],{},"从公共注册表安装不受信任或已被攻破的 MCP Server 包",[228,6419,6420,6425],{},[243,6421,6422],{},[246,6423,6424],{},"沙箱逃逸",[243,6426,6427],{},"本地 MCP Server 以完整主机权限运行，导致文件系统遍历或任意代码执行",[200,6429,6431],{"id":6430},"_82-安全最佳实践","8.2 安全最佳实践",[451,6433,6435],{"id":6434},"_1-最小权限原则","1. 最小权限原则",[1074,6437,6438,6441,6444,6455],{},[293,6439,6440],{},"为每个 MCP Server 授予其功能所需的最低权限",[293,6442,6443],{},"使用按 Server 隔离的凭证，绝不跨 Server 共享 Token",[293,6445,6446,6447,6450,6451,6454],{},"请求窄范围的 OAuth 作用域（如 ",[334,6448,6449],{},"mail.readonly"," 而非 ",[334,6452,6453],{},"mail.full_access","）",[293,6456,6457],{},"优先使用短期临时 Token 而非长期 PAT",[451,6459,6461],{"id":6460},"_2-工具描述完整性校验","2. 工具描述完整性校验",[1074,6463,6464,6467,6474,6477],{},[293,6465,6466],{},"批准前检查所有工具描述、参数名、类型和返回 Schema",[293,6468,6469,6470,6473],{},"将",[246,6471,6472],{},"整个","工具 Schema 视为潜在的注入面",[293,6475,6476],{},"使用加密哈希固定工具定义，变更时告警（防止 rug pull）",[293,6478,6479,6480,6483],{},"使用 ",[334,6481,6482],{},"mcp-scan"," 等工具自动检测投毒描述和跨 Server 阴影",[451,6485,6487],{"id":6486},"_3-沙箱隔离","3. 沙箱隔离",[1074,6489,6490,6493,6496,6499],{},[293,6491,6492],{},"在沙箱环境（容器、chroot、应用沙箱）中运行本地 MCP Server",[293,6494,6495],{},"将文件系统访问限制为仅所需目录",[293,6497,6498],{},"除非明确需要，否则禁用网络访问",[293,6500,6501],{},"将敏感 Server（支付、认证、PII）与普通 Server 分离",[451,6503,6505],{"id":6504},"_4-敏感操作人工确认","4. 敏感操作人工确认",[1074,6507,6508,6511,6514],{},[293,6509,6510],{},"对破坏性、财务或数据共享操作要求显式用户确认",[293,6512,6513],{},"向用户显示完整的工具调用参数，而非仅摘要名称",[293,6515,6516],{},"切勿自动批准工具调用，尤其在多 Server 设置中",[451,6518,6520],{"id":6519},"_5-输入输出验证","5. 输入输出验证",[1074,6522,6523,6526,6529,6532],{},[293,6524,6525],{},"将所有输入视为不受信任（源自可能被恶意上下文影响的 LLM 输出）",[293,6527,6528],{},"防范注入攻击（SQL、OS 命令、路径遍历）",[293,6530,6531],{},"在返回 LLM 上下文前验证和清理工具输出",[293,6533,6534],{},"切勿传递原始 Shell 命令或未经清理的文件路径",[451,6536,6538],{"id":6537},"_6-传输层安全","6. 传输层安全",[1074,6540,6541,6544,6547,6550,6560],{},[293,6542,6543],{},"对所有远程 MCP Server 端点强制执行认证",[293,6545,6546],{},"使用 OAuth 2.0 with PKCE 进行远程 Server 授权",[293,6548,6549],{},"始终对远程传输使用 TLS",[293,6551,6552,6553,6556,6557],{},"将 MCP HTTP\u002FSSE Server 绑定到特定接口（如 ",[334,6554,6555],{},"127.0.0.1","），而非 ",[334,6558,6559],{},"0.0.0.0",[293,6561,6562],{},"使用操作系统原生安全凭证存储（macOS Keychain、Windows Credential Manager）",[451,6564,6566],{"id":6565},"_7-监控日志与审计","7. 监控、日志与审计",[1074,6568,6569,6572,6575,6578],{},[293,6570,6571],{},"记录所有 MCP 工具调用，包含完整参数、用户上下文和时间戳",[293,6573,6574],{},"将 MCP 日志输入 SIEM 进行异常检测",[293,6576,6577],{},"对异常模式告警：新工具被调用、管理员级查询、异常调用频率",[293,6579,6580],{},"从日志中脱敏密钥和 PII",[451,6582,6584],{"id":6583},"_8-供应链安全","8. 供应链安全",[1074,6586,6587,6590,6593,6596],{},[293,6588,6589],{},"仅从可信、已验证的来源安装 MCP Server",[293,6591,6592],{},"安装前审查 Server 源代码和工具定义",[293,6594,6595],{},"使用校验和或代码签名验证包完整性",[293,6597,6598],{},"仔细检查包名再安装——拼写仿冒（typosquatting）是常见攻击向量",[200,6600,6602],{"id":6601},"_83-claude-code-的安全机制","8.3 Claude Code 的安全机制",[205,6604,6605],{},"Claude Code 内置了多层安全保护：",[1074,6607,6608,6616,6622,6631,6636],{},[293,6609,6610,6142,6613,6615],{},[246,6611,6612],{},"项目作用域 Server 需批准",[334,6614,2242],{}," 中配置的 Server 首次使用时需要用户批准",[293,6617,6618,6621],{},[246,6619,6620],{},"作用域隔离","：Local\u002FProject\u002FUser 三层作用域确保配置不会意外泄露",[293,6623,6624,6142,6627,6630],{},[246,6625,6626],{},"Denylist 优先",[334,6628,6629],{},"managed-mcp.json"," 中的拒绝列表绝对优先于允许列表",[293,6632,6633,6635],{},[246,6634,2874],{},"：默认 25000 tokens 的输出上限防止上下文被淹没",[293,6637,6638,6640],{},[246,6639,2904],{},"：延迟加载工具定义，减少上下文暴露面",[205,6642,6643],{},"企业级管理配置示例：",[327,6645,6647],{"className":474,"code":6646,"language":476,"meta":336,"style":336},"\u002F\u002F \u002FLibrary\u002FApplication Support\u002FClaudeCode\u002Fmanaged-mcp.json (macOS)\n{\n  \"mcpServers\": {\n    \"github\": {\n      \"type\": \"http\",\n      \"url\": \"https:\u002F\u002Fapi.githubcopilot.com\u002Fmcp\u002F\"\n    },\n    \"sentry\": {\n      \"type\": \"http\",\n      \"url\": \"https:\u002F\u002Fmcp.sentry.dev\u002Fmcp\"\n    }\n  },\n  \"deniedMcpServers\": [\n    { \"serverUrl\": \"https:\u002F\u002F*.untrusted.com\u002F*\" },\n    { \"serverCommand\": [\"npx\", \"-y\", \"unapproved-package\"] }\n  ]\n}\n",[334,6648,6649,6654,6658,6670,6682,6700,6717,6721,6733,6751,6768,6772,6776,6789,6812,6856,6861],{"__ignoreMap":336},[480,6650,6651],{"class":482,"line":483},[480,6652,6653],{"class":1809},"\u002F\u002F \u002FLibrary\u002FApplication Support\u002FClaudeCode\u002Fmanaged-mcp.json (macOS)\n",[480,6655,6656],{"class":482,"line":490},[480,6657,487],{"class":486},[480,6659,6660,6662,6664,6666,6668],{"class":482,"line":518},[480,6661,493],{"class":486},[480,6663,2374],{"class":496},[480,6665,500],{"class":486},[480,6667,503],{"class":486},[480,6669,565],{"class":486},[480,6671,6672,6674,6676,6678,6680],{"class":482,"line":535},[480,6673,571],{"class":486},[480,6675,2710],{"class":574},[480,6677,500],{"class":486},[480,6679,503],{"class":486},[480,6681,565],{"class":486},[480,6683,6684,6686,6688,6690,6692,6694,6696,6698],{"class":482,"line":554},[480,6685,608],{"class":486},[480,6687,2597],{"class":529},[480,6689,500],{"class":486},[480,6691,503],{"class":486},[480,6693,506],{"class":486},[480,6695,2606],{"class":509},[480,6697,500],{"class":486},[480,6699,515],{"class":486},[480,6701,6702,6704,6706,6708,6710,6712,6715],{"class":482,"line":568},[480,6703,608],{"class":486},[480,6705,2617],{"class":529},[480,6707,500],{"class":486},[480,6709,503],{"class":486},[480,6711,506],{"class":486},[480,6713,6714],{"class":509},"https:\u002F\u002Fapi.githubcopilot.com\u002Fmcp\u002F",[480,6716,710],{"class":486},[480,6718,6719],{"class":482,"line":591},[480,6720,655],{"class":486},[480,6722,6723,6725,6727,6729,6731],{"class":482,"line":605},[480,6724,571],{"class":486},[480,6726,2817],{"class":574},[480,6728,500],{"class":486},[480,6730,503],{"class":486},[480,6732,565],{"class":486},[480,6734,6735,6737,6739,6741,6743,6745,6747,6749],{"class":482,"line":637},[480,6736,608],{"class":486},[480,6738,2597],{"class":529},[480,6740,500],{"class":486},[480,6742,503],{"class":486},[480,6744,506],{"class":486},[480,6746,2606],{"class":509},[480,6748,500],{"class":486},[480,6750,515],{"class":486},[480,6752,6753,6755,6757,6759,6761,6763,6766],{"class":482,"line":652},[480,6754,608],{"class":486},[480,6756,2617],{"class":529},[480,6758,500],{"class":486},[480,6760,503],{"class":486},[480,6762,506],{"class":486},[480,6764,6765],{"class":509},"https:\u002F\u002Fmcp.sentry.dev\u002Fmcp",[480,6767,710],{"class":486},[480,6769,6770],{"class":482,"line":658},[480,6771,716],{"class":486},[480,6773,6774],{"class":482,"line":672},[480,6775,3360],{"class":486},[480,6777,6778,6780,6783,6785,6787],{"class":482,"line":693},[480,6779,493],{"class":486},[480,6781,6782],{"class":496},"deniedMcpServers",[480,6784,500],{"class":486},[480,6786,503],{"class":486},[480,6788,3844],{"class":486},[480,6790,6791,6794,6796,6799,6801,6803,6805,6808,6810],{"class":482,"line":713},[480,6792,6793],{"class":486},"    {",[480,6795,506],{"class":486},[480,6797,6798],{"class":574},"serverUrl",[480,6800,500],{"class":486},[480,6802,503],{"class":486},[480,6804,506],{"class":486},[480,6806,6807],{"class":509},"https:\u002F\u002F*.untrusted.com\u002F*",[480,6809,500],{"class":486},[480,6811,634],{"class":486},[480,6813,6814,6816,6818,6821,6823,6825,6827,6829,6832,6834,6836,6838,6841,6843,6845,6847,6850,6852,6854],{"class":482,"line":719},[480,6815,6793],{"class":486},[480,6817,506],{"class":486},[480,6819,6820],{"class":574},"serverCommand",[480,6822,500],{"class":486},[480,6824,503],{"class":486},[480,6826,2038],{"class":486},[480,6828,500],{"class":486},[480,6830,6831],{"class":509},"npx",[480,6833,500],{"class":486},[480,6835,3419],{"class":486},[480,6837,506],{"class":486},[480,6839,6840],{"class":509},"-y",[480,6842,500],{"class":486},[480,6844,3419],{"class":486},[480,6846,506],{"class":486},[480,6848,6849],{"class":509},"unapproved-package",[480,6851,500],{"class":486},[480,6853,3981],{"class":486},[480,6855,919],{"class":486},[480,6857,6858],{"class":482,"line":725},[480,6859,6860],{"class":486},"  ]\n",[480,6862,6863],{"class":482,"line":997},[480,6864,728],{"class":486},[195,6866,6868],{"id":6867},"_9-参考来源","9. 参考来源",[1074,6870,6871,6879,6887,6895,6903,6911,6919,6927,6935,6943,6951],{},[293,6872,6873,6878],{},[1741,6874,6877],{"href":6875,"rel":6876},"https:\u002F\u002Fmodelcontextprotocol.io\u002F",[1745],"Model Context Protocol 官方文档"," — MCP 协议规范、示例和指南的权威来源",[293,6880,6881,6886],{},[1741,6882,6885],{"href":6883,"rel":6884},"https:\u002F\u002Fmodelcontextprotocol.io\u002Fspecification\u002F2025-03-26",[1745],"MCP Specification 2025-03-26"," — 协议规范的权威定义",[293,6888,6889,6894],{},[1741,6890,6893],{"href":6891,"rel":6892},"https:\u002F\u002Fmcp.transdocs.org\u002F",[1745],"MCP 中文文档"," — 社区翻译的中文版文档",[293,6896,6897,6902],{},[1741,6898,6901],{"href":6899,"rel":6900},"https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers",[1745],"modelcontextprotocol\u002Fservers"," — 官方参考实现和社区 Server 集合",[293,6904,6905,6910],{},[1741,6906,6909],{"href":6907,"rel":6908},"https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fmcp",[1745],"Claude Code MCP 文档"," — Claude Code 中配置和使用 MCP 的完整指南",[293,6912,6913,6918],{},[1741,6914,6917],{"href":6915,"rel":6916},"https:\u002F\u002Fcheatsheetseries.owasp.org\u002Fcheatsheets\u002FMCP_Security_Cheat_Sheet.html",[1745],"OWASP MCP Security Cheat Sheet"," — MCP 安全的权威速查表",[293,6920,6921,6926],{},[1741,6922,6925],{"href":6923,"rel":6924},"https:\u002F\u002Feastondev.com\u002Fblog\u002Fzh\u002Fposts\u002Fai\u002Fmcp-server-development-intro\u002F",[1745],"MCP Server 开发入门：从零搭建你的第一个 MCP 服务"," — TypeScript SDK 实战教程",[293,6928,6929,6934],{},[1741,6930,6933],{"href":6931,"rel":6932},"https:\u002F\u002Fpunits.dev\u002Fblog\u002Fmcp-with-postgres\u002F",[1745],"MCP with Postgres - Querying my data in plain English"," — PostgreSQL MCP 实战案例",[293,6936,6937,6942],{},[1741,6938,6941],{"href":6939,"rel":6940},"https:\u002F\u002Fairbyte.com\u002Fagentic-data\u002Fmcp-server-examples",[1745],"12 MCP Server Examples Every AI Engineer Should Know"," — 生产环境常用 Server 概览",[293,6944,6945,6950],{},[1741,6946,6949],{"href":6947,"rel":6948},"https:\u002F\u002Fdeveloper.aliyun.com\u002Farticle\u002F1695784",[1745],"大模型应用开发中 MCP 与 Function Call 的关系与区别"," — 阿里云开发者社区的技术对比分析",[293,6952,6953,6958],{},[1741,6954,6957],{"href":6955,"rel":6956},"https:\u002F\u002Fwww.truefoundry.com\u002Fblog\u002Fmcp-server-security-best-practices",[1745],"MCP Server Security Best Practices"," — 企业级 MCP 安全部署指南",[6960,6961,6962],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 .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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":336,"searchDepth":483,"depth":490,"links":6964},[6965,6970,6978,6983,6991,7001,7007,7013,7018],{"id":197,"depth":490,"text":198,"children":6966},[6967,6968,6969],{"id":202,"depth":518,"text":203},{"id":216,"depth":518,"text":217},{"id":284,"depth":518,"text":285},{"id":313,"depth":490,"text":314,"children":6971},[6972,6973,6974,6975,6976,6977],{"id":317,"depth":518,"text":318},{"id":357,"depth":518,"text":358},{"id":445,"depth":518,"text":446},{"id":1096,"depth":518,"text":1097},{"id":1200,"depth":518,"text":1201},{"id":1288,"depth":518,"text":1289},{"id":1338,"depth":490,"text":1339,"children":6979},[6980,6981,6982],{"id":1345,"depth":518,"text":1346},{"id":1471,"depth":518,"text":1472},{"id":1731,"depth":518,"text":1732},{"id":1782,"depth":490,"text":1783,"children":6984},[6985,6986,6987,6988,6989,6990],{"id":1786,"depth":518,"text":1787},{"id":2182,"depth":518,"text":2183},{"id":2454,"depth":518,"text":2455},{"id":2550,"depth":518,"text":2551},{"id":2706,"depth":518,"text":2707},{"id":2852,"depth":518,"text":2853},{"id":2908,"depth":490,"text":2909,"children":6992},[6993,6994,6995,6996,6997,6998,6999,7000],{"id":2912,"depth":518,"text":2913},{"id":3116,"depth":518,"text":3117},{"id":3543,"depth":518,"text":3544},{"id":4233,"depth":518,"text":4234},{"id":4620,"depth":518,"text":4621},{"id":4889,"depth":518,"text":4890},{"id":5465,"depth":518,"text":5466},{"id":5638,"depth":518,"text":5639},{"id":5949,"depth":490,"text":5950,"children":7002},[7003,7004,7005,7006],{"id":5953,"depth":518,"text":5954},{"id":6051,"depth":518,"text":6052},{"id":6067,"depth":518,"text":6068},{"id":6103,"depth":518,"text":6104},{"id":6125,"depth":490,"text":6126,"children":7008},[7009,7010,7011,7012],{"id":6129,"depth":518,"text":6130},{"id":6216,"depth":518,"text":6217},{"id":6272,"depth":518,"text":6273},{"id":6321,"depth":518,"text":6322},{"id":6336,"depth":490,"text":6337,"children":7014},[7015,7016,7017],{"id":6340,"depth":518,"text":6341},{"id":6430,"depth":518,"text":6431},{"id":6601,"depth":518,"text":6602},{"id":6867,"depth":490,"text":6868},"通过模型上下文协议连接外部世界","md",null,{"date":7023},"2026-04-26",{"title":116,"description":7019},"JdGGaXuTFuqzNu7E9rT37YNmNIvquRgBATmhSWzRT3Y",[7027,7029],{"title":112,"path":113,"stem":114,"description":7028,"children":-1},"将重复工作流编码为可复用模板",{"title":120,"path":121,"stem":122,"description":7030,"children":-1},"自动化守卫与高风险操作安全网",1777395310484]