
실제 MCP 서버를 구현해보자.
MCP는 파이썬, 타입스크립트, 자바, 코틀린 4개 언어의 SDK를 제공하고 있다. 예시 코드는 Model Context Protocol 공식 홈페이지 를 참고해 만들었다.
스프링 AI 의존성을 이용, 코틀린으로 간단하게 구현했다.
서비스를 만들고 아래와 같이 툴을 구현해준다. 툴은 AI 모델이 실제 사용할 수 있는 함수라 볼 수 있다.
MCP는 AI 모델을 이용한 워크플로우 통합을 도와주는 툴일 뿐 툴은 직접 구현해야 한다.
는 점을 명심하자.
전체 코드는 https://github.com/aryumka/mcp-server-demo
미국 날씨 예측 정보를 가져오는 툴으로 단순한 api 요청을 보내는 코드이다.
전체 코드는 깃헙 저장소에서 참고할 수 있다.
@Tool 애너테이션을 사용, AI Model이 사용할 수 있도록 알려준다.
@Service
class WeatherService(private val objectMapper: ObjectMapper) {
private val restClient: RestClient = RestClient.builder()
.baseUrl("https://api.weather.gov")
.defaultHeader("Accept", "application/geo+json")
.defaultHeader("User-Agent", "weather-app/1.0")
.build()
@Tool(description = "Get weather forecast for a specific latitude/longitude")
fun getWeatherForecastByLocation(
@ToolParam(description = "Latitude of the location")
latitude: Double,
@ToolParam(description = "Longitude of the location")
longitude: Double
): String {
try {
/*중략*/
return forecasts.joinToString("\n---\n")
} catch (e: Exception) {
return "Error fetching forecast: ${e.message}"
}
}
}
그리고 ToolCallbackProvider를 빈으로 등록해준다.
@SpringBootApplication
class McpServerDemoApplication {
@Bean
fun weatherTools(weatherService: WeatherService): ToolCallbackProvider {
return MethodToolCallbackProvider.builder().toolObjects(weatherService).build()
}
}
fun main(args: Array<String>) {
runApplication<McpServerDemoApplication>(*args)
}
이렇게 서버를 만들면 Claud Desktop App으로 실행이 가능하다. 앱을 다운로드 받은 후 설정 > 개발자 설정을 통해

claude_desktop_config.json을 수정, MCP 서버를 설정한다.

이후 앱을 껐다가 다시 켜면 설정이 완료된다.

정상적으로 서버 설정이 완료되면 앱의 채팅창에 아래와 같은 해머 아이콘이 표시되고

누르면 사용 가능한 툴 목록이 표시된다.

실제 테스트를 진행해보자.
텍사스의 날씨를 물어보니 위처럼 도구를 허용할지 물어보는 창이 나온다. 위에서 언급한 MCP의 특징 중 하나인 Data Privacy를 잘 지키는 모습이다.
사실 요즘 굉장히 핫한 주제라서 한번 찍먹을 해봤을 뿐이지만 매우 흥미롭다.
아직 초기 단계라 많은 기능을 기대할 순 없다. 로컬에서 생산성을 올리는 느낌 정도? 하지만 AI 앱이 다양한 데이터소스를 이용해 모듈처럼 교체되고 확장될 수 있다는 것. 확실히 강력한 잠재력이 있다고 느껴진다.
마치 스마트폰 생태계 발전과 함께 모바일 앱이 보편화되고 발전한 것처럼 AI 생태계 발전에 따라 AI 앱이 본격적으로 주류가 될 수 있는 발판이 될 것 같은 느낌도 든다. 현재도 개발자들이 자발적으로 MCP 서버나 클라이언트를 만들어 공유하고 있다
이 기술을 이용해서 어떻게 더 큰 가치를 제공할 수 있을지 고민해봐야겠다.