Tutorial Kalkulator MCP untuk Pemula
July 3, 2026 · View on GitHub
Daftar Isi
- Apa yang Akan Anda Pelajari
- Prasyarat
- Memahami Struktur Proyek
- Komponen Inti Dijelaskan
- Menjalankan Contoh
- Cara Kerja Keseluruhan
- Langkah Selanjutnya
Apa yang Akan Anda Pelajari
Tutorial ini menjelaskan cara membangun layanan kalkulator menggunakan Model Context Protocol (MCP). Anda akan memahami:
- Cara membuat layanan yang bisa digunakan AI sebagai alat
- Cara mengatur komunikasi langsung dengan layanan MCP
- Bagaimana model AI dapat secara otomatis memilih alat yang akan digunakan
- Perbedaan antara panggilan protokol langsung dan interaksi yang dibantu AI
Prasyarat
Sebelum memulai, pastikan Anda memiliki:
- Java 21 atau lebih tinggi terpasang
- Maven untuk manajemen dependensi
- Deployment model Azure AI Foundry (siapkan dengan
azd up— lihat Bab 2) - Azure CLI, sudah login dengan
az login(otentikasi tanpa kunci) - Pemahaman dasar tentang Java dan Spring Boot
Memahami Struktur Proyek
Proyek kalkulator memiliki beberapa file penting:
calculator/
├── src/main/java/com/microsoft/mcp/sample/server/
│ ├── McpServerApplication.java # Main Spring Boot app
│ └── service/CalculatorService.java # Calculator operations
└── src/test/java/com/microsoft/mcp/sample/client/
├── SDKClient.java # Direct MCP communication
├── LangChain4jClient.java # AI-powered client
└── Bot.java # Simple chat interface
Komponen Inti Dijelaskan
1. Aplikasi Utama
File: McpServerApplication.java
Ini adalah titik masuk layanan kalkulator kita. Ini adalah aplikasi Spring Boot standar dengan satu tambahan spesial:
@SpringBootApplication
public class McpServerApplication {
public static void main(String[] args) {
SpringApplication.run(McpServerApplication.class, args);
}
@Bean
public ToolCallbackProvider calculatorTools(CalculatorService calculator) {
return MethodToolCallbackProvider.builder().toolObjects(calculator).build();
}
}
Fungsi ini:
- Memulai server web Spring Boot pada port 8080
- Membuat
ToolCallbackProvideryang membuat metode kalkulator kita tersedia sebagai alat MCP - Anotasi
@Beanmemberi tahu Spring untuk mengelola ini sebagai komponen yang dapat digunakan bagian lain
2. Layanan Kalkulator
File: CalculatorService.java
Di sinilah semua perhitungan dilakukan. Setiap metode diberi tanda dengan @Tool agar tersedia melalui MCP:
@Service
public class CalculatorService {
@Tool(description = "Add two numbers together")
public String add(double a, double b) {
double result = a + b;
return formatResult(a, "+", b, result);
}
@Tool(description = "Subtract the second number from the first number")
public String subtract(double a, double b) {
double result = a - b;
return formatResult(a, "-", b, result);
}
// Lebih banyak operasi kalkulator...
private String formatResult(double a, String operator, double b, double result) {
return String.format("%.2f %s %.2f = %.2f", a, operator, b, result);
}
}
Fitur utama:
- Anotasi
@Tool: Ini memberi tahu MCP bahwa metode ini dapat dipanggil oleh klien eksternal - Deskripsi Jelas: Setiap alat memiliki deskripsi yang membantu model AI memahami kapan harus menggunakannya
- Format Hasil Konsisten: Semua operasi mengembalikan string yang mudah dibaca seperti "5.00 + 3.00 = 8.00"
- Penanganan Kesalahan: Pembagian dengan nol dan akar kuadrat negatif mengembalikan pesan kesalahan
Operasi Tersedia:
add(a, b)- Menjumlahkan dua angkasubtract(a, b)- Mengurangkan angka kedua dari pertamamultiply(a, b)- Mengalikan dua angkadivide(a, b)- Membagi angka pertama dengan kedua (dengan pengecekan nol)power(base, exponent)- Memangkatkan basis dengan eksponensquareRoot(number)- Menghitung akar kuadrat (dengan pengecekan negatif)modulus(a, b)- Mengembalikan sisa pembagianabsolute(number)- Mengembalikan nilai absoluthelp()- Mengembalikan informasi tentang semua operasi
3. Klien MCP Langsung
File: SDKClient.java
Klien ini berbicara langsung ke server MCP tanpa menggunakan AI. Ini memanggil fungsi kalkulator tertentu secara manual:
public class SDKClient {
public static void main(String[] args) {
McpClientTransport transport = WebFluxSseClientTransport.builder(
WebClient.builder().baseUrl("http://localhost:8080")
).build();
new SDKClient(transport).run();
}
public void run() {
var client = McpClient.sync(this.transport).build();
client.initialize();
// Daftar alat yang tersedia
ListToolsResult toolsList = client.listTools();
System.out.println("Available Tools = " + toolsList);
// Panggil fungsi kalkulator tertentu
CallToolResult resultAdd = client.callTool(
new CallToolRequest("add", Map.of("a", 5.0, "b", 3.0))
);
System.out.println("Add Result = " + resultAdd);
CallToolResult resultSqrt = client.callTool(
new CallToolRequest("squareRoot", Map.of("number", 16.0))
);
System.out.println("Square Root Result = " + resultSqrt);
client.closeGracefully();
}
}
Fungsi ini:
- Terhubung ke server kalkulator di
http://localhost:8080menggunakan pola builder - Mendaftar semua alat yang tersedia (fungsi kalkulator kita)
- Memanggil fungsi spesifik dengan parameter tepat
- Mencetak hasil secara langsung
Catatan: Contoh ini menggunakan dependensi Spring AI 1.1.0-SNAPSHOT, yang memperkenalkan pola builder untuk WebFluxSseClientTransport. Jika Anda menggunakan versi stabil lama, Anda mungkin perlu menggunakan konstruktor langsung.
Kapan digunakan: Ketika Anda tahu persis perhitungan apa yang ingin dilakukan dan ingin memanggilnya secara programatik.
4. Klien Berbasis AI
File: LangChain4jClient.java
Klien ini menggunakan model AI (GPT-4o-mini) yang dapat secara otomatis memutuskan alat kalkulator mana yang akan digunakan:
public class LangChain4jClient {
public static void main(String[] args) throws Exception {
// Atur model AI (Azure AI Foundry, otentikasi tanpa kunci melalui Microsoft Entra ID)
String endpoint = System.getenv("AZURE_OPENAI_ENDPOINT");
String baseUrl = (endpoint.endsWith("/") ? endpoint : endpoint + "/") + "openai/v1";
String token = new DefaultAzureCredentialBuilder().build()
.getToken(new TokenRequestContext().addScopes("https://ai.azure.com/.default"))
.block().getToken();
ChatLanguageModel model = OpenAiOfficialChatModel.builder()
.baseUrl(baseUrl)
.apiKey(token)
.modelName("gpt-4o-mini")
.build();
// Sambungkan ke server kalkulator MCP kami
McpTransport transport = new HttpMcpTransport.Builder()
.sseUrl("http://localhost:8080/sse")
.logRequests(true) // Menampilkan apa yang sedang dilakukan AI
.logResponses(true)
.build();
McpClient mcpClient = new DefaultMcpClient.Builder()
.transport(transport)
.build();
// Beri AI akses ke alat kalkulator kami
ToolProvider toolProvider = McpToolProvider.builder()
.mcpClients(List.of(mcpClient))
.build();
// Buat bot AI yang dapat menggunakan kalkulator kami
Bot bot = AiServices.builder(Bot.class)
.chatLanguageModel(model)
.toolProvider(toolProvider)
.build();
// Sekarang kita dapat meminta AI melakukan perhitungan dalam bahasa alami
String response = bot.chat("Calculate the sum of 24.5 and 17.3 using the calculator service");
System.out.println(response);
response = bot.chat("What's the square root of 144?");
System.out.println(response);
}
}
Fungsi ini:
- Membuat koneksi model AI menggunakan otentikasi tanpa kunci (Microsoft Entra ID)
- Menghubungkan AI ke server MCP kalkulator kita
- Memberikan AI akses ke semua alat kalkulator kita
- Memungkinkan permintaan dengan bahasa alami seperti "Hitung jumlah 24.5 dan 17.3"
AI secara otomatis:
- Memahami Anda ingin menjumlahkan angka
- Memilih alat
add - Memanggil
add(24.5, 17.3) - Mengembalikan hasil dalam respons alami
Menjalankan Contoh
Langkah 1: Mulai Server Kalkulator
Pertama, masuk dan setel endpoint Azure AI Foundry Anda (diperlukan untuk klien AI — otentikasi tanpa kunci, tanpa kunci API):
Windows:
az login
set AZURE_OPENAI_ENDPOINT=https://your-resource.openai.azure.com/
Linux/macOS:
az login
export AZURE_OPENAI_ENDPOINT=https://your-resource.openai.azure.com/
Mulai server:
cd 04-PracticalSamples/calculator
mvn clean spring-boot:run
Server akan berjalan di http://localhost:8080. Anda akan melihat:
Started McpServerApplication in X.XXX seconds
Langkah 2: Tes dengan Klien Langsung
Di terminal BARU dengan server masih berjalan, jalankan klien MCP langsung:
cd 04-PracticalSamples/calculator
mvn test-compile exec:java -Dexec.mainClass="com.microsoft.mcp.sample.client.SDKClient" -Dexec.classpathScope=test
Anda akan melihat output seperti:
Available Tools = [add, subtract, multiply, divide, power, squareRoot, modulus, absolute, help]
Add Result = 5.00 + 3.00 = 8.00
Square Root Result = √16.00 = 4.00
Langkah 3: Tes dengan Klien AI
mvn test-compile exec:java -Dexec.mainClass="com.microsoft.mcp.sample.client.LangChain4jClient" -Dexec.classpathScope=test
Anda akan melihat AI secara otomatis menggunakan alat:
The sum of 24.5 and 17.3 is 41.8.
The square root of 144 is 12.
Langkah 4: Tutup Server MCP
Saat selesai pengujian, Anda dapat menghentikan klien AI dengan menekan Ctrl+C di terminal-nya. Server MCP akan terus berjalan sampai Anda hentikan.
Untuk menghentikan server, tekan Ctrl+C di terminal tempat server berjalan.
Cara Kerja Keseluruhan
Berikut alur lengkap saat Anda bertanya pada AI "Berapa 5 + 3?":
- Anda mengajukan pertanyaan ke AI dalam bahasa alami
- AI menganalisis permintaan dan menyadari Anda ingin penjumlahan
- AI memanggil server MCP:
add(5.0, 3.0) - Layanan Kalkulator melakukan:
5.0 + 3.0 = 8.0 - Layanan Kalkulator mengembalikan:
"5.00 + 3.00 = 8.00" - AI menerima hasil dan memformat respons alami
- Anda mendapatkan: "Jumlah dari 5 dan 3 adalah 8"
Langkah Selanjutnya
Untuk lebih banyak contoh, lihat Bab 04: Contoh Praktis
Penafian: Dokumen ini telah diterjemahkan menggunakan layanan terjemahan AI Co-op Translator. Meskipun kami berupaya untuk mencapai akurasi, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang sah. Untuk informasi penting, disarankan menggunakan terjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini.