MCP 工具没有业务参数却报 argument type mismatch,检查 Spring AI 的进度参数注入
空 arguments 的 MCP 工具也可能因 Spring AI 注入的进度参数而发生类型错配。核对 Spring AI、MCP SDK 和注解依赖,再验证空参数调用及进度 token 两种路径。
MCP 工具没有业务参数却报 argument type mismatch,检查 Spring AI 的进度参数注入
客户端调用一个“列出项目”工具,arguments 只是空对象。服务器返回的工具结果却带着:
argument type mismatch
工具没有要求用户填字段,仍可能在反射调用阶段发生参数类型错配。Spring AI 曾有一个具体案例:方法同时声明 McpSyncServerExchange 和带 @McpProgressToken 的 String 参数。
先核对是否属于这个历史问题
#5467 的报告环境是 Spring AI 1.1.2、Spring Boot 3.5.10、Java 21。方法的参数全部由框架注入,没有业务输入;客户端以空 arguments 调用时返回 isError=true。
排查时记录三个版本:Spring AI、MCP Java SDK,以及实际解析到的 mcp-annotations。只记录 starter 的版本,可能漏掉被其他依赖覆盖的注解实现。
同时查看工具方法签名和 tools/list 返回的输入 schema。框架负责提供的 exchange、progress token 不应成为要求模型填写的业务字段。这个检查能把参数注入问题和模型漏填普通参数区分开。
升级路径与临时处理
该问题的后续评论报告:Spring AI 1.1.7 引入的 mcp-annotations 0.9.0,已经能执行同样的空参数用例,并正确排除输入 schema 中的框架参数。后续复现说明
这给出了可验证的版本组合,但不能据此断言 1.1.7 是最早修复版本。升级时仍要按项目的 Spring Boot 兼容要求选择整套依赖,再重跑最小工具。
无法升级、且工具执行很快时,可暂时移除 @McpProgressToken 参数,保留真正需要的 exchange。这样会失去进度通知能力,适合不依赖进度反馈的短操作。原报告尝试过增加 dummy 参数、改成 nullable、让客户端传入 dummy 值,均未解决问题,不值得把这些无意义字段固化进工具接口。
用空参数调用验收
用 MCP Inspector 或现有测试客户端完成下面几项:
- tools/list 能找到工具,schema 中没有框架注入字段
- 以空 arguments 调用,结果 isError=false,并返回正确业务内容
- 若保留进度功能,分别测试请求带进度 token 和不带 token 的情况
还有一个容易混淆的边界:STATELESS 服务使用的上下文类型与有状态 exchange 不同。若工具根本没有出现在列表中,应另查服务模式与上下文类型,而不是继续围绕这个反射报错修改参数。


