MCP Calculator Tutorial para sa mga Nagsisimula
July 3, 2026 · View on GitHub
Talaan ng Nilalaman
- Ano ang Iyong Matututunan
- Mga Kinakailangan
- Pag-unawa sa Istruktura ng Proyekto
- Paliwanag ng Pangunahing Mga Bahagi
- Pagpapatakbo ng mga Halimbawa
- Paano Ito Gumagana nang Sama-sama
- Mga Susunod na Hakbang
Ano ang Iyong Matututunan
Ipinaliwanag ng tutorial na ito kung paano gumawa ng calculator service gamit ang Model Context Protocol (MCP). Maiintindihan mo:
- Paano gumawa ng service na maaaring gamitin ng AI bilang kasangkapan
- Paano mag-set up ng direktang komunikasyon sa mga MCP service
- Paano awtomatikong pipili ang mga AI model kung aling mga kasangkapan ang gagamitin
- Ang pagkakaiba ng direktang mga tawag sa protocol at mga interaksyon na may tulong ng AI
Mga Kinakailangan
Bago magsimula, tiyakin na mayroon kang:
- Java 21 o mas mataas na naka-install
- Maven para sa pamamahala ng dependencies
- Isang Azure AI Foundry model deployment (i-provision gamit ang
azd up— tingnan ang Kabanata 2) - Ang Azure CLI, naka-login gamit ang
az login(keyless auth) - Pangunahing kaalaman sa Java at Spring Boot
Pag-unawa sa Istruktura ng Proyekto
May ilang mahahalagang file ang proyekto ng calculator:
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
Paliwanag ng Pangunahing Mga Bahagi
1. Pangunahing Aplikasyon
File: McpServerApplication.java
Ito ang entry point ng ating calculator service. Isa itong karaniwang Spring Boot application na may isang espesyal na dagdag:
@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();
}
}
Ginagawa nito:
- Pinapatakbo ang isang Spring Boot web server sa port 8080
- Lumilikha ng
ToolCallbackProviderna ginagawa ang mga method ng calculator nating magagamit bilang mga MCP tool - Ang
@Beanannotation ay nagsasabi sa Spring na pamahalaan ito bilang isang bahagi na magagamit ng ibang bahagi
2. Calculator Service
File: CalculatorService.java
Dito nangyayari lahat ng matematika. Bawat method ay may markang @Tool para magamit sa pamamagitan ng 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);
}
// Maraming mga operasyon ng calculator pa...
private String formatResult(double a, String operator, double b, double result) {
return String.format("%.2f %s %.2f = %.2f", a, operator, b, result);
}
}
Mga Pangunahing Tampok:
@ToolAnnotation: Sinasabi nito sa MCP na maaaring tawagin ang method na ito ng panlabas na mga client- Maliwanag na mga Deskripsyon: Ang bawat tool ay may deskripsyon na tumutulong sa AI models na maintindihan kung kailan ito gagamitin
- Pare-parehong Format ng Pagbabalik: Lahat ng operasyon ay nagbabalik ng mga string na madaling maintindihan, tulad ng "5.00 + 3.00 = 8.00"
- Pag-handle ng Error: Ang paghahati sa zero at mga negatibong square root ay nagbabalik ng mga mensahe ng error
Mga Magagamit na Operasyon:
add(a, b)- Nagdaragdag ng dalawang numerosubtract(a, b)- Nagbabawas ng pangalawa mula sa unamultiply(a, b)- Nagmumultiply ng dalawang numerodivide(a, b)- Naghahati ng una sa pangalawa (may check kung zero)power(base, exponent)- Itinaas ang base sa exponentsquareRoot(number)- Kinakalkula ang square root (may check kung negatibo)modulus(a, b)- Nagbabalik ng remainder ng paghahatiabsolute(number)- Nagbabalik ng absolute valuehelp()- Nagbabalik ng impormasyon tungkol sa lahat ng operasyon
3. Direktang MCP Client
File: SDKClient.java
Ang client na ito ay nakikipag-usap nang direkta sa MCP server nang hindi gumagamit ng AI. Manu-mano nitong tinatawagan ang mga partikular na calculator function:
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();
// Ilista ang mga magagamit na kasangkapan
ListToolsResult toolsList = client.listTools();
System.out.println("Available Tools = " + toolsList);
// Tawagan ang mga tiyak na function ng calculator
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();
}
}
Ginagawa nito:
- Kumokonekta sa calculator server sa
http://localhost:8080gamit ang builder pattern - Ipinapakita lahat ng magagamit na tools (mga function ng calculator natin)
- Tinutawag ang mga partikular na function na may eksaktong mga parameter
- Ipiniprinta ang mga resulta nang direkta
Tandaan: Ang halimbawang ito ay gumagamit ng Spring AI 1.1.0-SNAPSHOT dependency, na nagpakilala ng builder pattern para sa WebFluxSseClientTransport. Kung gumagamit ka ng mas luma at stable na bersyon, maaaring kailanganin mong gamitin ang direktang constructor.
Kailan gagamitin ito: Kapag alam mo na eksakto kung ano ang kalkulasyon na gusto mong gawin at gusto mo itong tawagin nang programmatically.
4. AI-Powered Client
File: LangChain4jClient.java
Ang client na ito ay gumagamit ng AI model (GPT-4o-mini) na kayang awtomatikong pumili kung anong mga calculator tool ang gagamitin:
public class LangChain4jClient {
public static void main(String[] args) throws Exception {
// I-set up ang AI model (Azure AI Foundry, keyless auth sa pamamagitan ng 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();
// Kumonekta sa aming calculator MCP server
McpTransport transport = new HttpMcpTransport.Builder()
.sseUrl("http://localhost:8080/sse")
.logRequests(true) // Ipinapakita kung ano ang ginagawa ng AI
.logResponses(true)
.build();
McpClient mcpClient = new DefaultMcpClient.Builder()
.transport(transport)
.build();
// Bigyan ang AI ng access sa aming mga calculator tools
ToolProvider toolProvider = McpToolProvider.builder()
.mcpClients(List.of(mcpClient))
.build();
// Gumawa ng AI bot na kayang gumamit ng aming calculator
Bot bot = AiServices.builder(Bot.class)
.chatLanguageModel(model)
.toolProvider(toolProvider)
.build();
// Ngayon maaari na nating hilingin sa AI na gumawa ng mga kalkulasyon sa natural na wika
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);
}
}
Ginagawa nito:
- Lumilikha ng AI model connection gamit ang keyless authentication (Microsoft Entra ID)
- Kinokonekta ang AI sa ating calculator MCP server
- Pinapayagan ang AI na ma-access ang lahat ng calculator tools natin
- Pinapayagan ang mga natural na kahilingan sa wika tulad ng "Calculate the sum of 24.5 and 17.3"
Awtomatikong ginagawa ng AI:
- Naiintindihan nitong gusto mong magdagdag ng mga numero
- Pinipili ang
addtool - Tinutawag ang
add(24.5, 17.3) - Ibinabalik ang resulta sa natural na tugon
Pagpapatakbo ng mga Halimbawa
Hakbang 1: Simulan ang Calculator Server
Una, mag-login at itakda ang iyong Azure AI Foundry endpoint (kailangan para sa AI client — keyless auth, walang API key):
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/
Simulan ang server:
cd 04-PracticalSamples/calculator
mvn clean spring-boot:run
Magsisimula ang server sa http://localhost:8080. Makikita mo:
Started McpServerApplication in X.XXX seconds
Hakbang 2: Subukan gamit ang Direktang Client
Sa isang BAGONG terminal habang tumatakbo pa ang Server, patakbuhin ang direktang MCP client:
cd 04-PracticalSamples/calculator
mvn test-compile exec:java -Dexec.mainClass="com.microsoft.mcp.sample.client.SDKClient" -Dexec.classpathScope=test
Makikita mo ang output tulad ng:
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
Hakbang 3: Subukan gamit ang AI Client
mvn test-compile exec:java -Dexec.mainClass="com.microsoft.mcp.sample.client.LangChain4jClient" -Dexec.classpathScope=test
Makikita mong awtomatikong gumagamit ang AI ng mga tools:
The sum of 24.5 and 17.3 is 41.8.
The square root of 144 is 12.
Hakbang 4: Isara ang MCP Server
Kapag tapos ka na sa pagsubok, maaari mong itigil ang AI client sa pamamagitan ng pagpindot ng Ctrl+C sa terminal nito. Mananatiling tumatakbo ang MCP server hanggang mapatay mo ito.
Para itigil ang server, pindutin ang Ctrl+C sa terminal kung saan ito tumatakbo.
Paano Ito Gumagana nang Sama-sama
Narito ang kumpletong daloy kapag tinanong mo ang AI ng "Ano ang 5 + 3?":
- Ikaw ang nagtatanong sa AI gamit ang natural na wika
- AI ang nagsusuri ng iyong kahilingan at napagtanto mo gusto mo ng addition
- AI ang tumatawag sa MCP server:
add(5.0, 3.0) - Calculator Service ang nagsasagawa:
5.0 + 3.0 = 8.0 - Calculator Service ay nagbabalik ng:
"5.00 + 3.00 = 8.00" - AI ay tumatanggap ng resulta at bumubuo ng natural na tugon
- Ikaw ay makakuha ng: "Ang suma ng 5 at 3 ay 8"
Mga Susunod na Hakbang
Para sa higit pang mga halimbawa, tingnan ang Kabanata 04: Praktikal na mga halimbawa
Pagtatanggi: Ang dokumentong ito ay isinalin gamit ang serbisyo ng AI translation na Co-op Translator. Bagama't nagsusumikap kami para sa katumpakan, pakatandaan na ang awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na pangunahing sanggunian. Para sa mahahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang maling pagkakaintindi o maling interpretasyon na nagmula sa paggamit ng pagsasaling ito.