上一篇我们完成了 MCP Server 的开发,本篇将聚焦于 MCP Client 端的实现与集成。

MCP Client 的核心职责非常明确:连接服务器、获取工具列表,并将这些工具信息交付给大模型,以便执行 function calling。整个流程看似简单,却需要两个 SDK 的协同配合——MCP SDK 负责与服务器通信,OpenAI SDK 负责与大模型交互。接下来,我们将一步步拆解这一过程。
一、MCP 客户端
步骤一:引入 pom 依赖
首先,在 pom.xml 中添加 MCP 客户端的 starter 依赖,Spring AI 会自动完成底层连接的装配。
org.springframework.ai
spring-ai-starter-mcp-client
步骤二:开发 McpClient
接下来编写一个同步客户端,核心逻辑包括:创建传输层、初始化连接、获取工具列表,并调用某个具体工具(此处以天气查询为例)。
package org.devpotato.client;
import io.modelcontextprotocol.client.McpClient;
import io.modelcontextprotocol.client.McpSyncClient;
import io.modelcontextprotocol.client.transport.HttpClientStreamableHttpTransport;
import io.modelcontextprotocol.spec.McpSchema;
import ja va.time.Duration;
import ja va.util.HashMap;
public class McpClient {
public static void main(String[] args) {
// 创建 Streamable HTTP Client
McpSyncClient httpClient = createStreamableHttpClient();
McpSchema.ListToolsResult toolsResult = httpClient.listTools();
System.out.println("工具列表: " + toolsResult);
McpSchema.CallToolRequest request = McpSchema.CallToolRequest.builder()
.name("getWeather")
.arguments(new HashMap<>() {{
put("city", "西安");
}})
.build();
McpSchema.CallToolResult result = httpClient.callTool(request);
System.out.println("工具列表调用结果: " + result);
}
/**
* 创建 Streamable HTTP 类型的 Client
*/
private static McpSyncClient createStreamableHttpClient() {
HttpClientStreamableHttpTransport transport = HttpClientStreamableHttpTransport.builder("https://localhost:8080")
.endpoint("/mcp")
.build();
McpSyncClient client = McpClient.sync(transport)
.clientInfo(new McpSchema.Implementation("http-client", "1.0.0"))
.requestTimeout(Duration.ofSeconds(60))
.build();
client.initialize();
return client;
}
}
运行后,控制台会输出工具调用的结果,例如返回西安地区的实时天气数据。
工具列表调用结果: CallToolResult[content=[TextContent[annotations=null, text="城市: 西安, 温度: 25°C, 天气: 晴", meta=null]], isError=false, structuredContent=null, meta=null]
二、MCP SDK 与 OpenAI SDK 协作流程
单独的 MCP Client 价值有限,真正的价值在于将其与大模型深度结合。整个协作流程可拆解为五步:
- 客户端通过 MCP SDK 连接服务器,获取工具列表。
- 客户端将用户输入与工具列表一并提交给 OpenAI SDK,发送至大模型。
- 大模型根据上下文判断是否需要调用工具。
- 若需要,客户端通过 MCP SDK 远程调用服务器端工具,获取执行结果。
- 最后将工具结果返回给大模型,生成最终回复。
如此一来,MCP 充当了工具层的统一协议,而 OpenAI SDK 则扮演大脑接口的角色,二者分工明确,协作顺畅。
随着 MCP 协议的普及,越来越多的 AI IDE 和平台原生支持作为 MCP 客户端。例如 Cursor、Claude Desktop、Windsurf、LibreChat、MCP Inspector 等,均能自动发现并调用 MCP 服务器上的工具。不同工具适用于不同的团队协作场景,但本质上都在降低工具集成的门槛。可以预见,未来支持 MCP 的 AI 平台将持续增加,工具生态也将日益繁荣。
