Java如何使用MCP

一、环境准备

  1. 依赖配置
  • Spring AI方案(推荐企业级应用):
<!-- Spring AI MCP Server -->
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-mcp-server-webflux-spring-boot-starter</artifactId>
    <version>1.0.0-M6</version>
</dependency>

<!-- LangChain4j方案 -->
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-mcp</artifactId>
    <version>1.0.0-beta2</version>
</dependency>
  1. 工具准备
  • 客户端工具:Claude Desktop、Cursor、Cherry Studio(需配置MCP服务器地址)
  • 本地调试:Java JDK 17+,IDE(IntelliJ/VS Code)

二、服务器开发

1. Spring AI方案(SSE模式)

步骤:

  1. 配置application.yml:

    spring:
      ai:
        mcp:
          server:
            name: my-java-server
            version: 1.0.0
    server:
      port: 8080
    
  2. 定义工具方法:

    @Service
    public class WeatherService {
        @Tool(description = "查询天气")
        public String getWeather(@ToolParameter("城市名") String city) {
            // 调用第三方天气API
            return "北京今日晴,28℃";
        }
    }
    
  3. 注册工具:

    @Configuration
    public class McpConfig {
        @Bean
        public ToolCallbackProvider weatherTools(WeatherService service) {
            return MethodToolCallbackProvider.builder()
                .toolObjects(service)
                .build();
        }
    }
    
  4. 启动服务:

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

2. LangChain4j方案(Stdio模式)

步骤:

  1. 构建客户端:

    McpTransport transport = new StdioMcpTransport.Builder()
        .command(List.of("java", "-jar", "mcp-server.jar"))
        .build();
    
    McpClient client = new DefaultMcpClient.Builder()
        .transport(transport)
        .build();
    
  2. 调用工具:

    String result = client.execute("获取北京天气");
    System.out.println(result); // 输出:北京今日晴,28℃
    

三、客户端集成

  1. Cherry Studio配置
  • 图形化界面:
    • 进入Settings > MCP Servers,添加服务器:
      {
        "mcpServers": {
          "java-server": {
            "isActive": true,
            "command": "java",
            "args": ["-jar", "/path/to/mcp-server.jar"]
          }
        }
      }
      
  • 测试工具:输入“北京天气”触发调用。
  1. Spring Boot客户端调用
@Autowired
private McpClient mcpClient;
public String queryWeather(String city) {
    return mcpClient.execute("查询" + city + "天气");
}

四、传输模式对比与选择

模式 适用场景 优点 缺点
Stdio 本地开发、轻量级服务 配置简单,无需网络依赖 仅支持单进程,不适用分布式
SSE 远程服务、高并发场景 支持多客户端、长连接 需HTTP服务器配置

五、常见问题与优化

  1. 依赖冲突:

    • 使用Maven的dependency:tree检查冲突,优先升级Spring AI至最新版(1.0.0-M7+)。
  2. 性能优化:

    • 连接池:配置McpClient连接池参数(如最大连接数、超时时间)。
    • 异步调用:使用CompletableFuture处理高并发请求。
  3. 安全增强:

    • 添加JWT认证:
      .header("Authorization", "Bearer " + token)
      

六、实战案例

案例1:Gitee仓库管理

  1. 集成Gitee MCP Server:

    chmod +x mcp-gitee  赋予执行权限
    
  2. Java客户端调用:

    McpTransport transport = new StdioMcpTransport.Builder()
        .command(List.of("/path/to/mcp-gitee", "-token", "GITEE-TOKEN"))
        .build();
    
    GiteeAiService service = AiServices.builder(GiteeAiService.class)
        .mcpClient(new DefaultMcpClient(transport))
        .build();
    
    String result = service.createRepository("test-repo"); // 创建仓库
    

案例2:天气服务调用
通过Claude Desktop直接调用Java开发的MCP服务:

用户输入:北京天气如何?
Claude响应:北京今日晴,28℃

七、总结

Java通过Spring AI和LangChain4j框架可高效实现MCP协议,支持本地开发与远程服务部署。推荐企业级项目使用Spring AI的SSE模式,开发者可快速集成工具链(如数据库、API)并实现自动化任务。更多高级功能(如权限控制、日志追踪)可参考Spring AI官方文档。

你可能感兴趣的:(#,Java知识点,java,人工智能,学习,笔记,开发语言)