基于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服务器,即可发起调用:
相关推荐
一灯架构1 小时前
90%的人答错!一文带你彻底搞懂ArrayList
java·后端
mldong3 小时前
Python开发者狂喜!200+课时FastAPI全栈实战合集,10大模块持续更新中🔥
后端
GreenTea3 小时前
从 Claw-Code 看 AI 驱动的大型项目开发:2 人 + 10 个自治 Agent 如何产出 48K 行 Rust 代码
前端·人工智能·后端
Moment6 小时前
AI 全栈指南:NestJs 中的 Service Provider 和 Module
前端·后端·面试
IT_陈寒6 小时前
为什么我的JavaScript异步回调总是乱序执行?
前端·人工智能·后端
Moment6 小时前
AI全栈入门指南:NestJs 中的 DTO 和数据校验
前端·后端·面试
小村儿6 小时前
Harness Engineering:为什么你用 AI 越用越累?
前端·后端·ai编程
小码哥_常6 小时前
为什么PUT和DELETE请求在大公司中逐渐被弃用?
后端
宫_商_角_徵7 小时前
动态代理到底在做什么?
后端
苍何7 小时前
我把微信 cli 开源了,群消息终于不用爬楼了!
后端