Java WebAPI를 손쉽게 MCP 서버로 전환하기 (Solon AI MCP 활용)

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();

5. 샘플 코드 저장소

태그: Solon AI MCP Server Java Web API MethodToolProvider ToolMapping

6월 16일 18:14에 게시됨