news 2026/8/11 11:44:35

MCP 调用失败的排查实录

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MCP 调用失败的排查实录

副标题:一个真实排障日志。当你确认"工具已经列出来、模型也选了它、参数也对",但调用就是失败——问题往往不在你的代码逻辑,而在协议栈的某一层。

一、故障现场

上周四晚上,你的桌面应用的 MCP server 上线前夜。7 个工具里 6 个在 Claude Desktop 里调得顺风顺水:get_account_quotasearch_contactslist_recent_chats……唯独send_message怎么都调不通。

现象很诡异:

  • tools/list能列出来,模型也知道该调它;
  • 模型生成的arguments完全正确(account_id、contact_id、text 都在);
  • 但一调用就报Method not found或者干脆超时,Claude Desktop 里显示"工具调用失败,请重试"。

其他 6 个工具同一个 Server、同一套装饰器,凭什么就它不行?我赌了半包烟在"肯定是 send 的异步实现写错了",结果打脸。

二、排查树:从表象往根因走

我把排障分成四层,从外到内逐层排除:

  1. Host 层:是 Claude Desktop 的问题,还是所有 Host 都调不通?(换 Cursor 试)
  2. 协议层:JSON-RPC 的method名、id、传输是否对?
  3. Server 层@mcp.tool()注册成功了吗?tools/list返回里有没有它?
  4. 业务层:工具函数内部是不是抛异常了?

第一斧:换 Host,定位是不是客户端问题

我先在 Cursor 里试了同一个send_message,结果一样失败。说明不是 Claude Desktop 的锅,是 Server 侧

第二斧:抓 JSON-RPC 报文

在 MCP endpoint(127.0.0.1:53716)前面挂了一层 middleware 打印所有进出报文。发现一个关键线索:

{"jsonrpc":"2.0","id":42,"method":"tools/call","params":{"name":"send_message","arguments":{"account_id":"acct_main_01","contact_id":"c_8842","text":"Hi"}}}

请求长得没问题。但 Server 回的却是:

{"jsonrpc":"2.0","id":42,"error":{"code":-32601,"message":"Method not found"}}

-32601 Method not found——意思是 Server 根本不认识tools/call这个 method。可其他 6 个工具明明能调,说明tools/call这个入口是存在的。矛盾点就在这里:同一个tools/call,换个别的工具名就行,换成send_message就报 method not found?

第三斧:看 tools/list 返回

我直接curltools/list,把返回的 tools 数组打印出来。真相浮出水面——

列表里压根没有send_message这个工具。

模型之所以"知道"要调它,是因为我的instructions里写了"可用工具涵盖消息发送",但tools/list实际注册的工具名是send_message(早期命名)。模型从 instructions 推测出名字,实际注册名对不上,于是tools/call带着错误的name进来,Server 当然回Method not found

三、为什么只有它出问题

其他 6 个工具名都和 instructions 描述一致,模型不会搞错;唯独send_message在重构时改过名,instructions 没同步。模型不是"瞎调",是被我过时的 instructions 误导了

这正好印证了上一篇说的:instructions字段的权重极高,但它的内容必须和tools/list真实注册名严格一致。一份过期的 instructions,比没有 instructions 更危险——它制造了"模型以为能调、实际调不到"的幻觉。

四、顺手修掉的另外两个暗雷

排查过程中还顺手发现两个隐患,记下来:

暗雷 1:streamable HTTP 的 idle 超时。我用的传输是 streamable HTTP,Server 侧给 SSE 连接设了 30s idle 超时。长文本发送(200 字产品介绍)偶尔耗时超过 30s,连接被服务端掐断,表现为"调用超时"。修复:把 idle 超时调到 120s,并在客户端加指数退避重试。

暗雷 2:async 事件循环嵌套。send_message内部调了 你的桌面应用业务后端的异步 SDK,而我最初图省事在同步工具函数里asyncio.run()包了一层。FastMCP 本身就是 async 跑的,嵌套事件循环直接抛RuntimeError: This event loop is already running。改成@mcp.tool()装饰 async 函数 +await后解决。

五、踩坑清单(这一篇的精华)

按"我真踩过"的顺序:

  1. tools/list返回的工具名,是唯一真相来源。模型调工具用的是params.name,它必须和tools/list里注册的name一字不差。instructions/ 文档 / 你脑子里的名字都不算数。改了工具名,三处(注册、instructions、调用方)必须一起改。

  2. -32601 Method not found不等于"函数没写"。它只代表"带着这个 name 的 tools/call 进来了,但我这没有"。先curl tools/list看真实注册名,比翻代码快十倍。

  3. instructions过期比缺失更坑。它会被注入每个 Host 的上下文,模型高度信任。写完后每次改工具名/参数,把 instructions 当代码一样走 review。

  4. streamable HTTP 的 idle 超时要按最长工具耗时设。不要用默认 30s。长耗时工具(发消息、跑批)单独评估,必要时拆成"提交→轮询"两步。

  5. MCP 工具函数一律async def只要内部有 IO(HTTP、DB、消息队列),就await,别在同步函数里asyncio.run()。FastMCP 已经在事件循环里了。

  6. 排障要从协议层抓报文,不要靠猜。在 endpoint 前挂一层 middleware 打印 JSON-RPC 进出,90% 的"调不通"在报文里一目了然。这是性价比最高的调试习惯。

  7. 换 Host 复现,先排除客户端。一个 Host 调不通,立刻换另一个(Cursor / WorkBuddy / Cline)。如果都失败,问题 100% 在 Server;如果只有某一个失败,是 Host 的 MCP 实现差异。

六、下一篇预告

第 4 篇讲多租户路由设计:一个 你的桌面应用ID 怎么管多个 应用账号,account_id怎么在 MCP 工具层做路由隔离,避免"调 A 账号却发了 B 账号消息"的事故。

系列目录:

  • 第 1 篇:为什么选 MCP、怎么和 HTTP API/CLI/WS 对比
  • 第 2 篇:从 0 暴露 7 个工具的完整代码
  • 第 3 篇(本篇):MCP 调用失败的排查实录
  • 第 4 篇:多租户路由设计
  • …… 共 10 篇,每日更新

如果你也在接 MCP,建议现在就给 endpoint 加一层报文日志——等"调不通"的那天,你会感谢今天的自己。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/11 11:42:17

联机泰拉瑞亚经常卡住?从零开始的保姆级自救教程

联机泰拉瑞亚经常卡住,十有八九不是游戏的问题,是你家网络的问题。 《泰拉瑞亚》是个好游戏,但它的联机机制对国内玩家不太友好。Steam好友邀请走的是P2P直连,可国内绝大多数家庭宽带都没有公网IP,中间还隔着运营商的多…

作者头像 李华
网站建设 2026/8/11 11:41:39

AI Agent落地实践:从概念验证到工程化部署的三层架构

最近和几个做AI应用的朋友聊天,发现一个挺有意思的现象:大家一边在朋友圈转发着Karpathy关于“AI Agent距离真正实用可能还需要十年”的论断,一边又在项目排期里塞满了各种“智能体”的开发任务。嘴上说着“路还长”,脚下却一刻不…

作者头像 李华
网站建设 2026/8/11 11:39:55

从混乱到有序:NoFences如何用智能分区重新定义Windows桌面体验

从混乱到有序:NoFences如何用智能分区重新定义Windows桌面体验 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 你是否曾在堆积如山的桌面图标中迷失方向&#xff…

作者头像 李华
网站建设 2026/8/11 11:39:21

2026年真实求职现状:宝妈考什么证书好找工作?

带娃几年后准备重返职场,打开招聘软件,看到五花八门的“招聘要求”和铺天盖地的考证宣传,很多宝妈都会陷入迷茫。市场上的证书数量多、宣传口径混乱,到底考什么证书好找工作?其实,证书是否有价值&#xff0…

作者头像 李华
网站建设 2026/8/11 11:37:09

只能在校大学生考的证书有哪些?

进入2026年的一季度,随着秋招的落幕与春招的预热,很多同学都在关注当前的人才市场现状。在内卷与竞争依然存在的大环境下,许多大学生希望通过考证来增加简历厚度。然而,证书数量多、宣传口径混乱,往往让人难以判断哪些…

作者头像 李华
网站建设 2026/8/11 11:36:52

终极桌面整理方案:NoFences如何用免费智能栅栏拯救混乱桌面

终极桌面整理方案:NoFences如何用免费智能栅栏拯救混乱桌面 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 你是否每天都要在几十个图标中寻找需要的文件&#xf…

作者头像 李华