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

相关推荐
lzp079110 小时前
元数据驱动开发 - 面向对象编程思想的补充(上)
spring boot·后端·ui
搬砖的小码农_Sky10 小时前
AI Agent:macOS Sequoia 部署 OpenClaw 完整教程
人工智能·macos·ai·人机交互
无心水11 小时前
【Harness:设计规范】15、Harness 成熟度模型(H0-H3):你的 AI 智能体在第几层
人工智能·设计规范·openclaw·养龙虾·harness·hermes·honcho
Raink老师17 小时前
【AI面试临阵磨枪-79】实时数据 RAG:订单、商家、物流、天气、动态库存
人工智能·面试·职场和发展
脑极体17 小时前
点亮星河AI+鸿蒙,一座艺术场馆的日神觉醒
人工智能·华为·harmonyos
Cosolar17 小时前
Chroma向量库面试学习指南
数据库·人工智能·面试·职场和发展·数据库架构
BUG指挥官17 小时前
Claude Code的自动化编程
人工智能
意图共鸣17 小时前
意图共鸣科技《认知智能白皮书》——感知与执行分离:认知架构(CA)如何重塑大模型底层结构
人工智能·架构
等一个人的@17 小时前
让数据自己开口:数睿通智库新增智能问数模块
人工智能·自然语言处理
ZGi.ai17 小时前
人工审查节点:让自动化工作流多一步人工把关
运维·人工智能·自动化·人机协同·智能体工作流·人工审查