MCP 工具类

MCP 工具类为将模型上下文协议 (Model Context Protocol) 集成到 Spring AI 应用中提供了基础支持。这些工具类使得 Spring AI 的工具系统与 MCP 服务器之间能够无缝通信,支持同步和异步操作。它们通常用于以编程方式配置和交互 MCP 客户端和服务器。为了获得更简化的配置,请考虑使用 boot 启动器。

ToolCallback 工具类

Tool Callback Adapter

将 MCP 工具适配到 Spring AI 的工具接口,支持同步和异步执行。

  • 同步

  • 异步

McpSyncClient mcpClient = // obtain MCP client
Tool mcpTool = // obtain MCP tool definition
ToolCallback callback = new SyncMcpToolCallback(mcpClient, mcpTool);

// Use the tool through Spring AI's interfaces
ToolDefinition definition = callback.getToolDefinition();
String result = callback.call("{\"param\": \"value\"}");
McpAsyncClient mcpClient = // obtain MCP client
Tool mcpTool = // obtain MCP tool definition
ToolCallback callback = new AsyncMcpToolCallback(mcpClient, mcpTool);

// Use the tool through Spring AI's interfaces
ToolDefinition definition = callback.getToolDefinition();
String result = callback.call("{\"param\": \"value\"}");

Tool Callback Providers

从 MCP 客户端发现并提供 MCP 工具。

  • 同步

  • 异步

McpSyncClient mcpClient = // obtain MCP client
ToolCallbackProvider provider = new SyncMcpToolCallbackProvider(mcpClient);

// Get all available tools
ToolCallback[] tools = provider.getToolCallbacks();

对于多个客户端

List<McpSyncClient> clients = // obtain list of clients
List<ToolCallback> callbacks = SyncMcpToolCallbackProvider.syncToolCallbacks(clients);
McpAsyncClient mcpClient = // obtain MCP client
ToolCallbackProvider provider = new AsyncMcpToolCallbackProvider(mcpClient);

// Get all available tools
ToolCallback[] tools = provider.getToolCallbacks();

对于多个客户端

List<McpAsyncClient> clients = // obtain list of clients
Flux<ToolCallback> callbacks = AsyncMcpToolCallbackProvider.asyncToolCallbacks(clients);

McpToolUtils

将 ToolCallback 转换为 ToolSpecification

将 Spring AI 工具回调转换为 MCP 工具规范

  • 同步

  • 异步

List<ToolCallback> toolCallbacks = // obtain tool callbacks
List<SyncToolSpecifications> syncToolSpecs = McpToolUtils.toSyncToolSpecifications(toolCallbacks);

然后可以使用 McpServer.SyncSpecification 注册工具规范

McpServer.SyncSpecification syncSpec = ...
syncSpec.tools(syncToolSpecs);
List<ToolCallback> toolCallbacks = // obtain tool callbacks
List<AsyncToolSpecification> asyncToolSpecifications = McpToolUtils.toAsyncToolSpecifications(toolCallbacks);

然后可以使用 McpServer.AsyncSpecification 注册工具规范

McpServer.AsyncSpecification asyncSpec = ...
asyncSpec.tools(asyncToolSpecifications);

将 MCP 客户端转换为 ToolCallback

从 MCP 客户端获取工具回调

  • 同步

  • 异步

List<McpSyncClient> syncClients = // obtain sync clients
List<ToolCallback> syncCallbacks = McpToolUtils.getToolCallbacksFromSyncClients(syncClients);
List<McpAsyncClient> asyncClients = // obtain async clients
List<ToolCallback> asyncCallbacks = McpToolUtils.getToolCallbacksFromAsyncClients(asyncClients);

Native Image 支持

McpHints 类为 MCP schema 类提供了 GraalVM native image 提示。构建 native images 时,该类会自动注册所有必要的 MCP schema 类反射提示。