Spring AI 实现 MCP 服务

添加依赖

引入MCP服务端依赖,如果引入的服务端依赖为:

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-starter-mcp-server</artifactId>
    <version>1.0.3</version>
</dependency>

则只支持STDIO(标准传输)而不支持SSE(服务器发送事件)服务器传输。
因此引入以下依赖:

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

支持SSE(服务器发送事件)服务器传输和可选的STDIO传输(通过设置spring.ai.mcp.server.stdio=true启用)

创建 Spring Boot 项目并添加 Spring AI 依赖:

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-core</artifactId>
    <version>1.0.3</version>
</dependency>

定义 MCP 服务接口

import java.util.Map;
import java.util.stream.Collectors;

/**
 * @author wx
 * @createTime 2025/11/10  11:54
 */

@Service
public class ImageSearchTool {
    /**
     *
     * pexels网站搜索图片的key
     */
    private static final String API_KEY = "your api key";

    // Pexels 常规搜索接口(以文档为准)
    private static final String API_URL = "https://api.pexels.com/v1/search";
    @Tool(description = "search image by web")
    public String searchImage(@ToolParam(description = "Search query keyword") String query) {

        try {
            // 调用第三方图片搜索API
            return String.join(",", searchImageByPexels(query));
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

    }

    private List<String> searchImageByPexels(String query) throws JsonProcessingException {

        Map<String, String> headers = Map.of("Authorization", API_KEY);

        Map<String, Object> params = Map.of("query", query);

        String response = HttpUtil.createGet(API_URL)
                .addHeaders(headers)
                .form(params)
                .execute()
                .body();

       return JSONUtil.parseObj(response)
               .getJSONArray("photos")
               .stream()
               .map(photoObj -> (JSONObject) photoObj)
               .map(photoObj -> photoObj.getJSONObject("src"))
               .map(photo -> photo.getStr("medium"))
               .filter(StringUtils::isNotEmpty)
               .collect(Collectors.toList());

    }

自动配置将自动将工具回调注册为MCP工具。可以让多个spring beans生成ToolCallbacks,自动配置将合并它们。

@Bean
    public ToolCallbackProvider searchImageTools(ImageSearchTool imageSearchTool) {
        return MethodToolCallbackProvider.builder().toolObjects(imageSearchTool).build();
    }

Cherry Studio 调用测试

在这里插入图片描述

配置为SSE类型

对应服务端配置

spring:
  ai:
    mcp:
      server:
        stdio: false
        name: image-search-mcp-server
        version: 1.0.0
        type: SYNC
        instructions: 'search images from pexels'
        request-timeout: 30
        capabilities:
          tool: true
        sse-endpoint: /sse
        sse-message-endpoint: /mcp/message

在这里插入图片描述

结果

在这里插入图片描述

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐