第一步添加依赖:

<!-- Spring AI BOM 管理版本 -->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-bom</artifactId>
            <version>1.0.0-M5</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<!-- MCP Server Starter - 核心依赖 -->
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-mcp-server-webmvc-spring-boot-starter</artifactId>
</dependency>

第二步:

spring:
  ai:
    mcp:
      server:
        enabled: true              # 启用 MCP 服务器
        name: code-sandbox-mcp     # 服务器名称(客户端可见)
        version: 1.0.0             # 版本号

第三步:

@Component
public class CodeSandboxTools {

    private final CodeSandbox codeSandbox;  // 注入已有的沙箱服务

    /**
     * @Tool 注解:声明这是一个 MCP 工具
     * description:AI 模型会看到这个描述来决定何时调用
     */
    @Tool(description = "执行 Java 代码并返回运行结果...")
    public String executeJavaCode(
            @ToolParam(description = "完整的 Java 源代码...") String code,
            @ToolParam(description = "输入测试用例...") String inputs) {
        
        // 调用已有的代码沙箱逻辑
        ExecuteCodeRequest request = new ExecuteCodeRequest();
        request.setCode(code);
        request.setInputList(Arrays.asList(inputs.split("\\|\\|\\|")));
        
        ExecuteCodeResponse response = codeSandbox.executeCode(request);
        return formatResponse(response);
    }

    @Tool(description = "仅编译 Java 代码检查语法错误...")
    public String compileJavaCode(@ToolParam(description = "完整的 Java 源代码") String code) {
        // 编译逻辑...
    }
}

定义这个工具让大模型能识别到你这个工具

最后一步:

@Configuration
public class McpServerConfig {

    @Bean
    public ToolCallbackProvider codeSandboxToolCallbackProvider(CodeSandboxTools tools) {
        // 将工具类注册为 MCP 工具提供者
        return MethodToolCallbackProvider.builder()
                .toolObjects(tools)  // 扫描 @Tool 注解的方法
                .build();
    }
}

把这个mcp工具注册到mcp服务器暴露它相当于是

① @Configuration

告诉 Spring:这个类包含 Bean 定义,启动时要扫描它。

② @Bean + 返回 ToolCallbackProvider

  • ToolCallbackProvider 是 Spring AI MCP 的核心接口
  • MCP Server 启动时会自动查找所有 ToolCallbackProvider Bean
  • 找到后,把它们提供的工具注册到 MCP 服务器

③ 参数注入 CodeSandboxTools tools

  • Spring 自动注入你之前定义的 @Component 类
  • 这个类里有 @Tool 注解的方法

④ MethodToolCallbackProvider.builder().toolObjects(tools)

这是最关键的一步,它做了以下事情:

CodeSandboxTools 类

        │

        ▼ 反射扫描

┌───────────────────────────────────────────────────────────┐

│  找到所有 @Tool 注解的方法:                                │

│  - executeJavaCode(String code, String inputs)           │

│  - compileJavaCode(String code)                          │

└───────────────────────────────────────────────────────────┘

        │

        ▼ 解析注解

┌───────────────────────────────────────────────────────────┐

│  提取元信息:                                              │

│  - 方法名 → 工具名                                         │

│  - @Tool(description=...) → 工具描述                      │

│  - @ToolParam(description=...) → 参数描述                 │

│  - 参数类型 → JSON Schema                                 │

└───────────────────────────────────────────────────────────┘

        │

        ▼ 生成 ToolCallback

┌───────────────────────────────────────────────────────────┐

│  为每个方法创建一个 ToolCallback 对象:                     │

│  - 包含工具的完整定义(名称、描述、参数 Schema)              │

│  - 包含调用逻辑(收到请求时如何执行方法)                     │

└───────────────────────────────────────────────────────────┘

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐