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

深圳宝安是什么风险等级广州百度推广排名优化

深圳宝安是什么风险等级,广州百度推广排名优化,英孚做测试的网站,网站开发教学视频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/wzjs/299645.html

相关文章:

  • 大连比较好的网站公司吗惠州百度seo排名
  • 郑州哪有做网站的seo网上课程
  • 公司网站怎么更新长沙百度推广开户
  • 商城类网站备案深圳龙岗区优化防控措施
  • 做seo需要建网站吗如何自己开发网站
  • 郑州网站建站网站外链图片
  • 做网站每页面费用网页制作app
  • 想在百度做网站成人培训机构
  • 绘制网站结构图职业培训机构哪家最好
  • 做外贸的阿里巴巴网站是哪个好制作网站软件
  • wordpress文本自动分页seo常用分析的专业工具
  • 郑州网站建设 推广我赢网客服系统
  • 网站建设用哪种语言好凡科建站官网入口
  • 网站建设常见问题及解决办法网站权重排名
  • 网站建设要点广州seo诊断
  • 网站模板上传教程视频教程在线服务器网站
  • 秦皇岛做网站seo的有什么推广的平台
  • 团购网站 模板福州短视频seo机会
  • 怎么做网站评论seo关键词优化的技巧
  • 官方网站建设维护合作协议企业培训系统app
  • 宜春建设网站公司如何优化搜索引擎的搜索功能
  • 如何自己搭建一个企业网站seo排名外包
  • 电子商务企业网站建设规划方案网站关键词优化工具
  • 高端h5网站开发网站seo收录工具
  • 做网站主要学什么软件南宁百度seo推广
  • 上国外网站用什么机箱好手机端搜索引擎排名
  • 日本网站图片做淘宝代购百度top排行榜
  • 男女做的那个视频网站怎么网络推广
  • 自己做网站如何销售seo关键词是怎么优化的
  • 做黄色网站赚钱么营销的手段和方法