ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

什么时候不需要MCP

什么时候不需要MCP 问题经常看到招聘 JD 上写着 MCP似乎每个人都要会 MCP 才能做 agent 开发又有人说 MCP 太重了没什么人用 MCP我们又会看到很多教程说使用 MCP 统一接口很好用我们平时看到的教程都是介绍 MCP 是什么为什么要用 MCP。说了很多其实大家还是不能直观地理解 MCP 的取舍。我今天就反过来说说什么时候不需要 MCP来帮助大家更直观地感受 MCP。MCP是什么MCPModel Context Protocol模型上下文协议是 Anthropic 发起的一个开放协议用来让 AI 应用比如 Claude Code、Claude Desktop、OpenClaw 这些 agent用统一的方式去发现和调用外部工具、读取外部资源这是字面上的概念。实际上你可以把 MCP 看作是暴露给 agent 的一种资源。在 MCP 出现之前如果你想让一个 AI 应用连上 Google Drive、GitHub、Slack 这些服务每个 AI 应用都得为每一个外部服务单独写一套集成代码。MCP 相当于给这个连接关系定义了一个“标准插座”。不用MCP用什么如果不用 MCP我们还有很多别的东西可以选择。最重要的是两种function calling2023 年 OpenAI 推出了 function calling 的能力。其实很简单就是你先把一段函数签名传给 LLM。{ name: get_weather, description: 查询某个城市当前的天气, input_schema: { ... properties: {city: {type: string}}, } }LLM 知道有一个 tool 之后如果 LLM 在执行过程中觉得需要调用这个外部工具那么执行结果的content内会多出一个tool_use对象并且stop_reason也会写tool_use。就像{content:[{type:tool_use,name:get_weather,input:{city:new york}}],stop_reason:tool_use}然后你就自己写代码去实现这个函数调用。ifresponse.stop_reasontool_use:tool_useresponse.content[-1]// ... 调用查天气的函数当然实际工作中没这么土你可以用 LangChain 之类的框架。CLI其实也是一种function call只不过你就只暴露一种 tool而且直接告诉 LLM 这就是个 bash你想执行什么命令就自己写命令。好处就是你不需要告诉 LLM bash 能干啥要怎么用。因为 LLM 在阅读了大量资料后它本来就知道怎么写 bash 命令。但是使用CLI有一定风险权限控制不好做。模型视角感受首先你必须知道一件事情模型根本不知道你调用的是 MCP 还是 function calling。比如当你注册查询天气这个工具的时候如果使用 MCP 注册那么模型看到的 tools 是这样的{name:get_weather,description:Get the current weather for a specified city,input_schema:{type:object,properties:{city:{type:string}}}}如果你用 function calling模型看到的 tools 是这样的{name:get_weather,description:Get the current weather for a specified city,input_schema:{type:object,properties:{city:{type:string}}}}我们现在来玩一个游戏你能看出这两个 JSON 的区别吗答案是它们没有区别。所以不需要纠结用 MCP 跟 function calling 会对模型造成什么影响。对模型来说根本就没有区别。MCP的缺点那么 MCP 既然这么好为什么不都用 MCP 呢因为 MCP 有缺点上下文开销大一旦连接上一个 MCP server这个 server 暴露的所有工具的完整 schema名字、参数、描述都会被提前塞进模型的上下文窗口不管这次对话用不用得上。消耗服务器资源MCP Server 是一个持续存在、需要一直跑着的东西。你启动的 MCP Server 多了服务器的 CPU、内存都会被消耗。运维负担MCP server 既然是一个独立进程你需要自己负责它崩溃后重启、多个 server 间的启动顺序以及内部状态的持续维护。MCP的优点MCP 听起来很糟糕啊。那为什么那么多公司还是继续使用 MCP 呢因为它虽然有很多缺点但是它最大的优点就是统一了项目资源的集成接口。统一接口这件事情本身就有 2 个好处调用代码简洁这东西不做软件的人感觉不出它的好处。做软件的人听到统一接口都知道它好。你原来几千行的屎山代码可能突然就变成十几行了。接口一多bug 就埋藏得多、埋藏得深维护起来就没完没了。接入第三方资源简单所有第三方资源都做成了 MCP这下接入资源不用再花费很多精力去做定制化了。这件事情其实也没什么技术含量就跟统一货币、度量衡一样。关键是得有人去做这件事情。结论如果你的需求是以下其中一种你想用第三方做的工具你在用你们团队多平台公用的工具你想做多角色权限区分那么你可以考虑使用 MCP否则的话使用其他轻量化方法比如 function calling 就够了。关于作者我是代码Plato。我相信人类的创造力才是 AI Coding 的真实之树而代码与模型不过是投射在洞穴墙上的影子。微博代码Plato主页https://weibo.com/u/1041257881
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进