Spring MVC 기반의 SSE (Server-Sent Events) 서버 전송 및 선택적 STDIO 전송 지원
의존성 추가
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-server-webmvc</artifactId>
</dependency>
서비스 클래스
이 클래스는 외부 호출을 위한 메소드를 정의합니다. 본 예제에서는 테스트 목적으로 작성되었습니다.
package com.example.springaimcp.mcpserver;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class NameMcpServer {
@Tool(description = "아이의 생년월일과 성별에 따른 이름 생성")
public String generateChildName(@ToolParam(description = "생년월일") String birth,
@ToolParam(description = "성별") String gender) {
log.info("Birth: {}, Gender: {}", birth, gender);
return "예시 이름";
}
}
@Tool은 메소드의 역할을 설명하고, @ToolParam은 매개변수의 역할을 설명합니다. 이러한 설명이 자세할수록 대형 모델이 해당 도구를 선택할 가능성이 높아집니다.
설정 클래스
MCP 클라이언트에게 함수 도구를 공개하기 위한 설정
package com.example.springaimcp.config;
import com.example.springaimcp.mcpserver.NameMcpServer;
import org.springframework.ai.tool.ToolCallbackProvider;
import org.springframework.ai.tool.method.MethodToolCallbackProvider;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyServerConfig {
@Bean
public ToolCallbackProvider nameTool(NameMcpServer nameMcpServer) {
return MethodToolCallbackProvider.builder().toolObjects(nameMcpServer).build();
}
}
MCP 서버는 다음 네 가지 주요 기능 유형을 지원하며, 각각을 개별적으로 활성화하거나 비활성화할 수 있습니다:
- 도구 -
spring.ai.mcp.server.capabilities.tool=true|false - 리소스 -
spring.ai.mcp.server.capabilities.resource=true|false - 프롬프트 -
spring.ai.mcp.server.capabilities.prompt=true|false - 완료 -
spring.ai.mcp.server.capabilities.completion=true|false
기본적으로 모든 기능이 활성화되어 있습니다. 특정 기능을 비활성화하면 해당 기능이 클라이언트에게 공개되지 않습니다.
이 예제에서는 함수 도구만 구성하였습니다.
yml 설정
spring:
ai:
mcp:
server:
name: name-mcp-server
version: 1.0.0
type: SYNC
server:
port: 8088
서버 시작
MCP 클라이언트 연결
MCP 클라이언트 사용 방법은 Spring AI (9) —— MCP 클라이언트 참조
의존성 추가
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-client</artifactId>
</dependency>
클라이언트 yml 설정
spring:
ai:
zhipuai:
api-key: XXXXXXXXX
chat:
options:
model: glm-4-flash
temperature: 0.7
mcp:
client:
name: my-mcp-client
version: 1.0.0
request-timeout: 10s
type: sync
sse:
connections:
server2:
url: http://localhost:8088
sse-endpoint: /sse
클라이언트 시작 및 테스트
WebFlux 기반의 SSE (Server-Sent Events) 서버 전송 및 선택적 STDIO 전송 지원
의존성 추가
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-server-webflux</artifactId>
</dependency>
WebFlux를 사용하므로, spring-boot-starter-web 의존성을 제거해야 합니다.
yml 설정
spring:
ai:
mcp:
server:
name: name-mcp-server
version: 1.0.0
type: SYNC
server:
port: 8088
서버 시작
pom.xml에서 spring-boot-starter-web 의존성을 반드시 제거해야 합니다. 시작 로그에서 WebFlux가 Netty를 사용하는 것을 확인할 수 있습니다.
MCP 클라이언트 연결
의존성 추가
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-client-webflux</artifactId>
</dependency>
yml 설정
spring:
ai:
zhipuai:
api-key: XXXXXXXXX
chat:
options:
model: glm-4-flash
temperature: 0.7
mcp:
client:
name: my-mcp-client
version: 1.0.0
request-timeout: 10s
type: sync
sse:
connections:
server2:
url: http://localhost:8088
sse-endpoint: /sse
클라이언트 시작 및 테스트
테스트 결과는 WebMvc 서버와 동일하므로, 여기서는 생략합니다.