LimKyunghyuk/MyMcpServer
If you are the rightful owner of MyMcpServer and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
This project is a Java-based implementation of a Model Context Protocol (MCP) server, providing a standardized interface for AI models and tools.
current_time
Returns the current date and time with an optional format parameter.
calculator
Performs basic mathematical operations such as add, subtract, multiply, and divide.
greeting
Greets the user with an optional language parameter.
MCP Server Example
μ΄ νλ‘μ νΈλ Javaλ‘ μ§μ ꡬνν Model Context Protocol (MCP) μλ² μμ μ λλ€.
κ°μ
MCP (Model Context Protocol)λ AI λͺ¨λΈκ³Ό λκ΅¬λ€ κ°μ νμ€νλ μΈν°νμ΄μ€λ₯Ό μ 곡νλ νλ‘ν μ½μ λλ€. μ΄ μλ²λ λ€μκ³Ό κ°μ κΈ°λ₯μ μ 곡ν©λλ€:
- λꡬ (Tools): νμ¬ μκ° μ‘°ν, κ³μ°κΈ°, μΈμ¬ κΈ°λ₯
- 리μμ€ (Resources): μμ€ν μ 보, μλ² μν, μ€μ μ 보
- ν둬ννΈ (Prompts): μ½λ 리뷰, λ¬Έμ μμ½, κΈ°μ μ§λ¬Έ ν νλ¦Ώ
- λ‘κΉ : ꡬ쑰νλ λ‘κ·Έ λ©μμ§ μ§μ
μꡬμ¬ν
- Java 17 μ΄μ
- Maven 3.6 μ΄μ
- IntelliJ IDEA (κΆμ₯)
λΉλ λ° μ€ν
1. IntelliJμμ νλ‘μ νΈ μ΄κΈ°
- IntelliJ IDEAλ₯Ό μ€νν©λλ€
- νλ‘μ νΈ ν΄λλ₯Ό μ½λλ€
- Maven μμ‘΄μ±μ΄ μλμΌλ‘ λ€μ΄λ‘λλ©λλ€
2. μλ² μ€ν
IntelliJμμ μ€ν:
src/main/java/com/example/mcp/McpServerMain.java
νμΌμ μ½λλ€- ν΄λμ€ μ΄λ¦ μμ λ
Ήμ νμ΄νλ₯Ό ν΄λ¦νκ±°λ
Ctrl+Shift+F10
μ λλ¦ λλ€
ν°λ―Έλμμ μ€ν:
# Mavenμ ν΅ν μ€ν
mvn exec:java -Dexec.mainClass="com.example.mcp.McpServerMain"
# λλ JAR νμΌ μμ± ν μ€ν
mvn clean package
java -jar target/mcp-server-example-1.0.0.jar
3. ν μ€νΈ
ν μ€νΈ ν΄λΌμ΄μΈνΈλ₯Ό μ€ννμ¬ μλ² κΈ°λ₯μ νμΈ:
# ν
μ€νΈ ν΄λΌμ΄μΈνΈ μ€ν
mvn exec:java -Dexec.mainClass="com.example.mcp.TestClient"
λλ IntelliJμμ src/test/java/com/example/mcp/TestClient.java
λ₯Ό μ§μ μ€νν μ μμ΅λλ€.
μ 곡λλ κΈ°λ₯
λꡬ (Tools)
-
current_time: νμ¬ λ μ§μ μκ°μ λ°ν
- λ§€κ°λ³μ:
format
(μ νμ¬ν) - μκ° νμ μ§μ
- λ§€κ°λ³μ:
-
calculator: κΈ°λ³Έ μν κ³μ° μν
- λ§€κ°λ³μ:
a
(μ«μ),b
(μ«μ),operation
(add/subtract/multiply/divide)
- λ§€κ°λ³μ:
-
greeting: μ¬μ©μμκ² μΈμ¬
- λ§€κ°λ³μ:
name
(μ΄λ¦),language
(korean/english, μ νμ¬ν)
- λ§€κ°λ³μ:
리μμ€ (Resources)
- system://info: μμ€ν μ 보 (OS, Java λ²μ , λ©λͺ¨λ¦¬ μ¬μ©λ λ±)
- server://status: μλ² μν μ 보
- config://settings: μλ² μ€μ μ 보
ν둬ννΈ (Prompts)
- code_review: μ½λ 리뷰λ₯Ό μν ꡬ쑰νλ ν둬ννΈ
- document_summary: λ¬Έμ μμ½μ μν ν둬ννΈ
- tech_question: κΈ°μ μ§λ¬Έ λ΅λ³μ μν ν둬ννΈ
νλ‘μ νΈ κ΅¬μ‘°
MyMcpServer/
βββ src/
β βββ main/
β β βββ java/com/example/mcp/
β β β βββ McpServerMain.java # λ©μΈ μλ² ν΄λμ€
β β β βββ ToolRegistry.java # λꡬ λ±λ‘ λ° κ΄λ¦¬
β β β βββ ResourceRegistry.java # 리μμ€ λ±λ‘ λ° κ΄λ¦¬
β β β βββ PromptRegistry.java # ν둬ννΈ λ±λ‘ λ° κ΄λ¦¬
β β β βββ schema/ # MCP μ€ν€λ§ ν΄λμ€λ€
β β β βββ McpMessage.java # JSON-RPC λ©μμ§
β β β βββ McpError.java # μλ¬ μ μ
β β β βββ Tool.java # λꡬ μ€ν€λ§
β β β βββ Resource.java # 리μμ€ μ€ν€λ§
β β β βββ Prompt.java # ν둬ννΈ μ€ν€λ§
β β βββ resources/
β β βββ logback.xml # λ‘κΉ
μ€μ
β βββ test/
β βββ java/com/example/mcp/
β βββ TestClient.java # ν
μ€νΈ ν΄λΌμ΄μΈνΈ
βββ pom.xml # Maven μ€μ
βββ README.md # νλ‘μ νΈ μ€λͺ
μ
βββ .gitignore # Git 무μ νμΌ
MCP νλ‘ν μ½ κ΅¬ν
μ΄ νλ‘μ νΈλ MCP Java SDK λμ μ§μ ꡬνλ μ½λλ₯Ό μ¬μ©ν©λλ€:
- JSON-RPC 2.0: νμ€ JSON-RPC νλ‘ν μ½λ‘ ν΅μ
- STDIO μ μ‘: νμ€ μ μΆλ ₯μ ν΅ν ν΄λΌμ΄μΈνΈ-μλ² ν΅μ
- λΉλκΈ° μ²λ¦¬: μμ²μ λΉλκΈ°μ μΌλ‘ μ²λ¦¬
- μλ¬ νΈλ€λ§: νμ€ JSON-RPC μλ¬ μ½λ μ§μ
μ€μ
λ‘κΉ μ€μ
src/main/resources/logback.xml
νμΌμμ λ‘κΉ
λ 벨과 μΆλ ₯ νμμ μ‘°μ ν μ μμ΅λλ€:
- μ½μ μΆλ ₯κ³Ό νμΌ μΆλ ₯ λͺ¨λ μ§μ
- μΌλ³ λ‘κ·Έ νμΌ λ‘€λ§
- μ΅λ νμΌ ν¬κΈ° λ° λ³΄κ΄ κΈ°κ° μ€μ
μλ² μ€μ
μλ²μ κΈ°λ³Έ μ€μ μ McpServerMain
ν΄λμ€μμ λ³κ²½ν μ μμ΅λλ€:
- μλ² μ΄λ¦ λ° λ²μ
- μ§μν κΈ°λ₯ (tools, resources, prompts, logging)
νμ₯ λ°©λ²
μλ‘μ΄ λꡬ μΆκ°
ToolRegistry.java
μμ μλ‘μ΄Tool
κ°μ²΄λ₯Όtools
리μ€νΈμ μΆκ°handleToolCall()
λ©μλμ μλ‘μ΄ μΌμ΄μ€ μΆκ°- ν΄λΉ λꡬμ νΈλ€λ¬ λ©μλ ꡬν
μλ‘μ΄ λ¦¬μμ€ μΆκ°
ResourceRegistry.java
μμ μλ‘μ΄Resource
κ°μ²΄λ₯Όresources
리μ€νΈμ μΆκ°handleResourceRead()
λ©μλμ μλ‘μ΄ μΌμ΄μ€ μΆκ°- ν΄λΉ 리μμ€μ νΈλ€λ¬ λ©μλ ꡬν
μλ‘μ΄ ν둬ννΈ μΆκ°
PromptRegistry.java
μμ μλ‘μ΄Prompt
κ°μ²΄λ₯Όprompts
리μ€νΈμ μΆκ°handlePromptGet()
λ©μλμ μλ‘μ΄ μΌμ΄μ€ μΆκ°- ν΄λΉ ν둬ννΈμ νΈλ€λ¬ λ©μλ ꡬν
ν΄λΌμ΄μΈνΈ μ°κ²°
μ΄ MCP μλ²λ STDIO(νμ€ μ μΆλ ₯)λ₯Ό ν΅ν΄ ν΄λΌμ΄μΈνΈμ ν΅μ ν©λλ€:
JSON-RPC λ©μμ§ μμ
μ΄κΈ°ν μμ²:
{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {},
"clientInfo": {"name": "test-client", "version": "1.0.0"}
}
}
λꡬ νΈμΆ μμ²:
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "calculator",
"arguments": {"a": 10, "b": 5, "operation": "add"}
}
}
νΈλ¬λΈμν
μΌλ°μ μΈ λ¬Έμ
-
μμ‘΄μ± λ¬Έμ
- IntelliJμμ Maven μλ‘κ³ μΉ¨:
Ctrl+Shift+O
- ν°λ―Έλμμ:
mvn dependency:resolve
- IntelliJμμ Maven μλ‘κ³ μΉ¨:
-
μλ²κ° μμλμ§ μλ κ²½μ°
- Java 17 μ΄μμ΄ μ€μΉλμ΄ μλμ§ νμΈ
- IntelliJ νλ‘μ νΈ SDK μ€μ νμΈ
-
λ‘κ·Έ νμΌμ΄ μμ±λμ§ μλ κ²½μ°
logs/
λλ ν 리 μμ±:mkdir logs
- νμΌ μ°κΈ° κΆν νμΈ
λλ²κΉ
λλ²κΉ μ μν΄ λ‘κΉ λ 벨μ DEBUGλ‘ λ³κ²½:
<!-- logback.xmlμμ -->
<logger name="com.example.mcp" level="DEBUG" />
μ°Έκ³ μλ£
λΌμ΄μ μ€
μ΄ νλ‘μ νΈλ MIT λΌμ΄μ μ€λ₯Ό λ°λ¦ λλ€.