Java Filesystem & Web MCP Server
Un servidor MCP para que agentes LLM realicen operaciones del sistema de archivos y accedan a recursos web.
Documentación
Java Filesystem & Web MCP Server
Este proyecto implementa un servidor del Protocolo de Contexto de Modelo (MCP) que proporciona operaciones de sistema de archivos y herramientas de acceso web para agentes de Modelos de Lenguaje Grande (LLM). Permite a los asistentes de IA interactuar tanto con el sistema de archivos local como con recursos web a través de un conjunto de operaciones bien definidas.
Características
El servidor proporciona las siguientes operaciones:
Operaciones de Sistema de Archivos
- Lectura de Archivos: Lee el contenido completo de un archivo con detección adecuada de codificación
- Escritura de Archivos: Crea o sobrescribe archivos con contenido nuevo
- Edición de Archivos: Realiza ediciones basadas en líneas con generación de diff estilo git
- Búsqueda de Archivos: Busca recursivamente archivos y directorios usando patrones glob
- Listado de Directorios: Obtiene listados detallados del contenido de directorios
- Creación de Directorios: Crea directorios y estructuras de directorios anidadas
- Grep de Archivos: Busca patrones de texto dentro de archivos con números de línea y contexto, similar al comando grep de Unix
- Comando Bash: Ejecuta comandos bash en el shell del sistema y captura su salida
Operaciones Web
- Obtención de Páginas Web: Recupera contenido de páginas web con tiempos de espera configurables
- Extracción de Contenido HTML: Extrae contenido de texto de documentos HTML
Estas operaciones se exponen como herramientas para Modelos de Lenguaje Grande mediante el Protocolo de Contexto de Modelo (MCP), permitiendo que los sistemas de IA interactúen de forma segura con el sistema de archivos y accedan a recursos web.
Ejemplo de la herramienta Java MCP con DevoxxGenie
Comenzando
Requisitos Previos
- Java 17 o superior
- Maven 3.6+
- Spring Boot 3.3.6
- Componentes Spring AI MCP Server
Construyendo el Proyecto
Construya el proyecto usando Maven:
mvn clean package
Ejecutando el Servidor
El servidor soporta dos modos de transporte:
Modo SSE (basado en HTTP, predeterminado)
Ejecute el servidor para comunicación basada en SSE:
java -jar target/devoxx-filesystem-0.0.1-SNAPSHOT.jar
Esto inicia un servidor HTTP en el puerto 8081 con el endpoint SSE en /sse.
Modo STDIO (para clientes MCP como Claude Desktop o DevoxxGenie)
Para comunicación basada en STDIO (requerida por la mayoría de los 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
Banderas importantes para el modo STDIO:
-Dspring.ai.mcp.server.stdio=true- Habilita el transporte STDIO-Dspring.main.web-application-type=none- Deshabilita el servidor web-Dspring.main.banner-mode=off- Deshabilita el banner de Spring Boot (requerido para evitar corromper la comunicación JSON-RPC)-Dlogging.pattern.console=- Deshabilita el registro de consola
Servicios de Herramientas
Herramientas de Sistema de Archivos
ReadFileService
readFile(String fullPathFile)
Lee el contenido completo de un archivo del sistema de archivos. Maneja varias codificaciones de texto y proporciona mensajes de error detallados si el archivo no se puede leer.
WriteFileService
writeFile(String path, String content)
Crea un archivo nuevo o sobrescribe completamente un archivo existente con contenido nuevo. Crea los directorios padre si no existen.
EditFileService
editFile(String path, String edits, Boolean dryRun)
Realiza ediciones basadas en líneas en un archivo de texto. Cada edición reemplaza secuencias de líneas exactas con contenido nuevo. Devuelve un diff estilo git que muestra los cambios realizados. El parámetro dryRun permite ver los cambios sin aplicarlos.
SearchFilesService
searchFiles(String path, String pattern)
Busca recursivamente archivos y directorios que coincidan con un patrón. Busca en todos los subdirectorios desde la ruta inicial. La búsqueda no distingue entre mayúsculas y minúsculas y coincide con nombres parciales.
ListDirectoryService
listDirectory(String path)
Obtiene un listado detallado de todos los archivos y directorios en una ruta especificada. Los resultados distinguen claramente entre archivos y directorios con metadatos adicionales.
GrepFilesService
grepFiles(String directory, String pattern, String fileExtension, Boolean useRegex, Integer contextLines, Integer maxResults, Boolean ignoreCase)
Busca patrones de texto dentro de archivos. Devuelve archivos coincidentes con números de línea y contexto. Similar al comando 'grep' de Unix pero con características adicionales para la visualización de contexto. Soporta patrones regex, búsqueda sin distinción de mayúsculas y minúsculas, y líneas de contexto antes/después de las coincidencias.
CreateDirectoryService
createDirectory(List<String> directories)
Crea directorios nuevos o asegura que los directorios existan. Puede crear múltiples directorios en una sola operación. Si un directorio ya existe, la operación se completa silenciosamente. Perfecto para configurar estructuras de directorios para proyectos o asegurar que existan las rutas requeridas.
BashService
executeBash(String command, String workingDirectory, Integer timeoutSeconds)
Ejecuta un comando Bash en el shell del sistema y devuelve la salida. Esta herramienta permite ejecutar comandos del sistema y capturar sus flujos de salida estándar y de error. Úsela con precaución ya que algunos comandos pueden tener efectos a nivel de sistema.
Herramientas Web
FetchWebpageService
fetchWebpage(String url, Integer timeoutMs)
Obtiene o lee una página web desde una URL y devuelve su contenido. El servicio utiliza jsoup para conectarse a la página web y recuperar su contenido. El parámetro opcional timeoutMs permite establecer un tiempo de espera de conexión personalizado.
Pruebas
Ejecutando Pruebas Unitarias
Se proporciona un conjunto completo de pruebas unitarias para todas las clases de servicio. Ejecútelas usando:
mvn test
Las pruebas utilizan JUnit 5 y Mockito para simular dependencias externas como la biblioteca jsoup para solicitudes web.
Ejecutando Pruebas de Integración
Las pruebas de integración verifican el transporte STDIO iniciando el servidor como un subproceso. Primero construya el JAR, luego ejecute las pruebas de integración:
mvn package -DskipTests
mvn test -Pintegration-tests
Clientes de Prueba
Se proporcionan clientes de prueba para demostrar el uso del protocolo MCP:
ClientStdio.java- Demuestra la comunicación de transporte STDIOClientSse.java- Demuestra la comunicación de transporte SSE
Configuración
La aplicación se configura mediante 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
Estructura del Proyecto
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
Dependencias
El proyecto utiliza:
- Spring Boot 3.3.6
- Componentes Spring AI MCP Server
- Jackson para procesamiento JSON
- jsoup para análisis HTML y recuperación de contenido web
- JUnit 5 y Mockito para pruebas
Notas de Implementación
- El servidor está diseñado para operar usando el mecanismo de transporte STDIO
- El modo banner y el registro de consola están deshabilitados para permitir que el transporte STDIO funcione correctamente
- El manejo de errores proporciona información detallada sobre los problemas encontrados durante las operaciones
- Cada servicio de herramienta incluye manejo de errores integral y devuelve resultados en un formato JSON estandarizado
- El
EditFileServiceincluye generación de diff sofisticada para el seguimiento de cambios - El
SearchFilesServicesoporta patrones glob para coincidencia flexible de archivos - El
FetchWebpageServiceincluye tiempos de espera configurables y manejo de errores robusto para solicitudes web
Integración con el Soporte MCP de DevoxxGenie
Este servidor se puede integrar fácilmente con DevoxxGenie usando el soporte MCP (Protocolo de Contexto de Modelo). Así es como configurarlo:
Configuración en DevoxxGenie
- En DevoxxGenie, acceda a la pantalla de configuración del Servidor MCP
- Configure el servidor con los siguientes ajustes:
-
Nombre:
JavaFilesystem(o cualquier nombre descriptivo) -
Tipo de Transporte:
STDIO -
Comando: Ruta completa a su ejecutable de Java (por ejemplo,
/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.jarIngrese cada argumento en una línea nueva. Es posible que deba cambiar la ruta de -jar para que apunte a donde ha construido el jar.
Importante: La bandera
-Dspring.main.banner-mode=offes necesaria para deshabilitar el banner de Spring Boot, que de otro modo interferiría con la comunicación JSON-RPC a través de STDIO.
-
Uso con DevoxxGenie
Una vez configurado, DevoxxGenie descubrirá automáticamente las herramientas proporcionadas por este servidor MCP. El asistente de IA puede entonces usar estas herramientas para:
- Leer y escribir archivos en el sistema local
- Buscar archivos y directorios
- Listar el contenido de directorios
- Realizar ediciones en archivos existentes
- Buscar patrones de texto dentro de archivos (grep)
- Crear directorios y estructuras de directorios anidadas
- Ejecutar comandos bash en el shell del sistema
- Obtener páginas web y extraer contenido
Todas las operaciones se realizarán con los permisos del usuario que ejecuta la aplicación DevoxxGenie.
Uso con Claude Desktop
Edite su archivo claude_desktop_config.json con lo siguiente:
{
"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"
]
}
}
}
Es posible que deba cambiar la ruta de -jar para que apunte a donde ha construido el jar.
Importante: La bandera -Dspring.main.banner-mode=off es necesaria para deshabilitar el banner de Spring Boot, que de otro modo interferiría con la comunicación JSON-RPC a través de STDIO.
Consideraciones de Seguridad
Al usar este servidor, tenga en cuenta que:
- El agente LLM tendrá acceso para leer y escribir archivos en el sistema host
- El agente puede ejecutar comandos bash con los permisos del usuario que ejecuta la aplicación
- El agente puede obtener contenido de cualquier URL web accesible
- Considere ejecutar el servidor con permisos apropiados y en un entorno controlado
- El servidor no implementa mecanismos de autenticación o autorización
- Considere las reglas del firewall de red si se requiere restringir el acceso web