
055、MCP 与 OpenAI Function Calling 对比:两套协议的设计哲学、能力差异与互补上周五凌晨两点,我盯着终端里Claude Code跑出的第三轮MCP工具调用日志,突然意识到一个尴尬的事实——同样的“查询用户订单”需求,用OpenAI Function Calling写,三行配置就搞定;换成MCP协议,我得先起一个独立的stdio服务进程,还得处理JSON-RPC的握手和心跳。这让我开始认真思考:这两套东西,到底谁在解决什么问题?一个真实的调试现场事情是这样的。我在做一个内部运维机器人,需要让Claude Code能直接调用公司内部的CMDB接口。最初我图省事,直接用了OpenAI兼容的Function Calling格式——把API描述写成JSON Schema,塞进tools参数里。跑起来很顺,直到我发现一个问题:每次对话都要把整个工具定义重新传一遍,token消耗大得离谱。更坑的是,当工具返回的数据量超过某个阈值,模型就开始“忘记”之前的结果。后来换成MCP协议,情况变了。工具定义只需要在连接时注册一次,后续调用走的是独立的通信通道。但代价是——我得自己处理进程管理、超时重连、错误码映射。有一次MCP服务进程因为内存泄漏挂了,Claude Code那边完全不知道,还在傻等结果,整个对话卡死。这个对比让我意识到:两套协议的设计哲学,本质上是在“简单集成”和“工程健壮性”之间做取舍。设计哲学的根本分歧