פרויקט זה מדגים כיצד ליצור לקוח 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 or higher installed on your system
-
Maven (included via Maven Wrapper)
The SDKClient היא אפליקציית Java שמדגימה כיצד:
- להתחבר לשרת MCP באמצעות Server-Sent Events (SSE)
- לרשום את הכלים הזמינים מהשרת
- לקרוא לפונקציות מחשבון שונות מרחוק
- לטפל בתגובות ולהציג תוצאות
הלקוח משתמש במסגרת 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- The main client interfaceWebFluxSseClientTransport- תחבורה מסוג SSE לתקשורת מבוססת רשת- סכמות פרוטוקול MCP וסוגי בקשות/תגובות
בנה את הפרויקט באמצעות Maven wrapper:
.\mvnw clean installjava -jar .\target\calculator-client-0.0.1-SNAPSHOT.jarהערה: ודא ששרת המחשבון פועל בכתובת http://localhost:8080 before executing any of these commands.
When you run the client, it will:
- Connect to the calculator server at
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 -DskipTestsPenafian:
Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI Co-op Translator. Walaupun kami berusaha untuk ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang sahih. Untuk maklumat penting, terjemahan profesional oleh manusia adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini.