MCP 工具
MCP 工具为将模型上下文协议 (Model Context Protocol) 与 Spring AI 应用程序集成提供了基础支持。 这些工具实现了 Spring AI 的工具系统与 MCP 服务器之间的无缝通信,支持同步和异步操作。 它们通常用于编程方式的 MCP 客户端和服务器配置及交互。 如需更精简的配置,请考虑使用启动器 (boot starters)。
ToolCallback 工具
Tool Callback 适配器
将 MCP 工具适配到 Spring AI 的工具接口,支持同步和异步执行。
-
Sync
-
Async
McpSyncClient mcpClient = // 获取 MCP 客户端
Tool mcpTool = // 获取 MCP 工具定义
ToolCallback callback = new SyncMcpToolCallback(mcpClient, mcpTool);
// 通过 Spring AI 的接口使用工具
ToolDefinition definition = callback.getToolDefinition();
String result = callback.call("{\"param\": \"value\"}");
McpAsyncClient mcpClient = // 获取 MCP 客户端
Tool mcpTool = // 获取 MCP 工具定义
ToolCallback callback = new AsyncMcpToolCallback(mcpClient, mcpTool);
// 通过 Spring AI 的接口使用工具
ToolDefinition definition = callback.getToolDefinition();
String result = callback.call("{\"param\": \"value\"}");
Tool Callback 提供者
从 MCP 客户端发现并提供 MCP 工具。
- Sync
-
McpSyncClient mcpClient = // 获取 MCP 客户端 ToolCallbackProvider provider = new SyncMcpToolCallbackProvider(mcpClient); // 获取所有可用工具 ToolCallback[] tools = provider.getToolCallbacks();
对于多个客户端:
List<McpSyncClient> clients = // 获取客户端列表
List<ToolCallback> callbacks = SyncMcpToolCallbackProvider.syncToolCallbacks(clients);
对于动态选择客户端子集:
@Autowired
private List<McpSyncClient> mcpSyncClients;
public ToolCallbackProvider buildProvider(Set<String> allowedServerNames) {
// 按 server.name() 过滤。
List<McpSyncClient> selected = mcpSyncClients.stream()
.filter(c -> allowedServerNames.contains(c.getServerInfo().name()))
.toList();
return new SyncMcpToolCallbackProvider(selected);
}
- Async
-
McpAsyncClient mcpClient = // 获取 MCP 客户端 ToolCallbackProvider provider = new AsyncMcpToolCallbackProvider(mcpClient); // 获取所有可用工具 ToolCallback[] tools = provider.getToolCallbacks();
对于多个客户端:
List<McpAsyncClient> clients = // 获取客户端列表
Flux<ToolCallback> callbacks = AsyncMcpToolCallbackProvider.asyncToolCallbacks(clients);
McpToolUtils
ToolCallbacks 到 ToolSpecifications
将 Spring AI 工具回调转换为 MCP 工具规范:
- Sync
-
List<ToolCallback> toolCallbacks = // 获取工具回调 List<SyncToolSpecifications> syncToolSpecs = McpToolUtils.toSyncToolSpecifications(toolCallbacks);
然后可以使用
McpServer.SyncSpecification
注册工具规范:
McpServer.SyncSpecification syncSpec = ...
syncSpec.tools(syncToolSpecs);
- Async
-
List<ToolCallback> toolCallbacks = // 获取工具回调 List<AsyncToolSpecification> asyncToolSpecifications = McpToolUtils.toAsyncToolSpecifications(toolCallbacks);
然后可以使用
McpServer.AsyncSpecification
注册工具规范:
McpServer.AsyncSpecification asyncSpec = ...
asyncSpec.tools(asyncToolSpecifications);
MCP 客户端到 ToolCallbacks
从 MCP 客户端获取工具回调
-
Sync
-
Async
List<McpSyncClient> syncClients = // 获取同步客户端
List<ToolCallback> syncCallbacks = McpToolUtils.getToolCallbacksFromSyncClients(syncClients);
List<McpAsyncClient> asyncClients = // 获取异步客户端
List<ToolCallback> asyncCallbacks = McpToolUtils.getToolCallbacksFromAsyncClients(asyncClients);