Vulcan File Ops
Servidor MCP que otorga a Claude Desktop y otros clientes MCP de escritorio capacidades de sistema de archivos: leer, escribir, editar y gestionar archivos como asistentes de codificación de IA.
Documentación
Servidor MCP de Vulcan File Ops
Seguro • Controlado por el Usuario • Servidor de Operaciones de Archivos de Alto Rendimiento
Transforma tus asistentes de IA de escritorio en poderosos compañeros de desarrollo. Vulcan File Ops cierra la brecha entre la IA conversacional (Claude Desktop, ChatGPT Desktop, etc.) y tu sistema de archivos local, desbloqueando las mismas capacidades de manipulación de archivos que se encuentran en IDE potenciados por IA como Cursor y extensiones de VS Code como Cline. Escribe código, refactoriza proyectos, gestiona documentación y realiza operaciones complejas de archivos—igualando el poder de los asistentes de codificación con IA dedicados. Con controles de seguridad de nivel empresarial, registro dinámico de directorios y filtrado inteligente de herramientas, mantienes un control total mientras tu asistente de IA se encarga del trabajo pesado.
Tabla de Contenidos
- Antecedentes
- Instalación
- Uso
- API
- Seguridad
- Contribuciones
- Licencia
Antecedentes
Protocolo de Contexto de Modelo
El Protocolo de Contexto de Modelo (MCP) permite a los asistentes de IA acceder de forma segura a recursos y servicios externos. Este servidor implementa MCP para operaciones del sistema de archivos, permitiendo que los agentes de IA lean, escriban y gestionen archivos dentro de límites de directorio controlados.
Características Clave
Esta implementación mejorada proporciona:
- Acceso Dinámico a Directorios: Registro de directorios en tiempo de ejecución mediante comandos conversacionales
- Soporte de Documentos: Lectura/escritura de PDF, DOCX, PPTX, XLSX, ODT con conversión de HTML a documento
- Operaciones por Lotes: Leer, escribir, editar, copiar, mover o renombrar múltiples archivos concurrentemente
- Edición Avanzada de Archivos: Modificaciones basadas en patrones con coincidencia flexible y vista previa de diferencias
- Modos de Lectura Flexibles: Archivo completo, inicio/final, o rangos arbitrarios de líneas
- Soporte de Visión de Imágenes: Adjuntar imágenes para análisis y descripción por IA
- Filtrado de Directorios: Excluir carpetas no deseadas (node_modules, dist, .git) de los listados, ya que la herramienta list_directory puede inflar la salida del servidor si se incluyen este tipo de carpetas, normalmente ignoradas por git
- Activación Selectiva de Herramientas: Habilitar solo herramientas específicas o categorías de herramientas
- Alto Rendimiento: Algoritmos de búsqueda optimizados con detección inteligente de recursión
- Controles de Seguridad: Validación de rutas, restricciones de acceso y aprobación de comandos de shell
- Control Local: Instalación completamente local sin dependencias externas
Modelo de Acceso a Directorios
Este servidor soporta múltiples enfoques flexibles para el acceso a directorios:
- Acceso Preconfigurado: Usa
--approved-folderspara especificar directorios al iniciar el servidor para acceso inmediato - Registro en Tiempo de Ejecución: Los usuarios pueden instruir a los agentes de IA para registrar directorios durante la conversación mediante la herramienta
register_directory. Por defecto, se te pide confirmar cada nuevo directorio a través de tu cliente MCP (ver Política de Registro en Tiempo de Ejecución) - Protocolo de Raíces MCP: Las aplicaciones cliente pueden proporcionar directorios de trabajo dinámicamente
- Permisos Flexibles: Combina múltiples enfoques—comienza con carpetas aprobadas, agrega más en tiempo de ejecución
- Límites Seguros: Todas las operaciones se validan contra los directorios registrados independientemente del método de acceso
Instalación
Este servidor requiere Node.js y puede instalarse globalmente, localmente, o ejecutarse directamente con npx. La mayoría de los usuarios deberían usar npx para ejecución instantánea sin instalación.
Inicio Rápido (Recomendado para la Mayoría de Usuarios)
Ejecuta directamente sin instalación:
npx @n0zer0d4y/vulcan-file-ops --help
Para desarrolladores que quieran contribuir o modificar el código, ver Ejecución desde Repositorio Local a continuación.
Instalación Global
Instala globalmente para acceso en todo el sistema:
npm install -g @n0zer0d4y/vulcan-file-ops
Instalación Local
Instala en un proyecto específico:
npm install @n0zer0d4y/vulcan-file-ops
Requisitos Previos
Node.js (versión 20.19 o superior, o 22.12 o superior) debe estar instalado en tu sistema. Esto proporciona npm y npx, que son necesarios para ejecutar este paquete.
- Descargar Node.js: https://nodejs.org/
- Verificar instalación: Ejecuta
node --versionynpm --version
Dependencias
El servidor no tiene dependencias de servicios externos y opera completamente de forma local. Todos los paquetes necesarios se descargan automáticamente al usar npx.
Uso
Este servidor puede usarse directamente con npx (recomendado) o instalarse globalmente/localmente. El enfoque con npx no requiere instalación y siempre usa la versión más reciente.
Configuración Básica
Agrega a la configuración de tu cliente MCP.
Para clientes basados en JSON como Claude Desktop y Cursor, usa su formato JSON mcpServers.
Para Codex, usa C:\Users\<username>\.codex\config.toml y el formato de tabla TOML mcp_servers que se muestra a continuación.
Opción 1: Usando npx (Recomendado - Sin Instalación Requerida)
{
"mcpServers": {
"vulcan-file-ops": {
"command": "npx",
"args": ["-y", "@n0zer0d4y/vulcan-file-ops"]
}
}
}
Codex (config.toml)
[mcp_servers.vulcan_file_ops]
command = "npx"
args = ["-y", "@n0zer0d4y/vulcan-file-ops"]
enabled = true
startup_timeout_sec = 120.0
Opción 2: Usando Instalación Global
Después de ejecutar npm install -g @n0zer0d4y/vulcan-file-ops:
{
"mcpServers": {
"vulcan-file-ops": {
"command": "vulcan-file-ops"
}
}
}
Opción 3: Usando Instalación Local
Después de ejecutar npm install @n0zer0d4y/vulcan-file-ops en tu proyecto:
{
"mcpServers": {
"vulcan-file-ops": {
"command": "./node_modules/.bin/vulcan-file-ops"
}
}
}
Opción 4: Ejecución desde Repositorio Local (Para Desarrolladores)
Si has clonado este repositorio y quieres ejecutar desde el código fuente:
git clone https://github.com/n0zer0d4y/vulcan-file-ops.git
cd vulcan-file-ops
npm install
npm run build
Luego configura tu cliente MCP:
{
"mcpServers": {
"vulcan-file-ops": {
"command": "node",
"args": [
"/absolute/path/to/vulcan-file-ops/dist/cli.js",
"--approved-folders",
"/path/to/your/allowed/directories"
]
}
}
}
Codex (config.toml)
[mcp_servers.vulcan_file_ops]
command = "node"
args = [
'C:\absolute\path\to\vulcan-file-ops\dist\cli.js',
"--approved-folders",
'C:\path\to\your\allowed\directories'
]
cwd = 'C:\absolute\path\to\vulcan-file-ops'
enabled = true
startup_timeout_sec = 120.0
Nota: Para ejecución desde repositorio local, prefiere node dist/cli.js con una ruta absoluta. Esto funciona de manera confiable en Codex y evita ambigüedad en PATH.
Configuración Avanzada
Carpetas Aprobadas
Preconfigura directorios específicos para acceso inmediato al iniciar el servidor:
macOS/Linux (npx):
{
"mcpServers": {
"vulcan-file-ops": {
"command": "npx",
"args": [
"-y",
"@n0zer0d4y/vulcan-file-ops",
"--approved-folders",
"/Users/username/projects",
"/Users/username/documents"
]
}
}
}
Windows (npx):
{
"mcpServers": {
"vulcan-file-ops": {
"command": "npx",
"args": [
"-y",
"@n0zer0d4y/vulcan-file-ops",
"--approved-folders",
"C:/Users/username/projects",
"C:/Users/username/documents"
]
}
}
}
Alternativa: Ejecución desde Repositorio Local
Para usuarios que ejecutan desde un repositorio clonado (después de npm run build):
{
"mcpServers": {
"vulcan-file-ops": {
"command": "vulcan-file-ops",
"args": [
"--approved-folders",
"/Users/username/projects",
"/Users/username/documents"
]
}
}
}
Codex con Carpetas Aprobadas (config.toml)
[mcp_servers.vulcan_file_ops]
command = "node"
args = [
'C:\absolute\path\to\vulcan-file-ops\dist\cli.js',
"--approved-folders",
'C:\Users\username\projects',
'C:\Users\username\documents'
]
cwd = 'C:\absolute\path\to\vulcan-file-ops'
enabled = true
startup_timeout_sec = 120.0
Nota sobre Formato de Ruta:
- Windows: Incluye la letra de unidad (ej.,
C:/,D:/). Usa barras diagonales en JSON para evitar escapar barras invertidas. - macOS/Linux: Comienza con
/para rutas absolutas, o usa~para el directorio de inicio.
Beneficios:
- Acceso Instantáneo: Los directorios se validan y están listos inmediatamente cuando el servidor se inicia
- Seguridad: Solo los directorios especificados son accesibles (a menos que se use el protocolo de Raíces MCP)
- Conveniencia: No es necesario registrar directorios manualmente mediante conversación
- Visibilidad para IA: Los directorios aprobados se incrustan dinámicamente en las descripciones de las herramientas
register_directoryylist_allowed_directories, asegurando que los asistentes de IA puedan ver qué directorios están preaprobados y evitar intentos de registro redundantes
Cómo Ven los Asistentes de IA las Carpetas Aprobadas:
Cuando configuras --approved-folders, el servidor inyecta dinámicamente esta información en las descripciones de las herramientas para register_directory y list_allowed_directories. Esto asegura:
- ✅ Los asistentes de IA pueden ver qué directorios ya son accesibles
- ✅ La IA sabe NO volver a registrar directorios preaprobados o sus subdirectorios
- ✅ Visibilidad clara sin requerir que la IA llame a
list_allowed_directoriesprimero - ✅ Funciona de manera confiable en todos los clientes MCP (incluyendo Cursor, Claude Desktop, etc.)
Ejemplo de lo que la IA ve en la descripción de la herramienta:
PRE-APPROVED DIRECTORIES (already accessible, DO NOT register these):
- C:\Users\username\projects
- C:\Users\username\documents
IMPORTANT: These directories and their subdirectories are ALREADY accessible
to all filesystem tools. Do NOT use register_directory for these paths.
Notas:
- Las rutas deben ser absolutas: Windows requiere letra de unidad (
C:/path), Unix/Mac comienza con/o~ - Lista de directorios separada por comas (sin espacios a menos que sean parte de la ruta)
- Los directorios se validan al inicio; el servidor saldrá si alguna ruta es inválida
- Funciona junto con la herramienta
register_directoryen tiempo de ejecución para acceso adicional - El protocolo de Raíces MCP (si lo usa el cliente) reemplazará las carpetas aprobadas con las raíces del espacio de trabajo
Filtrado de Directorios
Excluye carpetas específicas de los listados de directorios:
{
"mcpServers": {
"vulcan-file-ops": {
"command": "npx",
"args": [
"@n0zer0d4y/vulcan-file-ops",
"--ignored-folders",
"node_modules,dist,.git,.next"
]
}
}
}
Selección de Herramientas
Habilita solo categorías específicas de herramientas:
{
"mcpServers": {
"vulcan-file-ops": {
"command": "npx",
"args": [
"@n0zer0d4y/vulcan-file-ops",
"--enabled-tool-categories",
"read,filesystem"
]
}
}
}
O habilita herramientas individuales:
{
"mcpServers": {
"vulcan-file-ops": {
"command": "npx",
"args": [
"@n0zer0d4y/vulcan-file-ops",
"--enabled-tools",
"read_file,list_directory,grep_files"
]
}
}
}
Comandos de Shell
execute_shell solo ejecuta comandos cuyo comando raíz esté aprobado:
--approved-commands npm,node,git— lista de permitidos separada por comas de comandos raíz. Cada comando en una cadena (;,&&,||,|) debe estar aprobado.--allow-dangerous-commands rm— comandos aprobados que también pueden ejecutarse cuando coinciden con un patrón peligroso (por ejemplorm -rf,del /s,Remove-Item -Recurse,sudo). Sin esta bandera, tales comandos siempre están bloqueados; la IA no puede anularlo.--commands-env-file <path>— leeAPPROVED_COMMANDSde un archivo con formato.env. Solo se usa esa clave y no se agrega nada al entorno del servidor.--approved-commandstiene prioridad.
Cambiado en 1.3.0: el servidor ya no lee un archivo
.envdesde su directorio de trabajo. Usa--approved-commandso--commands-env-file. No uses--env-file: Node.js reserva esa bandera y aplicaría el archivo al propio proceso del servidor.
Nota:
execute_shellno es una zona de pruebas. Un intérprete aprobado o una herramienta de ejecución de código (node,python,bash,npm,git,find -exec, ...) puede hacer cualquier cosa que tu cuenta de usuario pueda hacer. Solo aprueba comandos con los que te sientas cómodo dejando que la IA ejecute.
Política de Registro en Tiempo de Ejecución
--runtime-registration <confirm|allow|deny> controla la herramienta register_directory:
confirm(predeterminado) — se te pide aprobar cada nuevo directorio a través del mensaje de confirmación de tu cliente MCP (elicitation MCP). Si el cliente no soporta mensajes de confirmación, el registro se rechaza; agrega la carpeta con--approved-foldersen su lugar, o usaallow.allow— los directorios se registran sin un mensaje (el comportamiento antes de 1.3.0).deny— el registro en tiempo de ejecución está deshabilitado; solo--approved-foldersy las Raíces MCP otorgan acceso.
Las raíces del sistema de archivos (como C:\ o /) y tu propio directorio de inicio solo pueden registrarse con allow.
Configuración Combinada
Todas las opciones de configuración se pueden combinar:
Ejemplo Windows (npx):
{
"mcpServers": {
"vulcan-file-ops": {
"command": "npx",
"args": [
"@n0zer0d4y/vulcan-file-ops",
"--approved-folders",
"C:/Users/username/projects",
"C:/Users/username/documents",
"--ignored-folders",
"node_modules,dist,.git",
"--approved-commands",
"npm,node,git,ls,pwd,cat,echo",
"--enabled-tool-categories",
"read,filesystem,shell",
"--enabled-tools",
"read_file,attach_image,read_multiple_files,write_file,write_multiple_files,edit_file,make_directory,list_directory,move_file,file_operations,delete_files,get_file_info,register_directory,list_allowed_directories,glob_files,grep_files,execute_shell"
]
}
}
}
Ejemplo macOS/Linux (npx):
{
"mcpServers": {
"vulcan-file-ops": {
"command": "npx",
"args": [
"@n0zer0d4y/vulcan-file-ops",
"--approved-folders",
"/Users/username/projects",
"/Users/username/documents",
"--ignored-folders",
"node_modules,dist,.git",
"--approved-commands",
"npm,node,git,ls,pwd,cat,echo",
"--enabled-tool-categories",
"read,filesystem,shell",
"--enabled-tools",
"read_file,attach_image,read_multiple_files,write_file,write_multiple_files,edit_file,make_directory,list_directory,move_file,file_operations,delete_files,get_file_info,register_directory,list_allowed_directories,glob_files,grep_files,execute_shell"
]
}
}
}
Alternativa: Ejecución desde Repositorio Local
Para usuarios que ejecutan desde un repositorio clonado (después de npm run build):
{
"mcpServers": {
"vulcan-file-ops": {
"command": "vulcan-file-ops",
"args": [
"--approved-folders",
"/Users/username/projects",
"/Users/username/documents",
"--ignored-folders",
"node_modules,dist,.git",
"--approved-commands",
"npm,node,git,ls,pwd,cat,echo",
"--enabled-tool-categories",
"read,filesystem,shell",
"--enabled-tools",
"read_file,attach_image,read_multiple_files,write_file,write_multiple_files,edit_file,make_directory,list_directory,move_file,file_operations,delete_files,get_file_info,register_directory,list_allowed_directories,glob_files,grep_files,execute_shell"
]
}
}
}
Registro de Directorios
Para acceder a un directorio específico, instruye al agente de IA:
"Please register the directory C:\path\to\your\folder for access, then list its contents."
La IA usará la herramienta register_directory para obtener acceso, luego realizará operaciones dentro de ese directorio. Con la política predeterminada --runtime-registration confirm, tu cliente MCP te pedirá aprobar el directorio primero.
API
Herramientas Disponibles por Categorías
Operaciones de Lectura
read_file
Lee el contenido de archivos con modos flexibles (completo, inicio, final, rango)
Nota: Esta herramienta está limitada a operaciones de un solo archivo. RECOMENDADO: Usa read_multiple_files en su lugar, que admite operaciones de archivos individuales y por lotes para mayor flexibilidad.
Entrada:
path(cadena): Ruta del archivomode(cadena, opcional): Modo de lecturafull- Lee el archivo completo (predeterminado)head- Lee las primeras N líneastail- Lee las últimas N líneasrange- Lee un rango arbitrario de líneas (p. ej., líneas 50-100)
lines(número, opcional): Número de líneas para el modo inicio/finalstartLine(número, opcional): Línea de inicio para el modo rangoendLine(número, opcional): Línea de fin para el modo rango
Salida: Contenido del archivo como texto. Admite archivos de texto y documentos (PDF, DOCX, PPTX, XLSX, ODT, ODP, ODS)
attach_image
Adjunta imágenes para análisis de visión por IA
Entrada:
path(cadena | cadena[]): Ruta al archivo de imagen, o matriz de rutas para adjuntar múltiples imágenes a la vez
Salida: Contenido de la imagen en formato MCP para procesamiento por modelos de visión. Admite PNG, JPEG, GIF y WebP (los formatos que aceptan los modelos de visión). Los archivos SVG se devuelven como su texto de marcado; BMP no es compatible (convertir a PNG)
read_multiple_files
Lee múltiples archivos por lotes de forma concurrente
Entrada:
files(matriz): Lista de objetos de archivo con ruta y configuraciones de modo opcionales
Salida: Contenido de todos los archivos. Las lecturas fallidas no detienen la operación
Operaciones de Escritura
write_file
Crea o reemplaza el contenido de un archivo
Nota: Esta herramienta está limitada a operaciones de un solo archivo. RECOMENDADO: Usa write_multiple_files en su lugar, que admite operaciones de archivos individuales y por lotes para mayor flexibilidad.
Creación automática de directorios:
- Si el directorio padre del archivo de destino no existe pero está dentro de tus carpetas aprobadas configuradas, el servidor creará automáticamente la estructura de directorios requerida antes de escribir el archivo
- Si la ruta está fuera de las carpetas aprobadas, la operación falla con un error claro y no se crean directorios
Entrada:
path(cadena): Ruta del archivocontent(cadena): Contenido del archivo (texto o HTML para conversión a PDF/DOCX)
Salida: Confirmación de éxito. Admite conversión de HTML a PDF/DOCX con formato enriquecido
write_multiple_files
Crea o reemplaza múltiples archivos de forma concurrente
Creación automática de directorios:
- Para cada archivo solicitado, si el directorio padre no existe pero está dentro de tus carpetas aprobadas configuradas, el servidor creará automáticamente la estructura de directorios requerida antes de escribir
- Las rutas fuera de las carpetas aprobadas se rechazan durante la validación y no se crean directorios; la operación falla con una lista detallada de rutas inválidas
Entrada:
files(matriz): Lista de objetos de archivo con ruta y contenido
Salida: Estado para cada archivo. Las escrituras fallidas no detienen otros archivos
edit_file
Aplica modificaciones precisas a archivos de texto y código con coincidencia inteligente. Admite operaciones de un solo archivo y de múltiples archivos.
Entrada de un solo archivo (modo: 'single'):
mode(cadena, opcional): Establecer a"single"(predeterminado si se omite para compatibilidad hacia atrás)path(cadena): Ruta del archivoedits(matriz): Lista de operaciones de edición, cada una contiene:oldText(cadena): Texto a buscar (incluye 3-5 líneas de contexto)newText(cadena): Texto con el que reemplazarinstruction(cadena, opcional): Descripción de lo que hace esta ediciónexpectedOccurrences(número, opcional): Recuento esperado de coincidencias (predeterminado: 1)
matchingStrategy(cadena, opcional): Estrategia de coincidenciaexact- Coincidencia carácter por carácter (más rápida, más segura)flexible- Coincidencia insensible a espacios en blanco, preserva la indentaciónfuzzy- Coincidencia regex basada en tokens (más permisiva)auto- Intentar exacta → flexible → difusa (predeterminado)
dryRun(booleano, opcional): Vista previa de cambios sin escribir (predeterminado: false)failOnAmbiguous(booleano, opcional): Fallar cuando las coincidencias son ambiguas (predeterminado: true)
Entrada de múltiples archivos (modo: 'multiple'):
mode(cadena): Establecer a"multiple"files(matriz): Matriz de solicitudes de edición de archivos (máx. 50), cada una contiene:path(cadena): Ruta del archivoedits(matriz): Lista de operaciones de edición para este archivo (misma estructura que arriba)matchingStrategy(cadena, opcional): Estrategia de coincidencia por archivodryRun(booleano, opcional): Modo de prueba en seco por archivofailOnAmbiguous(booleano, opcional): Manejo de ambigüedad por archivo
failFast(booleano, opcional): Detener en el primer fallo con reversión (true, predeterminado) o continuar (false)
Características:
- Procesamiento concurrente para operaciones de múltiples archivos
- Operaciones atómicas con reversión automática en caso de fallo (cuando failFast: true)
- Preservación de finales de línea multiplataforma
- Salida detallada de diferencias con estadísticas
Salida: Diferencias detalladas con estadísticas. Para operaciones de múltiples archivos, incluye resultados por archivo y estadísticas resumidas con información de reversión para operaciones atómicas.
Importante: Usa caracteres de nueva línea reales en oldText/newText, NO secuencias de escape como \n.
Operaciones del Sistema de Archivos
make_directory
Crea directorios individuales o múltiples (como Unix mkdir -p)
Entrada:
paths(cadena | matriz): Ruta única o matriz de rutas
Salida: Confirmación de éxito. Crea directorios padre recursivamente, idempotente
list_directory
Lista el contenido del directorio con múltiples formatos de salida
Entrada:
path(cadena): Ruta del directorioformat(cadena, opcional): Formato de salidasimple- Listado básico [DIR]/[ARCHIVO] (predeterminado)detailed- Con tamaños, marcas de tiempo y estadísticastree- Vista de árbol de texto jerárquicajson- Datos estructurados con metadatos completos
sortBy(cadena, opcional): Orden de clasificaciónname- Alfabético (predeterminado)size- Más grande primero
excludePatterns(matriz, opcional): Patrones glob para excluir (p. ej.,['*.log', 'temp*'])
Salida: Listado del directorio en el formato especificado con metadatos
move_file
Reubica o renombra archivos y directorios
Nota: Esta herramienta está limitada a operaciones de un solo archivo. RECOMENDADO: Usa file_operations en su lugar, que admite operaciones de mover, copiar y renombrar para archivos individuales y por lotes con mayor flexibilidad.
Entrada:
source(cadena): Ruta de origendestination(cadena): Ruta de destino
Salida: Confirmación de éxito
file_operations
Operaciones de archivos por lotes (mover, copiar, renombrar)
Entrada:
operation(cadena): Tipo de operaciónmove- Reubicar archivoscopy- Duplicar archivosrename- Renombrar archivos
files(matriz): Lista de pares origen-destinoonConflict(cadena, opcional): Resolución de conflictosskip- Omitir archivos existentesoverwrite- Reemplazar archivos existenteserror- Fallar en conflictos (predeterminado)
Salida: Estado para cada operación. Máximo 100 archivos por operación
delete_files
Elimina archivos y directorios individuales o múltiples
Entrada:
paths(matriz): Lista de rutas a eliminarrecursive(booleano, opcional): Habilitar eliminación recursivaforce(booleano, opcional): Forzar eliminación de archivos de solo lectura
Salida: Estado para cada eliminación. No recursivo por defecto por seguridad
get_file_info
Recupera metadatos de archivos y directorios
Entrada:
path(cadena): Ruta del archivo o directorio
Salida: Tamaño, marcas de tiempo, permisos e información de tipo
register_directory
Habilita acceso en tiempo de ejecución a nuevos directorios
Entrada:
path(cadena): Ruta del directorio a registrar
Salida: Confirmación de éxito. El directorio se vuelve accesible para operaciones. Se registra la ruta real del directorio (enlaces simbólicos resueltos). Sujeto a --runtime-registration (predeterminado: confirmación del usuario a través del cliente MCP).
list_allowed_directories
Muestra las rutas de directorios actualmente accesibles
Entrada: Ninguna
Salida: Lista de todos los directorios permitidos
Operaciones de Búsqueda
glob_files
Encuentra archivos usando coincidencia de patrones glob
Entrada:
path(cadena): Directorio a buscarpattern(cadena): Patrón glob (p. ej.,**/*.ts)excludePatterns(matriz, opcional): Patrones a excluir
Salida: Lista de rutas de archivos coincidentes. Los patrones están limitados a 1,000 caracteres.
grep_files
Busca patrones de texto dentro de archivos
Entrada:
pattern(cadena): Patrón regex a buscarpath(cadena, opcional): Directorio a buscar-i(booleano, opcional): Insensible a mayúsculas/minúsculas-A/-B/-C(número, opcional): Líneas de contexto antes/después de las coincidenciastype(cadena, opcional): Filtro de tipo de archivo (js, py, ts, etc.)output_mode(cadena, opcional): Formato de salidacontent- Líneas coincidentes con números de línea (predeterminado)files_with_matches- Solo rutas de archivoscount- Recuentos de coincidencias por archivo
head_limit(número, opcional): Limitar resultados
Salida: Líneas coincidentes con contexto, rutas de archivos o recuentos de coincidencias
La coincidencia regex se ejecuta en un hilo de trabajo con un presupuesto de tiempo (5 s por archivo, 30 s por búsqueda), por lo que un patrón patológico falla con un error de tiempo de espera en lugar de congelar el servidor. Los patrones están limitados a 1,000 caracteres.
Operaciones de Shell
execute_shell
Ejecuta comandos de shell con controles de seguridad
Entrada:
command(cadena): Comando de shell a ejecutardescription(cadena, opcional): Propósito del comandoworkdir(cadena, opcional): Directorio de trabajo (debe estar dentro de los directorios permitidos). Si no se proporciona, se usa process.cwd() y se validatimeout(número, opcional): Tiempo de espera en milisegundos (predeterminado: 30000)requiresApproval(booleano, opcional): Obsoleto e ignorado (se mantiene por compatibilidad)
Salida: Código de salida, stdout, stderr y metadatos de ejecución
Seguridad:
- Al menos un directorio aprobado debe estar configurado antes de ejecutar comandos de shell
- El directorio de trabajo (ya sea explícito o process.cwd() predeterminado) siempre se valida contra los directorios permitidos
- Cada comando en una cadena (
;,&&,||,|) debe estar en--approved-commands - Los operandos de archivos y directorios (argumentos, valores de opciones como
--out=...y objetivos de redirección) se validan contra los directorios permitidos después de resolver enlaces simbólicos y uniones; los operandos con variables que no se pueden resolver se rechazan - Los comandos deben ser de una sola línea. No permitidos: nuevas líneas, sustitución de comandos, comillas invertidas, un
&solitario, agrupación( )/{ }o bloques de script, heredocs y comillas escapadas (\",\') - Los comandos que coinciden con patrones peligrosos se bloquean a menos que el operador los permita con
--allow-dangerous-commands execute_shellno es un sandbox: los intérpretes aprobados y las herramientas de ejecución de código aún pueden hacer cualquier cosa que tu cuenta pueda hacer
Ejemplos de Edición de Múltiples Archivos
Refactorización por lotes en múltiples archivos:
{
files: [
{
path: "src/utils.ts",
edits: [{
instruction: "Update deprecated function call",
oldText: "oldApi.getData()",
newText: "newApi.fetchData()"
}]
},
{
path: "src/components/Button.tsx",
edits: [{
instruction: "Update component prop",
oldText: "onClick={oldHandler}",
newText: "onClick={newHandler}"
}]
},
{
path: "src/hooks/useData.ts",
edits: [{
instruction: "Update hook implementation",
oldText: "const data = oldApi.getData()",
newText: "const data = newApi.fetchData()"
}]
}
],
failFast: true // Atomic operation - rollback all if any fails
}
Configuración por archivo:
{
files: [
{
path: "config.json",
edits: [{
oldText: '"version": "1.0.0"',
newText: '"version": "1.1.0"'
}],
matchingStrategy: "exact" // JSON needs exact matches
},
{
path: "src/app.py",
edits: [{
oldText: "def old_function():",
newText: "def new_function():"
}],
matchingStrategy: "flexible" // Python indentation may vary
},
{
path: "README.md",
edits: [{
oldText: "## Old Section",
newText: "## New Section"
}],
matchingStrategy: "auto" // Let AI decide best strategy
}
],
failFast: false // Continue even if some files fail
}
Para ejemplos de uso detallados, consulta Guía de Uso de Herramientas
Seguridad
Este servidor MCP implementa controles de seguridad para proteger contra vulnerabilidades comunes del sistema de archivos, basados en patrones CVE conocidos. Para reportar una vulnerabilidad, siga SECURITY.md (reporte privado; no abra un issue público).
Protegido Contra
Path Traversal y Bypass de Directorios (CWE-22)
- Patrón Protegido: CVE-2025-54794 / CVE-2025-53110
- Mitigación: La validación de ruta canónica con requisitos de separadores de ruta previene ataques de colisión de prefijos
- Implementación: Utiliza
isPathWithinAllowedDirectories()que requiere rutas de subdirectorio reales (no solo coincidencias de prefijo) - Ejemplo: Bloquea
/path/to/allowed_evilcuando/path/to/allowedestá aprobado
Inyección de Comandos (CWE-78)
- Patrón Protegido: CVE-2025-54795
- Mitigación: Los comandos se analizan con un parser conservador y consciente de comillas; solo se acepta una gramática pequeña que bash y PowerShell interpretan de la misma manera, y cada comando en una cadena debe ser aprobado
- Implementación: Rechaza nuevas líneas y caracteres de control, sustitución de comandos, backticks, comillas escapadas, un
&solitario, bloques de agrupación/scripts y heredocs; los patrones peligrosos se bloquean a menos que el operador los permita (--allow-dangerous-commands) - Ejemplo:
echo "\"; malicious_cmd; echo \""y comandos separados por nuevas líneas son rechazados
Bypass de Directorio en Comandos Shell (CWE-22)
- Patrón Protegido: Bypass de restricción de ruta a través de rutas en comandos shell
- Mitigación: Cada operando de archivo (argumentos, valores de opciones como
--out=..., objetivos de redirección, objetivos decd) se valida contra directorios permitidos después de resolver symlinks y junctions - Implementación: Los operandos se verifican léxicamente, después de
realpath, y con resolución física (symlinks seguidos antes de.., como lo hace un kernel POSIX); los operandos relativos se verifican contra cada directorio donde uncdpodría dejar el comando; variables no resolubles y rutas de proveedor de PowerShell (env:,HKLM:, ...) son rechazadas - Ejemplo: Bloquea
cat /etc/passwd,type C:\Windows\System32\drivers\etc\hosts,echo x >C:\outside\fileycat link/secret(dondelinkapunta fuera) cuando los objetivos están fuera de los directorios aprobados - Alcance:
execute_shellno es un sandbox. Un intérprete aprobado o una herramienta de ejecución de código aún puede hacer cualquier cosa que su cuenta pueda hacer, así que apruebe comandos con moderación
Ataques de Symlink (CWE-59 / CWE-61)
- Patrón Protegido: CVE-2025-53109
- Mitigación: Todas las rutas se resuelven a través de
realpath()antes de la validación para seguir symlinks a los objetivos reales - Implementación: Los objetivos de symlink deben estar dentro de directorios permitidos; valida directorios padre para nuevos archivos
- Ejemplo: Bloquea symlinks que apuntan a
/etc/passwdincluso si el symlink está en un directorio permitido
Directory Traversal
- Mitigación: Normalización estricta de rutas y validación solo contra directorios aprobados
- Implementación: Rechaza intentos de traversal
../; valida directorios padre antes de la creación de archivos - Ejemplo: Bloquea acceso a
/unauthorized/pathindependientemente de los intentos de traversal
Controles de Seguridad
Validación de Rutas
- Resolución de Ruta Canónica: Todas las rutas se normalizan y resuelven antes de la validación
- Requisito de Separador: Los subdirectorios deben incluir separadores de ruta (previene colisión de prefijos)
- Resolución Realpath: Los symlinks se resuelven a objetivos reales antes de las verificaciones de acceso
- Validación de Directorio Padre: La creación de nuevos archivos valida que el directorio padre esté dentro del alcance permitido
Ejecución de Comandos
- Lista Blanca de Comandos: Solo se ejecutan los comandos listados en
--approved-commands; todo lo demás se bloquea - Detección de Patrones: Bloquea patrones peligrosos (destructivos, escalada de privilegios, ejecución de red) a menos que el operador permita el comando con
--allow-dangerous-commands - Análisis Estructural: Rechaza sustitución de comandos, backticks, nuevas líneas, agrupación y otras construcciones que podrían ocultar comandos de la validación
- Extracción de Comando Raíz: Analiza todos los comandos en operaciones encadenadas para aprobación
- Validación de Operandos de Ruta: Valida todos los operandos de archivos/directorios, incluidos los objetivos de redirección, contra directorios permitidos con resolución de symlinks
Controles de Acceso
- Lista Blanca de Directorios: Las operaciones se restringen a directorios explícitamente aprobados
- Registro en Tiempo de Ejecución: Los directorios adicionales requieren registro a través de
register_directory, que pide al usuario confirmar por defecto (--runtime-registration) - Límites de Recursos: Las lecturas de texto de archivos completos están limitadas a 10 MB,
attach_imagea 10 MB por imagen y 20 MB por llamada, y los documentos Office/ODF se verifican para bombas zip antes de analizarlos - Validación Atómica: Las rutas se validan antes de que comience cualquier operación de archivos
- Seguridad Multiplataforma: Manejo adecuado de diferencias de rutas Windows/Unix y rutas UNC
Mejores Prácticas de Seguridad
- Minimizar Directorios Aprobados: Solo apruebe directorios que requieran acceso de IA
- Usar Filtrado de Directorios: Excluya carpetas sensibles (por ejemplo,
.git,node_modules) de los listados - Limitar Acceso a Herramientas: Habilite solo las herramientas necesarias a través de
--enabled-toolso--enabled-tool-categories - Aprobación de Comandos: Apruebe solo los comandos que necesite a través de
--approved-commands; evite shells e intérpretes (bash,sh,powershell,node,python,eval), que pueden ejecutar código arbitrario - Monitorear Operaciones: Revise los registros del cliente MCP para intentos de acceso inesperados
- Actualizaciones Regulares: Mantenga el servidor actualizado para recibir parches de seguridad
Auditoría de Seguridad
Este servidor ha sido auditado exhaustivamente contra vulnerabilidades conocidas y hallazgos de análisis estático:
Estado de Protección CVE:
- ✅ CVE-2025-54794 (Bypass de Restricción de Ruta) - CORREGIDO
- ✅ CVE-2025-54795 (Inyección de Comandos) - PROTEGIDO (variantes de comillas escapadas y nuevas líneas cerradas en 1.3.0)
- ✅ CVE-2025-53109 (Ataques de Symlink) - PROTEGIDO (brechas de
make_directoryyexecute_shellcerradas en 1.3.0) - ✅ CVE-2025-53110 (Bypass de Contención de Directorios) - PROTEGIDO
- ✅ Bypass de Directorio en Ejecución Shell - CORREGIDO en 1.3.0. La corrección de noviembre de 2024 fue incompleta: rutas con prefijo de barra, redirecciones adjuntas y rutas con symlinks aún podían escapar
Últimas Auditorías de Seguridad:
-
📋 Lanzamiento de endurecimiento de seguridad 1.3.0 - Octubre 2026
- Alcance: Auditoría independiente del issue #3 de GitHub más un escaneo de Snyk Open Source / Snyk Code / contenedor y revisión manual
- Corregido: encadenamiento de comandos con nuevas líneas más allá de la lista blanca, brechas de validación de rutas shell (rutas con barra, redirecciones, symlinks), comandos peligrosos autoaprobados, escape de symlink
make_directory, registro de directorios iniciado por IA sin consentimiento, carga de.envdesde el directorio de trabajo, manejo de imágenes PDF que podría bloquear el servidor o buscar URLs remotas, uso de recursos regex/lectura/descompresión sin límites, desreferenciación de symlinks en copias de directorios - Dependencias: actualizadas con una cuarentena de lanzamiento de 14 días; todos los paquetes pasan
npm audit signatures - Ver CHANGELOG.md para detalles
-
📋 Informe de Auditoría de Vulnerabilidades Snyk - Noviembre 2025
- Estado: 5/6 hallazgos de Snyk validados como falsos positivos, 1 hallazgo corregido
- Nivel de Riesgo: BAJO - Protección integral de path traversal verificada
- Análisis Estático: Tasa de falsos positivos de Snyk del 83% debido a validación personalizada no reconocida
- Cobertura de Pruebas: Más de 2000 líneas de pruebas de seguridad validan todas las medidas de protección
-
📋 Auditoría Manual CVE - Noviembre 2025
- Estado: Vulnerabilidad crítica
make_directoryidentificada y corregida - Enfoque: Análisis de patrones CVE-2025-54794/54795 y estrategias de mitigación
- Fecha: 4 de noviembre de 2025 (Investigación Manual de CVE)
- Estado: Vulnerabilidad crítica
-
📋 Auditoría de Bypass de Directorio en Comandos Shell - Noviembre 2025
- Estado: Parcialmente corregido en noviembre de 2024; completado en 1.3.0 (octubre de 2026)
- Problema: Los comandos shell anteriormente podían acceder a archivos fuera de los directorios aprobados a través de rutas absolutas
- Severidad: ALTA (CVSS ~7.5) - Path traversal a través de argumentos de comandos
- Estado de Corrección: ✅ CORREGIDO en 1.3.0 - validación consciente de symlinks de todos los operandos, incluidas las redirecciones
- Cobertura de Pruebas: 419 líneas de pruebas integrales, todas pasando
-
📋 Resumen de Cobertura de Pruebas de Seguridad
- Suite de Pruebas: Más de 2000 líneas de pruebas enfocadas en seguridad en
src/tests/ - Pruebas CVE: Pruebas explícitas para CVE-2025-54794, CVE-2025-54795, CVE-2025-53109
- Cobertura: Path traversal, symlinks (más de 129 casos), inyección de comandos, bypass de shell
- Suite de Pruebas: Más de 2000 líneas de pruebas enfocadas en seguridad en
Arquitectura de Seguridad:
- Validación de rutas multicapa (resolución canónica, verificación de límites, protección de symlinks)
- Defensa en profundidad con operaciones atómicas y prevención de condiciones de carrera
- Lista blanca de directorios con protección contra colisión de prefijos
- Anotaciones de seguridad integrales para herramientas de análisis estático
Tipos de Archivos Soportados
Operaciones de Archivos de Texto
Herramientas de Lectura (read_file, read_multiple_files):
- Archivos de texto: Lee cualquier archivo como texto codificado en UTF-8 (código fuente, archivos de configuración, markdown, JSON, XML, CSV, registros)
- Archivos de documentos: Detecta y analiza automáticamente:
- PDF (
.pdf) - Extracción de texto plano a través depdf-parse - Word (
.docx) - Markdown con formato (encabezados, negrita, listas, tablas) a través demammoth - PowerPoint (
.pptx) - Extracción de texto plano a través deofficeparser - Excel (
.xlsx) - Extracción de texto plano a través deofficeparser - Texto OpenDocument (
.odt) - Extracción de texto plano a través deofficeparser - Presentación OpenDocument (
.odp) - Extracción de texto plano a través deofficeparser - Hoja de cálculo OpenDocument (
.ods) - Extracción de texto plano a través deofficeparser
- PDF (
read_fileadmite cuatro modos para archivos de texto:- full: Lee el archivo completo
- head: Lee las primeras N líneas
- tail: Lee las últimas N líneas
- range: Lee un rango arbitrario de líneas (por ejemplo, líneas 50-100, inclusivo, indexado desde 1)
read_multiple_filespermite especificación de modo por archivo - cada archivo puede usar un modo diferente en una sola operación- Los archivos de documentos ignoran los parámetros de modo y siempre devuelven contenido completo
- Producirá salida distorsionada para archivos binarios no soportados (imágenes, ejecutables, archivos comprimidos)
Herramientas de Escritura (write_file, write_multiple_files, edit_file):
- Escribe contenido de texto codificado en UTF-8
- Admite conversión de HTML a PDF/DOCX con formato enriquecido (encabezados, negrita, cursiva, tablas, listas, colores)
- Puede crear: código fuente, archivos de configuración, markdown, JSON, XML, CSV, documentos de texto, PDF/DOCX formateados desde HTML
- Respaldo de texto plano para PDF/DOCX cuando no se detecta HTML
- No puede escribir archivos binarios (no hay conversión de base64 a binario disponible)
Operaciones de Archivos de Imagen
Herramienta de Adjuntar Imagen (attach_image):
- Adjunta imágenes para análisis de visión de IA (requiere cliente MCP con capacidad de visión)
- Formatos soportados: PNG, JPEG, GIF, WebP (SVG se devuelve como texto de marcado; BMP no es compatible)
- Soporte por lotes: Puede adjuntar una sola imagen o múltiples imágenes en una llamada
- Las imágenes se presentan a la IA como si fueran subidas directamente por el usuario
- Permite análisis visual: leer texto en imágenes, analizar diagramas, describir escenas
- Casos de uso:
- Analizar capturas de pantalla para depuración
- Extraer texto de imágenes (similar a OCR)
- Comparar maquetas de UI (adjuntar múltiples capturas de pantalla a la vez)
- Describir gráficos y diagramas
- Identificar objetos en fotos
- Devuelve imágenes en formato estándar MCP para procesamiento de visión del cliente
- Solo funciona dentro de directorios permitidos
Ejemplo de Uso:
# Single image
User: "Attach /screenshots/error.png and tell me what's wrong"
AI: [Analyzes image] "This screenshot shows a TypeError on line 42..."
# Multiple images at once
User: "Attach both /screenshots/before.png and /screenshots/after.png and compare them"
AI: [Analyzes both images] "The 'before' screenshot shows..., while the 'after' screenshot..."
Compatibilidad con Clientes:
- ✅ Funciona con: Claude Desktop, Claude.ai, Cursor, ChatGPT Desktop
- ✅ Requiere: Cliente MCP con capacidades de visión
- ❌ Los clientes sin visión recibirán un error
Nota: Actualmente no existe capacidad de escritura para archivos binarios. Puedes adjuntar imágenes para análisis de visión, pero no puedes crear ni modificar archivos de imagen a través de las herramientas del sistema de archivos.
Operaciones del Sistema de Archivos
Herramienta de Operaciones de Archivos (file_operations, move_file):
- Funciona con cualquier tipo de archivo (texto o binario)
- Operaciones: mover, copiar, renombrar
- Maneja tanto archivos como directorios
- Preserva el contenido del archivo sin modificaciones durante las operaciones
Edición de Archivos
Herramienta de Edición de Archivos (edit_file):
- Modificación inteligente de archivos con estrategias de coincidencia automáticas (exacta → flexible → difusa)
- Soporta múltiples ediciones secuenciales en una sola operación
- Proporciona salida de diff detallada con estadísticas
- Modo de vista previa opcional (
dryRun: true) - Preserva la indentación y los finales de línea
Configuración de Desarrollo
# Clone the repository
git clone https://github.com/n0zer0d4y/vulcan-file-ops.git
cd vulcan-file-ops
# Install dependencies
npm install
# Run tests
npm test
# Build the project
npm run build
# Start development server
npm start
Pruebas
El proyecto incluye una cobertura de pruebas integral. Ejecuta las pruebas con:
npm test
Contribuciones
No se aceptan solicitudes de extracción para este proyecto.
Los informes de errores y las solicitudes de funciones son bienvenidos a través de los issues de GitHub. Por favor incluye:
- Para errores: pasos de reproducción, comportamiento esperado vs. real, detalles del entorno
- Para funciones: descripción clara de lo que necesitas y tu caso de uso
Los issues existentes pueden cubrir tu tema, así que por favor busca primero.
Licencia
Este proyecto está licenciado bajo la Licencia MIT: consulta el archivo LICENSE para más detalles.
