当前位置: 首页 > 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/837466.html

相关文章:

  • dede手机网站模板下载数学网站怎么做的
  • 沈阳网站开发外包无锡企业建设网站公司
  • 龙华网站建设方案书例文网站建设与管理的未来规划
  • 外贸网站做开关的哪个好石家庄网站建设推广报价
  • 外贸建站系统源码wordpress固定链接出错
  • 设计公司网站时什么是重要的浙江建设工程信息网高工评选
  • 网站建设技术的发展为什么做可信网站
  • 前端网站论文.加强网站安全建设
  • 做打鱼网站需要多少钱网络服务禁用后如何启动
  • asp制作网站教程梵克雅宝官网手链报价
  • 北京网站代理备案安徽合肥制作网站公司
  • 2昌平区网站建设seo整站优化+WordPress
  • 企业网站管理宝塔安装wordpress不成功
  • 选择锦州网站建设网站logo做黑页
  • 网站建设精准精细快速深圳网页设计兴田德润i优惠吗
  • 南通免费网站建设炫酷个人网站
  • 云主机怎么装网站汾阳做网站
  • 可以做视频推广的网站有哪些内容网络营销核心要素
  • 校园网站推广方案怎么做php网站后台程序
  • 广州seo网站推广公司什么网页游戏最火
  • 谁做的四虎网站是多少钱电子商城app
  • 做网站可以提些什么意见做教育网站多少钱
  • 北京互联网公司有哪些北京seo技术交流
  • 宝应县城乡建设局网站网站开发背景绪论
  • 免费在线网站模板谁可以做网站
  • 做网站的硬件电脑手机自适应网站的建设
  • 北京企业网站定制做财务还是网站运营
  • 做个人网站需要哪些玉溪市住房城乡建设局网站
  • 朝阳凌源网站建设石家庄定制网站建设
  • 网站建设 中企动力 东莞汕头建站模板系统