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

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.lryc.cn/news/2404269.html

相关文章:

  • Sklearn 机器学习 缺失值处理 填充数据列的缺失值
  • 猜字符位置游戏-position gasses
  • 宝塔安装配置FRP
  • 元器件基础学习笔记——结型场效应晶体管 (JFET)
  • tableau 实战工作场景常用函数与LOD表达式的应用详解
  • 智能终端与边缘计算按章复习
  • C#面试问题61-80
  • 分布式Session处理的五大主流方案解析
  • C++ 中的 const 知识点详解,c++和c语言区别
  • 《PyTorch:开启深度学习新世界的魔法之门》
  • 分布式光纤传感(DAS)技术应用解析:从原理到落地场景
  • Spring事务回滚在系统中的应用
  • .Net Framework 4/C# 属性和方法
  • ASP.NET Core使用Quartz部署到IIS资源自动被回收解决方案
  • Fullstack 面试复习笔记:Spring / Spring Boot / Spring Data / Security 整理
  • 调用.net DLL让CANoe自动识别串口号
  • 第5章:Cypher查询语言进阶
  • 【Python进阶】元类编程
  • 算法(蓝桥杯学习C/C++版)
  • Docker镜像无法拉取问题解决办法
  • ZephyrOS 嵌入式开发Black Pill V1.2之Debug调试器
  • # 主流大语言模型安全性测试(二):英文越狱提示词下的表现与分析
  • SAP 在 AI 与数据统一平台上的战略转向
  • 服务器磁盘空间被Docker容器日志占满处理方法
  • c++学习-this指针
  • 交易所系统攻坚:高并发撮合引擎与合规化金融架构设计
  • OpenCV计算机视觉实战(10)——形态学操作详解
  • libiec61850 mms协议异步模式
  • [论文阅读] 人工智能 | 利用负信号蒸馏:用REDI框架提升LLM推理能力
  • 基于 NXP + FPGA+Debian 高可靠性工业控制器解决方案