技术选型与项目构建

基础环境

  • Spring Boot 3.4.2:Spring AI当前支持的Spring Boot版本
  • JDK 17:Spring Boot 3.x的最低要求
  • MCP Server实现方式
    • Standard Input/Output (STDIO) - spring-ai-starter-mcp-server
    • Spring MVC (Server-Sent Events) - spring-ai-starter-mcp-server-webmvc(本文采用)
    • Spring WebFlux (Reactive SSE) - spring-ai-starter-mcp-server-webflux
特性 STDIO Spring MVC (SSE) WebFlux (Reactive SSE)
通信协议 标准输入/输出 HTTP + SSE HTTP + Reactive SSE
编程模型 同步 同步 响应式
I/O模型 阻塞 阻塞 非阻塞
线程模型 单线程 线程池(每个连接一个线程) 事件循环(少量线程)
并发能力
资源消耗 极低 中等
学习曲线 简单 中等 较陡峭
适用场景 命令行工具/本地调试 传统Web应用 高并发/云原生应用
集成复杂度 简单 中等 中等
调试难度 简单 中等 较复杂

Maven依赖配置

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-dependencies</artifactId>
      <version>3.4.2</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

<dependencies>
  <!-- MCP核心依赖 -->
  <dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-mcp-server-webmvc-spring-boot-starter</artifactId>
    <version>1.0.0-M6</version>
  </dependency>

  <!-- 开发工具 -->
  <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
  </dependency>

  <!-- HTTP客户端 -->
  <dependency>
    <groupId>org.apache.httpcomponents.client5</groupId>
    <artifactId>httpclient5</artifactId>
  </dependency>
  <dependency>
    <groupId>org.apache.httpcomponents.core5</groupId>
    <artifactId>httpcore5</artifactId>
  </dependency>
  <dependency>
    <groupId>org.apache.httpcomponents.core5</groupId>
    <artifactId>httpcore5-h2</artifactId>
  </dependency>

  <!-- Spring基础依赖 -->
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
</dependencies>

MCP服务配置

application.yml配置

spring:
  application:
    name: mcp-name
    
ai:
  mcp:
    server:
      name: mcp-name
      version: 1.0.0
      type: SYNC
      sse-endpoint: /sse

服务实现

通过简单的HTTP转发,我们可以将现有服务接口快速暴露为MCP Server:

@Service
public class SmdMcpService {
    @Autowired
    private RestTemplate restTemplate;

    @Value("${smd.service.url}")
    private String smdServiceUrl;

    /**
     * 获取表结构信息
     */
    @Tool(name = "getSmdInfo", description = "获取表结构信息")
    public String getSmdInfo(
        @ToolParam(description = "业务系统") String businessSystem,
        @ToolParam(description = "表名") Set<String> tableNames) {

        Map<String, Object> params = new HashMap<>();
        params.put("businessSystem", businessSystem);
        params.put("tableNames", tableNames);

        ResponseEntity<String> response = restTemplate.postForEntity(
            smdServiceUrl + "/mcp/api/getSmdInfo",
            params,
            String.class);

        return response.getBody();
    }

    /**
     * 根据表名生成增删改查代码
     */
    @Tool(name = "getCRUDCode", description = "根据表名生成增删改查代码")
    public List<Map<String, Object>> getCRUDByTable(
        @ToolParam(description = "业务系统") String businessSystem,
        @ToolParam(description = "表名") Set<String> tableNames,
        @ToolParam(description = "模块名,非必填") String moduleName) {

        Map<String, Object> params = new HashMap<>();
        params.put("businessSystem", businessSystem);
        params.put("tableNames", tableNames);
        params.put("moduleName", moduleName);
        params.put("author", "smd-mcp");

        HttpEntity<Map<String, Object>> httpEntity = new HttpEntity<>(params);
        ResponseEntity<List<Map<String, Object>>> response = restTemplate.exchange(
            smdServiceUrl + "/mcp/api/crud",
            HttpMethod.POST,
            httpEntity,
            new ParameterizedTypeReference<List<Map<String, Object>>>() {});

        return response.getBody();
    }
}

MCP工具注册配置

@Configuration
@Slf4j
public class McpConfig {
    @Bean
    public ToolCallbackProvider smdToolCallbackProvider(
        SmdMcpService smdMcpService, 
        RulesMcpService rulesMcpService) {

        return MethodToolCallbackProvider.builder()
        .toolObjects(smdMcpService, rulesMcpService)
        .build();
    }
}

测试与验证

客户端配置

使用支持MCP的客户端(如Cursor,Trae)进行测试,配置mcp.json文件:

{
    "mcpServers": {
        "mcp-name": {
            "url": "http://localhost:8089/sse",
            "env": {
                "API_KEY": "value"
            }
        }
    }
}

配置完成后,客户端将自动发现MCP Server提供的工具接口。

MCP生态展望

MCP目前仍处于发展初期,生态构建是当前的重点。通过统一标准构建的生态将促进整个领域的发展。

企业应用建议

  • 零侵入改造:无需修改原有服务代码即可获得MCP能力
  • 跨模型兼容:传统服务可无缝对接大模型生态
  • 低成本投入:大幅缩短业务接入MCP的改造周期

未来可考虑开发MCP代理服务,通过简单配置即可将现有业务转换为MCP Server,为AI智能体提供更广泛的服务接入能力。

参考资源

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐