[{"data":1,"prerenderedAt":2692},["ShallowReactive",2],{"/2026/function-call-mcp-skill-tool":3,"surround-/2026/function-call-mcp-skill-tool":2680},{"id":4,"title":5,"body":6,"categories":2638,"comment":2640,"date":2641,"description":2642,"donation":2640,"draft":2643,"extension":2644,"image":2645,"meta":2646,"navigation":2640,"path":2648,"permalink":2645,"postfooter":2640,"published":2645,"readingTime":2649,"recommend":2645,"references":2654,"seo":2670,"sitemap":2671,"stem":2672,"tags":2673,"type":2677,"updated":2678,"__hash__":2679},"content/posts/2026/function-call-mcp-skill-tool.md","Function Calling、MCP、Skill、Tool",{"type":7,"value":8,"toc":2573},"minimark",[9,18,50,61,64,67,87,90,96,100,193,196,204,207,210,213,218,221,248,251,254,257,279,282,285,288,298,307,320,326,329,341,344,348,351,356,359,362,388,393,396,401,404,418,421,425,428,442,445,456,460,505,509,512,523,529,533,536,539,542,547,550,558,561,564,572,575,580,583,586,592,595,598,601,627,630,637,640,651,658,662,665,682,685,688,692,695,709,713,757,761,768,782,797,801,804,809,814,817,831,834,842,845,864,870,874,881,884,904,907,919,922,939,945,980,983,1007,1010,1022,1025,1032,1036,1039,1056,1059,1073,1079,1083,1086,1089,1092,1104,1107,1113,1116,1123,1126,1130,1133,1136,1156,1158,1182,1185,1199,1203,1206,1220,1223,1234,1238,1282,1286,1289,1292,1303,1306,1309,1316,1319,1323,1335,1338,1343,1346,1349,1369,1372,1379,1382,1441,1450,1453,1466,1470,1473,1476,1481,1486,1489,1506,1509,1516,1519,1523,1526,1529,1599,1602,1614,1618,1621,1641,1644,1658,1662,1706,1710,1713,1716,1727,1730,1737,1740,1875,1879,1882,1886,1889,1894,1897,1917,1920,1949,1953,1956,1959,1979,1985,1988,1997,2002,2005,2019,2022,2036,2039,2045,2052,2056,2059,2096,2099,2103,2106,2109,2118,2121,2159,2162,2199,2202,2232,2236,2239,2243,2249,2252,2255,2266,2270,2275,2277,2288,2292,2296,2299,2301,2315,2319,2322,2345,2355,2359,2365,2368,2371,2374,2400,2403,2420,2423,2426,2468,2471,2474,2499,2502,2505,2508,2511,2533,2536,2539,2545,2548,2570],[10,11,14],"alert",{"title":12,"type":13},"说明","info",[15,16,17],"p",{},"本文初稿由 AI 生成，并经人工整理、校对与修订。",[10,19,21],{"title":20,"type":13},"先记这一句就够了",[22,23,24,32,38,44],"ul",{},[25,26,27,31],"li",{},[28,29,30],"strong",{},"Tool"," 是模型可用的能力。",[25,33,34,37],{},[28,35,36],{},"Tool Use / Function Calling"," 是模型请求调用能力的结构化机制。",[25,39,40,43],{},[28,41,42],{},"MCP"," 是把外部能力与上下文标准化接入客户端的协议；它可以暴露 tool，但不等于 tool。",[25,45,46,49],{},[28,47,48],{},"Skill"," 是面向某类任务的可复用指令包或执行手册，常常会在内部编排多个 tool。",[15,51,52,53,56,57,60],{},"先补一句术语说明：在 Anthropic / Claude 的官方文档里，更常见的说法是 ",[28,54,55],{},"Tool Use","；而 ",[28,58,59],{},"Function Calling"," 更像是跨平台讨论时更常见的泛称。本文会把两者放在一起讨论，但默认都指“模型输出结构化调用请求”的这类机制。",[15,62,63],{},"最近看 AI Agent、Claude Code 和 MCP Server 相关内容时，我越来越觉得：这些概念本身并不难，难的是它们总在同一个场景里一起出现。",[15,65,66],{},"于是就很容易混成一团：",[22,68,69,72,75],{},[25,70,71],{},"看到模型调用了一个能力，以为这就是 Function Calling。",[25,73,74],{},"看到一个 MCP Server 暴露了 tools，以为 MCP 就等于 Tool。",[25,76,77,78,82,83,86],{},"看到一个 ",[79,80,81],"code",{"code":81},"/review-pr","、",[79,84,85],{"code":85},"/commit"," 这样的入口，又觉得 Skill 似乎也是 Tool。",[15,88,89],{},"它们表面上都在帮 AI “做事”，但拆开层级后，分工其实很清楚。",[15,91,92,93],{},"我现在更愿意先问一句：",[28,94,95],{},"它们各自在回答什么问题？",[97,98,99],"h2",{"id":99},"先用一张表看清楚",[101,102,103,125],"table",{},[104,105,106],"thead",{},[107,108,109,113,116,119,122],"tr",{},[110,111,112],"th",{},"概念",[110,114,115],{},"本质",[110,117,118],{},"所在层级",[110,120,121],{},"主要解决什么问题",[110,123,124],{},"你什么时候该想到它",[126,127,128,145,161,177],"tbody",{},[107,129,130,133,136,139,142],{},[131,132,30],"td",{},[131,134,135],{},"可执行能力",[131,137,138],{},"能力层",[131,140,141],{},"让模型真正能做事",[131,143,144],{},"你要给模型读文件、查数据库、发请求",[107,146,147,149,152,155,158],{},[131,148,36],{},[131,150,151],{},"结构化调用机制",[131,153,154],{},"调用层",[131,156,157],{},"让模型稳定地产生可执行参数",[131,159,160],{},"你要让模型准确选择工具并传参",[107,162,163,165,168,171,174],{},[131,164,42],{},[131,166,167],{},"标准协议",[131,169,170],{},"接入层",[131,172,173],{},"让外部能力与上下文以统一方式接入客户端/模型",[131,175,176],{},"你要接很多外部系统，或希望跨客户端复用",[107,178,179,181,184,187,190],{},[131,180,48],{},[131,182,183],{},"可复用指令封装",[131,185,186],{},"复用层",[131,188,189],{},"让一类任务可以被反复复用",[131,191,192],{},"你反复做同一种复杂任务，想沉淀经验",[15,194,195],{},"如果只保留一个脑内速记版本，那就是：",[197,198,199],"blockquote",{},[15,200,201],{},[28,202,203],{},"Tool 是能力，Tool Use / Function Calling 是调用机制，MCP 是接入协议，Skill 是任务说明书。",[97,205,206],{"id":206},"为什么它们总让人觉得像一回事",[15,208,209],{},"因为在真实系统里，它们经常连着出现。",[15,211,212],{},"比如你对一个 Agent 说：",[197,214,215],{},[15,216,217],{},"帮我读代码、查文档、修改文件、再顺手跑一下测试。",[15,219,220],{},"看起来是一句话，背后其实已经拆成了四层：",[222,223,224,230,236,242],"ol",{},[25,225,226,227,229],{},"系统先决定到底给模型开放了哪些 ",[28,228,30],{},"。",[25,231,232,233,235],{},"模型再用 ",[28,234,36],{}," 的形式表达“我要调用哪个能力”。",[25,237,238,239,241],{},"如果这些能力来自外部系统，它们可能是通过 ",[28,240,42],{}," 接进来的。",[25,243,244,245,247],{},"如果这类任务你经常做，还可以被封装成一个 ",[28,246,48],{},"，以后直接复用。",[15,249,250],{},"也就是说，它们不是“同义词”，而是同一条链路里的不同零件。",[97,252,253],{"id":253},"用一个更顺手的比喻理解",[15,255,256],{},"如果把 AI Agent 想成一个刚入职的新同事，那这四个词会好理解很多：",[22,258,259,264,269,274],{},[25,260,261,263],{},[28,262,30],{},"：是你给他配的工具箱，里面有 IDE、终端、数据库查询器、浏览器。",[25,265,266,268],{},[28,267,36],{},"：是他提交行动申请时用的标准表单，写清楚“我要用哪个工具、参数是什么”。",[25,270,271,273],{},[28,272,42],{},"：是公司统一的接口标准，规定外部系统怎么接进来，谁都按这个标准说话。",[25,275,276,278],{},[28,277,48],{},"：是团队内部沉淀出来的操作手册，比如“怎么做代码评审”“怎么发版本”“怎么排查线上问题”。",[15,280,281],{},"这个比喻不是百分之百严丝合缝，但足够帮助你在脑子里把四者分开。",[97,283,284],{"id":284},"它们之间到底是什么关系",[15,286,287],{},"可以把它们理解成一条从“抽象任务”到“真实执行”的链路：",[289,290,296],"pre",{"className":291,"code":293,"language":294,"meta":295},[292],"language-text","用户提出任务\n  ↓\nSkill（可选）\n把任务改写成一套更稳定的执行方法\n  ↓\n模型推理\n判断要不要调用能力、调用哪个能力\n  ↓\nTool Use / Function Calling\n模型输出结构化参数，请求执行某个 Tool\n  ↓\nTool\n真正执行读文件、搜网页、查数据库、发请求等动作\n  ↓\nMCP（可选）\n如果这个 Tool 来自外部系统，MCP 负责把它规范地接进来\n","text","",[79,297,293],{"__ignoreMap":295},[15,299,300,301,303,304,306],{},"这里之所以把 ",[28,302,55],{}," 和 ",[28,305,59],{}," 放在一起写，是因为不同平台的叫法并不完全一样。",[22,308,309,314],{},[25,310,311,312,229],{},"在 Anthropic / Claude 的官方文档里，更常见的说法是 ",[28,313,55],{},[25,315,316,317,319],{},"在更泛化的跨平台语境里，很多人会用 ",[28,318,59],{}," 来指代同一类机制。",[15,321,322,323],{},"两者在很多讨论里都指向同一件事：",[28,324,325],{},"模型输出结构化调用请求，由外部系统去执行某个能力。",[15,327,328],{},"注意两点就够了：",[22,330,331,336],{},[25,332,333],{},[28,334,335],{},"不是每次都会同时出现四者。",[25,337,338],{},[28,339,340],{},"它们不是互斥关系，而是组合关系。",[15,342,343],{},"一个很小的应用，也许只需要 Tool + Function Calling；一个更完整的 Agent 系统，则很可能四者一起上场。",[97,345,347],{"id":346},"_1-tool模型真正能用的能力","1. Tool：模型真正能用的能力",[15,349,350],{},"先从最底层、也最容易理解的开始。",[15,352,353],{},[28,354,355],{},"Tool 本质上就是“模型可请求使用的能力”。",[15,357,358],{},"它不一定非叫 tool，也可能叫函数、action、capability、operation，但只要本质是“给模型一项可执行能力”，那它就是同一类东西。",[15,360,361],{},"常见例子非常朴素：",[22,363,364,367,370,373,376,379,382,385],{},[25,365,366],{},"读取本地文件",[25,368,369],{},"搜索代码",[25,371,372],{},"查询数据库",[25,374,375],{},"调用天气 API",[25,377,378],{},"发送邮件",[25,380,381],{},"打开网页",[25,383,384],{},"创建日历事件",[25,386,387],{},"执行 shell 命令",[389,390,392],"h3",{"id":391},"tool-解决了什么问题","Tool 解决了什么问题",[15,394,395],{},"它解决的是一个根问题：",[197,397,398],{},[15,399,400],{},"模型本身擅长生成文本，但不天然拥有“操作环境”的能力。",[15,402,403],{},"没有 Tool，模型通常只能：",[22,405,406,409,412,415],{},[25,407,408],{},"解释",[25,410,411],{},"总结",[25,413,414],{},"推断",[25,416,417],{},"生成文本",[15,419,420],{},"有了 Tool，模型才从“会说”开始变成“能做”。",[389,422,424],{"id":423},"什么时候该优先想到-tool","什么时候该优先想到 Tool",[15,426,427],{},"当你遇到下面这些需求时，几乎都应该先想到 Tool：",[22,429,430,433,436,439],{},[25,431,432],{},"需要读取外部世界的信息，而这些信息不在上下文里",[25,434,435],{},"需要执行确定性的动作，而不是只靠模型猜",[25,437,438],{},"需要把“思考结果”落到真实环境中",[25,440,441],{},"需要让 Agent 真正完成任务，而不是停留在建议层",[15,443,444],{},"例如：",[22,446,447,450,453],{},[25,448,449],{},"“帮我找出项目里所有调用某个 API 的地方” → 需要搜索代码工具",[25,451,452],{},"“帮我查询订单状态” → 需要查询业务系统的工具",[25,454,455],{},"“帮我新建一个 issue” → 需要 GitHub 相关工具",[389,457,459],{"id":458},"tool-的优势","Tool 的优势",[101,461,462,471],{},[104,463,464],{},[107,465,466,469],{},[110,467,468],{},"优势",[110,470,12],{},[126,472,473,481,489,497],{},[107,474,475,478],{},[131,476,477],{},"真实执行",[131,479,480],{},"不只是回答，而是真的去做",[107,482,483,486],{},[131,484,485],{},"结果可验证",[131,487,488],{},"工具返回值通常比模型自由生成更可靠",[107,490,491,494],{},[131,492,493],{},"细粒度控制",[131,495,496],{},"你可以限制模型只能做哪些动作",[107,498,499,502],{},[131,500,501],{},"易于组合",[131,503,504],{},"多个工具可以串成复杂流程",[389,506,508],{"id":507},"tool-的边界","Tool 的边界",[15,510,511],{},"Tool 只是“能力单元”，它本身并不回答这些问题：",[22,513,514,517,520],{},[25,515,516],{},"模型怎么稳定地产生调用参数？",[25,518,519],{},"外部工具怎么统一接入？",[25,521,522],{},"一整类复杂任务怎么复用？",[15,524,525,526,229],{},"这三个问题，分别会继续走向 ",[28,527,528],{},"Tool Use / Function Calling、MCP、Skill",[97,530,532],{"id":531},"_2-function-calling让模型用结构化方式调用能力","2. Function Calling：让模型用结构化方式调用能力",[15,534,535],{},"很多人第一次接触 Function Calling 时，会把它和 Tool 混在一起。",[15,537,538],{},"这非常正常，因为它们总是一前一后出现。",[15,540,541],{},"但准确地说：",[15,543,544],{},[28,545,546],{},"Function Calling 不是能力本身，而是模型表达“我要调用哪个能力、传什么参数”的机制。",[15,548,549],{},"也就是说：",[22,551,552,555],{},[25,553,554],{},"Tool 解决的是“你能做什么”。",[25,556,557],{},"Function Calling 解决的是“你怎么把调用请求说清楚”。",[389,559,560],{"id":560},"一个最直观的例子",[15,562,563],{},"假设你给模型提供了一个天气查询能力：",[289,565,570],{"className":566,"code":568,"language":569,"meta":295},[567],"language-json","{\n  \"name\": \"get_weather\",\n  \"description\": \"查询城市天气\",\n  \"input_schema\": {\n    \"type\": \"object\",\n    \"properties\": {\n      \"city\": { \"type\": \"string\" },\n      \"date\": { \"type\": \"string\" }\n    },\n    \"required\": [\"city\"]\n  }\n}\n","json",[79,571,568],{"__ignoreMap":295},[15,573,574],{},"当用户说“帮我看看上海今天的天气”，模型理想情况下不应该只是回一句：",[197,576,577],{},[15,578,579],{},"我建议调用天气接口，城市是上海，日期是今天。",[15,581,582],{},"因为这句话对人类友好，对程序却不够友好。",[15,584,585],{},"更理想的做法是，模型直接给出结构化调用请求：",[289,587,590],{"className":588,"code":589,"language":569,"meta":295},[567],"{\n  \"tool\": \"get_weather\",\n  \"input\": {\n    \"city\": \"上海\",\n    \"date\": \"today\"\n  }\n}\n",[79,591,589],{"__ignoreMap":295},[15,593,594],{},"这一步，就是 Tool Use / Function Calling 在发挥作用。",[15,596,597],{},"但如果把 Function Calling 只理解成“模型输出一段 JSON”，其实还差半步。",[15,599,600],{},"更完整的链路通常是：",[222,602,603,606,609,612,615,618,621,624],{},[25,604,605],{},"你先定义可用 tool 的名称、说明和参数 schema。",[25,607,608],{},"客户端把这些定义提供给模型。",[25,610,611],{},"模型判断当前问题要不要调用 tool。",[25,613,614],{},"如果要调用，模型按 schema 生成结构化参数。",[25,616,617],{},"客户端或 runtime 解析这次调用请求。",[25,619,620],{},"runtime 校验参数是否合法，再真正执行函数或 tool。",[25,622,623],{},"tool 执行结果返回给模型。",[25,625,626],{},"模型基于结果继续回答，必要时进入下一轮调用。",[15,628,629],{},"所以更严谨的说法是：",[197,631,632],{},[15,633,634],{},[28,635,636],{},"Function Calling 不只是“生成结构化参数”，而是“模型和外部程序围绕一次工具调用协作完成任务”的整条链路。",[15,638,639],{},"这里再补一个容易混淆的点：",[22,641,642,648],{},[25,643,644,647],{},[79,645,646],{"code":646},"schema"," 的作用是约束和引导模型怎么构造参数。",[25,649,650],{},"真正的严格校验，通常仍然发生在模型外部的 runtime。",[15,652,653,654,657],{},"也就是说，模型通常会",[28,655,656],{},"尽量按 schema 生成参数","，但并不是“有了 schema 就绝对不会出错”。",[389,659,661],{"id":660},"function-calling-解决了什么问题","Function Calling 解决了什么问题",[15,663,664],{},"它真正带来的价值主要有三点：",[22,666,667,672,677],{},[25,668,669],{},[28,670,671],{},"让模型少自由发挥，多按格式输出",[25,673,674],{},[28,675,676],{},"让参数更稳定、更可解析",[25,678,679],{},[28,680,681],{},"让调用结果更容易进入程序流程",[15,683,684],{},"很多传统 prompt engineering 的痛点，本质上都和这里有关：模型会“理解你的意图”，但不一定“按程序需要的结构把事说清楚”。",[15,686,687],{},"Function Calling 的作用，就是把这一步从“靠猜”变成“靠 schema 引导 + runtime 校验”。",[389,689,691],{"id":690},"什么时候该优先想到-function-calling","什么时候该优先想到 Function Calling",[15,693,694],{},"当你遇到这些情况时，它通常很值得上：",[22,696,697,700,703,706],{},[25,698,699],{},"你已经有一组函数/工具，想让模型自动选择调用",[25,701,702],{},"你需要稳定拿到参数，而不是自然语言描述",[25,704,705],{},"你想降低 prompt parsing 的脆弱性",[25,707,708],{},"你在做 AI 应用后端，希望模型输出能直接进入业务逻辑",[389,710,712],{"id":711},"function-calling-的优势","Function Calling 的优势",[101,714,715,723],{},[104,716,717],{},[107,718,719,721],{},[110,720,468],{},[110,722,12],{},[126,724,725,733,741,749],{},[107,726,727,730],{},[131,728,729],{},"参数稳定",[131,731,732],{},"比自由文本更容易解析",[107,734,735,738],{},[131,736,737],{},"约束更强",[131,739,740],{},"可通过 schema 限制字段、类型、必填项",[107,742,743,746],{},[131,744,745],{},"接程序方便",[131,747,748],{},"输出天然适合交给代码执行",[107,750,751,754],{},[131,752,753],{},"可观察性更好",[131,755,756],{},"更容易记录每次调用了什么工具、传了什么参数",[389,758,760],{"id":759},"function-calling-不是什么","Function Calling 不是什么",[15,762,763,764,767],{},"它",[28,765,766],{},"不是","：",[22,769,770,773,776,779],{},[25,771,772],{},"一个外部协议",[25,774,775],{},"一个工具市场",[25,777,778],{},"一个工作流系统",[25,780,781],{},"一个知识库接入方案",[15,783,784,785,788,789,792,793,796],{},"换句话说，Function Calling 只负责“",[28,786,787],{},"怎么调用","”，不负责“",[28,790,791],{},"能力从哪来","”和“",[28,794,795],{},"整套任务怎么组织","”。",[97,798,800],{"id":799},"_3-mcp把外部能力与上下文以统一协议接进来","3. MCP：把外部能力与上下文以统一协议接进来",[15,802,803],{},"如果说 Function Calling 解决的是“模型如何发起调用”，那 MCP 解决的就是另一个更工程化的问题：",[197,805,806],{},[15,807,808],{},"这些外部能力与上下文，到底怎么被规范地接入模型客户端或 Agent 系统？",[15,810,811],{},[28,812,813],{},"MCP（Model Context Protocol）本质上是一种标准化接入协议。",[15,815,816],{},"它的目标不是替代 Tool，也不是替代 Function Calling，而是让外部系统能以统一方式向 AI 客户端暴露：",[22,818,819,822,825,828],{},[25,820,821],{},"tools",[25,823,824],{},"resources",[25,826,827],{},"prompts",[25,829,830],{},"以及相关元数据",[15,832,833],{},"你可以把它理解成：",[22,835,836,839],{},[25,837,838],{},"Tool 是“具体能力”",[25,840,841],{},"MCP 是“把这些能力和上下文接进来的标准插座”",[15,843,844],{},"也因此，下面这几个说法要分开看：",[22,846,847,852,858],{},[25,848,849,851],{},[28,850,30],{}," 是能力本身。",[25,853,854,857],{},[28,855,856],{},"MCP tool"," 是“通过 MCP 协议接进来的 tool”。",[25,859,860,863],{},[28,861,862],{},"MCP server"," 是提供这些 tool / resource / prompt 的服务端。",[15,865,866,867,229],{},"换句话说，",[28,868,869],{},"MCP 不是 tool 的同义词，而是 tool 的一种接入方式",[389,871,873],{"id":872},"mcp-里的-resources-和-prompts-到底是什么","MCP 里的 resources 和 prompts 到底是什么",[15,875,876,877,303,879,229],{},"前面说 MCP 不只会暴露 tool，这里最容易被忽略的其实是 ",[79,878,824],{"code":824},[79,880,827],{"code":827},[15,882,883],{},"可以先粗略记成：",[22,885,886,892,898],{},[25,887,888,891],{},[28,889,890],{},"tool"," 负责“做事”",[25,893,894,897],{},[28,895,896],{},"resource"," 负责“给上下文”",[25,899,900,903],{},[28,901,902],{},"prompt"," 负责“给任务模板”",[15,905,906],{},"其中：",[22,908,909,914],{},[25,910,911,913],{},[28,912,896],{}," 更像一份可读取的上下文对象，通常偏只读，比如文档、文件、数据库 schema、目录索引、某个对象详情。",[25,915,916,918],{},[28,917,902],{}," 更像一个参数化的任务入口或提示模板，用来告诉模型“这类任务通常应该怎么开始”。",[15,920,921],{},"它们在链路里的位置也不一样：",[222,923,924,929,934],{},[25,925,926,928],{},[79,927,902],{"code":902}," 更靠前，常常充当任务入口或模板化起手式。",[25,930,931,933],{},[79,932,896],{"code":896}," 更像中途补充给模型的资料，让模型先看材料再决定回答或调 tool。",[25,935,936,938],{},[79,937,890],{"code":890}," 则负责真正执行搜索、修改、查询、提交之类的动作。",[15,940,941,942,767],{},"举一个简单的假想例子，假设有一个 ",[79,943,944],{"code":944},"docs-mcp",[22,946,947,959,971],{},[25,948,949,950,82,953,82,956],{},"tools：",[79,951,952],{"code":952},"search_docs(query)",[79,954,955],{"code":955},"open_doc(doc_id)",[79,957,958],{"code":958},"ask_doc(question, doc_id)",[25,960,961,962,82,965,82,968],{},"resources：",[79,963,964],{"code":964},"docs://index",[79,966,967],{"code":967},"docs://api/auth",[79,969,970],{"code":970},"docs://db/schema",[25,972,973,974,82,977],{},"prompts：",[79,975,976],{"code":976},"summarize_doc(doc_id)",[79,978,979],{"code":979},"onboard_new_dev(topic)",[15,981,982],{},"如果用户问“这个项目的认证流程怎么走”，一个自然流程可能是：",[222,984,985,993,1000],{},[25,986,987,988,303,990,992],{},"客户端先读取 ",[79,989,964],{"code":964},[79,991,967],{"code":967}," 这些 resource。",[25,994,995,996,999],{},"模型拿到资料后，必要时再调用 ",[79,997,998],{"code":998},"ask_doc"," 这类 tool 继续追问。",[25,1001,1002,1003,1006],{},"如果用户要“把认证文档总结成 onboarding 风格”，那就可以从 ",[79,1004,1005],{"code":1005},"onboard_new_dev"," 这样的 prompt 起手。",[15,1008,1009],{},"所以：",[22,1011,1012,1017],{},[25,1013,1014,1016],{},[79,1015,896],{"code":896}," 不是动作，而是资料。",[25,1018,1019,1021],{},[79,1020,902],{"code":902}," 不是能力本身，而是模板化入口。",[15,1023,1024],{},"如果把它和 Skill 对比，最准确的说法通常是：",[197,1026,1027],{},[15,1028,1029],{},[28,1030,1031],{},"MCP prompt 更像一个轻量级任务模板，接近 skill 的一个组成件，但通常不等于完整的 skill。",[389,1033,1035],{"id":1034},"为什么会需要-mcp","为什么会需要 MCP",[15,1037,1038],{},"如果没有 MCP，不同工具提供方、不同客户端、不同集成方式，通常都各有一套：",[22,1040,1041,1044,1047,1050,1053],{},[25,1042,1043],{},"认证方式不同",[25,1045,1046],{},"参数描述不同",[25,1048,1049],{},"工具发现方式不同",[25,1051,1052],{},"返回格式不同",[25,1054,1055],{},"接入代码大量重复",[15,1057,1058],{},"短期看，似乎都能跑；长期看，问题会越来越明显：",[22,1060,1061,1064,1067,1070],{},[25,1062,1063],{},"一个工具难以在多个客户端之间复用",[25,1065,1066],{},"客户端集成成本越来越高",[25,1068,1069],{},"工具生态很难扩展",[25,1071,1072],{},"每接一次新系统，都要重新打一遍胶水",[15,1074,1075,1076],{},"MCP 的价值就体现在这里：",[28,1077,1078],{},"它不是给你增加一个新概念，而是在帮你减少一堆私有概念。",[389,1080,1082],{"id":1081},"mcp-和-tool-use-function-calling-的关系","MCP 和 Tool Use / Function Calling 的关系",[15,1084,1085],{},"这也是最常见的混淆点之一。",[15,1087,1088],{},"很多人会把 MCP 和 Function Calling 混在一起，原因很简单：它们经常前后脚出现。",[15,1090,1091],{},"但更准确地说：",[22,1093,1094,1099],{},[25,1095,1096,1098],{},[28,1097,42],{}," 负责“把能力接进来”。",[25,1100,1101,1103],{},[28,1102,36],{}," 负责“让模型把调用请求表达出来”。",[15,1105,1106],{},"一个很典型的调用链路是：",[289,1108,1111],{"className":1109,"code":1110,"language":294,"meta":295},[292],"用户输入\n  ↓\n客户端把可用 tools（含 MCP 提供的 tools）告诉模型\n  ↓\n模型判断是否需要调用 tool\n  ↓\n模型按 schema 生成结构化参数\n  ↓\n客户端执行调用\n  ↓\n如果这是 MCP tool，就把请求转发给 MCP server\n  ↓\nMCP server 返回结果\n  ↓\n客户端再把结果喂回模型\n  ↓\n模型继续回答\n",[79,1112,1110],{"__ignoreMap":295},[15,1114,1115],{},"所以更严谨的说法应该是：",[197,1117,1118],{},[15,1119,1120],{},[28,1121,1122],{},"MCP 决定能力怎么接入，Tool Use / Function Calling 决定能力怎么被调用。",[15,1124,1125],{},"二者不是替代关系，而是经常串联出现。",[389,1127,1129],{"id":1128},"mcp-server-的执行位置不等于是不是内置-tool","MCP server 的执行位置，不等于“是不是内置 tool”",[15,1131,1132],{},"在实际使用里，很多人还会把“本地 MCP”误听成“宿主内置 tool”，这也不太准确。",[15,1134,1135],{},"更准确的区分方式是：",[22,1137,1138,1144,1150],{},[25,1139,1140,1143],{},[28,1141,1142],{},"内置 tool","：由客户端自身实现和执行。",[25,1145,1146,1149],{},[28,1147,1148],{},"stdio MCP tool","：客户端启动一个本地 MCP server 子进程，通过 stdin/stdout 和它通信；tool 由这个 server 进程执行。",[25,1151,1152,1155],{},[28,1153,1154],{},"远程 HTTP / SSE MCP tool","：客户端通过网络连接一个独立运行的 MCP server；tool 由远程 server 执行。",[15,1157,549],{},[22,1159,1160,1176],{},[25,1161,1162,303,1165,1168,1169,1172,1173,229],{},[79,1163,1164],{"code":1164},"stdio",[79,1166,1167],{"code":1167},"HTTP / SSE"," 的主要区别是",[28,1170,1171],{},"传输方式","与 ",[28,1174,1175],{},"server 所在位置",[25,1177,1178,1179,229],{},"不管是哪种 transport，",[28,1180,1181],{},"真正执行 MCP tool 的始终是 MCP server",[15,1183,1184],{},"这点特别重要，因为它能帮你把下面两组概念彻底分开：",[22,1186,1187,1193],{},[25,1188,1189,1192],{},[28,1190,1191],{},"内置 tool vs MCP tool","：这是“能力来源”的区别。",[25,1194,1195,1198],{},[28,1196,1197],{},"stdio vs HTTP / SSE","：这是“MCP server 怎么连接”的区别。",[389,1200,1202],{"id":1201},"什么时候该优先想到-mcp","什么时候该优先想到 MCP",[15,1204,1205],{},"下面这些场景，很适合用 MCP 来组织能力接入：",[22,1207,1208,1211,1214,1217],{},[25,1209,1210],{},"你要把现有系统能力开放给 AI 客户端使用",[25,1212,1213],{},"你不只服务一个 Agent，而是希望多个客户端都能接",[25,1215,1216],{},"你要接第三方系统，希望用统一协议管理",[25,1218,1219],{},"你想做可插拔的工具生态，而不是维护一堆私有脚本",[15,1221,1222],{},"比如：",[22,1224,1225,1228,1231],{},[25,1226,1227],{},"给数据库、文档库、内部知识库做统一 AI 接入",[25,1229,1230],{},"给 GitHub、Notion、Jira、浏览器自动化等系统做统一扩展层",[25,1232,1233],{},"让 Claude Code、桌面客户端、IDE 插件共享同一批外部能力",[389,1235,1237],{"id":1236},"mcp-的优势","MCP 的优势",[101,1239,1240,1248],{},[104,1241,1242],{},[107,1243,1244,1246],{},[110,1245,468],{},[110,1247,12],{},[126,1249,1250,1258,1266,1274],{},[107,1251,1252,1255],{},[131,1253,1254],{},"标准化接入",[131,1256,1257],{},"不同能力可以用统一协议暴露",[107,1259,1260,1263],{},[131,1261,1262],{},"生态复用",[131,1264,1265],{},"一次实现，多个客户端可接",[107,1267,1268,1271],{},[131,1269,1270],{},"降低耦合",[131,1272,1273],{},"工具提供方与客户端实现解耦",[107,1275,1276,1279],{},[131,1277,1278],{},"更适合扩展",[131,1280,1281],{},"工具越来越多时，维护成本更可控",[389,1283,1285],{"id":1284},"mcp-的边界","MCP 的边界",[15,1287,1288],{},"MCP 很强，但也不是“凡有工具就上 MCP”。",[15,1290,1291],{},"如果你的场景只是：",[22,1293,1294,1297,1300],{},[25,1295,1296],{},"单个应用内部的 1~2 个函数",[25,1298,1299],{},"只有一个后端服务自己调用",[25,1301,1302],{},"不存在跨客户端复用需求",[15,1304,1305],{},"那直接本地定义 Tool + Function Calling，往往更简单。",[15,1307,1308],{},"所以我更愿意把 MCP 看成：",[197,1310,1311],{},[15,1312,1313],{},[28,1314,1315],{},"当工具体系开始长大时，用来把接入方式做标准化的一层。",[15,1317,1318],{},"它通常不是最小系统的第一步，但非常可能是中大型系统的必经之路。",[389,1320,1322],{"id":1321},"stdiosse-与-streamable-http-补充说明","stdio、SSE 与 Streamable HTTP 补充说明",[15,1324,1325,1326,82,1328,82,1331,1334],{},"如果你最近刚开始接触 MCP transport，还会经常看到 ",[79,1327,1164],{"code":1164},[79,1329,1330],{"code":1330},"SSE",[79,1332,1333],{"code":1333},"HTTP"," 这些词。",[15,1336,1337],{},"这里最容易产生的误解是：",[197,1339,1340],{},[15,1341,1342],{},"SSE 是“外部执行”，stdio 是“宿主内部执行”。",[15,1344,1345],{},"这个说法并不准确。",[15,1347,1348],{},"更准确地说：",[22,1350,1351,1360],{},[25,1352,1353,1355,1356,1359],{},[79,1354,1164],{"code":1164}," 通常表示：客户端把 MCP server 当作",[28,1357,1358],{},"本地子进程","启动，通过标准输入输出传输 JSON-RPC 消息。",[25,1361,1362,1364,1365,1368],{},[79,1363,1167],{"code":1167}," 通常表示：客户端通过",[28,1366,1367],{},"网络","和一个独立运行的 MCP server 通信。",[15,1370,1371],{},"但无论哪种：",[197,1373,1374],{},[15,1375,1376],{},[28,1377,1378],{},"执行 tool 的始终是 MCP server，不是模型本身。",[15,1380,1381],{},"你可以把三种常见情况放在一起理解：",[101,1383,1384,1400],{},[104,1385,1386],{},[107,1387,1388,1391,1394,1397],{},[110,1389,1390],{},"类型",[110,1392,1393],{},"是否 MCP",[110,1395,1396],{},"谁执行 tool",[110,1398,1399],{},"常见连接方式",[126,1401,1402,1415,1429],{},[107,1403,1404,1406,1409,1412],{},[131,1405,1142],{},[131,1407,1408],{},"否",[131,1410,1411],{},"客户端自身",[131,1413,1414],{},"内部实现",[107,1416,1417,1420,1423,1426],{},[131,1418,1419],{},"本地 stdio MCP tool",[131,1421,1422],{},"是",[131,1424,1425],{},"本地 MCP server 进程",[131,1427,1428],{},"stdin/stdout",[107,1430,1431,1433,1435,1438],{},[131,1432,1154],{},[131,1434,1422],{},[131,1436,1437],{},"远程 MCP server",[131,1439,1440],{},"网络请求",[15,1442,1443,1444,56,1447,1449],{},"顺手补一句：在较新的 MCP 文档里，远程传输更常看到 ",[28,1445,1446],{},"Streamable HTTP",[28,1448,1330],{}," 更多出现在兼容或流式场景里。你可以先把它们粗略理解成“远程网络 transport”。",[15,1451,1452],{},"这样记最不容易乱：",[22,1454,1455,1461],{},[25,1456,1457,1460],{},[28,1458,1459],{},"内置 vs MCP","：看能力是不是通过 MCP 接入。",[25,1462,1463,1465],{},[28,1464,1197],{},"：看 MCP server 是怎么连接的。",[97,1467,1469],{"id":1468},"_4-skill把一类任务沉淀成可复用指令封装","4. Skill：把一类任务沉淀成可复用指令封装",[15,1471,1472],{},"前面三个概念，基本都在讲“能力”和“接入”。",[15,1474,1475],{},"而 Skill 解决的，是另一个特别务实的问题：",[197,1477,1478],{},[15,1479,1480],{},"同一种复杂任务我总在反复做，能不能不要每次都从头讲一遍？",[15,1482,1483],{},[28,1484,1485],{},"Skill 本质上是面向某类任务的可复用指令封装。",[15,1487,1488],{},"它往往会把这些东西打包在一起：",[22,1490,1491,1494,1497,1500,1503],{},[25,1492,1493],{},"一段面向特定任务的提示词",[25,1495,1496],{},"一套推荐执行顺序",[25,1498,1499],{},"一些约束与检查点",[25,1501,1502],{},"需要时调用哪些工具",[25,1504,1505],{},"任务完成时应该输出什么",[15,1507,1508],{},"在 Claude Code 这类环境里，你完全可以把 Skill 理解成：",[197,1510,1511],{},[15,1512,1513],{},[28,1514,1515],{},"某类任务的专用操作手册 / playbook + 快捷入口。",[15,1517,1518],{},"它更像是一份可复用的任务说明书：本身主要提供指令、约束和上下文，必要时再由 Claude 去调用工具、子代理或命令完成执行。",[389,1520,1522],{"id":1521},"skill-和-tool-最大的区别","Skill 和 Tool 最大的区别",[15,1524,1525],{},"很多人会把 Skill 和 Tool 混掉，原因是它们最后都会“帮助模型完成任务”。",[15,1527,1528],{},"但两者关注的粒度并不一样：",[101,1530,1531,1542],{},[104,1532,1533],{},[107,1534,1535,1538,1540],{},[110,1536,1537],{},"对比项",[110,1539,30],{},[110,1541,48],{},[126,1543,1544,1555,1566,1577,1588],{},[107,1545,1546,1549,1552],{},[131,1547,1548],{},"关注点",[131,1550,1551],{},"单个能力",[131,1553,1554],{},"一整类任务流程",[107,1556,1557,1560,1563],{},[131,1558,1559],{},"粒度",[131,1561,1562],{},"细",[131,1564,1565],{},"粗",[107,1567,1568,1571,1574],{},[131,1569,1570],{},"内容",[131,1572,1573],{},"做一件事",[131,1575,1576],{},"组织多步执行",[107,1578,1579,1582,1585],{},[131,1580,1581],{},"是否一定执行动作",[131,1583,1584],{},"通常会",[131,1586,1587],{},"不一定，可能更多是指导与约束",[107,1589,1590,1593,1596],{},[131,1591,1592],{},"是否可调用多个工具",[131,1594,1595],{},"本身不是",[131,1597,1598],{},"经常会",[15,1600,1601],{},"一句更形象的话是：",[22,1603,1604,1609],{},[25,1605,1606],{},[28,1607,1608],{},"Tool 是螺丝刀。",[25,1610,1611],{},[28,1612,1613],{},"Skill 是“什么时候拿哪把螺丝刀、先拆哪、后装哪”的经验包。",[389,1615,1617],{"id":1616},"什么时候该优先想到-skill","什么时候该优先想到 Skill",[15,1619,1620],{},"当这些事情反复出现时，Skill 的价值就会非常高：",[22,1622,1623,1626,1629,1632,1635,1638],{},[25,1624,1625],{},"PR review",[25,1627,1628],{},"代码重构检查",[25,1630,1631],{},"生成 release note",[25,1633,1634],{},"排查构建失败",[25,1636,1637],{},"按固定风格写文章",[25,1639,1640],{},"根据仓库规范执行一类常见任务",[15,1642,1643],{},"这类任务通常都有几个共同点：",[22,1645,1646,1649,1652,1655],{},[25,1647,1648],{},"不是一个动作就能完成",[25,1650,1651],{},"需要多步判断",[25,1653,1654],{},"有比较稳定的套路",[25,1656,1657],{},"每次从零写 prompt 很浪费",[389,1659,1661],{"id":1660},"skill-的优势","Skill 的优势",[101,1663,1664,1672],{},[104,1665,1666],{},[107,1667,1668,1670],{},[110,1669,468],{},[110,1671,12],{},[126,1673,1674,1682,1690,1698],{},[107,1675,1676,1679],{},[131,1677,1678],{},"复用经验",[131,1680,1681],{},"把有效提示词和流程沉淀下来",[107,1683,1684,1687],{},[131,1685,1686],{},"降低波动",[131,1688,1689],{},"减少每次临场发挥带来的质量不稳定",[107,1691,1692,1695],{},[131,1693,1694],{},"节省沟通成本",[131,1696,1697],{},"常见任务不必反复解释要求",[107,1699,1700,1703],{},[131,1701,1702],{},"更贴近业务",[131,1704,1705],{},"可以绑定团队习惯、输出格式、审查标准",[389,1707,1709],{"id":1708},"skill-的边界","Skill 的边界",[15,1711,1712],{},"Skill 不是协议，也不是底层调用机制。",[15,1714,1715],{},"它不负责：",[22,1717,1718,1721,1724],{},[25,1719,1720],{},"定义标准网络通信协议",[25,1722,1723],{},"替代工具调用 schema",[25,1725,1726],{},"凭空创造能力",[15,1728,1729],{},"如果没有 Tool，Skill 也可能只能指导模型“怎么想”，却不一定真的“怎么做”。",[15,1731,1732,1733,1736],{},"所以很多时候，",[28,1734,1735],{},"Skill 是站在 Tool 之上的复用层","，而不是它的替代品。",[97,1738,1739],{"id":1739},"最容易混淆的几个点",[1741,1742,1744,1748,1751,1759,1763,1766,1774,1777,1781,1784,1796,1803,1809,1813,1816,1819,1836,1839,1852,1856,1859,1862,1865,1869,1872],"folding",{"title":1743},"展开看几个高频误区",[389,1745,1747],{"id":1746},"误区-1function-calling-就是-tool","误区 1：Function Calling 就是 Tool",[15,1749,1750],{},"不是。",[22,1752,1753,1756],{},[25,1754,1755],{},"Tool 是能力本身。",[25,1757,1758],{},"Tool Use / Function Calling 是对 Tool 的结构化调用方式。",[389,1760,1762],{"id":1761},"误区-2mcp-就是-tool","误区 2：MCP 就是 Tool",[15,1764,1765],{},"也不是。",[22,1767,1768,1771],{},[25,1769,1770],{},"Tool 是能力。",[25,1772,1773],{},"MCP 是暴露和接入这些能力的协议。",[15,1775,1776],{},"MCP 里可以有 Tool，但 MCP 不等于 Tool；更准确地说，MCP tool 只是 tool 的一种来源。",[389,1778,1780],{"id":1779},"误区-25stdio-就是宿主内置执行sse-才是外部执行","误区 2.5：stdio 就是宿主内置执行，SSE 才是外部执行",[15,1782,1783],{},"也不对。",[22,1785,1786,1791],{},[25,1787,1788,1790],{},[79,1789,1164],{"code":1164}," 通常表示客户端拉起一个本地 MCP server 子进程，通过 stdin/stdout 通信。",[25,1792,1793,1795],{},[79,1794,1167],{"code":1167}," 通常表示客户端通过网络连接独立运行的 MCP server。",[15,1797,1798,1799,1802],{},"两者主要区别是 ",[28,1800,1801],{},"transport 和 server 位置","，不是“谁执行 tool”。真正执行 MCP tool 的始终是 MCP server。",[15,1804,1805,1806,1808],{},"如果是客户端自己实现并执行的能力，那属于 ",[28,1807,1142],{},"，而不是 MCP tool。",[389,1810,1812],{"id":1811},"误区-3skill-就是-prompt","误区 3：Skill 就是 Prompt",[15,1814,1815],{},"不完全是。",[15,1817,1818],{},"Skill 往往包含 Prompt，但通常不止 Prompt，还包括：",[22,1820,1821,1824,1827,1830,1833],{},[25,1822,1823],{},"执行策略",[25,1825,1826],{},"任务边界",[25,1828,1829],{},"输出格式",[25,1831,1832],{},"工具使用建议",[25,1834,1835],{},"某类任务的经验沉淀",[15,1837,1838],{},"如果一定要和 MCP prompt 对比，可以这样记：",[22,1840,1841,1847],{},[25,1842,1843,1846],{},[28,1844,1845],{},"MCP prompt"," 更像某个 server 提供的任务模板或标准起手式。",[25,1848,1849,1851],{},[28,1850,48],{}," 更像一整套可复用操作手册，通常会把 prompt、步骤、边界和工具使用经验一起封装起来。",[389,1853,1855],{"id":1854},"误区-4有了-mcp-就不需要-function-calling","误区 4：有了 MCP 就不需要 Function Calling",[15,1857,1858],{},"通常也不对。",[15,1860,1861],{},"MCP 负责把能力接进来，模型最终还是需要一种方式去表达“我要调用哪个能力、参数是什么”。",[15,1863,1864],{},"很多系统里，这一步依然体现为 Tool Use / Function Calling。",[389,1866,1868],{"id":1867},"误区-5skill-可以替代-tool","误区 5：Skill 可以替代 Tool",[15,1870,1871],{},"不能完全替代。",[15,1873,1874],{},"Skill 可以指导模型如何完成任务，但如果任务需要真实操作环境，最终还是要落到 Tool 上。",[97,1876,1878],{"id":1877},"放到-claude-code-里看就更不容易混了","放到 Claude Code 里看，就更不容易混了",[15,1880,1881],{},"如果你最近正好在用 Claude Code，那这四者的关系就很适合拿来做实战理解。",[389,1883,1885],{"id":1884},"场景一你让-claude-帮你看代码","场景一：你让 Claude 帮你看代码",[15,1887,1888],{},"比如你说：",[197,1890,1891],{},[15,1892,1893],{},"帮我找一下项目里处理文章 frontmatter 的地方。",[15,1895,1896],{},"Claude Code 可能会去调用：",[22,1898,1899,1905,1911],{},[25,1900,1901,1904],{},[79,1902,1903],{"code":1903},"Glob"," 找文件",[25,1906,1907,1910],{},[79,1908,1909],{"code":1909},"Grep"," 搜关键词",[25,1912,1913,1916],{},[79,1914,1915],{"code":1915},"Read"," 读具体文件",[15,1918,1919],{},"这时候：",[22,1921,1922,1933,1938,1944],{},[25,1923,1924,82,1926,82,1928,1930,1931,229],{},[79,1925,1903],{"code":1903},[79,1927,1909],{"code":1909},[79,1929,1915],{"code":1915}," 是 ",[28,1932,30],{},[25,1934,1935,1936,229],{},"模型决定“现在该调哪个工具、传什么参数”，这是 ",[28,1937,36],{},[25,1939,1940,1941,229],{},"如果这些工具都是本地内置的，那这里",[28,1942,1943],{},"不一定涉及 MCP",[25,1945,1946,1947,229],{},"如果你把这类“代码定位 + 阅读 + 总结”的任务封装成一个固定入口，那它就可以继续抽象成 ",[28,1948,48],{},[389,1950,1952],{"id":1951},"场景二你接了外部-mcp-server","场景二：你接了外部 MCP Server",[15,1954,1955],{},"比如你把 GitHub、Notion、Jira、数据库，或者某个内部平台，通过 MCP Server 接进 Claude Code。",[15,1957,1958],{},"那么这时：",[22,1960,1961,1967,1973],{},[25,1962,1963,1964,1966],{},"这些外部系统暴露出来的查询能力、操作能力，仍然会以 ",[28,1965,30],{}," 的形式被模型看到。",[25,1968,1969,1970,229],{},"但这些 Tool 的来源，不再只是 Claude Code 本地内置能力，而是",[28,1971,1972],{},"通过 MCP 协议接进来的能力",[25,1974,1975,1976,1978],{},"模型后续依然要通过 ",[28,1977,36],{}," 去调用它们。",[15,1980,1981,1982],{},"也就是说，",[28,1983,1984],{},"MCP 决定“工具怎么进来”，Tool Use / Function Calling 决定“工具怎么被调起来”。",[15,1986,1987],{},"这两个概念经常一起出现，但关注点并不相同。",[389,1989,1991,1992,82,1994,1996],{"id":1990},"场景三你执行-review-prcommit-这样的能力","场景三：你执行 ",[79,1993,81],{"code":81},[79,1995,85],{"code":85}," 这样的能力",[15,1998,1999,2000,229],{},"在 Claude Code 里，这一类入口很适合拿来理解 ",[28,2001,48],{},[15,2003,2004],{},"它们通常不是“单个动作”，而是某类任务经验的打包：",[22,2006,2007,2010,2013,2016],{},[25,2008,2009],{},"先检查当前状态",[25,2011,2012],{},"再读取必要信息",[25,2014,2015],{},"再决定要不要运行命令",[25,2017,2018],{},"最后按固定格式输出结果",[15,2020,2021],{},"这个过程中，它底层依然可能调用很多 Tool：",[22,2023,2024,2027,2030,2033],{},[25,2025,2026],{},"读文件",[25,2028,2029],{},"查 diff",[25,2031,2032],{},"跑 git 命令",[25,2034,2035],{},"搜代码",[15,2037,2038],{},"但你作为使用者，不需要每次都重新描述“先做什么、再做什么、输出要长什么样”。",[15,2040,2041,2042],{},"这就是 Skill 的价值：",[28,2043,2044],{},"它把重复出现的一整类任务，变成了一个可直接触发的复用入口。",[15,2046,2047,2048,2051],{},"需要注意的是，Claude Code 里以 ",[79,2049,2050],{"code":2050},"/"," 开头的入口并不一定全都属于同一种机制：有些是内建命令，有些则是 skill 提供的入口。",[389,2053,2055],{"id":2054},"把四者放进同一个-claude-code-工作流","把四者放进同一个 Claude Code 工作流",[15,2057,2058],{},"假设你要做一次完整的代码审查，过程可能像这样：",[222,2060,2061,2066,2073,2086,2091],{},[25,2062,2063,2064,229],{},"你触发 ",[79,2065,81],{"code":81},[25,2067,2068,2070,2071,229],{},[79,2069,81],{"code":81}," 这个入口本身，可能体现的是 ",[28,2072,48],{},[25,2074,2075,2076,82,2078,82,2080,2083,2084,229],{},"Skill 执行过程中，Claude 会去调用 ",[79,2077,1915],{"code":1915},[79,2079,1909],{"code":1909},[79,2081,2082],{"code":2082},"Bash"," 等 ",[28,2085,30],{},[25,2087,2088,2089,229],{},"每次调用具体 Tool 时，模型都要产生结构化调用请求，这对应 ",[28,2090,36],{},[25,2092,2093,2094,229],{},"如果其中有一部分能力来自 GitHub MCP Server 或公司内部平台的 MCP Server，那么这些能力的接入方式就是 ",[28,2095,42],{},[15,2097,2098],{},"到这里你会发现，四者不是竞争关系，而是正好拼成了一条完整链路。",[97,2100,2102],{"id":2101},"再看一个更完整的-claude-code-例子","再看一个更完整的 Claude Code 例子",[15,2104,2105],{},"如果把场景换成“帮我给这个博客写一篇新文章”，链路会更清楚。",[15,2107,2108],{},"假设我接到的任务是：",[197,2110,2111],{},[15,2112,2113,2114,2117],{},"在 ",[79,2115,2116],{"code":2116},"content/posts/2026"," 下新写一篇文章，先参考 runbook，再按现有博客风格输出。",[15,2119,2120],{},"一个比较自然的执行过程会是：",[222,2122,2123,2129,2139,2145,2156],{},[25,2124,2125,2126,2128],{},"先用 ",[79,2127,1903],{"code":1903}," 找到内容规范和同年份文章。",[25,2130,2131,2132,2134,2135,2138],{},"再用 ",[79,2133,1915],{"code":1915}," 阅读 ",[79,2136,2137],{"code":2137},"docs/runbooks/content/..."," 和现有文章。",[25,2140,2141,2142,2144],{},"如果需要补充定位某些字段，再用 ",[79,2143,1909],{"code":1909}," 查 frontmatter 或 schema。",[25,2146,2147,2148,2151,2152,2155],{},"整理完结构后，用 ",[79,2149,2150],{"code":2150},"Write"," 或 ",[79,2153,2154],{"code":2154},"Edit"," 写入新文章。",[25,2157,2158],{},"如果用户还要求继续润色，就再次读文件、编辑文件，循环完成。",[15,2160,2161],{},"把这套过程拆开看：",[22,2163,2164,2179,2184,2190],{},[25,2165,2166,82,2168,82,2170,82,2172,82,2174,2176,2177,229],{},[79,2167,1903],{"code":1903},[79,2169,1915],{"code":1915},[79,2171,1909],{"code":1909},[79,2173,2150],{"code":2150},[79,2175,2154],{"code":2154}," 都是 ",[28,2178,30],{},[25,2180,2181,2182,229],{},"模型每次决定“接下来用哪个工具、传什么路径、读哪些内容”，这是 ",[28,2183,36],{},[25,2185,2186,2187,2189],{},"如果其中某个能力不是本地内置，而是来自外部接入的内容系统或知识库，那它可能通过 ",[28,2188,42],{}," 提供。",[25,2191,2192,2193,2196,2197,229],{},"如果“按博客规范写文章”这件事被沉淀成一个固定入口，比如 ",[79,2194,2195],{"code":2195},"/write-post","，那这套写作流程就可以被抽象成 ",[28,2198,48],{},[15,2200,2201],{},"也就是说，当你在 Claude Code 里感觉“它好像在一边思考一边调工具”，其实背后不是一个概念在工作，而是这四层可能同时在配合。",[1741,2203,2205],{"title":2204},"如果你想快速判断当前在讨论哪一层",[22,2206,2207,2212,2217,2222],{},[25,2208,2209,2210],{},"你在问“它到底能不能读文件、查网页、改代码？” → ",[28,2211,30],{},[25,2213,2214,2215],{},"你在问“它为什么能稳定输出参数，不是随便说一句话？” → ",[28,2216,36],{},[25,2218,2219,2220],{},"你在问“GitHub / Notion / 数据库这些能力是怎么接进来的？” → ",[28,2221,42],{},[25,2223,2224,2225,82,2227,2229,2230],{},"你在问“为什么 ",[79,2226,85],{"code":85},[79,2228,81],{"code":81}," 一触发就是一整套流程？” → ",[28,2231,48],{},[97,2233,2235],{"id":2234},"真正实战时到底怎么选","真正实战时，到底怎么选",[15,2237,2238],{},"如果你在做 AI 应用、Agent、Claude Code 扩展，最实用的不是背定义，而是学会按问题选层。",[389,2240,2242],{"id":2241},"场景一我只想让模型调用我写的几个函数","场景一：我只想让模型调用我写的几个函数",[15,2244,2245,2246],{},"选：",[28,2247,2248],{},"Tool + Tool Use / Function Calling",[15,2250,2251],{},"这是最常见、也最轻的起步方式。",[15,2253,2254],{},"适合：",[22,2256,2257,2260,2263],{},[25,2258,2259],{},"业务系统里的结构化查询",[25,2261,2262],{},"简单自动化",[25,2264,2265],{},"单应用内部能力调用",[389,2267,2269],{"id":2268},"场景二我想把外部系统能力标准化接入","场景二：我想把外部系统能力标准化接入",[15,2271,2245,2272],{},[28,2273,2274],{},"MCP + Tool + Tool Use / Function Calling",[15,2276,2254],{},[22,2278,2279,2282,2285],{},[25,2280,2281],{},"你要接多个系统",[25,2283,2284],{},"你想让不同客户端共享同一套能力",[25,2286,2287],{},"你不想每接一个工具都重新写私有集成",[389,2289,2291],{"id":2290},"场景三我总在重复做同一类复杂任务","场景三：我总在重复做同一类复杂任务",[15,2293,2245,2294],{},[28,2295,48],{},[15,2297,2298],{},"如果这类任务还需要真实操作，再在 Skill 下面调用 Tool。",[15,2300,2254],{},[22,2302,2303,2306,2309,2312],{},[25,2304,2305],{},"固定风格写作",[25,2307,2308],{},"固定流程审查",[25,2310,2311],{},"固定套路排障",[25,2313,2314],{},"团队内重复出现的高频任务",[389,2316,2318],{"id":2317},"场景四我在-claude-code-里写个-mcp-server该怎么理解","场景四：我在 Claude Code 里写个 MCP Server，该怎么理解",[15,2320,2321],{},"这时最适合用一组连贯关系来想：",[22,2323,2324,2330,2335,2340],{},[25,2325,2326,2327,2329],{},"你写出来的服务器，本质是在通过 ",[28,2328,42],{}," 暴露能力。",[25,2331,2332,2333,229],{},"这个服务器暴露出来的某个“查 issue”“读知识库”“触发部署”的能力，会表现成 ",[28,2334,30],{},[25,2336,2337,2338,229],{},"模型实际调用这些能力时，仍然需要产生结构化参数，这对应 ",[28,2339,36],{},[25,2341,2342,2343,229],{},"如果你后来又把“发布前检查”“日报生成”“PR 初筛”这些常见流程封成固定入口，那就是 ",[28,2344,48],{},[15,2346,866,2347,2350,2351,2354],{},[28,2348,2349],{},"“我在写 MCP Server”"," 这句话，本身更偏接入层；",[28,2352,2353],{},"“Server 里具体开放了哪些能力”","，才是在讲 Tool。",[389,2356,2358],{"id":2357},"场景五我只是泛泛地说ai-可以用哪些能力","场景五：我只是泛泛地说“AI 可以用哪些能力”",[15,2360,2361,2362,2364],{},"这时说 ",[28,2363,30],{}," 就够了。",[15,2366,2367],{},"因为这是最上层、也最通用的说法。",[97,2369,2370],{"id":2370},"一个我自己觉得最好记的选型顺序",[15,2372,2373],{},"如果你是从零设计一个 Agent，可以按这个顺序思考：",[222,2375,2376,2382,2388,2394],{},[25,2377,2378,2381],{},[28,2379,2380],{},"先问有没有真实执行能力需求","\n如果有，就先定义 Tool。",[25,2383,2384,2387],{},[28,2385,2386],{},"再问是否需要稳定的结构化调用","\n如果需要模型自动选工具、自动传参，就考虑 Tool Use / Function Calling。",[25,2389,2390,2393],{},[28,2391,2392],{},"再问是否需要跨客户端或外部系统统一接入","\n如果需要，就考虑用 MCP 做标准化接入。",[25,2395,2396,2399],{},[28,2397,2398],{},"最后问是否存在高频重复任务需要沉淀","\n如果有，就把“提示词 + 步骤 + 工具选择经验”整理成 Skill。",[15,2401,2402],{},"这个顺序很重要，因为它说明：",[22,2404,2405,2410,2415],{},[25,2406,2407],{},[28,2408,2409],{},"Skill 通常建立在 Tool 之上。",[25,2411,2412],{},[28,2413,2414],{},"MCP 通常服务于 Tool 的接入。",[25,2416,2417],{},[28,2418,2419],{},"Tool Use / Function Calling 通常服务于 Tool 的调用。",[97,2421,2422],{"id":2422},"用一句话区分四者",[15,2424,2425],{},"如果你只想在脑子里留一个最短版本，可以记成下面这样：",[101,2427,2428,2438],{},[104,2429,2430],{},[107,2431,2432,2435],{},[110,2433,2434],{},"你在想什么问题",[110,2436,2437],{},"对应概念",[126,2439,2440,2447,2454,2461],{},[107,2441,2442,2445],{},[131,2443,2444],{},"“AI 到底能做什么事？”",[131,2446,30],{},[107,2448,2449,2452],{},[131,2450,2451],{},"“AI 怎么把调用请求说清楚？”",[131,2453,36],{},[107,2455,2456,2459],{},[131,2457,2458],{},"“这些能力怎么统一接进来？”",[131,2460,42],{},[107,2462,2463,2466],{},[131,2464,2465],{},"“这类任务怎么沉淀成可复用套路？”",[131,2467,48],{},[97,2469,2470],{"id":2470},"推荐继续读什么",[15,2472,2473],{},"如果你准备继续往下看，我会建议按这个顺序读：",[222,2475,2476,2483,2489,2496],{},[25,2477,2478,2479,2482],{},"先看 ",[28,2480,2481],{},"Tool use","，把“模型怎么调用能力”这件事彻底搞明白。",[25,2484,2485,2486,2488],{},"再看 ",[28,2487,42],{},"，理解“这些能力怎么被标准化接入”。",[25,2490,2491,2492,2495],{},"然后看 ",[28,2493,2494],{},"Claude Code Skills","，理解“任务是怎么被沉淀和复用的”。",[25,2497,2498],{},"最后再回来看你自己的场景：你现在缺的到底是能力、调用、接入，还是复用。",[15,2500,2501],{},"很多时候，一旦顺序反了，就很容易在还没把 Tool 和 Tool Use / Function Calling 分清之前，先被 MCP 或 Skill 这些更上层概念绕晕。",[97,2503,2504],{"id":2504},"最后",[15,2506,2507],{},"Function Calling、MCP、Skill、Tool 之所以总被混在一起，不是因为它们定义不清，而是因为它们经常在同一个系统里一起工作。",[15,2509,2510],{},"但只要你按层去看，就不会乱：",[22,2512,2513,2518,2523,2528],{},[25,2514,2515,2517],{},[28,2516,30],{}," 负责提供能力。",[25,2519,2520,2522],{},[28,2521,36],{}," 负责发起结构化调用。",[25,2524,2525,2527],{},[28,2526,42],{}," 负责标准化接入外部能力。",[25,2529,2530,2532],{},[28,2531,48],{}," 负责沉淀一类任务的复用流程。",[15,2534,2535],{},"所以它们不是四选一，而更像四块能拼在一起的积木。",[15,2537,2538],{},"系统越复杂，越可能四块都用上；系统越简单，越可能只需要其中两块。",[15,2540,2541,2542],{},"真正重要的从来不是背下术语，而是判断清楚：",[28,2543,2544],{},"你现在解决的，到底是能力问题、调用问题、接入问题，还是复用问题。",[15,2546,2547],{},"如果哪天你又把这四个词看混了，也不用慌，回到最朴素的四个问题就行：",[22,2549,2550,2555,2560,2565],{},[25,2551,2552,2553,229],{},"我现在是在讨论“能做什么”吗？那大概率是 ",[28,2554,30],{},[25,2556,2557,2558,229],{},"我现在是在讨论“怎么调起来”吗？那大概率是 ",[28,2559,36],{},[25,2561,2562,2563,229],{},"我现在是在讨论“怎么接进系统里”吗？那大概率是 ",[28,2564,42],{},[25,2566,2567,2568,229],{},"我现在是在讨论“怎么把一整类任务复用起来”吗？那大概率是 ",[28,2569,48],{},[15,2571,2572],{},"这样一来，基本就不会再乱了。",{"title":295,"searchDepth":2574,"depth":2574,"links":2575},4,[2576,2578,2579,2580,2581,2588,2595,2605,2611,2619,2626,2627,2634,2635,2636,2637],{"id":99,"depth":2577,"text":99},2,{"id":206,"depth":2577,"text":206},{"id":253,"depth":2577,"text":253},{"id":284,"depth":2577,"text":284},{"id":346,"depth":2577,"text":347,"children":2582},[2583,2585,2586,2587],{"id":391,"depth":2584,"text":392},3,{"id":423,"depth":2584,"text":424},{"id":458,"depth":2584,"text":459},{"id":507,"depth":2584,"text":508},{"id":531,"depth":2577,"text":532,"children":2589},[2590,2591,2592,2593,2594],{"id":560,"depth":2584,"text":560},{"id":660,"depth":2584,"text":661},{"id":690,"depth":2584,"text":691},{"id":711,"depth":2584,"text":712},{"id":759,"depth":2584,"text":760},{"id":799,"depth":2577,"text":800,"children":2596},[2597,2598,2599,2600,2601,2602,2603,2604],{"id":872,"depth":2584,"text":873},{"id":1034,"depth":2584,"text":1035},{"id":1081,"depth":2584,"text":1082},{"id":1128,"depth":2584,"text":1129},{"id":1201,"depth":2584,"text":1202},{"id":1236,"depth":2584,"text":1237},{"id":1284,"depth":2584,"text":1285},{"id":1321,"depth":2584,"text":1322},{"id":1468,"depth":2577,"text":1469,"children":2606},[2607,2608,2609,2610],{"id":1521,"depth":2584,"text":1522},{"id":1616,"depth":2584,"text":1617},{"id":1660,"depth":2584,"text":1661},{"id":1708,"depth":2584,"text":1709},{"id":1739,"depth":2577,"text":1739,"children":2612},[2613,2614,2615,2616,2617,2618],{"id":1746,"depth":2584,"text":1747},{"id":1761,"depth":2584,"text":1762},{"id":1779,"depth":2584,"text":1780},{"id":1811,"depth":2584,"text":1812},{"id":1854,"depth":2584,"text":1855},{"id":1867,"depth":2584,"text":1868},{"id":1877,"depth":2577,"text":1878,"children":2620},[2621,2622,2623,2625],{"id":1884,"depth":2584,"text":1885},{"id":1951,"depth":2584,"text":1952},{"id":1990,"depth":2584,"text":2624},"场景三：你执行 /review-pr、/commit 这样的能力",{"id":2054,"depth":2584,"text":2055},{"id":2101,"depth":2577,"text":2102},{"id":2234,"depth":2577,"text":2235,"children":2628},[2629,2630,2631,2632,2633],{"id":2241,"depth":2584,"text":2242},{"id":2268,"depth":2584,"text":2269},{"id":2290,"depth":2584,"text":2291},{"id":2317,"depth":2584,"text":2318},{"id":2357,"depth":2584,"text":2358},{"id":2370,"depth":2577,"text":2370},{"id":2422,"depth":2577,"text":2422},{"id":2470,"depth":2577,"text":2470},{"id":2504,"depth":2577,"text":2504},[2639],"开发",true,"2026-04-03 15:12:00","从职责层级、接入方式与适用场景出发，讲清 Tool、Tool Use / Function Calling、MCP、Skill 四者的边界、关系与选型思路。",false,"md",null,{"slots":2647},{},"/2026/function-call-mcp-skill-tool",{"text":2650,"minutes":2651,"time":2652,"words":2653},"43 min read",42.145,2528700,8429,[2655,2658,2661,2664,2667],{"title":2656,"link":2657},"Anthropic Docs · Tool use overview","https://platform.claude.com/docs/en/agents-and-tools/tool-use/overview",{"title":2659,"link":2660},"Claude Code Docs · Skills","https://code.claude.com/docs/en/skills",{"title":2662,"link":2663},"Claude Code Docs · MCP","https://code.claude.com/docs/en/mcp",{"title":2665,"link":2666},"Model Context Protocol · Introduction","https://modelcontextprotocol.io/docs/getting-started/intro",{"title":2668,"link":2669},"Anthropic Webinar · Claude Code Advanced Patterns","https://www.anthropic.com/webinars/claude-code-advanced-patterns",{"title":5,"description":2642},{"loc":2648},"posts/2026/function-call-mcp-skill-tool",[2674,2675,2676,42,59,55,30,48],"AI","Agent","Claude Code","tech","2026-04-09 10:00:00","LhI-BSQOtcFGlPkTA2Ene7W_4IklB6_LomTDaYOUvpQ",[2681,2687],{"title":2682,"path":2683,"stem":2684,"date":2685,"type":2686,"children":-1},"check-list","/2026/check-list","posts/2026/check-list","2026-03-16 22:22:36","story",{"title":2688,"path":2689,"stem":2690,"date":2691,"type":2677,"children":-1},"Java 的 ACM 常用模板","/2026/acm-java-template","posts/2026/acm-java-template","2026-04-04 15:36:18",1778311048012]