一、MCP 客户端注解
MCP 客户端注解提供了一种使用 Java 注解来实现 MCP 客户端处理器的声明式方法。这些注解简化了服务器通知和客户端操作的处理。
所有 MCP 客户端注解必须包含一个 clients 参数,用于将处理器与特定的 MCP 客户端连接关联。该参数必须与应用程序配置文件中配置的连接名称相匹配。
二、客户端注解
2.1 @McpLogging
@McpLogging 注解用于处理来自 MCP 服务器的日志消息通知。
2.1.1 基本用法
@Component
public class LoggingHandler {
@McpLogging(clients = \”my-mcp-server\”)
public void handleLoggingMessage(LoggingMessageNotification notification) {
System.out.println(\”收到日志: \” + notification.level() +
\” – \” + notification.data());
}
}
2.1.2 使用独立参数
@McpLogging(clients = \”my-mcp-server\”)
public void handleLoggingWithParams(LoggingLevel level, String logger, String data) {
System.out.println(String.format(\”[%s] %s: %s\”, level, logger, data));
}
2.2 @McpSampling
@McpSampling 注解用于处理来自 MCP 服务器的大语言模型补全采样请求。
2.2.1 同步实现
@Component
public class SamplingHandler {
@McpSampling(clients = \”llm-server\”)
public CreateMessageResult handleSamplingRequest(CreateMessageRequest request) {
// 处理请求并生成响应
String response = generateLLMResponse(request);
return CreateMessageResult.builder()
.role(Role.ASSISTANT)
.content(new TextContent(response))
.model(\”gpt-4\”)
.build();
}
}
2.2.2 异步实现
@Component
public class AsyncSamplingHandler {
@McpSampling(clients = \”llm-server\”)
public Mono<CreateMessageResult> handleAsyncSampling(CreateMessageRequest request) {
return Mono.fromCallable(() -> {
String response = generateLLMResponse(request);
return CreateMessageResult.builder()
.role(Role.ASSISTANT)
.content(new TextContent(response))
.model(\”gpt-4\”)
.build();
}).subscribeOn(Schedulers.boundedElastic());
}
}
2.3 @McpElicitation
@McpElicitation 注解用于处理向用户收集额外信息的征询请求。
2.3.1 基本用法
@Component
public class ElicitationHandler {
@McpElicitation(clients = \”interactive-server\”)
public ElicitResult handleElicitationRequest(ElicitRequest request) {
// 向用户展示请求并收集输入
Map<String, Object> userData = presentFormToUser

