fsext-mcp-server-java
Un servidor MCP completo y seguro para operaciones locales del sistema de archivos, con herramientas integradas de procesamiento de imágenes, OCR y multimedia.
Documentación
FsExt-MCP-Server (Java)
Resumen
Un servidor de Protocolo de Contexto de Modelo (MCP) de alto rendimiento y seguro, construido con Quarkus para operaciones locales del sistema de archivos, equipado con procesamiento de imágenes nativo, OCR Tesseract y herramientas de utilidades multimedia. Totalmente compatible con la especificación oficial de MCP, ofreciendo esquemas de solicitud/respuesta estandarizados, E/S de streaming para archivos grandes, despliegue remoto multi-transporte y flujos de trabajo robustos de búsqueda y reemplazo de texto para la integración con agentes LLM.
Características Principales
- Gestión Completa de Archivos y Directorios: Soporta creación, eliminación, copia, movimiento, inspección de metadatos y validación de existencia de archivos; copia/movimiento recursivo de árboles de directorios completos con protecciones de seguridad contra sobrescritura.
- Pipeline de Lectura y Escritura de Archivos en Streaming: Carga completa de texto, streaming de texto segmentado línea por línea, E/S binaria por fragmentos, y lógica de sobrescritura/adjuntado de texto y binario diseñada para evitar cargar archivos grandes completos en la memoria heap de la JVM.
- Búsqueda Avanzada y Reemplazo In Situ: Escaneo recursivo de contenido en todo el directorio, coincidencia contextual multi-archivo con líneas de contexto previo/posterior configurables, soporte de expresiones regulares, coincidencia sin distinción de mayúsculas/minúsculas, y reemplazo atómico de texto in situ con estadísticas de conteo de coincidencias.
- Kit de Herramientas de Procesamiento de Imágenes Nativo: Utilidades de imagen de alta velocidad impulsadas por Tess4J, incluyendo redimensionamiento con bloqueo de relación de aspecto y relleno de lienzo, recorte rectangular preciso, y rotación arbitraria en sentido horario.
- Extracción de Texto con OCR Tesseract: Reconocimiento de texto fiable desde imágenes rasterizadas respaldado por binarios locales de Tesseract. Sin implementaciones de respaldo WASM; la configuración de ruta de binario vacía no activará motores OCR alternativos basados en JS. Soporte multi-idioma de tessdata con directorios de binarios y datos configurables.
- Validación Estricta de Entrada y Esquema de Respuesta Unificado: Cada herramienta aplica una validación estricta de esquema JSON
additionalProperties: falsepara bloquear campos de entrada no reconocidos y mitigar riesgos de inyección. Todas las operaciones devuelven un payload de éxito/error envuelto y consistente para un análisis uniforme en el lado del cliente. - Compatibilidad Multi-Transporte: Implementa todos los transportes estándar oficiales de MCP:
stdio: Integración nativa para clientes MCP de escritorio locales (Claude Desktop, Cursor, etc.)sse: Transporte de streaming de eventos remoto ligero heredadohttp: Transporte remoto bidireccional de streaming HTTP moderno y transmisible
- Aislamiento de Sandbox de Seguridad del Espacio de Trabajo: La bandera
--lock-rootrestringe todas las operaciones del sistema de archivos exclusivamente al árbol de directorios especificado, eliminando vulnerabilidades de escape de rutas y acceso no autorizado entre carpetas. - Asignación Dinámica de Puertos: Detecta automáticamente la ocupación del puerto predeterminado 8000 y asigna un puerto TCP libre por encima de 1024 cuando no se proporciona un valor personalizado de
--port. - Optimizaciones de Runtime Nativo de Quarkus: Baja latencia de arranque, huella de memoria mínima, soporte CORS integrado para despliegues remotos HTTP/SSE, y lógica de cierre de conexión elegante para sesiones de clientes remotos de larga duración.
Inicio Rápido
Requisitos Previos
- Java 17+
- Gradle (wrapper incluido en el repositorio, no se requiere instalación global)
- Binario Tesseract (opcional, solo requerido para las funciones de herramienta OCR)
1. Compilar el Uber Jar Ejecutable
Utilice el wrapper de Gradle incluido para compilar y empaquetar un jar ejecutable autocontenido:
# Windows
./gradlew.bat clean buildRunJar
# macOS / Linux
./gradlew clean buildRunJar
Ruta del artefacto de salida: build/fsext-mcp-server-<version>.jar
2. Iniciar el Servidor desde el Jar Empaquetado
Reemplace <x.y.z> con su cadena de versión de compilación real.
# Default stdio mode, unrestricted full filesystem access
java -jar build/fsext-mcp-server-x.y.z.jar
# Secure locked workspace mode (recommended for production agent usage)
java -jar build/fsext-mcp-server-x.y.z.jar --lock-root /my/workspace
# Remote SSE streaming service
java -jar build/fsext-mcp-server-x.y.z.jar --transport sse --host 0.0.0.0 --port 8000 --lock-root /my/workspace
# Modern Streamable HTTP remote service
java -jar build/fsext-mcp-server-x.y.z.jar --transport http --host 127.0.0.1 --port 8080 --lock-root /my/workspace
3. Integrar con Clientes MCP de Escritorio (Claude Desktop / Cursor)
Ejemplo de configuración JSON de cliente para integración local con transporte stdio:
{
"mcpServers": {
"fsext-java": {
"command": "java",
"args": [
"-jar",
"/absolute/path/to/fsext-mcp-server-x.y.z.jar",
"--lock-root",
"/my/workspace"
]
}
}
}
Configuración de Desarrollo Local con Repositorio de Código Fuente
# Clone official source repository
git clone https://github.com/kurtzhi/fsext-mcp-server-java
cd fsext-mcp-server-java
# Build full executable uber jar
./gradlew clean buildRunJar
Tabla de Referencia de Parámetros de Inicio CLI
| Parámetro | Valor Predeterminado | Descripción |
|---|---|---|
--transport | stdio | Implementación de transporte MCP: stdio / sse / http |
--host | 127.0.0.1 | Dirección de enlace de red; ignorada por completo bajo transporte stdio |
--port | 8000 | Puerto TCP de escucha del servicio. Si el puerto predeterminado 8000 está ocupado y no se proporciona un puerto personalizado, selecciona automáticamente un puerto libre ≥1024; ignorado bajo transporte stdio |
--origin | * | Lista separada por comas de orígenes CORS permitidos para transportes remotos HTTP/SSE |
--lock-root | Vacío | Restringe todas las operaciones del sistema de archivos a este directorio raíz; acceso completo sin restricciones al sistema operativo si se omite |
Ejemplos de Inicio de Despliegue en Producción
1. Modo Stdio Local (Clientes MCP de Escritorio)
java -jar build/fsext-mcp-server-x.y.z.jar --lock-root /my/workspace
2. Modo de Transporte SSE Remoto
java -jar build/fsext-mcp-server-x.y.z.jar --transport sse --host 0.0.0.0 --port 8000 --lock-root /my/workspace
Endpoints SSE
- Canal de suscripción de streaming SSE de larga duración (empuje de eventos del servidor):
http://<host>:<port>/sse - Canal de envío de solicitudes de cliente JSON-RPC:
http://<host>:<port>/messages
Configuración de Conexión del Inspector MCP
- Tipo de Transporte: SSE
- Dirección de Conexión:
http://127.0.0.1:8000/sse
3. Transporte Remoto HTTP Transmisible (Estándar Moderno Oficial)
java -jar build/fsext-mcp-server-x.y.z.jar --transport http --host 0.0.0.0 --port 8000 --lock-root /my/workspace
Endpoint Bidireccional Unificado
Punto de entrada único compartido que maneja todas las solicitudes de clientes y el tráfico de streaming del servidor:
http://<host>:<port>/mcp
Configuración de Conexión del Inspector MCP
- Tipo de Transporte: HTTP Transmisible
- Dirección de Conexión:
http://127.0.0.1:8000/mcp
4. Comparación de Transportes SSE vs HTTP Transmisible
| Característica | Transporte SSE de Doble Endpoint | Transporte HTTP Transmisible de Endpoint Único |
|---|---|---|
| Arquitectura de Endpoints | Dos endpoints separados: suscripción de streaming GET + envío de mensajes POST | URL única unificada para todo el tráfico bidireccional |
| Patrón de Comunicación | Solo empuje unidireccional de eventos servidor a cliente | Comunicación híbrida bidireccional completa de solicitud/streaming |
| Fiabilidad de Conexión | Propenso a caídas de sesión, sincronización de estado compleja entre endpoints | Recuperación automática de sesión, optimizado para despliegues remotos de alta concurrencia |
| Estado de la Especificación | Implementación de compatibilidad heredada; no recomendado para nuevos despliegues | Estándar MCP oficial actual para todas las integraciones de red remotas |
Conjuntos de Caracteres de Archivos de Texto Soportados
Todos los identificadores de conjuntos de caracteres no distinguen entre mayúsculas y minúsculas; valores válidos para operaciones de lectura/escritura de texto:
utf-8/UTF_8iso-8859-1/ISO_8859_1utf-16/UTF_16utf-16be/UTF_16BEutf-16le/UTF_16LEascii/US_ASCII
Especificación de Respuesta Global Unificada
Todas las herramientas MCP comparten una estructura JSON envuelta de nivel superior idéntica tanto para la ejecución exitosa como para los estados de fallo en tiempo de ejecución. Los payloads de negocio de cada herramienta están anidados dentro del sub-objeto info bajo el campo raíz res.
Definición del Esquema Principal
{
"res": {
"success": boolean,
"info": object
}
}
success: Bandera de estado global de la operacióntrue: La lógica de la herramienta se completó sin excepciones;infocontiene los datos de retorno específicos de la herramientafalse: La operación falló (bloqueo de escape del espacio de trabajo, archivo faltante, error de E/S, esquema de entrada inválido, permiso denegado, etc.)
- Comportamiento dual de
info:- Estado de éxito (
success: true): Payload personalizado estructurado único para cada herramienta - Estado de fallo (
success: false): Objeto de error estandarizado con código de error legible por máquina y explicación legible por humanos"info": { "code": "ERROR_CODE_IDENTIFIER", "message": "Detailed human-readable failure description" }
- Estado de éxito (
Ejemplos de Payloads de Respuesta
1. Respuesta Exitosa de Listado de Directorio
{
"res": {
"success": true,
"info": {
"paths": [
"/workspace/demo/Main.java",
"/workspace/demo/util/FileTool.java"
]
}
}
}
2. Respuesta de Fallo por Bloqueo de Seguridad de Escape del Espacio de Trabajo
{
"res": {
"success": false,
"info": {
"code": "WORKSPACE_ESCAPE_FORBIDDEN",
"message": "Access restricted: Path `/etc/passwd` is outside allowed workspace `/my/workspace`"
}
}
}
Referencia Completa de Herramientas MCP
Todos los esquemas de entrada de herramientas aplican validación estricta additionalProperties: false para rechazar parámetros no reconocidos y mitigar vectores de ataque de inyección de rutas maliciosas.
1. Herramientas de Operación de Directorios
fs_list_directory
Escanea el directorio objetivo (superficial o recursivo) y devuelve rutas de archivo absolutas filtradas con soporte de filtrado por tipo y extensión. Parámetros
source_dir(cadena, obligatorio): Directorio raíz para escanearrecursive(booleano, obligatorio): Habilita el recorrido recursivo completo de todos los subdirectoriosonly_files(booleano, obligatorio): Filtra los resultados para devolver solo archivos regulares, excluye directoriosfile_extension(cadena, opcional, predeterminado=""): Filtra la salida por extensión de sufijo de archivo objetivo
fs_copy_directory
Copia recursivamente un árbol de directorios completo con comportamiento de sobrescritura configurable para directorios de destino en conflicto. Parámetros
source_dir(cadena, obligatorio): Ruta del árbol de directorio fuentecopy_dest_dir(cadena, obligatorio): Ruta del directorio de salida objetivooverwrite(booleano, opcional, predeterminado=false): Limpia y sobrescribe el contenido del directorio de destino preexistente
fs_move_directory
Reubica atómicamente un árbol de directorios completo a una nueva ruta objetivo. Falla inmediatamente si el destino existe a menos que la sobrescritura esté explícitamente habilitada para prevenir la pérdida accidental de datos. Parámetros
source_dir(cadena, obligatorio): Ruta del directorio fuentedest_dir(cadena, obligatorio): Ruta del directorio objetivooverwrite(booleano, opcional, predeterminado=false): Permite sobrescribir directorios de destino en conflicto
2. Herramientas de Operación Básica de Archivos Individuales
fs_create_file
Crea un nuevo archivo de texto, genera automáticamente los directorios padre faltantes, con contenido de texto inicial y codificación de conjunto de caracteres configurables. Parámetros
file_path(cadena, obligatorio): Ruta de archivo absoluta objetivocontent(cadena, opcional, predeterminado=""): Contenido de texto inicial para escribir en el nuevo archivocharset(cadena, opcional, predeterminado="utf-8"): Identificador de conjunto de caracteres soportado (ver lista de conjuntos de caracteres arriba)
fs_delete_file
Elimina permanentemente un solo archivo regular únicamente; rechaza entradas de ruta de directorio para bloquear riesgos de eliminación recursiva masiva. Parámetros
file_path(cadena, obligatorio): Ruta absoluta del archivo regular objetivo
fs_copy_file
Copia un solo archivo conservando los metadatos originales del sistema de archivos, con sobrescritura configurable para archivos objetivo en conflicto. Parámetros
source_file_path(cadena, obligatorio): Ruta absoluta del archivo fuentedest_file_path(cadena, obligatorio): Ruta absoluta del archivo de salida objetivooverwrite(booleano, opcional, predeterminado=false): Sobrescribe el archivo de destino preexistente
fs_move_file
Mueve atómicamente un solo archivo a una nueva ruta absoluta, con lógica de sobrescritura configurable para archivos de destino en conflicto. Parámetros
source_file_path(cadena, obligatorio): Ruta absoluta del archivo fuentedest_file_path(cadena, obligatorio): Ruta absoluta del archivo objetivooverwrite(booleano, opcional, predeterminado=false): Permite sobrescribir archivos de destino en conflicto
fs_get_file_info
Recupera metadatos completos de archivos o directorios, con cálculo opcional de digest criptográfico SHA-256 para validación de integridad. Parámetros
file_path(cadena, obligatorio): Ruta absoluta de la entrada del sistema de archivos objetivocalc_digest(booleano, opcional, predeterminado=false): Calcula el hash SHA-256 del contenido del archivo
fs_is_file_exists
Verificación ligera de existencia para cualquier entrada del sistema de archivos (archivo o directorio) sin cargar metadatos completos. Parámetros
file_path(cadena, obligatorio): Ruta absoluta para verificar existencia
3. Herramientas de Lectura y Escritura de Archivos
fs_read_full_text
Lee el contenido de texto completo de un archivo objetivo con codificación de texto especificada por el usuario. Parámetros
file_path(cadena, obligatorio): Ruta absoluta del archivo de texto objetivocharset(cadena, opcional, predeterminado="utf-8"): Identificador de conjunto de caracteres soportado
fs_read_text_range
Transmisión de texto segmentada por líneas, optimizada para archivos grandes; omite líneas iniciales y limita el número total de líneas leídas para evitar una asignación excesiva de memoria en el heap. Parámetros
file_path(string, obligatorio): Ruta absoluta del archivo de texto objetivolines_to_skip(entero, obligatorio, mín=0): Número de líneas iniciales a omitir durante la lecturamax_lines_to_read(entero, obligatorio, mín=0): Número máximo total de líneas a extraer del archivoline_separator(string, opcional, predeterminado="\n"): Carácter delimitador de salto de líneacharset(string, opcional, predeterminado="utf-8"): Identificador de conjunto de caracteres admitido
fs_read_binary_chunk
Lectura de transmisión por fragmentos para archivos binarios; devuelve cargas útiles de bytes codificados en Base64 para una transmisión segura por red JSON-RPC con detección del marcador de fin de flujo. Parámetros
file_path(string, obligatorio): Ruta absoluta del archivo binario objetivobytes_to_skip(entero, obligatorio, mín=0): Desplazamiento de bytes inicial a omitir antes de leer el fragmentomax_bytes_to_read(entero, obligatorio, mín=0): Longitud máxima de bytes a leer en un solo fragmento
fs_write_text
Escribe contenido de texto codificado en el archivo objetivo, con soporte para sobrescritura completa o modos de escritura de solo anexar. Parámetros
file_path(string, obligatorio): Ruta absoluta del archivo de salida objetivotext(string, obligatorio, longMin=1): Contenido de texto sin procesar a persistirappend(booleano, opcional, predeterminado=false): Alternancia de modo de anexar (false = sobrescritura completa del archivo)charset(string, opcional, predeterminado="utf-8"): Identificador de conjunto de caracteres admitido
fs_write_binary
Decodifica una carga útil binaria en Base64 y escribe bytes sin procesar en el archivo objetivo; admite modo de anexar para flujos de trabajo de carga binaria de múltiples fragmentos. Parámetros
file_path(string, obligatorio): Ruta absoluta del archivo de salida objetivobase64_data(string, obligatorio, longMin=1): Carga útil de bytes binarios sin procesar codificada en Base64append(booleano, opcional, predeterminado=false): Anexar datos binarios al final del archivo (false = sobrescritura completa)
4. Herramientas de búsqueda de contenido y reemplazo en el lugar
fs_search_files_by_content
Escanea recursivamente árboles de directorios y devuelve las rutas absolutas de todos los archivos que contienen patrones de texto coincidentes; admite expresiones regulares, insensibilidad a mayúsculas/minúsculas y filtrado por extensión de archivo. Parámetros
dir_path(string, obligatorio): Directorio raíz para el escaneo de contenido recursivorecursive(booleano, obligatorio): Habilitar recursión completa en subdirectoriossearch_term(string, obligatorio): Palabra clave de texto plano o patrón de expresión regularis_regex(booleano, opcional, predeterminado=false): Tratar search_term como patrón de expresión regularignore_case(booleano, opcional, predeterminado=true): Alternancia de coincidencia sin distinguir mayúsculas/minúsculasfile_extension(string, opcional, predeterminado=""): Filtrar archivos escaneados por sufijo de extensióncharset(string, opcional, predeterminado="utf-8"): Conjunto de caracteres utilizado para analizar archivos objetivo
fs_search_in_files_by_content
Coincidencia de contenido masivo en múltiples directorios; devuelve resultados de coincidencia estructurados con líneas de contexto pre/post configurables alrededor del contenido coincidente, además de límites máximos globales de conteo de resultados. Parámetros
dir_path(string, obligatorio): Ruta absoluta del directorio raíz de escaneorecursive(booleano, obligatorio): Habilitar recorrido recursivo completo de subdirectoriossearch_term(string, obligatorio): Palabra clave de búsqueda o patrón de expresión regularlimit(entero, obligatorio): Límite máximo estricto del total de entradas coincidentes devueltasis_regex(booleano, opcional, predeterminado=false): Habilitar lógica de coincidencia con expresiones regularesignore_case(booleano, opcional, predeterminado=true): Deshabilitar coincidencia sensible a mayúsculas/minúsculaslines_before(entero, opcional, predeterminado=0): Número de líneas de contexto anteriores a cada línea coincidentelines_after(entero, opcional, predeterminado=0): Número de líneas de contexto posteriores a cada línea coincidentefile_extension(string, opcional, predeterminado=""): Filtrar archivos escaneados por sufijo de extensióncharset(string, opcional, predeterminado="utf-8"): Conjunto de caracteres utilizado para analizar archivos objetivo
fs_search_in_file_by_content
Búsqueda de contenido precisa en un solo archivo; devuelve segmentos coincidentes estructurados con líneas de contexto pre/post configurables para flujos de trabajo de inspección de código y documentos. Parámetros
file_path(string, obligatorio): Ruta absoluta del archivo único objetivosearch_term(string, obligatorio): Palabra clave de búsqueda o patrón de expresión regularis_regex(booleano, opcional, predeterminado=false): Habilitar lógica de coincidencia con expresiones regularesignore_case(booleano, opcional, predeterminado=true): Alternancia de coincidencia sin distinguir mayúsculas/minúsculaslines_before(entero, opcional, predeterminado=0): Líneas de contexto anteriores para cada coincidencialines_after(entero, opcional, predeterminado=0): Líneas de contexto posteriores para cada coincidenciacharset(string, opcional, predeterminado="utf-8"): Conjunto de caracteres utilizado para analizar el archivo objetivo
fs_file_replace
Ejecuta reemplazo de texto global en el lugar dentro de un solo archivo objetivo; devuelve el número total de segmentos de texto coincidentes y reemplazados después de completar la operación de escritura. Parámetros
file_path(string, obligatorio): Ruta absoluta del archivo editable objetivosearch_term(string, obligatorio): Subcadena de texto a localizar y reemplazarreplacement(string, obligatorio): Nueva carga útil de texto de reemplazoline_separator(string, opcional, predeterminado="\n"): Delimitador de salto de línea para el análisis del archivo
5. Herramientas de procesamiento de imágenes
fs_image_resize
Redimensiona la imagen de origen a las dimensiones de píxel especificadas, con preservación nativa de la relación de aspecto y relleno de lienzo transparente para alcanzar las dimensiones exactas de la resolución objetivo. Parámetros
source_path(string, obligatorio): Ruta absoluta de la imagen de entrada de origendest_path(string, obligatorio): Ruta absoluta de la imagen de salida redimensionadawidth(entero, obligatorio, >0): Ancho en píxeles de la dimensión objetivoheight(entero, obligatorio, >0): Alto en píxeles de la dimensión objetivokeep_aspect_ratio(booleano, opcional, predeterminado=true): Fijar la relación de aspecto original de la imagen durante el escaladopad_to_target(booleano, opcional, predeterminado=true): Agregar relleno transparente para cubrir el ancho/alto exacto objetivo cuando la relación de aspecto está fijada
fs_image_crop
Extrae una región rectangular de píxeles de la imagen de origen y la exporta como archivo de imagen de salida independiente. Parámetros
source_path(string, obligatorio): Ruta absoluta de la imagen de entrada de origendest_path(string, obligatorio): Ruta absoluta de la imagen de salida recortadax(entero, obligatorio, ≥0): Coordenada de píxel izquierda del origen de la región de recortey(entero, obligatorio, ≥0): Coordenada de píxel superior del origen de la región de recortewidth(entero, obligatorio, >0): Ancho en píxeles de la región rectangular recortadaheight(entero, obligatorio, >0): Alto en píxeles de la región rectangular recortada
fs_image_rotate
Rota la imagen de origen en el sentido de las agujas del reloj según valores de grados de coma flotante arbitrarios; expande automáticamente las dimensiones del lienzo de salida para conservar todo el contenido de la imagen sin recortes en los bordes. Parámetros
source_path(string, obligatorio): Ruta absoluta de la imagen de entrada de origendest_path(string, obligatorio): Ruta absoluta de la imagen de salida rotadadegrees(número, obligatorio): Ángulo de rotación en el sentido de las agujas del reloj, en grados
6. Herramienta de extracción de texto OCR
fs_ocr_extract_text
Extrae texto legible por humanos de archivos de imagen rasterizada mediante la instalación local del binario Tesseract OCR. No existe implementación alternativa de respaldo en JavaScript WASM; un tesseract_bin_path vacío no inicializará motores OCR alternativos basados en web.
Parámetros
image_path(string, obligatorio): Ruta absoluta de la imagen de entrada para el reconocimiento de textotesseract_bin_path(string, opcional, predeterminado=""): Ruta absoluta al binario ejecutable local de Tesseract; un valor vacío usa solo la búsqueda en PATH del sistematessdata_path(string, opcional, predeterminado=""): Ruta de directorio absoluta que contiene los archivos de datos de entrenamiento de idiomas de Tesseractlang(string, opcional, predeterminado="eng"): Prefijo de código de idioma que coincide con los archivos de entrenamiento tessdata disponibles
Dependencias básicas del entorno de ejecución
io.quarkus:quarkus-bom:3.37.1: BOM de alineación de versiones de Quarkusio.quarkus:quarkus-arc: Contenedor de inyección de dependencias CDI de Quarkusio.quarkus:quarkus-reactive-routes: Núcleo de enrutado HTTP reactivoio.quarkiverse.mcp:quarkus-mcp-server-http:1.13.1: Implementación de transporte MCP HTTP y SSE transmisibleio.quarkiverse.mcp:quarkus-mcp-server-stdio:1.13.1: Implementación de transporte MCP Stdionet.sourceforge.tess4j:tess4j:5.18.0: Biblioteca de enlace Java Tesseract OCR
Tareas de Gradle para compilación y desarrollo del proyecto
# Clean all compiled build artifacts and temporary directories
./gradlew clean
# Full clean + compile + package self-contained uber jar
./gradlew clean buildRunJar
Licencia
Este proyecto se publica bajo la Licencia Apache 2.0. Consulte el archivo LICENSE en el nivel raíz para conocer los términos y condiciones legales completos de la licencia.
Avisos de software de terceros
Este software incluye múltiples bibliotecas de dependencia de código abierto. Todos los componentes de terceros conservan sus titulares de derechos de autor originales y sus respectivos acuerdos de licencia de código abierto.
Un desglose completo de todas las bibliotecas de terceros, versiones y licencias está disponible en el archivo THIRD-PARTY-NOTICES en el nivel raíz y se incluye dentro del artefacto JAR en /META-INF/THIRD-PARTY-NOTICES.
Repositorio y seguimiento de problemas
- Repositorio fuente de GitHub: https://github.com/kurtzhi/fsext-mcp-server-java
- Informes de errores y solicitudes de funciones: https://github.com/kurtzhi/fsext-mcp-server-java/issues