1- # MCP 計算機入門教學
1+ # MCP 計算機教學初學者指南
22
33## 目錄
44
5- - [ 你將學到什麼 ] ( #你將學到什麼 )
6- - [ 先決條件 ] ( #先決條件 )
5+ - [ 你將學習什麼 ] ( #你將學習什麼 )
6+ - [ 前置條件 ] ( #前置條件 )
77- [ 了解專案結構] ( #了解專案結構 )
8- - [ 核心元件說明 ] ( #核心元件說明 )
9- - [ 1. 主要應用程式 ] ( #1-主要應用程式 )
8+ - [ 核心組件說明 ] ( #核心組件說明 )
9+ - [ 1. 主應用程式 ] ( #1-主應用程式 )
1010 - [ 2. 計算機服務] ( #2-計算機服務 )
11- - [ 3. 直接 MCP 客戶端 ] ( #3-直接-mcp-客戶端 )
12- - [ 4. AI 驅動的客戶端 ] ( #4-ai-驅動的客戶端 )
11+ - [ 3. 直接 MCP 用戶端 ] ( #3-直接-mcp-用戶端 )
12+ - [ 4. AI 驅動用戶端 ] ( #4-ai-驅動用戶端 )
1313- [ 執行範例] ( #執行範例 )
14- - [ 整體運作流程 ] ( #整體運作流程 )
15- - [ 接下來的步驟 ] ( #接下來的步驟 )
14+ - [ 整體運作原理 ] ( #整體運作原理 )
15+ - [ 後續步驟 ] ( #後續步驟 )
1616
17- ## 你將學到什麼
17+ ## 你將學習什麼
1818
19- 本教學將解釋如何使用模型上下文協定( Model Context Protocol, MCP) 建立一個計算機服務。你將了解:
19+ 本教學會說明如何使用模型上下文協定 ( Model Context Protocol, MCP) 建立一個計算機服務。你將了解:
2020
21- - 如何建立 AI 可用作工具的服務
22- - 如何設定與 MCP 服務的直接通訊
23- - AI 模型如何自動選擇使用哪個工具
21+ - 如何建立可供 AI 作為工具使用的服務
22+ - 如何設置與 MCP 服務的直接通訊
23+ - AI 模型如何自動選擇要使用的工具
2424- 直接協定呼叫與 AI 輔助互動的差異
2525
26- ## 先決條件
26+ ## 前置條件
2727
28- 開始之前,請確保你已具備 :
28+ 開始之前,請確定你已經有 :
2929- 安裝 Java 21 或以上版本
30- - 使用 Maven 進行相依管理
31- - 一個 Azure AI Foundry 模型部署(可用 ` azd up ` 佈署 — 參見 [ 第2章 ] ( ../../02-SetupDevEnvironment/getting-started-azure-openai.md ) )
32- - 已安裝並登入 [ Azure CLI] ( https://learn.microsoft.com/cli/azure/install-azure-cli ) ( ` az login ` ,無需 API 金鑰)
33- - 具備 Java 與 Spring Boot 的基本知識
30+ - 使用 Maven 來管理相依性
31+ - 部署 Azure AI Foundry 模型(使用 ` azd up ` 佈署 — 詳見 [ 第 2 章 ] ( ../../02-SetupDevEnvironment/getting-started-azure-openai.md ) )
32+ - 安裝 [ Azure CLI] ( https://learn.microsoft.com/cli/azure/install-azure-cli ) ,並以 ` az login ` 登入(無需金鑰認證)
33+ - 基本的 Java 與 Spring Boot 知識
3434
3535## 了解專案結構
3636
@@ -47,13 +47,13 @@ calculator/
4747 └── Bot.java # Simple chat interface
4848```
4949
50- ## 核心元件說明
50+ ## 核心組件說明
5151
52- ### 1. 主要應用程式
52+ ### 1. 主應用程式
5353
5454** 檔案:** ` McpServerApplication.java `
5555
56- 這是我們計算機服務的進入點。它是一個標準的 Spring Boot 應用程式,並有一個特別的設定 :
56+ 這是我們計算機服務的進入點。它是一個標準的 Spring Boot 應用程式,但有一個特別的新增 :
5757
5858``` java
5959@SpringBootApplication
@@ -70,16 +70,16 @@ public class McpServerApplication {
7070}
7171```
7272
73- ** 此程式做了什麼 :**
74- - 啟動一個運行在 8080 端口的 Spring Boot 網路伺服器
75- - 建立一個 ` ToolCallbackProvider ` ,使我們的計算機方法能作為 MCP 工具被使用
76- - ` @Bean ` 註解告訴 Spring 將它管理為其他元件可以使用的組件
73+ ** 功能說明 :**
74+ - 啟動一個位於 8080 端口的 Spring Boot 網頁伺服器
75+ - 建立一個 ` ToolCallbackProvider ` ,使我們的計算機方法可作為 MCP 工具使用
76+ - ` @Bean ` 註解讓 Spring 將此組件管理,供其他部分使用
7777
7878### 2. 計算機服務
7979
8080** 檔案:** ` CalculatorService.java `
8181
82- 這裡是所有計算發生的地方。每個方法用 ` @Tool ` 標記,可透過 MCP 被調用 :
82+ 所有數學計算在此進行。每個方法皆以 ` @Tool ` 註解標示,使其可以被 MCP 呼叫 :
8383
8484``` java
8585@Service
@@ -97,37 +97,37 @@ public class CalculatorService {
9797 return formatResult(a, " -" , b, result);
9898 }
9999
100- // 更多計算器操作 ...
100+ // 更多計算機操作 ...
101101
102102 private String formatResult (double a , String operator , double b , double result ) {
103103 return String . format(" %.2f %s %.2f = %.2f" , a, operator, b, result);
104104 }
105105}
106106```
107107
108- ** 主要特點 :**
108+ ** 主要特色 :**
109109
110- 1 . ** ` @Tool ` 註解** :告訴 MCP 此方法可被外部客戶端呼叫
111- 2 . <strong >清晰描述 </strong >:每個工具都有描述,幫助 AI 模型判斷何時使用
112- 3 . <strong >統一回傳格式 </strong >:所有操作均回傳人類易讀的字串,例如 "5.00 + 3.00 = 8.00"
110+ 1 . ** ` @Tool ` 註解** :表示 MCP 可從外部呼叫該方法
111+ 2 . <strong >明確說明 </strong >:每個工具都有描述,有助 AI 模型理解何時使用
112+ 3 . <strong >一致回傳格式 </strong >:所有運算返回易懂的字串,如 "5.00 + 3.00 = 8.00"
1131134 . <strong >錯誤處理</strong >:除以零及負數開根號會回傳錯誤訊息
114114
115- ** 可用運算 :**
115+ ** 支援運算 :**
116116- ` add(a, b) ` - 加法
117- - ` subtract(a, b) ` - 減法(前減後 )
117+ - ` subtract(a, b) ` - 減法(第一數減第二數 )
118118- ` multiply(a, b) ` - 乘法
119- - ` divide(a, b) ` - 除法(含零除檢查 )
120- - ` power(base, exponent) ` - 次方
121- - ` squareRoot(number) ` - 開平方 (含負數檢查)
119+ - ` divide(a, b) ` - 除法(含零除錯誤檢查 )
120+ - ` power(base, exponent) ` - 次方運算
121+ - ` squareRoot(number) ` - 平方根 (含負數檢查)
122122- ` modulus(a, b) ` - 取餘數
123123- ` absolute(number) ` - 絕對值
124124- ` help() ` - 回傳所有運算說明
125125
126- ### 3. 直接 MCP 客戶端
126+ ### 3. 直接 MCP 用戶端
127127
128128** 檔案:** ` SDKClient.java `
129129
130- 此客戶端直接與 MCP 伺服器通訊,不使用 AI,手動呼叫特定計算功能 :
130+ 此用戶端直接與 MCP 伺服器通訊,不透過 AI。它手動呼叫特定計算功能 :
131131
132132``` java
133133public class SDKClient {
@@ -163,27 +163,27 @@ public class SDKClient {
163163}
164164```
165165
166- ** 此程式做了什麼 :**
167- 1 . 使用建造者模式連接到 ` http://localhost:8080 ` 的計算機伺服器
166+ ** 功能說明 :**
167+ 1 . 以建造者模式連接位於 ` http://localhost:8080 ` 的計算機伺服器
1681682 . 列出所有可用工具(即計算機功能)
169- 3 . 使用精確參數呼叫特定功能
169+ 3 . 以確切參數呼叫特定函式
1701704 . 直接列印結果
171171
172- ** 注意:** 本範例使用 Spring AI 1.1.0-SNAPSHOT 版本,引入了 ` WebFluxSseClientTransport ` 的建造者模式。若你使用較舊穩定版本,可能需使用直接建構子 。
172+ < strong > 注意:</ strong >範例中使用 Spring AI 1.1.0-SNAPSHOT 版本,該版本新增了 ` WebFluxSseClientTransport ` 的建造者模式。如果你使用的是舊版穩定版,可能需要使用直接建構函式 。
173173
174- ** 使用時機:** 當你已清楚知道要執行哪個計算,且想以程式化方式呼叫時 。
174+ < strong > 使用時機:</ strong >當你清楚知道要執行的計算,且想程式化呼叫時 。
175175
176- ### 4. AI 驅動的客戶端
176+ ### 4. AI 驅動用戶端
177177
178178** 檔案:** ` LangChain4jClient.java `
179179
180- 此客戶端使用 AI 模型(GPT-4o-mini)能自動決定使用哪些計算工具 :
180+ 這個用戶端使用 AI 模型(GPT-4o-mini),能自行決定使用哪些計算工具 :
181181
182182``` java
183183public class LangChain4jClient {
184184
185185 public static void main (String [] args ) throws Exception {
186- // 設定 AI 模型(Azure AI Foundry,通過 Microsoft Entra ID 進行無密鑰驗證)
186+ // 設置 AI 模型(Azure AI Foundry,通過 Microsoft Entra ID 進行無密鑰驗證)
187187 String endpoint = System . getenv(" AZURE_OPENAI_ENDPOINT" );
188188 String baseUrl = (endpoint. endsWith(" /" ) ? endpoint : endpoint + " /" ) + " openai/v1" ;
189189 String token = new DefaultAzureCredentialBuilder (). build()
@@ -198,26 +198,26 @@ public class LangChain4jClient {
198198 // 連接到我們的計算器 MCP 伺服器
199199 McpTransport transport = new HttpMcpTransport .Builder ()
200200 .sseUrl(" http://localhost:8080/sse" )
201- .logRequests(true ) // 顯示 AI 正在做什麼
201+ .logRequests(true ) // 顯示 AI 正在執行的操作
202202 .logResponses(true )
203203 .build();
204204
205205 McpClient mcpClient = new DefaultMcpClient .Builder ()
206206 .transport(transport)
207207 .build();
208208
209- // 讓 AI 能夠存取我們的計算器工具
209+ // 給 AI 訪問我們的計算器工具的權限
210210 ToolProvider toolProvider = McpToolProvider . builder()
211211 .mcpClients(List . of(mcpClient))
212212 .build();
213213
214- // 建立一個可以使用我們計算器的 AI 機械人
214+ // 創建一個可以使用我們計算器的 AI 機械人
215215 Bot bot = AiServices . builder(Bot . class)
216216 .chatLanguageModel(model)
217217 .toolProvider(toolProvider)
218218 .build();
219219
220- // 現在我們可以用自然語言要求 AI 進行計算
220+ // 現在我們可以用自然語言要求 AI 進行計算了
221221 String response = bot. chat(" Calculate the sum of 24.5 and 17.3 using the calculator service" );
222222 System . out. println(response);
223223
@@ -227,31 +227,31 @@ public class LangChain4jClient {
227227}
228228```
229229
230- ** 此程式做了什麼 :**
231- 1 . 利用你的 GitHub Token 建立 AI 模型連結
230+ ** 功能說明 :**
231+ 1 . 利用無金鑰認證(Microsoft Entra ID) 建立 AI 模型連線
2322322 . 將 AI 連接到我們的計算機 MCP 伺服器
233- 3 . 給 AI 存取全部計算機工具的權限
234- 4 . 允許自然語言請求 ,如「計算 24.5 與 17.3 的總和 」
233+ 3 . 讓 AI 可存取所有計算機工具
234+ 4 . 支援自然語言請求 ,如「計算 24.5 與 17.3 的和 」
235235
236- ** AI 自動 :**
237- - 理解你想要執行加法
236+ ** AI 會自動 :**
237+ - 理解你想要進行加法
238238- 選擇 ` add ` 工具
239239- 呼叫 ` add(24.5, 17.3) `
240- - 以自然語言回應結果
240+ - 以自然語言格式回傳結果
241241
242242## 執行範例
243243
244244### 步驟 1:啟動計算機伺服器
245245
246- 首先,登入並設定你的 Azure AI Foundry 端點(AI 客戶端必須,無 API 金鑰 ):
246+ 首先,登入並設定你的 Azure AI Foundry 端點(AI 用戶端所需,鍵無需密鑰 ):
247247
248- ** Windows: **
248+ ** Windows: **
249249``` cmd
250250az login
251251set AZURE_OPENAI_ENDPOINT=https://your-resource.openai.azure.com/
252252```
253253
254- ** Linux/macOS: **
254+ ** Linux/macOS: **
255255``` bash
256256az login
257257export AZURE_OPENAI_ENDPOINT=https://your-resource.openai.azure.com/
@@ -263,14 +263,14 @@ cd 04-PracticalSamples/calculator
263263mvn clean spring-boot:run
264264```
265265
266- 伺服器會運作於 ` http://localhost:8080 ` ,你應該會看到 :
266+ 伺服器將在 ` http://localhost:8080 ` 上啟動。你應該看到 :
267267```
268268Started McpServerApplication in X.XXX seconds
269269```
270270
271- ### 步驟 2:使用直接客戶端測試
271+ ### 步驟 2:用直接用戶端測試
272272
273- 在伺服器運行的同時,開一個< strong >新</ strong >終端機,執行直接 MCP 客戶端 :
273+ 在伺服器仍運行的情況下,於新的終端機執行直接 MCP 用戶端 :
274274``` bash
275275cd 04-PracticalSamples/calculator
276276mvn test-compile exec:java -Dexec.mainClass=" com.microsoft.mcp.sample.client.SDKClient" -Dexec.classpathScope=test
@@ -283,38 +283,37 @@ Add Result = 5.00 + 3.00 = 8.00
283283Square Root Result = √16.00 = 4.00
284284```
285285
286- ### 步驟 3:使用 AI 客戶端測試
286+ ### 步驟 3:用 AI 用戶端測試
287287
288288``` bash
289289mvn test-compile exec:java -Dexec.mainClass=" com.microsoft.mcp.sample.client.LangChain4jClient" -Dexec.classpathScope=test
290290```
291291
292- 你會看到 AI 自動使用工具 :
292+ 你會看到 AI 自動使用工具的過程 :
293293```
294294The sum of 24.5 and 17.3 is 41.8.
295295The square root of 144 is 12.
296296```
297297
298298### 步驟 4:關閉 MCP 伺服器
299299
300- 測試完畢,於 AI 客戶端終端按 ` Ctrl+C ` 停止,MCP 伺服器會繼續執行直到你手動停止。
301- 停止伺服器,在啟動它的終端機按 ` Ctrl+C ` 。
300+ 測試完成後,按 ` Ctrl+C ` 即可停止 AI 用戶端。MCP 伺服器會繼續執行,直到你在運行伺服器的終端機中按 ` Ctrl+C ` 停止它。
302301
303- ## 整體運作流程
302+ ## 整體運作原理
304303
305- 以下為當你問 AI「5 + 3 等於多少?」的完整流程 :
304+ 以下是你問 AI 「5 + 3 等於多少?」時的完整流程 :
306305
307- 1 . <strong >你</strong > 用自然語言向 AI 提問
308- 2 . ** AI** 分析請求,判斷你想要加法
306+ 1 . <strong >你</strong > 用自然語言提出問題
307+ 2 . ** AI** 分析請求,判斷你要做加法
3093083 . ** AI** 呼叫 MCP 伺服器:` add(5.0, 3.0) `
310- 4 . <strong >計算機服務</strong > 執行計算 :` 5.0 + 3.0 = 8.0 `
311- 5 . <strong >計算機服務</strong > 回傳結果 :` "5.00 + 3.00 = 8.00" `
312- 6 . ** AI** 接收結果並組成自然語言回應
313- 7 . <strong >你</strong > 收到: 「5 和 3 的總和是 8」
309+ 4 . <strong >計算機服務</strong > 執行 :` 5.0 + 3.0 = 8.0 `
310+ 5 . <strong >計算機服務</strong > 回傳 :` "5.00 + 3.00 = 8.00" `
311+ 6 . ** AI** 收到結果並組成自然語言回答
312+ 7 . <strong >你</strong > 得到: 「5 加 3 的和是 8」
314313
315- ## 接下來的步驟
314+ ## 後續步驟
316315
317- 更多範例請參考 [ 第 04 章:實際範例 ] ( ../README.md )
316+ 更多範例,請參閱 [ 第 04 章:實務範例 ] ( ../README.md )
318317
319318---
320319
0 commit comments