基于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服务器,即可发起调用:
相关推荐
yuuki23323321 分钟前
【C语言】文件操作(附源码与图片)
c语言·后端
IT_陈寒25 分钟前
Python+AI实战:用LangChain构建智能问答系统的5个核心技巧
前端·人工智能·后端
无名之辈J1 小时前
系统崩溃(OOM)
后端
码农刚子1 小时前
ASP.NET Core Blazor简介和快速入门 二(组件基础)
javascript·后端
间彧1 小时前
Java ConcurrentHashMap如何合理指定初始容量
后端
catchadmin1 小时前
PHP8.5 的新 URI 扩展
开发语言·后端·php
少妇的美梦1 小时前
Maven Profile 教程
后端·maven
白衣鸽子1 小时前
RPO 与 RTO:分布式系统容灾的双子星
后端·架构
Jagger_1 小时前
SOLID原则与设计模式关系详解
后端
间彧1 小时前
Java: HashMap底层源码实现详解
后端