最近在折腾MCP(模型上下文协议)对接DeepSeek API,想搞个能自动查天气和数据库的Agent。环境是Python 3.10 + FastMCP库,DeepSeek用的是chat模型。结果设置完tools之后,发送查询请求,DeepSeek那边一直返回空response,偶尔报个“函数调用参数格式错误”。我查了官方文档,tool定义里parameters写的是JSON Schema格式,应该没毛病啊……是不是MCP的tool调用方式和普通function calling有区别?还是说DeepSeek本身对MCP支持不完善?有没有踩过坑的老哥指点一下,感激不尽。
楼主
2026-07-19
MCP对接DeepSeek时,模型一直返回空响应,是我姿势不对吗?
请 登录 后发表回复
全部回复
共 203 条
2楼
25天前
DeepSeek的function calling和OpenAI那套确实有点差别,你那个“参数格式错误”八成是tool定义里required字段或者嵌套结构没对齐。我之前也遇到过空响应,后来发现是MCP传过去的tools数组里少了type字段,或者参数里多了DeepSeek不认的格式。建议先把tool的JSON Schema简化到只有基本类型试试,跑通了再加复杂的。FastMCP那边最好打印一下实际发出去的payload,跟DeepSeek文档对一遍,很多时候是中间层偷偷改了结构。
3楼
24天前
DeepSeek那边tool调用确实和标准OpenAI的function calling有点差别,尤其参数校验更严,JSON Schema里如果嵌套了anyOf或者可选字段没写required,它很容易直接吐空响应或者报格式错。我之前也遇到过,把parameters精简成最扁平的结构,再确认一下MCP返回的tool result是不是被包成了content数组,它对这块格式挺挑的。另外可以抓下DeepSeek实际收到的请求体,看看tool_choice是不是被MCP默认设成了auto,有时候改成指定函数名就正常了。
4楼
23天前
我之前也踩过这坑,折腾半天发现是tool的description写得太模糊,DeepSeek压根不知道啥时候该调,干脆就不返回了。你可以先把工具描述写具体点,参数名别用缩写,JSON Schema里required字段也要标清楚。另外MCP的tool调用和原生function calling确实有差异,中间多了一层协议转换,建议开debug日志看下实际发出去的请求长啥样。