基于spring-ai实现一个MCP server

MCP协议简介

Arthropic公司推出了模型上下文协议(Model Context Protocol, MCP),通过标准化的协议,旨在解决LLM与外部工具集成的标准化问题。MCP希望能够像Type-C接口一样成为AI与各种数据源和工具之间的"通用接口",使AI应用程序开发和集成变得简单和统一。 在MCP没有出现之前,开发者开发一个agent应用,依赖工具来扩展agent的能力边界,需要开发者手动编写工具注册逻辑,然后将用户输入和工具schema信息塞到大模型中,大模型会输出工具和对应的参数信息。而MCP的出现,提供了以下关键价值:

  1. 统一的集成标准:一个协议对接所有集成,提高开发效率,降低开发难度;
  2. 工具复用:这些工具能直接在其他应用被复用,减少重复的开发工作,例如,你可以使用到其他人开发的工具。
  3. 自动工具发出:支持动态工具发现和上下文处理。

MCP核心概念

MCP 遵循客户端-服务器架构(client-server),其中包含以下几个核心概念:

  • MCP 主机(MCP Hosts):发起请求的 LLM 应用程序(例如Claude Desktop、IDE 或 AI 工具)。
  • MCP 客户端(MCP Clients):在主机程序内部,与 MCP server 保持 1:1 的连接。
  • MCP 服务器(MCP Servers):为 MCP client 提供上下文、工具和 prompt 信息。
  • 本地资源(Local Resources):本地计算机中可供 MCP server 安全访问的资源(例如文件、数据库)。
  • 远程资源(Remote Resources):MCP server 可以连接到的远程资源(例如通过 API)。

MCP Server实践

引入webmvc sse依赖

xml 复制代码
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-mcp-server-webmvc-spring-boot-starter</artifactId>
        <version>1.0.0-M6</version>
    </dependency>

</dependencies>

注册tools信息

kotlin 复制代码
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 ToolsPublisher {

    @Bean
    ToolCallbackProvider myTools(UserTools userTools) {
        return MethodToolCallbackProvider
                .builder()
                .toolObjects(userTools)
                .build();
    }

}

配置文件

yaml 复制代码
spring:
  application:
    name: ai-project
  ai:
    mcp:
      server:
        name: webmvc-mcp-server
        version: 1.0.0
        type: ASYNC
        stdio: false
        sse-message-endpoint: /mcp/messages

当完成上述操作后,能发现一个mcp server已经提供了,从日志中可以发现工具注册的日志信息:

cherry studio

这里不想实现MCP Client,因此使用现成的client产品cherry studio,需要操作以下几步:

  1. 配置大模型,这里我使用阿里云百炼的免费额度:
  2. 配置MCP Server,如下图: 能看到配置了MCP Server暴露的sse URL后,能找到对应可用的工具列表信息。
  3. 接下来选择MCP服务器,即可发起调用:
相关推荐
Code哈哈笑1 小时前
【图书管理系统】深度讲解:图书列表展示的后端实现、高内聚低耦合的应用、前端代码讲解
java·前端·数据库·spring boot·后端
无名之逆1 小时前
Hyperlane: Unleash the Power of Rust for High-Performance Web Services
java·开发语言·前端·后端·http·rust·web
薯条不要番茄酱2 小时前
【SpringBoot】从环境准备到创建SpringBoot项目的全面解析.
java·spring boot·后端
caihuayuan59 小时前
升级element-ui步骤
java·大数据·spring boot·后端·课程设计
Kookoos10 小时前
ABP vNext + EF Core 实战性能调优指南
数据库·后端·c#·.net·.netcore
揣晓丹11 小时前
JAVA实战开源项目:健身房管理系统 (Vue+SpringBoot) 附源码
java·vue.js·spring boot·后端·开源
豌豆花下猫13 小时前
Python 3.14 新特性盘点,更新了些什么?
后端·python·ai
caihuayuan513 小时前
Vue生命周期&脚手架工程&Element-UI
java·大数据·spring boot·后端·课程设计
明月与玄武16 小时前
Spring Boot中的拦截器!
java·spring boot·后端
菲兹园长16 小时前
SpringBoot统一功能处理
java·spring boot·后端