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- 实现带有自动JSON模式生成的MCP工具 -
@McpResource- 通过URI模板提供资源访问 -
@McpPrompt- 生成提示消息 -
@McpComplete- 提供自动补全功能
客户端注释
对于MCP客户端,提供了以下注释:
-
@McpLogging- 处理日志消息通知 -
@McpSampling- 处理抽样请求 -
@McpElicitation- 处理获取额外信息的请求 -
@McpProgress- 在长时间运行作中处理进度通知 -
@McpToolListChanged- 处理工具列表变更通知 -
@McpResourceListChanged- 处理资源列表变更通知 -
@McpPromptListChanged- 处理提示列表更改通知
特殊参数与注释
-
McpSyncRequestContext- 用于同步作的特殊参数类型,提供统一的接口访问MCP请求上下文,包括原始请求、服务器交换(用于有状态作)、传输上下文(用于无状态作)以及方便的日志、进度、采样和引发方法。该参数会自动注入并排除在 JSON 模式生成中。支持Complete、提示、资源和工具方法。 -
McpAsync请求上下文- 异步作的特殊参数类型,提供与McpSyncRequestContext但采用响应式(基于单声道)的返回类型。该参数会自动注入并排除在 JSON 模式生成中。支持Complete、提示、资源和工具方法。 -
McpTransportContext- 用于无状态作的特殊参数类型,提供对传输层上下文的轻量级访问,无需完整的服务器交换功能。该参数会自动注入并排除在 JSON 模式生成中 -
@McpProgressToken- 标记方法参数以接收请求的进度Tokens。该参数会自动注入并排除在生成的 JSON 模式中。注意:使用McpSyncRequestContext或McpAsync请求上下文进度Tokens可以通过以下方式访问ctx.request().progressToken()而不是使用这个注释。 -
McpMeta- 特殊参数类型,可访问MCP请求、通知和结果的元数据。该参数会自动注入并排除在参数数量限制和 JSON 模式生成之外。注意:使用McpSyncRequestContext或McpAsync请求上下文,元数据可以通过以下方式获得ctx.requestMeta()相反。
开始
依赖
将MCP注释依赖添加到你的项目中:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-mcp-annotations</artifactId>
</dependency>
当你使用任何MCP启动启动程序时,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 自动配置,这些注释豆会自动被检测并注册给 MCP 服务器或客户端。