ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

mcp-for-beginners Java 客户端实战:用 Spring AI + WebFlux SSE 构建 MCP Calculator 客户端

mcp-for-beginners Java 客户端实战:用 Spring AI + WebFlux SSE 构建 MCP Calculator 客户端 教程文档人工智能【免费下载链接】mcp-for-beginnersThis open-source curriculum introduces the fundamentals of Model Context Protocol (MCP) through real-world, cross-language examples in .NET, Java, TypeScript, JavaScript, Rust and Python. Designed for developers, it focuses on practical techniques for building modular, scalable, and secure AI workflows from session setup to service orchestration.项目地址https://gitcode.com/GitHub_Trending/mc/mcp-for-beginners点击查看免费下载本篇指南围绕 mcp-for-beginners 开源课程中「02-client」章节的 Java 实现展开讲解如何编写一个基于 Spring AI MCP 框架的 Java 客户端通过 Server-Sent EventsSSE传输协议连接第一章构建的 Calculator MCP 服务器完成工具发现listTools、远程调用callTool与结果展示的完整闭环。读完本文你将掌握WebFluxSseClientTransport与McpClient.sync的使用方式、各计算工具的调用参数约定以及一套可复用的「服务器 客户端」联调排障流程。前置条件先把 Calculator Server 跑起来在启动客户端之前必须先保证第一章的 Calculator MCP 服务器处于运行状态。按照课程约定服务器位于03-GettingStarted/01-first-server/solution/java/目录使用 Maven Wrapper 构建并以 JAR 形式运行cd ..\01-first-server\solution\java .\mvnw clean install -DskipTests java -jar target\calculator-server-0.0.1-SNAPSHOT.jar服务器启动后应监听http://localhost:8080其 SSE 端点默认为http://localhost:8080/sse。客户端运行还需要满足Java 21 或更高版本——项目的pom.xml中通过maven-compiler-plugin的release21/release以及java.version21/java.version明确了编译目标Maven——无需单独安装项目已内置 Maven Wrappermvnw/mvnw.cmd。说明根据 服务器端 README 的提示该 Java 解决方案使用的是较早期的 HTTP SSE 传输面向 MCP2025-11-25协议版本新编写的远程服务器建议改用2026-07-28的 Streamable HTTP。本文的 Java 客户端与这套课程代码保持一致的 SSE 传输方式。SDKClient 是什么SDKClient是本节提供的 Java 客户端示例它演示了四件 MCP 客户端最核心的事情使用SSEServer-Sent Events传输与 MCP 服务器建立连接从服务器列出可用的工具列表远程调用各种计算器函数处理响应并把计算结果打印展示出来。客户端本身是一个不带 Web 容器的普通 Java 应用main方法创建传输层、实例化客户端然后在run()方法中依次执行工具发现与调用逻辑完整源码见 SDKClient.java。工作原理客户端到服务器的五步调用链客户端基于 Spring AI MCP 框架工作整个流程可以拆解为五个阶段建立连接创建WebFluxSseClientTransport指向 Calculator 服务器的http://localhost:8080初始化客户端通过McpClient.sync(transport).build()构建同步客户端并调用initialize()完成握手工具发现调用listTools()列出服务器上全部可用操作执行操作用样本数据逐一调用加、减、乘、除、幂、开方、绝对值等数学函数展示结果把每次CallToolResult的返回内容打印到控制台。值得补充的是客户端在initialize()之后还会调用client.ping()主动探测一次连接健康状态并在全部工具调用结束后调用client.closeGracefully()优雅释放连接资源——这两步在课程文档中未单独展开却是实战客户端中值得保留的健壮性细节。项目结构SDKClient位于标准的 Maven 单模块布局中唯一的源码文件路径如下src/ └── main/ └── java/ └── com/ └── microsoft/ └── mcp/ └── sample/ └── client/ └── SDKClient.java # 主客户端实现完整的可运行工程位于 03-GettingStarted/02-client/solution/java/除源码外还包含pom.xml、mvnwUnix 包装脚本、mvnw.cmdWindows 包装脚本与LICENSE。核心依赖与构建配置项目的 Maven 配置见 pom.xml其中最关键的一个依赖是dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-starter-mcp-server-webflux/artifactId /dependency该依赖主要提供三部分能力McpClient——主要的客户端接口提供initialize()、listTools()、callTool()、ping()、closeGracefully()等操作WebFluxSseClientTransport——基于 WebFlux 的 SSE 传输实现用于 HTTP 通信MCP 协议 schema 与请求/响应类型如CallToolRequest、CallToolResult、ListToolsResult。pom.xml中还值得注意的细节有通过spring-ai-bom版本1.0.0-SNAPSHOT进行依赖版本统一管理父工程为spring-boot-starter-parent3.4.4项目坐标com.example:calculator-client:0.0.1-SNAPSHOT说明这是一个 Spring Boot 构建的独立客户端 JAR额外引入spring-boot-starter-actuator与测试相关的spring-boot-starter-test、junit-jupiter配置了exec-maven-plugin3.1.0主类指向com.microsoft.mcp.sample.client.SDKClient便于用mvnw exec:java直接运行仓库repository配置包含 Sonatype Central 快照仓库与 Spring Milestones / Snapshots 仓库用于解析spring-ai的快照构件。构建与运行使用 Maven Wrapper 构建项目.\mvnw clean install构建成功后运行客户端java -jar .\target\calculator-client-0.0.1-SNAPSHOT.jar注意执行上述命令前务必确保 Calculator 服务器已运行在http://localhost:8080。除打包运行外课程主教程03-GettingStarted/02-client/README.md还提供了另一种更适合开发期的运行方式# 编译 ./mvnw clean compile # 直接以主类运行无需打包 ./mvnw exec:java -Dexec.mainClasscom.microsoft.mcp.sample.client.SDKClient客户端执行的计算与预期输出客户端启动后会依次完成下列操作连接http://localhost:8080上的 Calculator 服务器列出全部可用工具执行一组预置的计算样本见下表工具参数期望结果adda5, b38subtracta10, b46multiplya6, b742dividea20, b45powerbase2, exponent8256squareRootnumber164absolutenumber-5.55.5help无列出可用操作对应的控制台输出大致如下Available Tools ListToolsResult[tools[Tool[nameadd, descriptionAdd two numbers together, ...], ...]] Add Result CallToolResult[content[TextContent[text5,00 3,00 8,00]], isErrorfalse] Subtract Result CallToolResult[content[TextContent[text10,00 - 4,00 6,00]], isErrorfalse] Multiply Result CallToolResult[content[TextContent[text6,00 * 7,00 42,00]], isErrorfalse] Divide Result CallToolResult[content[TextContent[text20,00 / 4,00 5,00]], isErrorfalse] Power Result CallToolResult[content[TextContent[text2,00 ^ 8,00 256,00]], isErrorfalse] Square Root Result CallToolResult[content[TextContent[text√16,00 4,00]], isErrorfalse] Absolute Result CallToolResult[content[TextContent[text|-5,50| 5,50]], isErrorfalse] Help CallToolResult[content[TextContent[textBasic Calculator MCP Service\n\nAvailable operations:\n1. add(a, b) - Adds two numbers\n2. subtract(a, b) - Subtracts the second number from the first\n...]], isErrorfalse]两个值得注意的细节数字格式与本地化有关结果中的5,00 3,00 8,00使用逗号作为小数点分隔符这是因为服务器端 CalculatorService.java 用String.format(%.2f %s %.2f %.2f, ...)格式化输出格式符受运行环境默认 Locale 影响在中文等以点号分隔的环境下会显示为5.00 3.00 8.00属正常现象而非错误线程警告是正常现象程序结束阶段可能看到 Maven 关于残留线程的警告这是响应式reactive应用运行后的常见表现并不表示出错。代码逐段解析1. 传输层设置var transport new WebFluxSseClientTransport(WebClient.builder().baseUrl(http://localhost:8080));这行代码创建了一个基于 SSE 的传输实例指向 Calculator 服务器地址。SSE 适合 MCP 服务器基于 HTTP 的「服务端推送 请求/响应」交互模型客户端通过WebClient与服务器的/sse端点建立长连接、接收服务端事件。2. 客户端创建与初始化var client McpClient.sync(this.transport).build(); client.initialize();McpClient.sync(...)返回一个同步调用的客户端构建器build()产出客户端实例initialize()完成 MCP 协议握手交换协议版本与能力信息。源码中还紧跟着client.ping()用于验证连接可用性。3. 列出工具ListToolsResult toolsList client.listTools(); System.out.println(Available Tools toolsList);listTools()返回ListToolsResult其中包含服务器注册的全部工具包括名称、描述与输入 schema——这些信息正是后续callTool参数约定的来源。4. 调用工具CallToolResult resultAdd client.callTool(new CallToolRequest(add, Map.of(a, 5.0, b, 3.0))); System.out.println(Add Result resultAdd);CallToolRequest需要两个要素工具名与参数 Map。参数键名必须与服务器端工具方法的形参名严格一致。对照服务器实现 CalculatorService.java可以总结出如下参数约定add(a, b)、subtract(a, b)、multiply(a, b)、divide(a, b)两个参数均命名为a和bpower(base, exponent)参数名为base、exponentsquareRoot(number)、absolute(number)参数名为numberhelp()无参数传入空 MapMap.of()。每个工具的返回结果封装在CallToolResult中其中isErrorfalse表示调用成功content列表里的TextContent携带服务器返回的文本结果。课程主教程03-GettingStarted/02-client/README.md中的 Java 示例还演示了help工具的调用其参数同样为空的Map.of()。5. 优雅关闭client.closeGracefully();所有工具调用完成后通过closeGracefully()主动关闭连接避免资源泄漏。服务器端工具清单对照为便于理解客户端各调用参数的含义这里汇总服务器侧通过Tool注解暴露的全部操作源码见 CalculatorService.java工具名参数描述边界处理adda, b两数相加—subtracta, b第一数减第二数—multiplya, b两数相乘—dividea, b第一数除以第二数b 为 0 时返回错误信息powerbase, exponent求幂—squareRootnumber开平方负数返回错误信息modulusa, b求余数b 为 0 时返回错误信息absolutenumber求绝对值—help无列出全部操作与示例—客户端示例调用了除modulus之外的全部工具你可以在此基础上自行扩展一次callTool(new CallToolRequest(modulus, Map.of(a, 17.0, b, 5.0)))来验证求余操作。故障排查服务器未启动若出现连接错误先确认第一章的 Calculator 服务器是否已运行Error: Connection refused解决方法先启动 Calculator 服务器再运行客户端。端口被占用如果 8080 端口已被其他程序占用Error: Address already in use解决方法关闭占用 8080 端口的其他应用或把服务器改到其他端口后同步修改客户端baseUrl。构建错误如果构建过程中遇到依赖解析或编译错误可跳过测试重新构建以定位问题.\mvnw clean install -DskipTests注意spring-ai的1.0.0-SNAPSHOT构件依赖 Sonatype Central 快照仓库与 Spring 里程碑仓库若构建时无法联网访问这些仓库也会导致依赖下载失败。小结与下一步从本示例可以提炼出 MCP 客户端的三个关键认知客户端既能发现服务器的能力工具列表也能调用这些能力远程执行计算客户端既可以拉起服务器进程如 stdio 场景也可以连接已在运行的服务器如本示例的 SSE 场景写一个自己的客户端是验证服务器能力、替代 Inspector 图形化调试的极佳途径。本节的 Java 客户端还只是「无脑调用」的演示。课程的下一章 03-llm-client 将在此基础上为客户端接入大语言模型让 LLM 根据用户意图自主决定调用哪些 MCP 工具这才是 MCP 在 Agent 工作流中的真正威力所在。赞分享教程文档人工智能【免费下载链接】mcp-for-beginnersThis open-source curriculum introduces the fundamentals of Model Context Protocol (MCP) through real-world, cross-language examples in .NET, Java, TypeScript, JavaScript, Rust and Python. Designed for developers, it focuses on practical techniques for building modular, scalable, and secure AI workflows from session setup to service orchestration.项目地址https://gitcode.com/GitHub_Trending/mc/mcp-for-beginners点击查看免费下载相关推荐Java MCP 客户端实战基于 Spring AI WebFlux SSE 传输构建 Calculator ClientJava MCP 客户端实战基于 Spring AI WebFlux SSE 传输构建 Calculator Client 本文基于 mcp for begi教程文档人工智能mcp-for-beginners 实战用 Java Spring AI 编写 MCP SSE 客户端远程调用计算器服务器mcp for beginners 实战用 Java Spring AI 编写 MCP SSE 客户端远程调用计算器服务器 导读 本文基于 mcp fo教程文档人工智能MCP for Beginners用 Java 与 Spring AI 构建基于 SSE 的 MCP 客户端——从工具发现到远程调用实战MCP for Beginners用 Java 与 Spring AI 构建基于 SSE 的 MCP 客户端——从工具发现到远程调用实战 导读 本指南以 mc教程文档人工智能上一篇3分钟掌握StPageFlip打造专业级Web翻页效果的终极指南下一篇OpenModScan完全指南如何用这款免费Modbus主站工具提升你的工业自动化效率创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表