mcp

Model Context Protocol(MCP)模型上下文协议(如下图所示)是 Anthropic 发布的一种标准化协议,使得 Agent 智能体应用可以更快捷地与下游异构的数据或者工具进行交互

sequenceDiagram
participant Client as MCP Client (HTTP)
participant WebServer as Web服务层 (Express)
participant MCPCore as MCP 核心逻辑
participant web应用

Client->>WebServer: HTTP 请求 (POST /mcp)
WebServer->>MCPCore: 转换协议格式
MCPCore->>web应用: 执行 MCP 操作
web应用-->>MCPCore: 返回结果
MCPCore-->>WebServer: 格式处理
WebServer-->>Client: HTTP 响应 (JSON)

添加引用

    <properties>
<java.version>17</java.version>
<spring-ai.version>1.0.0-M6</spring-ai.version>
<spring-boot.version>3.4.3</spring-boot.version>
</properties>
<dependencies>
<!-- <dependency>-->
<!-- <groupId>org.springframework.ai</groupId>-->
<!-- <artifactId>spring-ai-mcp-server-spring-boot-starter</artifactId>-->
<!-- </dependency>-->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-mcp-server-webmvc-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.36</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>${spring-ai.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

application.yml配置

  • stdio 标准输入,mcp client进程到mcp server进程之间进行通讯
  • sse 通过Server-Sent Events(SSE) 技术向客户端进行消息推送,标准请求方式是GET
spring:
application:
name: mcp-server-weather
server:
port: 8080
# MCP Server 配置(STDIO 传输)
ai:
mcp:
server:
enabled: true
type: ASYNC
sse-message-endpoint: mcp/messages
stdio:
enabled: false
sse:
enabled: true

添加测试代码

@Component
public class WeatherService {
@Tool(description = "根据城市名称获取天气预报")
public String getWeatherByCity(String city) {
Map<String, String> mockData = Map.of(
"西安", "晴天",
"北京", "小雨",
"上海", "大雨"
);
return mockData.getOrDefault(city, "抱歉:未查询到对应城市!");
} } @Component
public class HelloWorldTool { @Bean
public ToolCallbackProvider weatherTools(WeatherService weatherService) {
return MethodToolCallbackProvider.builder().toolObjects(weatherService).build();
} }

添加Dockerfile

使用性能更好的graalvm这个jdk工具

FROM findepi/graalvm:java17

MAINTAINER lind

RUN mkdir -p /mcp-weather-server

WORKDIR /mcp-weather-server

ENV SERVER_PORT=8080 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""  TZ=Asia/Shanghai WEATHER_API_KEY=""

EXPOSE 8080

ADD ./target/mcp-server-weather-0.0.1-SNAPSHOT.jar ./app.jar

ENTRYPOINT ["java", "-jar", "app.jar"]

部署到k8s

apiVersion: apps/v1
kind: Deployment
metadata:
name: mcp-weather
namespace: default
labels:
app: mcp-weather
spec:
replicas: 1
selector:
matchLabels:
app: mcp-weather
template:
metadata:
labels:
app: mcp-weather
spec:
containers:
- name: mcp-weather
image: harbor.xxx.xx:8443/library/mcp-weather:1.0
ports:
- name: http
containerPort: 8080
protocol: TCP
resources:
requests:
cpu: 250m
memory: 512Mi
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 25%
maxSurge: 25%
---
apiVersion: v1
kind: Service
metadata:
name: mcp-weather
namespace: default
status:
loadBalancer: {}
spec:
ports:
- name: http
protocol: TCP
port: 8080
targetPort: 8080
selector:
app: mcp-weather
type: ClusterIP
sessionAffinity: None

cursor中配置mcp-server信息,测试mcp-server

{
"mcpServers": {
"weather": {
"url": "https://test-xxx.com/weather/v1/sse",
"headers": {
"Authorization": "Bearer WSO2_DEV_PORTAL_APP_OAUTH_TOKEN"
}
},
// 其他服务配置...
}
}

springAI实现一个MCP-Server的更多相关文章

  1. C#中自己动手创建一个Web Server(非Socket实现)

    目录 介绍 Web Server在Web架构系统中的作用 Web Server与Web网站程序的交互 HTTPListener与Socket两种方式的差异 附带Demo源码概述 Demo效果截图 总结 ...

  2. weblogic管理2 - 创建并启动一个managed server

    创建一个managed server. 1.  进入网页console管理页面,如:http://10.100.25.14:7001/console     , 先点击->服务器 (红色标记框) ...

  3. 如何使用OPENQUERY访问另一个SQL Server

    原文:如何使用OPENQUERY访问另一个SQL Server 在项目中,经常会遇到一个数据库访问另一个数据库,[CNVFERPDB]为服务器名,[CE3]为库名 SELECT Dtl.* FROM ...

  4. 搭建一个Web Server站点

    题:搭建一个Web Server站点.安装web服务,并在本地创建index.html测试 1.安装http服务 yum -y install httpd 2.进入网站目录 cd /var/www/h ...

  5. 用select (多路复用)模拟一个 socket server

    需求:用select (多路复用)模拟一个 socket server.可以接收多并发. 1. 一开始是检测自己,如果我有活动了,就说明有客户端要连我了. #用select去模拟socket,实现单线 ...

  6. Eucalyptus-利用镜像启动一个Windows Server 2008r2实例

    1.前言 使用kvm制作Eucalyptus镜像(Windows Server 2008r2为例)——http://www.cnblogs.com/gis-luq/p/3990792.html 上一篇 ...

  7. 手写一个类SpringBoot的HTTP框架:几十行代码基于Netty搭建一个 HTTP Server

    本文已经收录进 : https://github.com/Snailclimb/netty-practical-tutorial (Netty 从入门到实战:手写 HTTP Server+RPC 框架 ...

  8. SpringCloud升级之路2020.0.x版-20. 启动一个 Eureka Server 集群

    本系列代码地址:https://github.com/HashZhang/spring-cloud-scaffold/tree/master/spring-cloud-iiford 我们的业务集群结构 ...

  9. 微软MVP攻略 (如何成为MVP?一个SQL Server MVP的经验之谈)

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 初衷 什么是微软MVP? 成为微软MVP的条件? 如何成为微软MVP? (一) 申请时间划分 (二) 前期准备 (三) ...

  10. [转]如何拷贝一个 SQL Server 的表

    这篇短文将介绍几种拷贝 SQL Server 表的方法.第一种方式是最简单的在同一个数据库里将表拷贝到另外一个表.你需要记住的是,拷贝表的时候并不会拷贝表的约束和索引.下面是代码模板和简单的使用方法: ...

随机推荐

  1. Typecho 如何开启外链转内链

    把博客中的外部链接转换为网站内链,据说有利于搜索引擎收录.该插件主要由 benzBrake 大佬 编写,同时支持转换文章和评论中的链接. 上传插件 下载 Master Branch Code 后上传到 ...

  2. docker - [15] springboot微服务打包docker镜像

    步骤: 1.构建Springboot项目 2.打包应用 3.编写dockerfile 4.构建docker镜像 5.发布运行 一.构建Springboot项目 (1)创建一个SpringBoot(以下 ...

  3. Java中的JDK、JRE及JVM的简介及功能

    JDK: JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK).没有JDK的话,无法编译Java程序(指java源码.java文件),如果想只运行Java程 ...

  4. [tldr]windows使用scoop安装make工具辅助程序编译

    make是一个好用的GNU工具,用来辅助我们进行自动化的程序编译,只需要一个Makefile文件,即可实现一行指令自动编译 scoop是windows的一个包管理工具 安装 scoop bucket ...

  5. mac上 Kratos 配置 protoc

    前言 protoc 是 protobuf 文件(.proto)的编译器,可以借助这个工具把 .proto 文件转译成各种编程语言对应的源码,包含数据类型定义.调用接口等. protoc 在设计上把 p ...

  6. xshell连接Win10下子系统Unbuntu

    自带的ssh server不好用,需要先卸载再安装. 1. 卸载 ssh server sudo apt-get remove openssh-server 2. 安装 ssh server sudo ...

  7. workman PHPSocket.IO文档

    安装 请使用composer集成phpsocket.io. 脚本中引用vendor中的autoload.php实现SocketIO相关类的加载.例如 require_once '/你的vendor路径 ...

  8. VS 2022 WEB发布编译失败

    VS2022当安装在非默认路径时,每次更新后,在发布时,就会出来编译失败的提示,比如这样: C:\VS2022\Preview\MSBuild\Microsoft\VisualStudio\v17.0 ...

  9. Delphi 数据库连接查询分析器

    为了方便自己查询数据库信息,花了小时间写了小工具,添加SQL语法高亮显示功能

  10. 深入掌握Map的这8个操作方法,让代码更简洁优雅

    Map 是我们经常使用的数据结构接口,它的子类 HashMap.ConcurrentHashMap 也是我们使用比较频繁的集合. 了解了 Map 接口中的方法,也就相当于知道了其子类中的可用方法,管它 ...