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

相关推荐
Csvn1 小时前
SSH 远程管理与安全加固 — 运维的守门之道
后端
IT_陈寒1 小时前
Python搞不定字符串编码?这破玩意坑我两小时!
前端·人工智能·后端
菜鸟谢2 小时前
Rust 智能指针完整详解
后端
大模型真好玩3 小时前
什么是Loop Engineering?最通俗易懂的Loop Engineering核心概念
人工智能·agent·deepseek
菜鸟谢3 小时前
Rust 函数完整知识点详解
后端
叁两3 小时前
前端转型AI Agent该如何学习?(前置篇)
前端·人工智能·node.js
爱勇宝3 小时前
淡泊名利之前,先承认我们都很焦虑
前端·后端·程序员
菜鸟谢3 小时前
Rust 闭包(Closure)完整详解
后端
ServBay3 小时前
如何利用本地技术栈构建 0 成本 AI SaaS 雏形
后端·aigc·ai编程
菜鸟谢3 小时前
Rust 集合 + 迭代器完整详解
后端