הפרויקט הזה מדגים כיצד ליצור לקוח Java שמתחבר ומתקשר עם שרת MCP (Model Context Protocol). בדוגמה זו, נתחבר לשרת המחשבון מהפרק הראשון ונבצע פעולות מתמטיות שונות.
לפני הרצת הלקוח, יש לבצע את הפעולות הבאות:
-
הפעלת שרת המחשבון מהפרק הראשון:
- נווט לתיקיית שרת המחשבון:
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 שמדגים כיצד:
- להתחבר לשרת 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- ממשק הלקוח הראשיWebFluxSseClientTransport- תחבורה SSE לתקשורת מבוססת רשת- סכמות פרוטוקול MCP וסוגי בקשות/תגובות
בנה את הפרויקט באמצעות Maven wrapper:
.\mvnw clean installjava -jar .\target\calculator-client-0.0.1-SNAPSHOT.jar[!NOTE]: ודא ששרת המחשבון פועל בכתובת 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]
[!NOTE]: ייתכן שתראה אזהרות 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.
אם מתקבלות שגיאות חיבור, ודא ששרת המחשבון מהפרק הראשון פועל:
Error: Connection refused
פתרון: הפעל את שרת המחשבון תחילה.
אם הפורט 8080 תפוס:
Error: Address already in use
פתרון: עצור יישומים אחרים שמשתמשים בפורט 8080 או שנה את הפורט בשרת.
אם נתקלת בשגיאות בנייה:
.\mvnw clean install -DskipTestsכתב ויתור:
מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית Co-op Translator. למרות שאנו שואפים לדיוק, יש לקחת בחשבון כי תרגומים אוטומטיים עלולים להכיל שגיאות או אי-דיוקים. המסמך המקורי בשפת המקור שלו נחשב למקור הסמכותי. למידע קריטי מומלץ להשתמש בתרגום מקצועי על ידי מתרגם אנושי. אנו לא נושאים באחריות לכל אי-הבנה או פרשנות שגויה הנובעת משימוש בתרגום זה.