Spring AI MCP服务器(STDIO传输)无输出问题求助
问题排查与解决方法
1. 配置类变量名拼写错误
你的配置类代码中存在变量名不一致问题:
@Bean public ToolCallbackProvider getToolCallbacks(McpComponent lightMcpComponent) { // 此处参数为lightMcpComponent,但调用时写为tMcpComponent,属于拼写错误 return ToolCallbackProvider.from(List.of(ToolCallbacks.from(tMcpComponent))); }
该错误会导致工具回调无法正确绑定到目标组件,即便日志显示工具已注册,实际请求时也找不到对应的执行逻辑。
解决方法:修正变量名,保持参数与调用一致:
@Bean public ToolCallbackProvider getToolCallbacks(McpComponent lightMcpComponent) { return ToolCallbackProvider.from(List.of(ToolCallbacks.from(lightMcpComponent))); }
2. 工具类未标注@McpComponent注解
Spring AI的MCP组件要求包含@Tool方法的类必须添加@McpComponent注解,否则框架无法识别该类为工具提供者,即便方法上标注了@Tool也无法被正确调用。
解决方法:在工具方法所在类上添加注解,且名称需与配置文件中的MCP服务器名称一致:
import org.springframework.ai.mcp.McpComponent; import java.util.Random; @McpComponent("light-mcp") // 与application.yml中spring.ai.mcp.server.name配置值匹配 public class LightMcpComponent { @Tool(name = "get_random_number", description="Return a random number", returnDirect = true) public long getRandomNumber() { long newRandomLong = new Random(System.currentTimeMillis()).nextLong(); return newRandomLong; } }
3. JSON-RPC请求格式问题
MCP STDIO服务器要求每个JSON-RPC请求必须独占一行,且请求ID不能重复(重复ID会触发协议错误,导致无响应)。
正确请求格式示例:
{"jsonrpc":"2.0","id":2,"method":"tools/list"} {"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"get_random_number","arguments":{}}}
4. 开启DEBUG日志定位细节
调整日志级别为DEBUG,查看请求处理全流程的日志输出,确认请求是否被解析、工具是否被匹配:
在application.yml中添加日志配置:
logging: level: org.springframework.ai.mcp: DEBUG
通过DEBUG日志可以排查请求接收、参数解析、工具调用等环节的具体问题。
内容的提问来源于stack exchange,提问作者gusto2
相关产品推荐
相关产品推荐

