mcpField
S
Spring AI integration with MCP (Model Context Protocol)

Spring AI integration with MCP (Model Context Protocol)

本地服务
github.com/kuldeepsingh99开发工具677 周前更新

关于 Spring AI integration with MCP (Model Context Protocol)

Spring AI MCP 将 MCP Java SDK 集成到 Spring Boot,为 Java AI 应用提供客户端和服务端启动器。示例展示了通过 MCP 工具查询 PostgreSQL 数据,并由 LLM 根据提示词选择工具。

主要功能

  1. 01Spring Boot 客户端与服务端启动器
  2. 02同步与异步通信
  3. 03stdio 和 SSE 传输
  4. 04通过工具查询 PostgreSQL

适用场景

  1. 01为 Spring Boot AI 应用添加 MCP 支持
  2. 02构建查询 PostgreSQL 账户数据的 MCP 服务
  3. 03连接 MCP 服务并调用相应工具

MCP 相关

扩展 MCP Java SDK,提供 MCP 客户端和服务端能力。服务端可向客户端提供工具与资源,并支持 stdio 和 SSE 传输。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Spring AI 与 MCP(Model Context Protocol)集成

Model Context Protocol(MCP) 是一种标准化协议,可让 AI 模型以结构化的方式与外部工具和资源交互。它支持多种传输机制,以适应不同环境。

MCP Java SDK 提供了 Model Context Protocol 的 Java 实现,可通过同步和异步通信模式,实现与 AI 模型和工具的标准化交互。

Spring AI MCP 基于 Spring Boot 扩展了 MCP Java SDK,提供客户端和服务端启动器。使用 Spring Initializer 为 AI 应用添加 MCP 支持,快速搭建应用。

MCP Java SDK 架构

Java MCP 实现采用三层架构

  • 客户端/服务端层:McpClient 处理客户端操作,而 McpServer 管理服务端协议操作。两者都使用 McpSession 管理通信。

  • 会话层(McpSession):通过 DefaultMcpSession 实现管理通信模式和状态。

  • 传输层(McpTransport):负责 JSON-RPC 消息的序列化和反序列化,并支持多种传输实现。

MCP 客户端

MCP 客户端是 Model Context Protocol(MCP)架构中的关键组件,负责与 MCP 服务建立和管理连接。

MCP 客户端

MCP 服务端是 Model Context Protocol(MCP)架构的基础组件,为客户端提供工具、资源和功能。

什么是 MCP?

MCP 采用客户端-服务端架构,包含几个关键组件:

MCP Host: 是我们的主应用,它集成了大模型,并需要连接外部数据源

MCP 客户端: 是建立并维护与 MCP 服务一对一连接的组件

MCP 服务端: 是与外部数据源集成并提供与其交互功能的组件

工具:指 MCP 服务端公开给客户端调用的可执行函数/方法 此外,为了处理客户端和服务端之间的通信,MCP 提供了两种传输通道。

为了通过标准输入和输出流与本地进程及命令行工具通信,MCP 提供了标准输入/输出(stdio)传输类型。此外,针对客户端和服务端之间基于 HTTP 的通信,MCP 提供了服务器发送事件(SSE)传输类型。

示例中实现了什么?

在本教程中,MCP 服务端连接到 Postgresql 数据库并获取数据,我们还在 MCP 服务端公开了两个工具。MCP 客户端连接到 MCP 服务端,并根据提示词由大模型决定要调用哪个工具。

步骤 1:创建 Postgresql 数据库

运行 docker-compose.yml 文件,并运行 table.sql 创建表。

步骤 2:在本地运行 ollama

下载 ollama,并根据你的机器性能运行任意模型

步骤 3:创建 MCP 服务端

下载 mcp-server 项目并运行。

需要注意的重要类 - SellerAccountTools

@Service
public class SellerAccountTools {
    private final SellerAccountRepository sellerAccountRepository;

    public SellerAccountTools(SellerAccountRepository sellerAccountRepository) {
        this.sellerAccountRepository = sellerAccountRepository;
    }

    @Tool(name = "Search Seller account by name", description = "Find all Seller Accounts by name")
    public String getAccountByName(
            @ToolParam(description = "Seller Account Name") String name) {
        List<SellerAccount> accountList = sellerAccountRepository.findByName(name);
        StringBuilder result = new StringBuilder();
        for (SellerAccount account : accountList) {
            result.append(account.toString()).append("\n");
        }
        return result.toString();
    }

    @Tool(description = "Find all Seller Accounts by owner")
    public String getAccountByOwner(
            @ToolParam(description = "Seller Account owner") String owner) {
        List<SellerAccount> accountList = sellerAccountRepository.findByOwner(owner);
        StringBuilder result = new StringBuilder();
        for (SellerAccount account : accountList) {
            result.append(account.toString()).append("\n");
        }
        return result.toString();
    }
}

说明

  • 工具允许服务端公开可供大模型调用的工具。在此示例中,我创建了两个工具,分别按名称和所有者搜索 account 表。
  • 根据提示词,AI 大模型会自动选择正确的方法,但我们需要正确编写名称和描述

步骤 4:创建 MCP 客户端

下载 mcp-client 项目并运行。

步骤 5:测试

数据库表数据

image

使用 Promts 进行测试

image

在这里可以看到,大模型会根据提示词自动选择正确的工具并返回结果,同时还会对结果进行格式化。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。