当前位置: 首页 > 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

相关文章:

  • MyBatis-Plus深度全解:从入门到企业级实战
  • idea json生成实体类
  • 【Git系列】如何同步原始仓库的更新到你的fork仓库?
  • Spring之事务管理方式
  • Ubuntu系统配置C++的boost库(含filesystem模块)的方法
  • 自驾总结_Prediction
  • 沉金电路板工艺解析:从原理到应用的全面指南
  • 面向开发者的提示词工程③——文本总结(Summarizing)
  • 麒麟信安系统下修改系统默认记录日志大小
  • mongodb源码分析session异步接受asyncSourceMessage()客户端流变Message对象
  • [Java恶补day16] 238.除自身以外数组的乘积
  • [蓝桥杯]全球变暖
  • 常见排序算法时间、空间复杂度总结
  • vue-19(Vuex异步操作和变更)
  • Python训练营打卡Day45
  • Spring Boot统一功能处理深度解析
  • 系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
  • 网络安全面试题目(无答案)
  • Next.js中Protected Route(受保护路由)
  • reverse笔记
  • 宁乡网站开发公司推荐/seo薪资水平
  • 北京做药流凤凰网站/最新时事热点
  • 网站设计模板是什么/推广产品的方法和步骤
  • 做渠道的网站有哪些/外链百科
  • 个人网站的设计的现状/惠州网站排名提升
  • 深圳营销型网站建设公司选择哪家好/谷歌seo视频教程