MCP简单应用:使用SpringAI + Cline + DeepSeek实现AI创建文件并写入内容

实现功能

通过与AI的对话,让AI自动完成将指定内容写入指定目标文件的功能,效果如下:

环境

windows 11、jdk17、SpringBoot 3.4.4

步骤

1、安装vscode并安装Cline插件

2、在Cline中配置大模型

Cline可以配置多种大模型,比如本地的Ollama、阿里的千问、deepseek等等,这里以配置deepseek为例,先去deepseek开放平台注册账号,然后随便充值十来块钱购买使用量,然后创建api-key:

接着就可以在Cline中配置deepseek了:

配置好后可以返回Cline的对话界面,问一个简单的问题试一下大模型是否生效,注意对话界面的右下角有Plan、Act两个选项,Plan可以理解为一般的对话聊天,Act就是需要大模型配合MCP服务执行任务,这里测试大模型是否生效就选择Plan就行,发句"你好"测试一下:

3、实现MCP服务

首先创建一个springboot项目(注意最好使用JDK17+和springboot3.x),引入以下依赖:

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.4.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>ai-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>ai-demo</name>
    <description>ai-demo</description>
    <url/>
    <licenses>
        <license/>
    </licenses>
    <developers>
        <developer/>
    </developers>
    <scm>
        <connection/>
        <developerConnection/>
        <tag/>
        <url/>
    </scm>
    <properties>
        <java.version>17</java.version>
        <spring-ai.version>1.0.0-M6</spring-ai.version>
    </properties>
   <dependencies>
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-mcp-server-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.36</version>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.ai</groupId>
                <artifactId>spring-ai-bom</artifactId>
                <version>${spring-ai.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

其中最重要的一个依赖是spring-ai-mcp-server-spring-boot-starter,引入这个依赖后项目才能和大模型进行通信,之后编写服务类,实现文件写入的具体逻辑:

java 复制代码
import com.example.aidemo.bean.FileWriteRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.stereotype.Service;

import java.nio.file.Path;
import java.nio.file.Paths;

@Slf4j
@Service
public class LocalFileService {

    @Tool(description = "写入本地文件,自动创建文件和目录")
    public String writeLocalFile(FileWriteRequest request){
        String filePath = request.getFilePath();
        Path path = Paths.get(filePath);
        Path pathParent = path.getParent();
        String content = request.getContent(); // 文件内容

        try {
            if (!pathParent.toFile().exists()) {
                pathParent.toFile().mkdirs();
            }
            java.nio.file.Files.write(path, content.getBytes());
            return "写入成功";
        } catch (Exception e) {
            log.error("写入文件失败", e);
            return "写入文件失败";
        }
    }
}
java 复制代码
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyDescription;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@NoArgsConstructor
@AllArgsConstructor
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class FileWriteRequest {
    @JsonProperty(required = true, value = "filePath")
    @JsonPropertyDescription("需要写入的文件路径")
    private String filePath;
    @JsonProperty(required = true, value = "content")
    @JsonPropertyDescription("写入文件的具体内容")
    private String content;
}

将服务类注册进MCP服务:

java 复制代码
import com.example.aidemo.service.LocalFileService;
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 McpServerConfig {
    @Bean
    public ToolCallbackProvider localFileToolCallbackProvider(LocalFileService localFileService) {
        return MethodToolCallbackProvider
                .builder()
                .toolObjects(localFileService)
                .build();
    }
}

之后可以启动项目查看日志:

在日志里可以看到,已经成功注册了一个工具,就是之前编写的文件写入服务。然后将该项目打成jar包就行了

4、在Cline中配置MCP服务

在Cline的右上方点击MCP Server,再点击Installed,再点击下面的Configure MCP Servers

配置文件,其他的基本都是固定的,需要改变的是jar包的位置和方法名:

如果方法涉及到中文输入,比如查询某个城市的天气,需要在启动命令中添加:

ini 复制代码
-Dfile.encoding=UTF-8
-Dconsole.encoding=UTF-8

配置完毕保存后,Cline会自动更新配置,更新完毕后就可以在Installed一栏中看到本地的MCP服务了:

至此已全部完成,可以返回Cline的对话界面向大模型交代任务了,大模型会根据语义理解,并自动调用本地配置好的MCP服务完成任务

相关推荐
paopaokaka_luck28 分钟前
基于SpringBoot+Uniapp的健身饮食小程序(协同过滤算法、地图组件)
前端·javascript·vue.js·spring boot·后端·小程序·uni-app
Villiam_AY32 分钟前
Redis 缓存机制详解:原理、问题与最佳实践
开发语言·redis·后端
Ronin-Lotus4 小时前
深度学习篇---剪裁&缩放
图像处理·人工智能·缩放·剪裁
魔尔助理顾问4 小时前
系统整理Python的循环语句和常用方法
开发语言·后端·python
程序视点4 小时前
Java BigDecimal详解:小数精确计算、使用方法与常见问题解决方案
java·后端
cpsvps4 小时前
3D芯片香港集成:技术突破与产业机遇全景分析
人工智能·3d
你的人类朋友4 小时前
❤️‍🔥微服务的拆分策略
后端·微服务·架构
国科安芯5 小时前
抗辐照芯片在低轨卫星星座CAN总线通讯及供电系统的应用探讨
运维·网络·人工智能·单片机·自动化
AKAMAI5 小时前
利用DataStream和TrafficPeak实现大数据可观察性
人工智能·云原生·云计算
Ai墨芯1115 小时前
深度学习水论文:特征提取
人工智能·深度学习