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 類反射提示。