Java Filesystem & Web MCP Server
Um servidor MCP para agentes LLM realizarem operações no sistema de arquivos e acessarem recursos web.
Documentação
Java Filesystem & Web MCP Server
Este projeto implementa um servidor Model Context Protocol (MCP) que fornece operações de sistema de arquivos e ferramentas de acesso à web para agentes de Large Language Model (LLM). Ele permite que assistentes de IA interajam tanto com o sistema de arquivos local quanto com recursos web através de um conjunto de operações bem definidas.
Recursos
O servidor fornece as seguintes operações:
Operações de Sistema de Arquivos
- Leitura de Arquivos: Ler o conteúdo completo de um arquivo com detecção adequada de codificação
- Escrita de Arquivos: Criar ou sobrescrever arquivos com novo conteúdo
- Edição de Arquivos: Fazer edições baseadas em linhas com geração de diff no estilo git
- Busca de Arquivos: Buscar recursivamente por arquivos e diretórios usando padrões glob
- Listagem de Diretórios: Obter listagens detalhadas do conteúdo de diretórios
- Criação de Diretórios: Criar diretórios e estruturas de diretórios aninhados
- Grep em Arquivos: Buscar padrões de texto dentro de arquivos com números de linha e contexto, semelhante ao comando grep do Unix
- Comando Bash: Executar comandos bash no shell do sistema e capturar sua saída
Operações Web
- Busca de Páginas Web: Recuperar conteúdo de páginas web com timeouts configuráveis
- Extração de Conteúdo HTML: Extrair conteúdo de texto de documentos HTML
Essas operações são expostas como ferramentas para Large Language Models usando o Model Context Protocol (MCP), permitindo que sistemas de IA interajam com segurança com o sistema de arquivos e acessem recursos web.
Exemplo da ferramenta MCP Java com DevoxxGenie
Começando
Pré-requisitos
- Java 17 ou superior
- Maven 3.6+
- Spring Boot 3.3.6
- Componentes Spring AI MCP Server
Compilando o Projeto
Compile o projeto usando Maven:
mvn clean package
Executando o Servidor
O servidor suporta dois modos de transporte:
Modo SSE (baseado em HTTP, padrão)
Execute o servidor para comunicação baseada em SSE:
java -jar target/devoxx-filesystem-0.0.1-SNAPSHOT.jar
Isso inicia um servidor HTTP na porta 8081 com o endpoint SSE em /sse.
Modo STDIO (para clientes MCP como Claude Desktop ou DevoxxGenie)
Para comunicação baseada em STDIO (exigida pela maioria dos clientes MCP):
java -Dspring.ai.mcp.server.stdio=true \
-Dspring.main.web-application-type=none \
-Dspring.main.banner-mode=off \
-Dlogging.pattern.console= \
-jar target/devoxx-filesystem-0.0.1-SNAPSHOT.jar
Flags importantes para o modo STDIO:
-Dspring.ai.mcp.server.stdio=true- Habilita o transporte STDIO-Dspring.main.web-application-type=none- Desativa o servidor web-Dspring.main.banner-mode=off- Desativa o banner do Spring Boot (necessário para evitar corromper a comunicação JSON-RPC)-Dlogging.pattern.console=- Desativa o log do console
Serviços de Ferramentas
Ferramentas de Sistema de Arquivos
ReadFileService
readFile(String fullPathFile)
Lê o conteúdo completo de um arquivo do sistema de arquivos. Lida com várias codificações de texto e fornece mensagens de erro detalhadas se o arquivo não puder ser lido.
WriteFileService
writeFile(String path, String content)
Cria um novo arquivo ou sobrescreve completamente um arquivo existente com novo conteúdo. Cria diretórios pai se eles não existirem.
EditFileService
editFile(String path, String edits, Boolean dryRun)
Faz edições baseadas em linhas em um arquivo de texto. Cada edição substitui sequências exatas de linhas por novo conteúdo. Retorna um diff no estilo git mostrando as alterações feitas. O parâmetro dryRun permite visualizar alterações sem aplicá-las.
SearchFilesService
searchFiles(String path, String pattern)
Busca recursivamente por arquivos e diretórios que correspondem a um padrão. Pesquisa em todos os subdiretórios a partir do caminho inicial. A busca não diferencia maiúsculas de minúsculas e corresponde a nomes parciais.
ListDirectoryService
listDirectory(String path)
Obtém uma listagem detalhada de todos os arquivos e diretórios em um caminho especificado. Os resultados distinguem claramente entre arquivos e diretórios com metadados adicionais.
GrepFilesService
grepFiles(String directory, String pattern, String fileExtension, Boolean useRegex, Integer contextLines, Integer maxResults, Boolean ignoreCase)
Busca padrões de texto dentro de arquivos. Retorna arquivos correspondentes com números de linha e contexto. Semelhante ao comando 'grep' do Unix, mas com recursos adicionais para exibição de contexto. Suporta padrões regex, busca sem diferenciar maiúsculas de minúsculas e linhas de contexto antes/depois das correspondências.
CreateDirectoryService
createDirectory(List<String> directories)
Cria novos diretórios ou garante que diretórios existam. Pode criar vários diretórios em uma única operação. Se um diretório já existir, a operação é concluída silenciosamente. Perfeito para configurar estruturas de diretórios para projetos ou garantir que caminhos necessários existam.
BashService
executeBash(String command, String workingDirectory, Integer timeoutSeconds)
Executa um comando Bash no shell do sistema e retorna a saída. Esta ferramenta permite executar comandos do sistema e capturar seus fluxos de saída padrão e de erro. Use com cautela, pois alguns comandos podem ter efeitos em todo o sistema.
Ferramentas Web
FetchWebpageService
fetchWebpage(String url, Integer timeoutMs)
Busca ou lê uma página web a partir de uma URL e retorna seu conteúdo. O serviço usa jsoup para conectar à página web e recuperar seu conteúdo. O parâmetro opcional timeoutMs permite definir um timeout de conexão personalizado.
Testes
Executando Testes Unitários
Um conjunto abrangente de testes unitários é fornecido para todas as classes de serviço. Execute-os usando:
mvn test
Os testes usam JUnit 5 e Mockito para simular dependências externas, como a biblioteca jsoup para requisições web.
Executando Testes de Integração
Os testes de integração verificam o transporte STDIO iniciando o servidor como um subprocesso. Primeiro compile o JAR e depois execute os testes de integração:
mvn package -DskipTests
mvn test -Pintegration-tests
Clientes de Teste
Clientes de teste são fornecidos para demonstrar o uso do protocolo MCP:
ClientStdio.java- Demonstra comunicação por transporte STDIOClientSse.java- Demonstra comunicação por transporte SSE
Configuração
A aplicação é configurada via 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
Estrutura do Projeto
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
Dependências
O projeto usa:
- Spring Boot 3.3.6
- Componentes Spring AI MCP Server
- Jackson para processamento JSON
- jsoup para análise de HTML e recuperação de conteúdo web
- JUnit 5 e Mockito para testes
Notas de Implementação
- O servidor é projetado para operar usando o mecanismo de transporte STDIO
- O modo banner e o log do console são desativados para permitir que o transporte STDIO funcione corretamente
- O tratamento de erros fornece informações detalhadas sobre problemas encontrados durante as operações
- Cada serviço de ferramenta inclui tratamento abrangente de erros e retorna resultados em um formato JSON padronizado
- O
EditFileServiceinclui geração sofisticada de diff para rastreamento de alterações - O
SearchFilesServicesuporta padrões glob para correspondência flexível de arquivos - O
FetchWebpageServiceinclui timeouts configuráveis e tratamento robusto de erros para requisições web
Integração com o Suporte MCP do DevoxxGenie
Este servidor pode ser facilmente integrado ao DevoxxGenie usando o suporte MCP (Model Context Protocol). Veja como configurá-lo:
Configuração no DevoxxGenie
- No DevoxxGenie, acesse a tela de configuração do servidor MCP
- Configure o servidor com as seguintes definições:
-
Nome:
JavaFilesystem(ou qualquer nome descritivo) -
Tipo de Transporte:
STDIO -
Comando: Caminho completo para o seu executável Java (por exemplo,
/Library/Java/JavaVirtualMachines/liberica-jdk-23.jdk/Contents/Home/bin/java) -
Argumentos:
-Dspring.ai.mcp.server.stdio=true -Dspring.main.web-application-type=none -Dspring.main.banner-mode=off -Dlogging.pattern.console= -jar ~/JavaFileSystemMCP/target/devoxx-filesystem-0.0.1-SNAPSHOT.jarInsira cada argumento em uma nova linha. Talvez seja necessário alterar o caminho para -jar apontando para onde você compilou o jar.
Importante: A flag
-Dspring.main.banner-mode=offé necessária para desativar o banner do Spring Boot, que de outra forma interferiria na comunicação JSON-RPC via STDIO.
-
Uso com DevoxxGenie
Uma vez configurado, o DevoxxGenie descobrirá automaticamente as ferramentas fornecidas por este servidor MCP. O assistente de IA pode então usar essas ferramentas para:
- Ler e escrever arquivos no sistema local
- Buscar por arquivos e diretórios
- Listar o conteúdo de diretórios
- Fazer edições em arquivos existentes
- Buscar padrões de texto dentro de arquivos (grep)
- Criar diretórios e estruturas de diretórios aninhados
- Executar comandos bash no shell do sistema
- Buscar páginas web e extrair conteúdo
Todas as operações serão realizadas com as permissões do usuário que executa o aplicativo DevoxxGenie.
Uso com Claude Desktop
Edite seu arquivo claude_desktop_config.json com o seguinte:
{
"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",
"-Dspring.main.banner-mode=off",
"-Dlogging.pattern.console=",
"-jar",
"~/JavaFileSystemMCP/target/devoxx-filesystem-0.0.1-SNAPSHOT.jar"
]
}
}
}
Talvez seja necessário alterar o caminho para -jar apontando para onde você compilou o jar.
Importante: A flag -Dspring.main.banner-mode=off é necessária para desativar o banner do Spring Boot, que de outra forma interferiria na comunicação JSON-RPC via STDIO.
Considerações de Segurança
Ao usar este servidor, esteja ciente de que:
- O agente LLM terá acesso para ler e escrever arquivos no sistema host
- O agente pode executar comandos bash com as permissões do usuário que executa o aplicativo
- O agente pode buscar conteúdo de qualquer URL web acessível
- Considere executar o servidor com permissões apropriadas e em um ambiente controlado
- O servidor não implementa mecanismos de autenticação ou autorização
- Considere regras de firewall de rede se a restrição de acesso web for necessária