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

写作网站推荐行业信息网站有哪些

写作网站推荐,行业信息网站有哪些,wordpress 知言,温州app开发Spring AI 实现 STDIO和SSE MCP Server Java MCP 三层架构中,传输的方式有STDIO和SSE两种,如下图所示。 STDIO方式是基于进程间通信,MCP Client和MCP Server运行在同一主机,主要用于本地集成、命令行工具等场景。 SSE方式是基于…

Spring AI 实现 STDIO和SSE MCP Server

Java MCP 三层架构中,传输的方式有STDIO和SSE两种,如下图所示。

在这里插入图片描述

STDIO方式是基于进程间通信,MCP Client和MCP Server运行在同一主机,主要用于本地集成、命令行工具等场景。

SSE方式是基于HTTP协议,MCP Client远程调用MCP Server提供的SSE服务。实现客户端和服务端远程通信。

SSE Server

spring-ai-starter-mcp-server-webflux 基于WebFlux SSE 实现SSE Server。

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

MCP 服务端功能支持基于 Spring WebFlux 的 SSE(服务器发送事件)服务器传输和可选的 STDIO 传输。

1.新建Spring Boot项目

使用https://start.spring.io/新建项目,引入以下依赖。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.4.4</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.mcp.example</groupId><artifactId>mcp-webflux-server-example</artifactId><version>0.0.1-SNAPSHOT</version><name>mcp-webflux-server-example</name><description>mcp-webflux-server-example</description><dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>1.0.0-SNAPSHOT</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-server-webflux</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build><repositories><repository><name>Central Portal Snapshots</name><id>central-portal-snapshots</id><url>https://central.sonatype.com/repository/maven-snapshots/</url><releases><enabled>false</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><releases><enabled>false</enabled></releases></repository></repositories></project>

2.application.yaml配置

spring:ai:mcp:server:name: webflux-mcp-serverversion: 1.0.0type: ASYNC  # Recommended for reactive applicationssse-message-endpoint: /mcp/messages

定义MCP名称和版本号以及同步或异步配置。

3.定义工具类

@Service
public class DateTimeService {@Tool(description = "Get the current date and time in the user's timezone")String getCurrentDateTime() {return LocalDateTime.now().atZone(LocaleContextHolder.getTimeZone().toZoneId()).toString();}@Tool(description = "Set a user alarm for the given time, provided in ISO-8601 format")String setAlarm(String time) {LocalDateTime alarmTime = LocalDateTime.parse(time, DateTimeFormatter.ISO_DATE_TIME);return "Alarm set for " + alarmTime;}
}

定义二个工具:

1.获取当前日期和时间

2.设置提醒功能

4.暴露工具

@Configuration
public class McpWebFluxServiceExampleConfig {@Beanpublic ToolCallbackProvider dateTimeTools(DateTimeService dateTimeService) {return MethodToolCallbackProvider.builder().toolObjects(dateTimeService).build();}
}

5.启动MCP Server项目

在这里插入图片描述

启动项目发现注册的两个工具成功,可以端可以发现两个工具。到此MCP Server服务完成,SSE的端点路径:http://localhost:9090,接下来是客户端连接使用服务端提供的工具。

6.MCP Client连接MCP Server

1.新建Spring Boot项目,然后引入starter

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

完整pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.4.4</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.mcp.example</groupId><artifactId>mcp-client-example</artifactId><version>0.0.1-SNAPSHOT</version><name>mcp-client-example</name><description>mcp-client-example</description><dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>1.0.0-SNAPSHOT</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId><version>1.0.0-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-client</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build><repositories><repository><name>Central Portal Snapshots</name><id>central-portal-snapshots</id><url>https://central.sonatype.com/repository/maven-snapshots/</url><releases><enabled>false</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><releases><enabled>false</enabled></releases></repository></repositories></project>

2.配置

spring:ai:openai:api-key: 你自己密钥base-url: https://api.siliconflow.cnchat:options:model: Qwen/Qwen2.5-72B-Instructmcp:client:sse:connections:server1:url: http://localhost:9090toolcallback:enabled: true
server:port: 9091

配置文件内容,大模型配置方便测试工具使用,mcp服务端设置就是mcp server提供的sse端点。

toolcalback.enable=true 自动注入Spring AI ToolCallbackProvider。

3.测试

package com.mcp.example.mcpclientexample;import io.modelcontextprotocol.client.McpAsyncClient;
import jakarta.annotation.Resource;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.mcp.SyncMcpToolCallbackProvider;
import org.springframework.ai.tool.ToolCallback;
import org.springframework.ai.tool.ToolCallbackProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;import java.util.Arrays;
import java.util.List;@SpringBootApplication
public class McpClientExampleApplication implements CommandLineRunner {@Resourceprivate ToolCallbackProvider tools;@ResourceChatClient.Builder chatClientBuilder;public static void main(String[] args) {SpringApplication.run(McpClientExampleApplication.class, args);}@Overridepublic void run(String... args) throws Exception {var chatClient = chatClientBuilder.defaultTools(tools).build();String content = chatClient.prompt("10分钟后,设置一个闹铃。").call().content();System.out.println(content);String content1 = chatClient.prompt("明天星期几?").call().content();System.out.println(content1);}}

运行客户端项目:

在这里插入图片描述

结果表明定义的工具大模型根据用户的提问,选择了合适的工具进行回答。

STDIO Server

标准 MCP 服务器,通过 STDIO 服务器传输支持完整的 MCP 服务器功能。

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

1.创建Server项目

新建Spring Boot项目引入以下依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.4.4</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.mcp.example</groupId><artifactId>mcp-stdio-server-example</artifactId><version>0.0.1-SNAPSHOT</version><name>mcp-stdio-server-example</name><description>mcp-stdio-server-example</description><dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>1.0.0-SNAPSHOT</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-server</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build><repositories><repository><name>Central Portal Snapshots</name><id>central-portal-snapshots</id><url>https://central.sonatype.com/repository/maven-snapshots/</url><releases><enabled>false</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><releases><enabled>false</enabled></releases></repository></repositories></project>

配置文件application.yaml

spring:ai:mcp:server:name: stdio-mcp-serverversion: 1.0.0stdio: truemain:banner-mode: offweb-application-type: none
logging:pattern:console:
server:port: 9090

main:
banner-mode: off
web-application-type: none 这个配置非常关键,否则client与server通信会提示json解析有问题。这个必须关掉。

2.新建工具

与sse server一样,新建DateTimeTool并注册。

3.打包项目

STDIO方式server和client之间是进程间通信,所以需要把server打包成jar,以便client命令启动执行,或者三方客户端命令启动执行。将server jar放到一个指定目录,如下所示:

target/mcp-stdio-server-example.jar

4.创建client项目

直接使用上面sse server使用的 Clinet,修改对应配置文件application.yaml和新建mcp-server配置json。
mcp-servers-config.json

{"mcpServers": {"stdio-mcp-server": {"command": "java","args": ["-Dspring.ai.mcp.server.stdio=true","-Dspring.main.web-application-type=none","-jar","mcp server正确的路径 ../mcp-stdio-server-example-0.0.1-SNAPSHOT.jar"],"env": {}}}
}

application.yaml

spring:ai:openai:api-key: sk-qwkegvacbfpsctyhfgakxlwfnklinwjunjyfmonnxddmcixrbase-url: https://api.siliconflow.cnchat:options:model: Qwen/Qwen2.5-72B-Instructmcp:client:
#        sse:
#          connections:
#            server1:
#              url: http://localhost:9090stdio:root-change-notification: falseservers-configuration: classpath:/mcp-servers-config.jsontoolcallback:enabled: true
server:port: 9091

5.启动客户端

在这里插入图片描述

http://www.dtcms.com/a/463489.html

相关文章:

  • 单页网站如何做杭州软件开发
  • 招聘网站怎么做介绍成都网站开发 Vr
  • 计算机视觉 图像分类 → 目标检测 → 实例分割
  • 免费建站哪个好网站搭建报价
  • 天津百度网站快速排名深圳平面设计招聘
  • 媒体村网站建设怎么做网站教程 用的工具
  • 汽车软件开发的质量和安全管理流程
  • 数据库查询网站建设广点通广告投放平台
  • 东莞网站建设方案外包城市门户网站建设
  • 深圳电子烟网站建设网站开发的基本流程
  • 百度地图手机网站代码wordpress去除分类目录
  • dw 做网站图片之间的链接怎么查看网站是哪个公司建的
  • 深圳营销型网站建设烟台市做网站
  • 做服装团购网站怎样做音乐网站
  • 给别人做网站的销售叫什么软件网站建设与运营实训总结
  • 做网站好的老网站301跳转新网站
  • 上海做高端网站建设网络平台制作方法
  • 宿迁装饰网站建设公司排名wordpress+远程缓存
  • app的开发流程是什么站内优化包括哪些
  • wordpress配置网站德州做网站的公司有哪些
  • tp框架做购物网站开发企业网站 wordpress
  • 怎么查域名注册商网站seo是什么
  • 网站开发预算多少湖州市网站建设
  • 做番号网站犯法吗成品网站w在线观看
  • 集团网站建设个人网站怎么盈利
  • wordpress 虾米音乐seo百度发包工具
  • 商城网站建设 上海WordPress支撑多少文章
  • 建设网站最重要的是什么谷歌浏览器不支持wordpress插件
  • 网站建设如何入账河北外贸网站建设
  • 2025 科技前沿全景:从量子突破到星际凝望的文明跃迁