该项目实现了一个模型上下文协议(MCP)服务器,该服务器为大型语言模型(LLM)代理提供文件系统操作和网络访问工具。它使AI助手能够通过一组定义良好的操作与本地文件系统和网络资源进行交互。
服务器提供了以下操作:
这些操作作为大型语言模型的工具通过模型上下文协议(MCP)暴露出来,允许AI系统安全地与文件系统交互并访问网络资源。
使用Maven构建项目:
mvn clean package
使用以下命令运行服务器:
java -jar target/devoxx-filesystem-0.0.1-SNAPSHOT.jar
服务器使用标准输入输出(STDIO)进行通信,因此不公开任何HTTP端点。它设计为由MCP客户端启动。
readFile(String fullPathFile)
从文件系统中读取文件的全部内容。处理各种文本编码,并在无法读取文件时提供详细的错误消息。
writeFile(String path, String content)
创建新文件或完全覆盖现有文件的新内容。如果父目录不存在,则会创建它们。
editFile(String path, String edits, Boolean dryRun)
对文本文件进行基于行的编辑。每个编辑用新的内容替换精确的行序列。返回一个类似于git风格的差异,显示所做的更改。dryRun参数允许查看更改而不应用它们。
searchFiles(String path, String pattern)
递归搜索匹配模式的文件和目录。从起始路径开始搜索所有子目录。搜索是大小写不敏感的,并且匹配部分名称。
listDirectory(String path)
获取指定路径下所有文件和目录的详细列表。结果清楚地区分文件和目录,并带有额外的元数据。
grepFiles(String directory, String pattern, String fileExtension, Boolean useRegex, Integer contextLines, Integer maxResults, Boolean ignoreCase)
在文件中搜索文本模式。返回带有行号和上下文的匹配文件。类似于Unix的'grep'命令,但具有额外的上下文显示功能。支持正则表达式模式、大小写不敏感搜索以及匹配前后的上下文行数。
createDirectory(List<String> directories)
创建新目录或确保目录存在。可以在一次操作中创建多个目录。如果目录已经存在,则操作会无声成功。非常适合设置项目的目录结构或确保所需路径存在。
executeBash(String command, String workingDirectory, Integer timeoutSeconds)
在系统shell中执行Bash命令并返回输出。此工具允许运行系统命令并捕获其标准输出和错误流。谨慎使用,因为某些命令可能具有全局影响。
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
项目使用:
EditFileService包括复杂的差异生成以跟踪更改SearchFilesService支持通配符模式以灵活匹配文件FetchWebpageService包括可配置的超时和强大的错误处理以处理网络请求此服务器可以轻松地通过MCP(模型上下文协议)支持与DevoxxGenie集成。以下是设置方法:
名称: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将自动发现此MCP服务器提供的工具。AI助手可以使用这些工具来:
所有操作将以运行DevoxxGenie应用程序的用户的权限执行。
编辑您的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的位置。
使用此服务器时,请注意: