此專案示範如何建立一個 Java 客戶端,連接並與 MCP(Model Context Protocol)伺服器互動。在本範例中,我們將連接到第 01 章的計算機伺服器,並執行各種數學運算。
在執行此客戶端之前,您需要:
-
啟動第 01 章的計算機伺服器:
- 進入計算機伺服器目錄:
03-GettingStarted/01-first-server/solution/java/ - 建置並執行計算機伺服器:
cd ..\01-first-server\solution\java .\mvnw clean install -DskipTests java -jar target\calculator-server-0.0.1-SNAPSHOT.jar - 伺服器應該在
http://localhost:8080運行
- 進入計算機伺服器目錄:
-
您的系統需安裝 Java 21 或更高版本
-
Maven(透過 Maven Wrapper 已包含)
SDKClient 是一個 Java 應用程式,示範如何:
- 使用 Server-Sent Events (SSE) 傳輸連接 MCP 伺服器
- 列出伺服器上的可用工具
- 遠端呼叫各種計算機功能
- 處理回應並顯示結果
此客戶端使用 Spring AI MCP 框架來:
- 建立連線:建立 WebFlux SSE 用戶端傳輸,連接計算機伺服器
- 初始化客戶端:設定 MCP 客戶端並建立連線
- 發現工具:列出所有可用的計算機操作
- 執行操作:使用範例資料呼叫各種數學函式
- 顯示結果:展示每次計算的結果
src/
└── main/
└── java/
└── com/
└── microsoft/
└── mcp/
└── sample/
└── client/
└── SDKClient.java # Main client implementation
專案使用以下主要相依套件:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-server-webflux</artifactId>
</dependency>此相依套件提供:
McpClient- 主要的客戶端介面WebFluxSseClientTransport- 用於網頁通訊的 SSE 傳輸- MCP 協定的結構與請求/回應類型
使用 Maven Wrapper 建置專案:
.\mvnw clean installjava -jar .\target\calculator-client-0.0.1-SNAPSHOT.jar注意:執行這些指令前,請確保計算機伺服器已在 http://localhost:8080 運行。
執行客戶端時,它會:
- 連接 到
http://localhost:8080的計算機伺服器 - 列出工具 - 顯示所有可用的計算機操作
- 執行計算:
- 加法:5 + 3 = 8
- 減法:10 - 4 = 6
- 乘法:6 × 7 = 42
- 除法:20 ÷ 4 = 5
- 次方:2^8 = 256
- 開根號:√16 = 4
- 絕對值:|-5.5| = 5.5
- 幫助:顯示可用操作
Available Tools = ListToolsResult[tools=[Tool[name=add, description=Add two numbers together, ...], ...]]
Add Result = CallToolResult[content=[TextContent[text="5,00 + 3,00 = 8,00"]], isError=false]
Subtract Result = CallToolResult[content=[TextContent[text="10,00 - 4,00 = 6,00"]], isError=false]
Multiply Result = CallToolResult[content=[TextContent[text="6,00 * 7,00 = 42,00"]], isError=false]
Divide Result = CallToolResult[content=[TextContent[text="20,00 / 4,00 = 5,00"]], isError=false]
Power Result = CallToolResult[content=[TextContent[text="2,00 ^ 8,00 = 256,00"]], isError=false]
Square Root Result = CallToolResult[content=[TextContent[text="√16,00 = 4,00"]], isError=false]
Absolute Result = CallToolResult[content=[TextContent[text="|-5,50| = 5,50"]], isError=false]
Help = CallToolResult[content=[TextContent[text="Basic 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..."]], isError=false]
注意:結尾可能會看到 Maven 關於殘留執行緒的警告,這是反應式應用程式的正常現象,並不表示錯誤。
var transport = new WebFluxSseClientTransport(WebClient.builder().baseUrl("http://localhost:8080"));這段程式碼建立一個 SSE(Server-Sent Events)傳輸,連接到計算機伺服器。
var client = McpClient.sync(this.transport).build();
client.initialize();建立同步的 MCP 客戶端並初始化連線。
CallToolResult resultAdd = client.callTool(new CallToolRequest("add", Map.of("a", 5.0, "b", 3.0)));呼叫 "add" 工具,參數為 a=5.0 和 b=3.0。
若出現連線錯誤,請確認第 01 章的計算機伺服器已啟動:
Error: Connection refused
解決方案:先啟動計算機伺服器。
若 8080 埠號被佔用:
Error: Address already in use
解決方案:停止其他使用 8080 埠號的應用程式,或修改伺服器使用其他埠號。
若遇到建置錯誤:
.\mvnw clean install -DskipTests免責聲明:
本文件係使用 AI 翻譯服務 Co-op Translator 進行翻譯。雖然我們致力於確保準確性,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應視為權威來源。對於重要資訊,建議採用專業人工翻譯。我們不對因使用本翻譯而產生的任何誤解或誤釋負責。