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服务完成任务

相关推荐
啊巴矲2 分钟前
小白从零开始勇闯人工智能:计算机视觉初级篇(初识Opencv中)
人工智能·opencv·计算机视觉
-dcr3 分钟前
50.智能体
前端·javascript·人工智能·ai·easyui
好好研究3 分钟前
SpringBoot小案例打包执行流程
java·spring boot·后端
BingoGo4 分钟前
免费可商用商业级管理后台 CatchAdmin V5 正式发布 插件化与开发效率的全面提升
vue.js·后端·php
向上的车轮6 分钟前
AI编辑器的兴起:如何用好AI编辑器解决实际问题?
人工智能·编辑器
咚咚王者7 分钟前
人工智能之核心基础 机器学习 第十一章 无监督学习总结
人工智能·学习·机器学习
WhereIsMyChair8 分钟前
一文解读端到端生成式推广搜系统
人工智能·搜索
筑梦悠然8 分钟前
AI的攻坚克难
人工智能
白日做梦Q12 分钟前
实时语义分割:BiSeNet与Fast-SCNN深度对比与实践启示
人工智能·深度学习·计算机视觉
云和数据.ChenGuang13 分钟前
Uvicorn 是 **Python 生态中用于运行异步 Web 应用的 ASGI 服务器**
服务器·前端·人工智能·python·机器学习