当前位置: 首页 > news >正文

76_Spring AI 干货笔记之 MCP 服务器注解 - 教程

一、MCP 服务器注解

MCP 服务器注解提供了一种使用 Java 注解来实现 MCP 服务器功能的声明式方法。这些注解简化了工具、资源、提示词和补全处理器的创建。

二、服务器注解

2.1 @McpTool

@McpTool 注解将一个方法标记为 MCP 工具实现,并自动生成 JSON 架构。

2.1.1 基本用法

@Component
public class CalculatorTools {

@McpTool(name = "add", description = "将两个数字相加")
public int add(
@McpToolParam(description = "第一个数字", required = true) int a,
@McpToolParam(description = "第二个数字", required = true) int b) {

return a + b;
}
}

2.1.2 高级功能

@McpTool(name = "calculate-area",
description = "计算矩形面积",
annotations = McpTool.McpAnnotations(
title = "矩形面积计算器",
readOnlyHint = true,
destructiveHint = false,
idempotentHint = true
))
public AreaResult calculateRectangleArea(
@McpToolParam(description = "宽度", required = true) double width,
@McpToolParam(description = "高度", required = true) double height) {

return new AreaResult(width * height, "平方单位");
}

2.1.3 使用请求上下文

工具可以访问请求上下文以进行高级操作:

@McpTool(name = "process-data", description = "使用请求上下文处理数据")
public String processData(
McpSyncRequestContext context,
@McpToolParam(description = "要处理的数据", required = true) String data) {

// 发送日志通知
context.info("正在处理数据: " + data);
// 发送进度通知(使用便捷方法)
context.progress(p -> p.progress(0.5).total(1.0).message("处理中..."));
// 向客户端发送 ping
context.ping();
return "已处理: " + data.toUpperCase();
}

2.1.4 动态架构支持

工具可以接受 CallToolRequest 以进行运行时架构处理:

@McpTool(name = "flexible-tool", description = "处理动态架构")
public CallToolResult processDynamic(CallToolRequest request) {

Map<String, Object> args = request.arguments();// 基于运行时架构进行处理String result = "动态处理了 " + args.size() + " 个参数";return CallToolResult.builder().addTextContent(result).build();}

2.1.5 进度跟踪

工具可以接收进度令牌来跟踪长时间运行的操作:

@McpTool(name = "long-task", description = "带有进度的长时间运行任务")
public String performLongTask(
McpSyncRequestContext context,
@McpToolParam(description = "任务名称", required = true) String taskName) {

// 从上下文中访问进度令牌
String progressToken = context.request().progressToken();
if (progressToken != null) {

context.progress(p -> p.progress(0.0).total(1.0).message("开始任务"));
// 执行工作...
context.progress(p -> p.progress(1.0).total(1.0).message("任务完成")
http://www.jsqmd.com/news/450490/

相关文章:

  • 上海正规防水公司哪家强?深耕本土14年的专业选择 - shruisheng
  • 基于Django+Vue+MySQL的花卉电商平台系统(含完整源码与12000字详细开发文档)
  • 强化学习,第六部分:n 步引导
  • 下面是 TypeScript + ESModule 版本的最小示例,和你项目更接近。
  • 无人机巡检图像分析实战:基于深度学习的电线杆与铁塔智能识别与缺陷检测
  • 中兴通讯年营收1339亿:扣非后净利33.7亿同比降45% 派息20亿
  • 何搭建一个聊天机器人?#0.5 名词解释
  • 不容错过!2026年2月数字化运营系统口碑榜单揭秘,OMO模式数字经济电商/消费升级零售,数字化运营系统排行 - 品牌推荐师
  • Java Web 校园一卡通abo系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】
  • 穿越时光列车——初识Linux线程
  • 【C++17 之 .base() 函数实现正向和反向迭代器之间的交换,原理及代码展示】接上一p
  • 风中低语:Linux 信号处理的艺术与实践
  • 工业企业数据质量治理进阶实践指南
  • 2026版《中国计算机学会推荐国际学术会议和期刊目录》更新
  • 每个核心对象 1 个最小可运行示例 js版本
  • Spring Boot中使用Server-Sent Events (SSE) 实现实时数据推送教程
  • Java农产品电商平台源码(含完整文档)基于JSP+SSM框架的JavaWeb/JavaEE商城系统
  • Flutter 三方库 sqlite_crdt 的鸿蒙化适配指南 - 掌控分布式存储资产、精密 CRDT 治理实战、鸿蒙级同步专家
  • Flutter 三方库 steamworks 的鸿蒙化适配指南 - 掌控游戏引擎资产、Steam 集成实战、鸿蒙级精密分发专家
  • Flutter 三方库 concurrent_queue 的鸿蒙化适配指南 - 掌控高并发队列资产、精密任务治理实战、鸿蒙级吞吐专家
  • Flutter 三方库 drift_dev 的鸿蒙化适配指南 - 掌控数据库资产、精密 Drift 治理实战、鸿蒙级存储专家
  • Flutter 三方库 data_fixture_dart 的鸿蒙化适配指南 - 掌控数据资产、精密 Mock 治理实战、鸿蒙级质量专家
  • Flutter 三方库 dartemis 的鸿蒙化适配指南 - 掌控数据资产、精密 ECS 架构治理实战、鸿蒙级游戏专家
  • Spring Boot环境配置
  • 当学术彻底“放飞自我”,会发生什么?我分析了800篇奇葩论文
  • Spring Boot3.3.X整合Mybatis-Plus
  • Lua 的 UTF-8 模块
  • Matlab入门速成七十二:(一文识记所有代码)均值方差相关系数,分析数据的特征
  • Flutter 三方库 kdtree 的鸿蒙化适配指南 - 掌控空间搜索资产、精密算法治理实战、鸿蒙级算力专家
  • 洋州影院购票管理系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】