什么是 MCP?

MCP(Model Context Protocol,模型上下文协议)是由 Anthropic 提出的一种开放协议,它让 AI 助手(如 Claude)能够安全地连接到外部工具、数据库、API 等资源。

你可以把 MCP 理解为 AI 的"插件系统"——通过 MCP,AI 不再局限于对话本身,而是可以调用你编写的工具来完成真实任务。本文将带你用 Java(Spring Boot)从零搭建一个可运行的 MCP 服务器。

准备工作

开始之前,请确保已安装以下环境:

  • JDK 17+(推荐 JDK 21)
  • Maven 3.8+
  • IDE(推荐 IntelliJ IDEA)

第一步:创建 Spring Boot 项目

前往 https://start.spring.io 生成项目骨架,或直接使用下面的 pom.xml 配置:

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>my-mcp-server</artifactId>
  <version>1.0.0</version>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.3.0</version>
  </parent>

  <dependencies>
    <dependency>
      <groupId>org.springframework.ai</groupId>
      <artifactId>spring-ai-mcp-server-spring-boot-starter</artifactId>
      <version>0.8.1</version>
    </dependency>
  </dependencies>
</project>

第二步:编写 MCP 工具

MCP 服务的核心是定义"工具(Tool)"。下面创建一个工具类,包含两个简单功能:获取当前时间整数求和

2.1 创建工具类

package com.example.mcp;

import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

@Component
public class MyTools {

    @Tool(description = "获取当前系统时间")
    public String getCurrentTime() {
        LocalDateTime now = LocalDateTime.now();
        return now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
    }

    @Tool(description = "计算两个整数的和")
    public int add(
        @ToolParam(description = "第一个整数") int a,
        @ToolParam(description = "第二个整数") int b
    ) {
        return a + b;
    }
}

2.2 注册工具到 MCP

package com.example.mcp;

import org.springframework.ai.tool.ToolCallbackProvider;
import org.springframework.ai.tool.method.MethodToolCallbackProvider;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class McpConfig {

    @Bean
    public ToolCallbackProvider myToolCallbackProvider(MyTools myTools) {
        return MethodToolCallbackProvider.builder()
                .toolObjects(myTools)
                .build();
    }
}

2.3 主启动类

package com.example.mcp;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class McpServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(McpServerApplication.class, args);
    }
}

2.4 配置文件(application.properties)

spring.application.name=my-mcp-server
spring.ai.mcp.server.name=my-tools
spring.ai.mcp.server.version=1.0.0
spring.ai.mcp.server.type=SYNC

第三步:构建与启动

3.1 本地运行(开发调试)

mvn spring-boot:run

服务默认以标准输入输出(stdio)模式运行,适合直接与 Claude Desktop 等 MCP 客户端集成。

3.2 打包为 JAR

mvn clean package -DskipTests
# 生成文件:target/my-mcp-server-1.0.0.jar

第四步:接入 Claude Desktop

找到 Claude Desktop 的配置文件(macOS 在 ~/Library/Application Support/Claude/claude_desktop_config.json,Windows 在 %APPDATA%Claudeclaude_desktop_config.json),添加如下配置:

{
  "mcpServers": {
    "my-java-mcp": {
      "command": "java",
      "args": ["-jar", "/path/to/my-mcp-server-1.0.0.jar"]
    }
  }
}

保存后重启 Claude Desktop,即可在对话中直接使用你定义的工具!

验证效果

重启后在 Claude 对话框中输入:

帮我获取一下当前时间

Claude 会自动调用你的 getCurrentTime() 工具并返回结果。你也可以让它计算数字,它会调用 add() 方法。

总结

通过以上步骤,你已经完成了一个完整的 Java MCP 服务:

  1. 用 Spring Boot 搭建项目结构
  2. @Tool 注解快速定义工具方法
  3. 配置并注册 ToolCallbackProvider
  4. 打包后接入 Claude Desktop 使用

MCP 的强大之处在于它的扩展性——按照同样的模式,你可以接入数据库查询、文件操作、第三方 API 等各种功能,让 AI 真正成为你高效的开发助手。

如果你在实践中遇到问题,欢迎在评论区留言交流!

Logo

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

更多推荐