Solon AI MCP는 다양한 MCP 기능을 제공하며, Java 8부터 Java 24까지의 모든 주요 버전을 지원합니다. 이는 Solon AI 프로젝트의 핵심 구성 요소이며, Spring Boot 2/3, JFinal, Vert.x 등 다양한 프레임워크에도 간편하게 통합 가능합니다.
필요한 의존성 추가
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon-ai-mcp</artifactId>
<version>최신버전</version>
</dependency>
1. 간단한 웹 컨트롤러 예제
다음은 두 가지 메서드를 포함한 기본 컨트롤러입니다: get_weather (기상 정보 조회), get_rainfall (강수량 조회). 이후 이 코드를 기반으로 빠른 전환 방법을 설명합니다.
@Mapping("/web/api")
@Controller
public class McpServerTool {
@Mapping("get_weather")
public String get_weather(String location) {
return "맑음, 14도";
}
@Mapping("get_rainfall")
public String get_rainfall(String location) {
return "555mm";
}
}
2. 변환 방법 1: MVC 어노테이션 재사용 + @McpServerEndpoint 적용
MVC 어노테이션을 유지하면서, 각 메서드와 매개변수에 description 속성을 추가하고, @McpServerEndpoint를 명시합니다. 이 방식은 Solon-Web 기반 프로젝트에서만 사용 가능하며, 해당 어노테이션들이 description 속성을 지원해야 합니다.
@McpServerEndpoint(sseEndpoint = "/mcp/sse")
@Mapping("/web/api")
@Controller
public class McpServerTool {
@Mapping(path = "get_weather", description = "현재 지역의 날씨 정보를 조회합니다.")
public String get_weather(@Param(description = "조회할 도시명") String city) {
return "맑음, 14도";
}
@Mapping(path = "get_rainfall", description = "해당 도시의 강수량 데이터를 반환합니다.")
public String get_rainfall(@Param(description = "강수량을 조회할 위치") String city) {
return "555mm";
}
}
주의사항:
@Mapping→ AI 환경에서의@ToolMapping과 동일한 역할@Param→ AI 환경에서의@ToolParam과 동일description속성은 반드시 지정해야 하며, 누락 시 실행 오류 발생
3. 변환 방법 2: 완전한 MCP 어노테이션 사용 (다양한 프레임워크 호환)
이 방법은 Spring Boot 2/3, Spring MVC, JFinal, Vert.x 등에서도 사용 가능하며, 원본 컨트롤러 코드를 수정하지 않아도 됩니다. Swagger처럼 어노테이션을 추가하는 방식입니다.
| 어노테이션 | 설명 |
|---|---|
@ToolMapping(name?, description, returnDirect?, resultConverter?) |
도구 매핑 정의 (선택적 속성 포함) |
@ToolParam(name?, description, required?) |
매개변수 정보 선언 (선택적 속성 포함) |
변환된 코드 예시:
@McpServerEndpoint(sseEndpoint = "/mcp/sse")
@Mapping("/web/api")
@RestController
public class McpServerTool {
@ToolMapping(description = "지역별 날씨 정보를 검색합니다.")
@GetMapping("get_weather")
public String get_weather(@ToolParam(description = "조회할 도시 이름") String city) {
return "맑음, 14도";
}
@ToolMapping(description = "특정 지역의 강수량을 확인합니다.")
@GetMapping("get_rainfall")
public String get_rainfall(@ToolParam(description = "강수량을 조회할 위치") String city) {
return "555mm";
}
}
4. 로컬 대화 모델 도구 제공자로 전환 (ToolProvider)
@McpServerEndpoint 어노테이션을 제거하면, 해당 클래스는 MCP 서버 엔드포인트로 노출되지 않습니다. 대신 MethodToolProvider를 통해 로컬 도구 제공자로 등록할 수 있습니다.
MethodToolProvider toolProvider = new MethodToolProvider(new McpServerTool());
var chatModel = ChatModel.of(...)
.defaultToolsAdd(toolProvider)
.build();
chatModel.prompt("서울의 오늘 날씨는 어떻게 되나요?")
.call();