Unknown methods return -32602 Invalid params instead of -32601 Method not found

MCP Python SDK 对未知 JSON-RPC 方法错误地返回 -32602 Invalid params 而非正确的 -32601 Method not found ,导致客户端(如 Smithery)误判并反复重试。优先排查是否正在使用 v1.x 版 SDK,并升级到 v2.0.0。

快速结论:MCP Python SDK 对未知 JSON-RPC 方法错误地返回 -32602 Invalid params 而非正确的 -32601 Method not found,导致客户端(如 Smithery)误判并反复重试。优先排查是否正在使用 v1.x 版 SDK,并升级到 v2.0.0。

适用环境:MCP Python SDK 1.27.1 及之前版本;Python 3.14;已知在 initialize + notifications/initialized 后发送不存在的 JSON-RPC 方法时触发。

最快修复方案:升级到 MCP Python SDK v2.0.0 版本(官方确认此错误已在 v2 中修复)。

注意事项:v2 是主版本升级,移除了 session 状态,可能影响需要状态追踪的现有业务逻辑。企业部署需评估变更带来的威胁模型影响。

问题场景

使用 MCP Python SDK 构建 MCP 服务器时,客户端发送一个服务器未实现的 JSON-RPC 方法(例如 triggers/listcompletions/completelogging/setLevel 或完全随机的 totally/bogus)。SDK 应当返回 -32601 Method not found,但实际上返回了 -32602 Invalid request parameters。这导致客户端(如 Smithery)认为请求参数有误而不断重试,最终造成日志污染及无效扫描。

报错原文

{"jsonrpc":"2.0","id":9,"error":{"code":-32602,"message":"Invalid request parameters","data":""}}

客户端收到的警告示例:

Warning: Failed to list triggers: MCP error -32602: Invalid request parameters

原因分析

mcp/shared/session.py 中,_receive_request_type.model_validate(...) 在遇到未知方法时会抛出异常,然后被 except Exception 统一捕获,所有异常都被映射为 INVALID_PARAMS。代码未区分“方法不存在”与“参数验证失败”两种场景。此外,data 字段被设为空字符串,没有任何诊断信息。

环境排查

  • 确认 MCP Python SDK 版本:1.27.1 及之前 v1.x 版本均存在此问题。
  • Python 版本:已验证 3.14。
  • 其他依赖:无需额外确认。

解决步骤

  1. 将 MCP Python SDK 升级至 v2.0.0 或更高版本(v2 版本已修复该错误)。
  2. 如果因业务限制无法升级,可参考 Issue 中提及的未合并 PR #2372,在 mcp/shared/session.py 中增加方法名预检逻辑:在解析请求之前检查 message.message.root.method 是否在已知方法列表中,若不存在则直接返回 METHOD_NOT_FOUND(代码 -32601)。
  3. 注意:v1.x 已进入维护模式,仅修复关键安全漏洞,官方不计划为此问题单独发布补丁。

验证方法

向服务器发送一个不存在的 JSON-RPC 方法(例如 {"jsonrpc":"2.0","id":9,"method":"totally/bogus"}),确认返回的错误码为 -32601 且消息为 Method not found。同时检查客户端日志中不再出现 -32602 Invalid request parameters 警告。

参考来源

modelcontextprotocol/python-sdk #3193

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 15969

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注