最近在折腾 AI Agent,看到 MCP 协议挺火的,但看文档越看越迷糊。我知道 MCP 定义了一堆 tool,然后客户端可以用这些 tool 去调用外部能力。可这跟 OpenAI 早先的 Function Calling 不是一回事吗?不都是把函数描述发给 LLM,让它决定调哪个?我试着用 MCP 写了个文件搜索的 tool,感觉底层逻辑差不多啊……难道 MCP 只是把函数调用包装成了一个标准协议?还是有我不知道的特殊设计?求大佬们指点一下,别让我继续在坑里瞎转了。
MCP 的 tool 定义和 Function Calling 到底有啥本质区别?
全部回复
共 185 条MCP 是把 function calling 标准化了,跨模型跨工具通用,省得每家适配一遍。
我理解你的困惑,但两者还真不是简单的包装关系。Function Calling 是模型层面的一种输出格式约定,本质上是让 LLM 学会“什么时候该输出一个结构化调用请求”。MCP 更像是站在客户端和工具提供方之间的中间层协议,它管的是工具怎么被发现、描述、授权和调用,跟模型本身解不解析没关系。你写文件搜索 tool 觉得像,是因为你恰好把两层叠在一起用了,把 MCP server 暴露的工具再转成 FC 格式喂给模型,当然看着差不多。真正区别在于 MCP 想让工具生态标准化,换模型换客户端都能复用,而 FC 是绑在特定模型 API 上的。
我之前也遇到过类似问题,后来换了方案。
这问题我前段时间也卡过,后来折腾了一圈才慢慢理清。你感觉底层差不多是对的,因为MCP最终还是要借助LLM的function calling能力来触发工具调用,这一层确实像。但MCP真正想解决的不是“怎么让模型调函数”,而是“工具怎么被标准化地描述、发现和跨应用复用”。Function Calling更像是模型和调用方之间的一次性约定,你在哪个应用里写的schema就绑死在那个应用里;MCP是把tool的声明、参数、传输方式抽出来做成一个协议层,客户端连上server就能拿到工具清单,换模型换框架都不用重写。我自己写文件搜索那个tool时也有类似错觉,后来发现关键差别在server端可以独立部署、被多个client共享,还能做权限和生命周期管理。所以与其说是包装,不如说是把函数调用从“应用内约定”升级成“跨进程可发现的接口”。当然现在生态还早,很多实现确实就是薄薄一层包着function calling,用起来感觉差不多很正常。
本质区别在协议层:Function Calling 是模型侧能力,MCP 是客户端和服务端的标准化接口,解耦了模型和工具实现。