返回市场
麦普Java文件系统

麦普Java文件系统

作者:stephanj21 星标更新:2025-06-20

项目介绍

Java 文件系统与 Web MCP 服务器

该项目实现了一个模型上下文协议(MCP)服务器,该服务器为大型语言模型(LLM)代理提供文件系统操作和网络访问工具。它使AI助手能够通过一组定义良好的操作与本地文件系统和网络资源进行交互。

功能

服务器提供了以下操作:

文件系统操作

  • 读取文件:以适当的编码检测读取文件的全部内容
  • 写入文件:创建或覆盖文件的新内容
  • 编辑文件:基于行的编辑,并生成类似于git风格的差异
  • 搜索文件:使用通配符模式递归搜索文件和目录
  • 列出目录:获取目录内容的详细列表
  • 创建目录:创建目录和嵌套目录结构
  • grep 文件:在文件中搜索文本模式,带有行号和上下文,类似于Unix的grep命令
  • 执行Bash命令:在系统shell中执行Bash命令并捕获其输出

网络操作

  • 获取网页:从网页中检索内容,具有可配置的超时设置
  • 提取HTML内容:从HTML文档中提取文本内容

这些操作作为大型语言模型的工具通过模型上下文协议(MCP)暴露出来,允许AI系统安全地与文件系统交互并访问网络资源。

使用DevoxxGenie的MCP Java工具示例

示例截图

开始使用

先决条件

  • Java 17 或更高版本
  • Maven 3.6+
  • Spring Boot 3.3.6
  • Spring AI MCP 服务器组件

构建项目

使用Maven构建项目:

mvn clean package

运行服务器

使用以下命令运行服务器:

java -jar target/devoxx-filesystem-0.0.1-SNAPSHOT.jar

服务器使用标准输入输出(STDIO)进行通信,因此不公开任何HTTP端点。它设计为由MCP客户端启动。

工具服务

文件系统工具

ReadFileService

readFile(String fullPathFile)

从文件系统中读取文件的全部内容。处理各种文本编码,并在无法读取文件时提供详细的错误消息。

WriteFileService

writeFile(String path, String content)

创建新文件或完全覆盖现有文件的新内容。如果父目录不存在,则会创建它们。

EditFileService

editFile(String path, String edits, Boolean dryRun)

对文本文件进行基于行的编辑。每个编辑用新的内容替换精确的行序列。返回一个类似于git风格的差异,显示所做的更改。dryRun参数允许查看更改而不应用它们。

SearchFilesService

searchFiles(String path, String pattern)

递归搜索匹配模式的文件和目录。从起始路径开始搜索所有子目录。搜索是大小写不敏感的,并且匹配部分名称。

ListDirectoryService

listDirectory(String path)

获取指定路径下所有文件和目录的详细列表。结果清楚地区分文件和目录,并带有额外的元数据。

GrepFilesService

grepFiles(String directory, String pattern, String fileExtension, Boolean useRegex, Integer contextLines, Integer maxResults, Boolean ignoreCase)

在文件中搜索文本模式。返回带有行号和上下文的匹配文件。类似于Unix的'grep'命令,但具有额外的上下文显示功能。支持正则表达式模式、大小写不敏感搜索以及匹配前后的上下文行数。

CreateDirectoryService

createDirectory(List<String> directories)

创建新目录或确保目录存在。可以在一次操作中创建多个目录。如果目录已经存在,则操作会无声成功。非常适合设置项目的目录结构或确保所需路径存在。

BashService

executeBash(String command, String workingDirectory, Integer timeoutSeconds)

在系统shell中执行Bash命令并返回输出。此工具允许运行系统命令并捕获其标准输出和错误流。谨慎使用,因为某些命令可能具有全局影响。

网络工具

FetchWebpageService

fetchWebpage(String url, Integer timeoutMs)

从URL获取或读取网页并返回其内容。服务使用jsoup连接到网页并检索其内容。可选的timeoutMs参数允许设置自定义连接超时。

测试

运行测试

为所有服务类提供了一整套单元测试。使用以下命令运行它们:

mvn test

测试使用JUnit 5和Mockito模拟外部依赖项,如用于网络请求的jsoup库。

测试客户端

ClientStdio.java中提供了一个测试客户端,演示如何使用MCP协议调用工具。

配置

应用程序通过application.properties进行配置:

spring.main.web-application-type=none
spring.main.banner-mode=off
logging.pattern.console=

spring.ai.mcp.server.name=filesystem-server
spring.ai.mcp.server.version=0.0.1

logging.file.name=,/JavaFileSystemMCP/target/filesystem-server.log

项目结构

JavaFileSystemMCP/
  src/
    main/
      java/
        com/
          devoxx/
            mcp/
              filesystem/
                tools/
                  EditFileService.java
                  ReadFileService.java
                  WriteFileService.java
                  SearchFilesService.java
                  FetchWebpageService.java
                  ListDirectoryService.java
                  CreateDirectoryService.java
                  GrepFilesService.java
                  BashService.java
                McpServerApplication.java
      resources/
        application.properties
    test/
      java/
        com/
          devoxx/
            mcp/
              filesystem/
                tools/
                  ReadFileServiceTest.java
                  WriteFileServiceTest.java
                  EditFileServiceTest.java
                  SearchFilesServiceTest.java
                  FetchWebpageServiceTest.java
                  ListDirectoryServiceTest.java
                  CreateDirectoryServiceTest.java
                  GrepFilesServiceTest.java
                ClientStdio.java
  pom.xml
  README.md

依赖项

项目使用:

  • Spring Boot 3.3.6
  • Spring AI MCP 服务器组件
  • Jackson用于JSON处理
  • jsoup用于HTML解析和网络内容检索
  • JUnit 5和Mockito用于测试

实现说明

  • 服务器设计为使用标准输入输出(STDIO)传输机制
  • 关闭了横幅模式和控制台日志记录,以便正确工作
  • 错误处理提供了关于操作过程中遇到的问题的详细信息
  • 每个工具服务包括全面的错误处理,并以标准化的JSON格式返回结果
  • EditFileService包括复杂的差异生成以跟踪更改
  • SearchFilesService支持通配符模式以灵活匹配文件
  • FetchWebpageService包括可配置的超时和强大的错误处理以处理网络请求

与DevoxxGenie MCP支持的集成

此服务器可以轻松地通过MCP(模型上下文协议)支持与DevoxxGenie集成。以下是设置方法:

在DevoxxGenie中的配置

  1. 在DevoxxGenie中,访问MCP服务器配置屏幕
  2. 使用以下设置配置服务器:
    • 名称JavaFilesystem(或任何描述性名称)

    • 传输类型STDIO

    • 命令:Java可执行文件的完整路径(例如,/Library/Java/JavaVirtualMachines/liberica-jdk-23.jdk/Contents/Home/bin/java

    • 参数

      -Dspring.ai.mcp.server.stdio=true
      -Dspring.main.web-application-type=none
      -Dlogging.pattern.console=
      -jar
      ~/JavaFileSystemMCP/target/devoxx-filesystem-0.0.1-SNAPSHOT.jar
      

      每个参数占一行。您可能需要更改-jar后面的路径以指向您构建的jar的位置。

使用DevoxxGenie

一旦配置完成,DevoxxGenie将自动发现此MCP服务器提供的工具。AI助手可以使用这些工具来:

  1. 读取和写入本地系统的文件
  2. 搜索文件和目录
  3. 列出目录内容
  4. 对现有文件进行编辑
  5. 在文件中搜索文本模式(grep)
  6. 创建目录和嵌套目录结构
  7. 在系统shell中执行Bash命令
  8. 获取网页并提取内容

所有操作将以运行DevoxxGenie应用程序的用户的权限执行。

使用Claude Desktop

编辑您的claude_desktop_config.json文件如下:

{
  "mcpServers": {
    "filesystem": {
      "command": "/Library/Java/JavaVirtualMachines/liberica-jdk-23.jdk/Contents/Home/bin/java",
      "args": [
        "-Dspring.ai.mcp.server.stdio=true",
        "-Dspring.main.web-application-type=none",
        "-Dlogging.pattern.console=",
        "-jar",
        "~/JavaFileSystemMCP/target/devoxx-filesystem-0.0.1-SNAPSHOT.jar"
      ]
    }  
  }
}

您可能需要更改-jar后面的路径以指向您构建的jar的位置。

示例截图

安全注意事项

使用此服务器时,请注意:

  • LLM代理将有权读取和写入主机系统的文件
  • 代理可以以运行应用程序的用户权限执行Bash命令
  • 代理可以从任何可访问的网络URL获取内容
  • 考虑以适当的权限和受控环境运行服务器
  • 服务器未实现身份验证或授权机制
  • 如果需要限制网络访问,请考虑网络防火墙规则