1.什么是 Model Context Protocol(MCP)?

Model Context Protocol(MCP) 是一种标准化协议,旨在让大语言模型更轻松地连接到外部数据源和工具。

你可以把 MCP 类比为 通用接口(如 USB-C)
无论设备类型如何,只要支持这种接口,就可以实现互联互通。不同的是,MCP 连接的不是物理设备,而是 AI 模型与外部资源,比如数据库、API、插件服务等。

2.MCP总体架构

从本质上讲,MCP 遵循客户端-服务器架构,其中主机应用程序可以连接到多个服务器:

  • MCP 主机
    如 Claude Desktop、IDE 或其他 AI 工具中,用于通过 MCP 协议访问数据的程序。

  • MCP 客户端
    负责与 MCP 服务器建立 1:1 连接的协议客户端,起到通信桥梁作用。

  • MCP 服务器
    基于标准化模型上下文协议,暴露特定功能的轻量级服务程序。

  • 本地数据源
    MCP 服务器可以安全访问本地计算机中的文件、数据库或服务。

  • 远程服务
    MCP 服务器还可以连接互联网上的外部系统,如 API 服务,实现更丰富的功能调用。

MCP 服务器是 Model Context Protocol (MCP) 架构中的基础组件,为客户端提供工具、资源和功能。 它实现了协议的服务器端部分。

3.springAI + Mcp实战

本节将带您一步步搭建一个基于 Spring AI MCP 的 Java MCP 服务端,帮助您在各种客户端中便捷调用企业级 AI 服务。

前提条件安装MCP Java 开发工具包 MCP Java 开发工具包download

1.准备环境,maven坐标导入
<dependency>        
  <groupId>org.springframework.ai</groupId>        
  <artifactId>spring-ai-mcp-server-webmvc-spring-boot-starter</artifactId>
</dependency>

对于 HTTP SSE 传输实现,添加以下依赖之一:

<dependency>
    <groupId>io.modelcontextprotocol.sdk</groupId>
    <artifactId>mcp-spring-webflux</artifactId>
</dependency>

<!-- 基于 Spring WebMVC 的 SSE 服务器传输 -->
<dependency>
    <groupId>io.modelcontextprotocol.sdk</groupId>
    <artifactId>mcp-spring-webmvc</artifactId>
</dependency>
2.service业务编写
@Service
public class MeilisearchService {

    /**
     * 使用工具方法注解,提供对 PIG ISSUE 知识库的检索功能,
     * 用于辅助用户解决技术相关问题。
     *
     * @param question 用户描述的问题
     * @return 匹配到的最相关知识内容
     */
    @Tool(description = "检索 PIG ISSUE 知识库,辅助解决技术类问题")
    public String queryQuestion(@ToolParam(description = "用户提出的问题描述") String question) {

        // 创建 Meilisearch 客户端,使用默认或指定配置
        Client client = new Client(new Config());

        // 构造查询请求对象,指定查询内容和参数
        SearchRequest request = new SearchRequest(question)
                .setShowMatchesPosition(true) // 显示匹配位置
                .setSort(new String[]{"lvl2:desc"}) // 根据层级 lvl2 降序排序
                .setLimit(1); // 仅返回最相关的一条结果

        // 执行查询
        SearchResult results = client.index("pigx-doc").search(request);

        // 将结果转换为字符串格式返回,格式如:[标题] 内容
        return results.getHits().stream()
                .map(hit -> "【" + hit.get("lvl0") + "】" + hit.get("text"))
                .collect(Collectors.joining("\n\n")); // 多条结果间以空行分隔
    }
}

3.注册服务
@Configuration  // 表示该类是一个Spring配置类,提供配置给Spring容器
public class McpConfig {

    /**
     * 定义ToolCallbackProvider的Bean,它与MeilisearchService集成。
     * 该方法设置回调提供者,使用给定的搜索服务。
     *
     * @param searchService 处理搜索操作的服务。
     * @return 配置了提供的搜索服务的ToolCallbackProvider实例。
     */
    @Bean  // 将此方法标记为Spring管理的Bean
    public ToolCallbackProvider documentTools(MeilisearchService searchService) {
        // 创建并返回一个配置了MeilisearchService的ToolCallbackProvider实例
        return MethodToolCallbackProvider.builder()  
            .toolObjects(searchService)  // 设置搜索服务作为工具对象
            .build();  // 构建并返回提供者实例
    }
}
4.配置Mcp客户端
{
  "mcpServers": {
    "pig-issue": {
      "isActive": true,
      "command": "java",
      "args": [
        "-Dspring.ai.mcp.server.stdio=true",
        "-jar",
        "/Users/lengleng/env/repository/io/github/pig-mesh/pig-issue-query-mcp/0.0.1-SNAPSHOT/pig-issue-query-mcp-0.0.1-SNAPSHOT.jar"
      ]
    }
  }
}
5.进行测试

询问问题

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐