spring-ai-mcp-server-patterns은(는) 무엇을 하나요?
Spring Boot MCP 서버 패턴을 제공하여 Spring AI로 Model Context Protocol 서버를 생성합니다. 툴 핸들러 정의, 리소스 노출, 프롬프트 템플릿 구성, AI 함수 호출 및 툴 호출을 위한 전송 설정을 지원합니다. AI 기능 확장, 맞춤 함수 호출 또는 MCP 클라이언트 통합을 위한 MCP 서버 구축 시 사용합니다.
개요
이 스킬은 Spring Boot 애플리케이션에서 MCP 서버를 설정하는 방법을 안내합니다. Spring AI의 MCP 지원을 활용하여 AI 어시스턴트가 도구를 호출하고 리소스에 접근하며 프롬프트 템플릿을 사용할 수 있도록 합니다.
주요 기능
- 툴 핸들러 정의:
@Tool애노테이션을 사용하여 AI가 호출할 수 있는 Java 메서드를 정의합니다. - 리소스 노출: 정적 또는 동적 리소스를 MCP 클라이언트에 제공합니다.
- 프롬프트 템플릿: AI 모델에 전달할 시스템 메시지 및 프롬프트 템플릿을 구성합니다.
- 전송 설정: HTTP SSE, WebSocket, STDIO 등 다양한 전송 방식을 지원합니다.
시작하기
의존성 추가
pom.xml에 다음 의존성을 추가하세요:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-mcp-server-spring-boot-starter</artifactId>
<version>1.0.0-M1</version>
</dependency>
기본 서버 설정
@SpringBootApplication
public class McpServerApplication {
public static void main(String[] args) {
SpringApplication.run(McpServerApplication.class, args);
}
}
툴 핸들러 정의
@Component
public class WeatherTool {
@Tool(name = "get_weather", description = "Get current weather for a city")
public String getWeather(@ToolParam(description = "City name") String city) {
// 실제 날씨 조회 로직
return "Weather in " + city + ": sunny, 25°C";
}
}
리소스 노출
@Component
public class DocumentResource implements McpResourceProvider {
@Override
public List<McpResource> getResources() {
return List.of(
McpResource.builder()
.uri("docs://help")
.name("Help Document")
.mimeType("text/markdown")
.description("User help document")
.build()
);
}
@Override
public McpResourceContents readResource(McpResource resource) {
return McpResourceContents.builder()
.uri(resource.getUri())
.text("# Help\n\nThis is the help document.")
.build();
}
}
프롬프트 템플릿 구성
@Component
public class SystemPromptProvider implements McpPromptProvider {
@Override
public String getSystemPrompt() {
return "You are a helpful assistant with access to weather data and documentation.";
}
}
전송 설정
application.properties에서 전송 방식을 지정합니다:
# HTTP SSE 전송 (기본)
spring.ai.mcp.server.transport=SSE
server.port=8080
# 또는 STDIO 전송
# spring.ai.mcp.server.transport=STDIO
클라이언트 통합 예시
@RestController
public class ClientController {
@Autowired
private McpClient mcpClient;
@GetMapping("/ask")
public String askAI(@RequestParam String question) {
return mcpClient.chat(question).getContent();
}
}
고급 설정
여러 툴 등록
@Configuration
public class ToolConfig {
@Bean
public ToolCallbackProvider toolCallbackProvider(ApplicationContext context) {
return methodToolCallbackProvider()
.toolBeans(context.getBeansWithAnnotation(Component.class).values().toArray());
}
}
인증 및 보안
@Configuration
public class SecurityConfig {
@Bean
public McpSecurityFilter mcpSecurityFilter() {
return new ApiKeySecurityFilter("expected-api-key");
}
}
지원 플랫폼
- Claude Code
- Cursor
- Codex
- 기타 MCP 호환 클라이언트