Filesystem MCP Server
Proporciona a los agentes de IA acceso seguro a operaciones del sistema de archivos local, como leer, escribir y gestionar archivos y directorios.
Documentación
Servidor MCP de Sistema de Archivos
Potencia a tus agentes de IA con capacidades robustas de sistema de archivos independientes de la plataforma, ahora con opciones de transporte STDIO y HTTP Streamable.
Este servidor de Protocolo de Contexto de Modelo (MCP) proporciona una interfaz segura y confiable para que los agentes de IA interactúen con el sistema de archivos local. Permite leer, escribir, actualizar y gestionar archivos y directorios, respaldado por una base TypeScript lista para producción que incluye registro integral, manejo de errores, medidas de seguridad y ahora soporta tanto transportes STDIO como HTTP.
Tabla de Contenidos
- Descripción General
- Características
- Instalación
- Configuración
- Uso con Clientes MCP
- Herramientas Disponibles
- Estructura del Proyecto
- Desarrollo
- Licencia
Descripción General
El Protocolo de Contexto de Modelo (MCP) es un marco estándar que permite a los modelos de IA interactuar de forma segura con herramientas externas y fuentes de datos (recursos). Este servidor implementa el estándar MCP para exponer operaciones esenciales del sistema de archivos como herramientas, permitiendo a los agentes de IA:
- Leer y analizar contenidos de archivos.
- Crear, modificar o sobrescribir archivos.
- Gestionar directorios y rutas de archivos.
- Realizar actualizaciones específicas dentro de archivos.
Construido con TypeScript, el servidor enfatiza la seguridad de tipos, la modularidad y el manejo robusto de errores, lo que lo hace adecuado para una integración confiable en flujos de trabajo de IA. Ahora soporta tanto STDIO para comunicación directa de procesos como HTTP para interacciones basadas en red.
Arquitectura
El servidor emplea una arquitectura en capas para mayor claridad y mantenibilidad:
flowchart TB
subgraph TransportLayer["Transport Layer"]
direction LR
STDIO["STDIO Transport"]
HTTP["HTTP Transport (Express, JWT Auth)"]
end
subgraph APILayer["API Layer"]
direction LR
MCP["MCP Protocol Interface"]
Val["Input Validation (Zod)"]
PathSan["Path Sanitization"]
MCP --> Val --> PathSan
end
subgraph CoreServices["Core Services"]
direction LR
Config["Configuration (Zod-validated Env Vars)"]
Logger["Logging (Winston, Context-aware)"]
ErrorH["Error Handling (McpError, ErrorHandler)"]
ServerLogic["MCP Server Logic"]
State["Session State (Default Path)"]
Config --> ServerLogic
Logger --> ServerLogic & ErrorH
ErrorH --> ServerLogic
State --> ServerLogic
end
subgraph ToolImpl["Tool Implementation"]
direction LR
FSTools["Filesystem Tools"]
Utils["Core Utilities (Internal, Security, Metrics, Parsing)"]
FSTools --> ServerLogic
Utils -- Used by --> FSTools
Utils -- Used by --> CoreServices
Utils -- Used by --> APILayer
end
TransportLayer --> MCP
PathSan --> FSTools
classDef layer fill:#2d3748,stroke:#4299e1,stroke-width:3px,rx:5,color:#fff
classDef component fill:#1a202c,stroke:#a0aec0,stroke-width:2px,rx:3,color:#fff
class TransportLayer,APILayer,CoreServices,ToolImpl layer
class STDIO,HTTP,MCP,Val,PathSan,Config,Logger,ErrorH,ServerLogic,State,FSTools,Utils component
- Capa de Transporte: Maneja la comunicación a través de STDIO o HTTP (con Express.js y autenticación JWT).
- Capa de API: Gestiona la comunicación MCP, valida entradas usando Zod y sanitiza rutas.
- Servicios Principales: Supervisa la configuración (variables de entorno validadas con Zod), registro contextual, informes de errores estandarizados, estado de sesión (como el directorio de trabajo predeterminado) y la instancia principal del servidor MCP.
- Implementación de Herramientas: Contiene la lógica específica para cada herramienta del sistema de archivos, aprovechando un conjunto refactorizado de utilidades compartidas categorizadas en módulos internos, de seguridad, métricas y análisis.
Características
- Operaciones Integrales de Archivos: Herramientas para leer, escribir, listar, eliminar, mover y copiar archivos y directorios.
- Actualizaciones Específicas: La herramienta
update_filepermite operaciones precisas de buscar y reemplazar dentro de archivos, soportando texto plano y expresiones regulares. - Gestión de Rutas Consciente de la Sesión: La herramienta
set_filesystem_defaultestablece un directorio de trabajo predeterminado para resolver rutas relativas durante una sesión. - Soporte de Doble Transporte:
- STDIO: Para comunicación directa y eficiente cuando se ejecuta como proceso hijo.
- HTTP: Para interacción basada en red, con endpoints RESTful, Eventos Enviados por el Servidor (SSE) para transmisión y autenticación basada en JWT.
- Seguridad Primero:
- La sanitización de rutas integrada previene ataques de traversal de directorios.
- Autenticación JWT para transporte HTTP.
- Validación de entradas con Zod.
- Base Robusta: Incluye utilidades de grado de producción, ahora reorganizadas para mejor modularidad:
- Utilidades Internas: Registro contextual (Winston), manejo de errores estandarizado (
McpError,ErrorHandler), gestión de contexto de solicitudes. - Utilidades de Seguridad: Sanitización de entradas, limitación de velocidad, generación de UUID e IDs con prefijo.
- Utilidades de Métricas: Conteo de tokens.
- Utilidades de Análisis: Análisis de fechas en lenguaje natural, análisis de JSON parcial.
- Utilidades Internas: Registro contextual (Winston), manejo de errores estandarizado (
- Configuración Mejorada: Variables de entorno validadas con Zod para una configuración segura de tipos y confiable.
- Seguridad de Tipos: Implementado completamente en TypeScript para mayor confiabilidad y mantenibilidad.
Instalación
Pasos
- Clonar el repositorio:
git clone https://github.com/cyanheads/filesystem-mcp-server.git cd filesystem-mcp-server - Instalar dependencias:
npm install - Compilar el proyecto:
Esto compila el código TypeScript a JavaScript en el directorionpm run builddist/y hace ejecutable el script principal. El ejecutable estará ubicado endist/index.js.
Configuración
Configure el servidor usando variables de entorno (se admite un archivo .env):
Configuración Principal del Servidor:
MCP_LOG_LEVEL(Opcional): Nivel mínimo de registro (por ejemplo,debug,info,warn,error). El valor predeterminado esdebug.LOGS_DIR(Opcional): Directorio para archivos de registro. El valor predeterminado es./logsen la raíz del proyecto.NODE_ENV(Opcional): Entorno de ejecución (por ejemplo,development,production). El valor predeterminado esdevelopment.
Configuración de Transporte:
MCP_TRANSPORT_TYPE(Opcional): Transporte de comunicación (stdioohttp). El valor predeterminado esstdio.- Si se selecciona
http:MCP_HTTP_PORT(Opcional): Puerto para el servidor HTTP. El valor predeterminado es3010.MCP_HTTP_HOST(Opcional): Host para el servidor HTTP. El valor predeterminado es127.0.0.1.MCP_ALLOWED_ORIGINS(Opcional): Lista separada por comas de orígenes CORS permitidos (por ejemplo,http://localhost:3000,https://example.com).MCP_AUTH_SECRET_KEY(Requerido para Autenticación HTTP): Una clave secreta segura (de al menos 32 caracteres) para autenticación JWT. CRÍTICO para producción.
- Si se selecciona
Seguridad del Sistema de Archivos:
FS_BASE_DIRECTORY(Opcional): Define el directorio raíz para todas las operaciones del sistema de archivos. Puede ser una ruta absoluta o una ruta relativa a la raíz del proyecto (por ejemplo,./data_sandbox). Si se establece, las herramientas del servidor estarán restringidas a acceder solo a archivos y directorios dentro de esta ruta especificada (y resuelta como absoluta) y sus subdirectorios. Esta es una característica de seguridad crucial para prevenir el acceso no intencionado a otras partes del sistema de archivos. Si no se establece (lo cual no se recomienda para entornos de producción), se registrará una advertencia y las operaciones no estarán restringidas.
Integración de LLM y API (Opcional):
OPENROUTER_APP_URL: La URL de su aplicación para OpenRouter.OPENROUTER_APP_NAME: El nombre de su aplicación para OpenRouter. El valor predeterminado esMCP_SERVER_NAME.OPENROUTER_API_KEY: Clave de API para servicios de OpenRouter.LLM_DEFAULT_MODEL: Modelo LLM predeterminado a usar (por ejemplo,google/gemini-2.5-flash-preview-05-20).LLM_DEFAULT_TEMPERATURE,LLM_DEFAULT_TOP_P,LLM_DEFAULT_MAX_TOKENS,LLM_DEFAULT_TOP_K,LLM_DEFAULT_MIN_P: Parámetros predeterminados para llamadas LLM.GEMINI_API_KEY: Clave de API para servicios de Google Gemini.
Integración de Proxy OAuth (Opcional, para escenarios avanzados):
OAUTH_PROXY_AUTHORIZATION_URL,OAUTH_PROXY_TOKEN_URL,OAUTH_PROXY_REVOCATION_URL,OAUTH_PROXY_ISSUER_URL,OAUTH_PROXY_SERVICE_DOCUMENTATION_URL,OAUTH_PROXY_DEFAULT_CLIENT_REDIRECT_URIS: Configuración para un proxy OAuth.
Consulte src/config/index.ts y el archivo .clinerules para la lista completa y las definiciones de esquema Zod.
Uso con Clientes MCP
Para permitir que un cliente MCP (como un asistente de IA) use este servidor:
-
Ejecutar el Servidor: Inicie el servidor desde su terminal:
node dist/index.js # Or if you are in the project root: # npm start -
Configurar el Cliente: Agregue el servidor a la configuración de su cliente MCP. El método exacto depende del cliente.
Para Transporte STDIO (Predeterminado): Generalmente implica especificar:
- Comando:
node - Argumentos: La ruta absoluta al ejecutable del servidor compilado (por ejemplo,
/path/to/filesystem-mcp-server/dist/index.js). - Variables de Entorno (Opcional): Establezca cualquier variable de entorno requerida de la sección Configuración.
Ejemplo de Configuración MCP para STDIO (Conceptual):
{ "mcpServers": { "filesystem_stdio": { "command": "node", "args": ["/path/to/filesystem-mcp-server/dist/index.js"], "env": { "MCP_LOG_LEVEL": "debug" // Other relevant env vars }, "disabled": false, "autoApprove": [] } } }Para Transporte HTTP: El cliente necesitará conocer la URL del servidor (por ejemplo,
http://localhost:3010) y cómo autenticarse (por ejemplo, proporcionando un token Bearer JWT siMCP_AUTH_SECRET_KEYestá establecido). Consulte la documentación de su cliente MCP para la configuración del servidor HTTP. - Comando:
Una vez configurado y ejecutándose, el cliente detectará el servidor y sus herramientas disponibles.
Herramientas Disponibles
El servidor expone las siguientes herramientas para la interacción con el sistema de archivos:
| Herramienta | Descripción |
|---|---|
set_filesystem_default | Establece una ruta absoluta predeterminada para la sesión actual. Las rutas relativas utilizadas en llamadas posteriores a herramientas se resolverán con respecto a este valor predeterminado. Se restablece al reiniciar el servidor. |
read_file | Lee el contenido completo de un archivo especificado como texto UTF-8. Acepta rutas relativas (resueltas con respecto al valor predeterminado) o absolutas. |
write_file | Escribe contenido en un archivo especificado. Crea el archivo (y los directorios padre necesarios) si no existe, o lo sobrescribe si ya existe. Acepta rutas relativas o absolutas. |
update_file | Realiza operaciones de búsqueda y reemplazo específicas dentro de un archivo existente utilizando una matriz de bloques {search, replace}. Ideal para cambios localizados. Admite búsqueda de texto plano o regex (useRegex: true) y reemplazo de todas las apariciones (replaceAll: true). Acepta rutas relativas o absolutas. El archivo debe existir. |
list_files | Lista archivos y directorios dentro de una ruta especificada. Las opciones incluyen listado recursivo (includeNested: true) y limitación del número de entradas (maxEntries). Devuelve una estructura de árbol formateada. Acepta rutas relativas o absolutas. |
delete_file | Elimina permanentemente un archivo específico. Acepta rutas relativas o absolutas. |
delete_directory | Elimina permanentemente un directorio. Utilice recursive: true para eliminar directorios no vacíos y su contenido (¡úsese con precaución!). Acepta rutas relativas o absolutas. |
create_directory | Crea un nuevo directorio en la ruta especificada. De forma predeterminada (create_parents: true), también crea los directorios padre necesarios. Acepta rutas relativas o absolutas. |
move_path | Mueve o renombra un archivo o directorio de una ruta de origen a una ruta de destino. Acepta rutas relativas o absolutas para ambas. |
copy_path | Copia un archivo o directorio de una ruta de origen a una ruta de destino. Para directorios, copia de forma recursiva de manera predeterminada (recursive: true). Acepta rutas relativas o absolutas. |
Consulte los archivos de registro de herramientas (src/mcp-server/tools/*/registration.ts) para ver los esquemas detallados de entrada/salida (Zod/JSON Schema).
Estructura del Proyecto
El código base está organizado para mayor claridad y mantenibilidad:
filesystem-mcp-server/
├── dist/ # Compiled JavaScript output (after npm run build)
├── logs/ # Log files (created at runtime)
├── node_modules/ # Project dependencies
├── src/ # TypeScript source code
│ ├── config/ # Configuration loading (index.ts)
│ ├── mcp-server/ # Core MCP server logic
│ │ ├── server.ts # Server initialization, tool registration, transport handling
│ │ ├── state.ts # Session state management (e.g., default path)
│ │ ├── tools/ # Individual tool implementations (one subdir per tool)
│ │ │ ├── readFile/
│ │ │ │ ├── index.ts
│ │ │ │ ├── readFileLogic.ts
│ │ │ │ └── registration.ts
│ │ │ └── ... # Other tools (writeFile, updateFile, etc.)
│ │ └── transports/ # Communication transport implementations
│ │ ├── authentication/ # Auth middleware for HTTP
│ │ │ └── authMiddleware.ts
│ │ ├── httpTransport.ts
│ │ └── stdioTransport.ts
│ ├── types-global/ # Shared TypeScript types and interfaces
│ │ ├── errors.ts # Custom error classes and codes (McpError, BaseErrorCode)
│ │ ├── mcp.ts # MCP related types
│ │ └── tool.ts # Tool definition types
│ ├── utils/ # Reusable utility modules, categorized
│ │ ├── internal/ # Core internal utilities (errorHandler, logger, requestContext)
│ │ ├── metrics/ # Metrics-related utilities (tokenCounter)
│ │ ├── parsing/ # Parsing utilities (dateParser, jsonParser)
│ │ ├── security/ # Security-related utilities (idGenerator, rateLimiter, sanitization)
│ │ └── index.ts # Barrel export for all utilities
│ └── index.ts # Main application entry point
├── .clinerules # Cheatsheet for LLM assistants
├── .dockerignore
├── Dockerfile
├── LICENSE
├── mcp.json # MCP server manifest (generated by SDK or manually)
├── package.json
├── package-lock.json
├── README.md # This file
├── repomix.config.json
├── smithery.yaml # Smithery configuration (if used)
└── tsconfig.json # TypeScript compiler options
Para una vista detallada y en vivo de la estructura actual, ejecute: npm run tree (Es posible que este script deba actualizarse si src/scripts/tree.ts fue parte de los cambios).
Nota para desarrolladores: Este repositorio incluye un archivo .clinerules. Esta hoja de referencia proporciona a su asistente de codificación LLM contexto esencial sobre patrones del código base, ubicaciones de archivos y ejemplos de uso. ¡Manténgala actualizada a medida que el servidor evolucione!
Licencia
Este proyecto está licenciado bajo la Apache License 2.0. Consulte el archivo LICENSE para obtener más detalles.