โปรเจกต์นี้แสดงวิธีการสร้าง Java client ที่เชื่อมต่อและโต้ตอบกับ MCP (Model Context Protocol) server ในตัวอย่างนี้ เราจะเชื่อมต่อกับเซิร์ฟเวอร์เครื่องคิดเลขจากบทที่ 01 และทำการคำนวณทางคณิตศาสตร์ต่างๆ
ก่อนรัน client นี้ คุณต้อง:
-
เริ่มต้น Calculator Server จากบทที่ 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 ที่แสดงวิธีการ:
- เชื่อมต่อกับ MCP server โดยใช้ Server-Sent Events (SSE) transport
- แสดงรายการเครื่องมือที่มีในเซิร์ฟเวอร์
- เรียกใช้ฟังก์ชันเครื่องคิดเลขต่างๆ จากระยะไกล
- จัดการกับการตอบกลับและแสดงผลลัพธ์
client ใช้ Spring AI MCP framework เพื่อ:
- สร้างการเชื่อมต่อ: สร้าง WebFlux SSE client transport เพื่อเชื่อมต่อกับเซิร์ฟเวอร์เครื่องคิดเลข
- เริ่มต้น client: ตั้งค่า MCP client และสร้างการเชื่อมต่อ
- ค้นหาเครื่องมือ: แสดงรายการการดำเนินการเครื่องคิดเลขทั้งหมดที่มี
- ดำเนินการคำนวณ: เรียกใช้ฟังก์ชันทางคณิตศาสตร์ต่างๆ ด้วยข้อมูลตัวอย่าง
- แสดงผลลัพธ์: แสดงผลลัพธ์ของแต่ละการคำนวณ
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- อินเทอร์เฟซ client หลักWebFluxSseClientTransport- SSE transport สำหรับการสื่อสารผ่านเว็บ- สคีมาและประเภทคำขอ/คำตอบของโปรโตคอล MCP
สร้างโปรเจกต์โดยใช้ Maven wrapper:
.\mvnw clean installjava -jar .\target\calculator-client-0.0.1-SNAPSHOT.jarหมายเหตุ: ตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์เครื่องคิดเลขกำลังรันอยู่ที่ http://localhost:8080 ก่อนสั่งรันคำสั่งเหล่านี้
เมื่อรัน client มันจะ:
- เชื่อมต่อ กับเซิร์ฟเวอร์เครื่องคิดเลขที่
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 เกี่ยวกับเธรดที่ยังทำงานอยู่ตอนจบ - นี่เป็นเรื่องปกติของแอปพลิเคชันแบบ reactive และไม่ใช่ข้อผิดพลาด
var transport = new WebFluxSseClientTransport(WebClient.builder().baseUrl("http://localhost:8080"));ส่วนนี้สร้าง SSE (Server-Sent Events) transport ที่เชื่อมต่อกับเซิร์ฟเวอร์เครื่องคิดเลข
var client = McpClient.sync(this.transport).build();
client.initialize();สร้าง MCP client แบบ synchronous และเริ่มต้นการเชื่อมต่อ
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ข้อจำกัดความรับผิดชอบ:
เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษาอัตโนมัติ Co-op Translator แม้เราจะพยายามให้ความถูกต้องสูงสุด แต่โปรดทราบว่าการแปลอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาต้นทางถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลโดยผู้เชี่ยวชาญมนุษย์ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความผิดใด ๆ ที่เกิดจากการใช้การแปลนี้