MCP 注解
Spring AI MCP 注解模块为 Java 中的 模型上下文协议 (MCP) 服务器和客户端提供了基于注解的方法处理功能。 它通过使用 Java 注解的简洁声明式方法,简化了 MCP 服务器方法和客户端处理器的创建与注册。
The MCP Annotations enable developers to create and register MCP operation handlers using declarative annotations. This approach simplifies implementing MCP server and client functionality by reducing boilerplate code and improving maintainability.
该库基于 MCP Java SDK 构建,为实现 MCP 服务器和客户端提供了一个更高级的、基于注解的编程模型。
架构
MCP 注解模块包含:
服务器注解
对于 MCP 服务器,提供了以下注解:
-
@McpTool- 实现 MCP 工具并自动生成 JSON 模式 -
@McpResource- 通过URI模板提供对资源的访问 -
@McpPrompt- 生成提示消息 -
@McpComplete- 提供自动完成功能
客户端注解
对于 MCP 客户端,提供了以下注解:
-
@McpLogging- 处理日志消息通知 -
@McpSampling- 处理采样请求 -
@McpElicitation- 处理用于收集额外信息的提示请求 -
@McpProgress- 在长时间运行的操作期间处理进度通知 -
@McpToolListChanged- 处理工具列表更改通知 -
@McpResourceListChanged- 处理资源列表更改通知 -
@McpPromptListChanged- 处理提示列表更改通知
特殊参数和注解
-
McpSyncRequestContext- 用于同步操作的特殊参数类型,提供统一的接口以访问MCP请求上下文,包括原始请求、服务器交换(用于有状态操作)、传输上下文(用于无状态操作),以及用于日志记录、进度跟踪、采样和提示的便捷方法。此参数会自动注入,并且不会包含在JSON模式生成中。 支持在Complete、Prompt、Resource和Tool方法中使用。 -
McpAsyncRequestContext- 用于异步操作的特殊参数类型,提供与McpSyncRequestContext相同的统一接口,但使用响应式(基于 Mono)的返回类型。此参数会自动注入,并且不会包含在 JSON 模式生成中。支持在 Complete、Prompt、Resource 和 Tool 方法中使用。 -
McpTransportContext- 用于无状态操作的特殊参数类型,提供对传输级别上下文的轻量级访问,而无需完整的服务器交换功能。此参数会自动注入,并且不会包含在JSON模式生成中 -
@McpProgressToken- 标记方法参数以从请求中接收进度Tokens。此参数会自动注入,并且不会包含在生成的JSON模式中。注意: 当使用McpSyncRequestContext或McpAsyncRequestContext时,可以通过ctx.request().progressToken()访问进度Tokens,而无需使用此注解。 -
McpMeta- 特殊参数类型,用于访问MCP请求、通知和结果中的元数据。此参数会自动注入,并且不计入参数数量限制和JSON模式生成。注意: 当使用McpSyncRequestContext或McpAsyncRequestContext时,可以通过ctx.requestMeta()获取元数据。
入门指南
依赖项
将 MCP 注解依赖项添加到您的项目中:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-mcp-annotations</artifactId>
</dependency>
当您使用任何 MCP Boot Starter 时,MCP 注解将自动包含在内:
-
spring-ai-starter-mcp-client -
spring-ai-starter-mcp-client-webflux -
spring-ai-starter-mcp-server -
spring-ai-starter-mcp-server-webflux -
spring-ai-starter-mcp-server-webmvc
快速示例
以下是一个使用 MCP 注解创建计算器工具的简单示例:
@Component
public class CalculatorTools {
@McpTool(name = "add", description = "Add two numbers together")
public int add(
@McpToolParam(description = "First number", required = true) int a,
@McpToolParam(description = "Second number", required = true) int b) {
return a + b;
}
@McpTool(name = "multiply", description = "Multiply two numbers")
public double multiply(
@McpToolParam(description = "First number", required = true) double x,
@McpToolParam(description = "Second number", required = true) double y) {
return x * y;
}
}
以及一个用于日志记录的简单客户端处理器:
@Component
public class LoggingHandler {
@McpLogging(clients = "my-server")
public void handleLoggingMessage(LoggingMessageNotification notification) {
System.out.println("Received log: " + notification.level() +
" - " + notification.data());
}
}
通过 Spring Boot 自动配置,这些带有注解的 Bean 会被自动检测并注册到 MCP 服务器或客户端中。