این پروژه نشان میدهد چگونه یک کلاینت جاوا بسازیم که به سرور MCP (پروتکل مدل کانتکست) متصل شده و با آن تعامل داشته باشد. در این مثال، به سرور ماشین حساب از فصل ۰۱ متصل میشویم و عملیات مختلف ریاضی را انجام میدهیم.
قبل از اجرای این کلاینت، باید:
-
سرور ماشین حساب را از فصل ۰۱ راهاندازی کنید:
- به دایرکتوری سرور ماشین حساب بروید:
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در حال اجرا باشد
- به دایرکتوری سرور ماشین حساب بروید:
-
جاوا ۲۱ یا بالاتر روی سیستم شما نصب باشد
-
Maven (از طریق Maven Wrapper شامل شده است)
SDKClient یک برنامه جاوا است که نشان میدهد چگونه:
- با استفاده از انتقال 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 - فهرست ابزارها - نمایش تمام عملیاتهای موجود ماشین حساب
- انجام محاسبات:
- جمع: ۵ + ۳ = ۸
- تفریق: ۱۰ - ۴ = ۶
- ضرب: ۶ × ۷ = ۴۲
- تقسیم: ۲۰ ÷ ۴ = ۵
- توان: ۲^۸ = ۲۵۶
- جذر: √۱۶ = ۴
- قدر مطلق: |-۵.۵| = ۵.۵
- راهنما: نمایش عملیاتهای موجود
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 فراخوانی میکند.
اگر خطاهای اتصال دریافت کردید، مطمئن شوید سرور ماشین حساب از فصل ۰۱ در حال اجرا است:
Error: Connection refused
راهحل: ابتدا سرور ماشین حساب را راهاندازی کنید.
اگر پورت ۸۰۸۰ مشغول است:
Error: Address already in use
راهحل: برنامههای دیگر که از پورت ۸۰۸۰ استفاده میکنند را متوقف کنید یا سرور را طوری تنظیم کنید که از پورت دیگری استفاده کند.
اگر با خطاهای ساخت مواجه شدید:
.\mvnw clean install -DskipTestsسلب مسئولیت:
این سند با استفاده از سرویس ترجمه هوش مصنوعی Co-op Translator ترجمه شده است. در حالی که ما در تلاش برای دقت هستیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است حاوی خطاها یا نادرستیهایی باشند. سند اصلی به زبان بومی خود باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، ترجمه حرفهای انسانی توصیه میشود. ما مسئول هیچ گونه سوءتفاهم یا تفسیر نادرستی که از استفاده از این ترجمه ناشی شود، نیستیم.