MyMcpServer

LimKyunghyuk/MyMcpServer

3.2

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.

Tools
  1. current_time

    Returns the current date and time with an optional format parameter.

  2. calculator

    Performs basic mathematical operations such as add, subtract, multiply, and divide.

  3. 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μ—μ„œ ν”„λ‘œμ νŠΈ μ—΄κΈ°

  1. IntelliJ IDEAλ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€
  2. ν”„λ‘œμ νŠΈ 폴더λ₯Ό μ—½λ‹ˆλ‹€
  3. Maven μ˜μ‘΄μ„±μ΄ μžλ™μœΌλ‘œ λ‹€μš΄λ‘œλ“œλ©λ‹ˆλ‹€

2. μ„œλ²„ μ‹€ν–‰

IntelliJμ—μ„œ μ‹€ν–‰:
  1. src/main/java/com/example/mcp/McpServerMain.java νŒŒμΌμ„ μ—½λ‹ˆλ‹€
  2. 클래슀 이름 μ˜†μ˜ 녹색 ν™”μ‚΄ν‘œλ₯Ό ν΄λ¦­ν•˜κ±°λ‚˜ 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)

  1. current_time: ν˜„μž¬ λ‚ μ§œμ™€ μ‹œκ°„μ„ λ°˜ν™˜

    • λ§€κ°œλ³€μˆ˜: format (선택사항) - μ‹œκ°„ ν˜•μ‹ μ§€μ •
  2. calculator: κΈ°λ³Έ μˆ˜ν•™ 계산 μˆ˜ν–‰

    • λ§€κ°œλ³€μˆ˜: a (숫자), b (숫자), operation (add/subtract/multiply/divide)
  3. greeting: μ‚¬μš©μžμ—κ²Œ 인사

    • λ§€κ°œλ³€μˆ˜: name (이름), language (korean/english, 선택사항)

λ¦¬μ†ŒμŠ€ (Resources)

  1. system://info: μ‹œμŠ€ν…œ 정보 (OS, Java 버전, λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰ λ“±)
  2. server://status: μ„œλ²„ μƒνƒœ 정보
  3. config://settings: μ„œλ²„ μ„€μ • 정보

ν”„λ‘¬ν”„νŠΈ (Prompts)

  1. code_review: μ½”λ“œ 리뷰λ₯Ό μœ„ν•œ κ΅¬μ‘°ν™”λœ ν”„λ‘¬ν”„νŠΈ
  2. document_summary: λ¬Έμ„œ μš”μ•½μ„ μœ„ν•œ ν”„λ‘¬ν”„νŠΈ
  3. 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)

ν™•μž₯ 방법

μƒˆλ‘œμš΄ 도ꡬ μΆ”κ°€

  1. ToolRegistry.javaμ—μ„œ μƒˆλ‘œμš΄ Tool 객체λ₯Ό tools λ¦¬μŠ€νŠΈμ— μΆ”κ°€
  2. handleToolCall() λ©”μ„œλ“œμ— μƒˆλ‘œμš΄ μΌ€μ΄μŠ€ μΆ”κ°€
  3. ν•΄λ‹Ή λ„κ΅¬μ˜ ν•Έλ“€λŸ¬ λ©”μ„œλ“œ κ΅¬ν˜„

μƒˆλ‘œμš΄ λ¦¬μ†ŒμŠ€ μΆ”κ°€

  1. ResourceRegistry.javaμ—μ„œ μƒˆλ‘œμš΄ Resource 객체λ₯Ό resources λ¦¬μŠ€νŠΈμ— μΆ”κ°€
  2. handleResourceRead() λ©”μ„œλ“œμ— μƒˆλ‘œμš΄ μΌ€μ΄μŠ€ μΆ”κ°€
  3. ν•΄λ‹Ή λ¦¬μ†ŒμŠ€μ˜ ν•Έλ“€λŸ¬ λ©”μ„œλ“œ κ΅¬ν˜„

μƒˆλ‘œμš΄ ν”„λ‘¬ν”„νŠΈ μΆ”κ°€

  1. PromptRegistry.javaμ—μ„œ μƒˆλ‘œμš΄ Prompt 객체λ₯Ό prompts λ¦¬μŠ€νŠΈμ— μΆ”κ°€
  2. handlePromptGet() λ©”μ„œλ“œμ— μƒˆλ‘œμš΄ μΌ€μ΄μŠ€ μΆ”κ°€
  3. ν•΄λ‹Ή ν”„λ‘¬ν”„νŠΈμ˜ ν•Έλ“€λŸ¬ λ©”μ„œλ“œ κ΅¬ν˜„

ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²°

이 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"}
  }
}

νŠΈλŸ¬λΈ”μŠˆνŒ…

일반적인 문제

  1. μ˜μ‘΄μ„± 문제

    • IntelliJμ—μ„œ Maven μƒˆλ‘œκ³ μΉ¨: Ctrl+Shift+O
    • ν„°λ―Έλ„μ—μ„œ: mvn dependency:resolve
  2. μ„œλ²„κ°€ μ‹œμž‘λ˜μ§€ μ•ŠλŠ” 경우

    • Java 17 이상이 μ„€μΉ˜λ˜μ–΄ μžˆλŠ”μ§€ 확인
    • IntelliJ ν”„λ‘œμ νŠΈ SDK μ„€μ • 확인
  3. 둜그 파일이 μƒμ„±λ˜μ§€ μ•ŠλŠ” 경우

    • logs/ 디렉토리 생성: mkdir logs
    • 파일 μ“°κΈ° κΆŒν•œ 확인

디버깅

디버깅을 μœ„ν•΄ λ‘œκΉ… λ ˆλ²¨μ„ DEBUG둜 λ³€κ²½:

<!-- logback.xmlμ—μ„œ -->
<logger name="com.example.mcp" level="DEBUG" />

참고 자료

λΌμ΄μ„ μŠ€

이 ν”„λ‘œμ νŠΈλŠ” MIT λΌμ΄μ„ μŠ€λ₯Ό λ”°λ¦…λ‹ˆλ‹€.