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

Spring AI(10)——STUDIO传输的MCP服务端

Spring AI MCP(模型上下文协议)服务器Starters提供了在 Spring Boot 应用程序中设置 MCP 服务器的自动配置。它支持将 MCP 服务器功能与 Spring Boot 的自动配置系统无缝集成。

本文主要演示支持STDIO传输的MCP服务器

仅支持STDIO传输的MCP服务器

导入jar

<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-server</artifactId>
</dependency>

注意:本例使用的Spring AI是1.0.0-SNAPSHOT,笔者写博客期间,Spring AI已经发布了1.0.0的正式版,新版本的jar使用spring-ai-mcp-server-spring-boot-starter

服务类

该类中定义需要对外提供的调用的函数方法,本例仅为测试使用,没有实际意义。

package com.renr.springainew.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 childName(@ToolParam(description = "出生日期") String birth,@ToolParam(description = "性别") String gender) {log.info(birth, gender);return "老任与码";}
}

其中@Tool用与描述方法的作用,@ToolParam用于描述参数的作用。这些内容描述的越详细,大模型选择该工具的可能性越大。

配置类

用于向MCP客户端公开函数工具

package com.renr.springainew.config;import com.renr.springainew.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 {@Beanpublic 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配置

logging:pattern:console:
spring:main:web-application-type: nonebanner-mode: offai:mcp:server:name: name-mcp-serverversion: 1.0.0type: SYNCstdio: true
server:port: 8088

使用STDIO传输时,如下选项必须配置:

Disable web application type (`spring.main.web-application-type=none`)
Disable Spring banner (`spring.main.banner-mode=off`)
Clear console logging pattern (`logging.pattern.console=`)

spring.ai.mcp.server配置的属性主要包括:

属性描述默认值

enabled

启用/禁用 MCP 服务器

true

stdio

启用/禁用 stdio 传输

false

name

用于标识的服务器名称

mcp-server

version

服务器版本

1.0.0

instructions

可选说明,用于向客户端提供有关如何与此服务器交互的指导

null

type

服务器类型 (SYNC/ASYNC)

SYNC

capabilities.resource

启用/禁用资源功能

true

capabilities.tool

启用/禁用工具功能

true

capabilities.prompt

启用/禁用提示功能

true

capabilities.completion

启用/禁用完成功能

true

resource-change-notification

启用资源更改通知

true

prompt-change-notification

启用提示更改通知

true

tool-change-notification

启用工具更改通知

true

tool-response-mime-type

(可选)每个工具名称的响应 MIME 类型。例如spring.ai.mcp.server.tool-response-mime-type.generateImage=image/png会将image/pngMIME 类型与generateImage()工具名称

-

sse-message-endpoint

客户端用于发送消息的 Web 传输的自定义 SSE 消息终端节点路径

/mcp/message

sse-endpoint

用于 Web 传输的自定义 SSE 终端节点路径

/sse

base-url

可选 URL 前缀。例如base-url=/api/v1表示客户端应访问 SSE Endpont/api/v1 + sse-endpoint消息端点为/api/v1 + sse-message-endpoint

-

request-timeout

在请求超时之前等待服务器响应的持续时间。适用于通过客户端发出的所有请求,包括工具调用、资源访问和提示作。

20

对MCP服务进行打包

将打包后的jar拷贝到d盘

MCP客户端调用MCP服务

MCP客户端的使用,参考Spring AI(9)——MCP客户端-CSDN博客

客户端中MCP服务的配置

mcp-servers-config.json文件中增加MCP服务的配置:

{"mcpServers": {"name-mcp-server": {"command": "java","args": ["-jar","D:/name-mcp-server.jar"]}}
}

测试MCP服务器的函数工具调用

输出结果:

根据日志和输出结果,说明调用了我们自定义MCP服务器的childName方法

客户端中MCP服务的另外配置方式

{"mcpServers": {"name-mcp-server": {"command": "java","args": ["-jar","-Dspring.ai.mcp.server.stdio=true","-Dspring.main.web-application-type=none","-Dspring.main.banner-mode=false","-Dlogging.pattern.console=","D:/name-mcp-server.jar"]}}
}

如果客户端采用上述配置,MCP服务端的配置可以修改为:

spring:ai:mcp:server:name: name-mcp-serverversion: 1.0.0type: SYNCstdio: true
server:port: 8088

http://www.xdnf.cn/news/894169.html

相关文章:

  • 低功耗高安全:蓝牙模块在安防系统中的应用方案
  • 视觉前沿算法复现环境配置1——2025CVPR风格迁移网络SaMam
  • 【element-ui】el-autocomplete实现 无数据匹配
  • 线段树~~~
  • Mentalab Hypersync 可实现多被试同步扫描、多模态研究及无线事件标记的高精度无线同步
  • 《Sora模型中Transformer如何颠覆U-Net》
  • BugKu Web渗透之好像需要密码
  • 工业相机镜头焦距与传感器尺寸对拍摄效果的影响
  • 生成式人工智能综述1——文本生成
  • SQL知识合集(二):函数篇
  • [蓝桥杯]通电
  • 继MySQL之后的技术-JDBC-从浅到深-02
  • PS--钢笔工具的用法
  • YOLOv11 | 注意力机制篇 | 可变形大核注意力Deformable-LKA与C2PSA机制
  • Android Compose PrimaryTabRow、SecondaryTabRow (TabRow)自定义
  • PH热榜 | 2025-06-05
  • zynq远程更新程序
  • Day 40训练
  • LLaMA-Factory和python版本的兼容性问题解决
  • 【时时三省】(C语言基础)多维数组名作函数参数
  • 【快餐点餐简易软件】佳易王快餐店点餐系统软件功能及操作教程
  • 2025年可持续发展与环境工程国际会议(SDEE 2025)
  • 老旧热泵设备智能化改造:Ethernet IP转Modbus的低成本升级路径
  • 亚马逊:产品被顾客投诉二手产品的申诉模板
  • cuda数据传输
  • 五、Sqoop 增量导入:精通 Append 与 Lastmodified 模式
  • 【案例】电商系统的AI微服务架构设计
  • 第2天:认识LSTM
  • bootstrap:点击回到顶部 超简单
  • Modbus转Ethernet IP深度解析:磨粉设备效率跃升的底层技术密码