WebDAV MCP Server
Realiza operaciones CRUD en un servidor WebDAV con autenticación básica.
Documentación
WebDAV MCP Server
Un servidor del Protocolo de Contexto de Modelo (MCP) que permite operaciones CRUD en un endpoint WebDAV con autenticación básica. Este servidor permite a Claude Desktop y otros clientes MCP interactuar con sistemas de archivos WebDAV mediante comandos en lenguaje natural.
Características
- Conectarse a cualquier servidor WebDAV con autenticación opcional
- Realizar operaciones CRUD en archivos y directorios
- Exponer operaciones de archivos como recursos y herramientas MCP
- Ejecutar mediante transporte stdio (para integración con Claude Desktop) o transporte HTTP/SSE
- Acceso seguro con autenticación básica opcional
- Soporte para contraseñas cifradas con bcrypt para la autenticación del servidor MCP (las contraseñas de WebDAV deben ser texto plano debido a limitaciones del protocolo)
- Agrupación de conexiones para un mejor rendimiento con servidores WebDAV
- Validación de configuración mediante Zod
- Registro estructurado para facilitar la resolución de problemas
Requisitos previos
- Node.js 18 o posterior
- npm o yarn
- Servidor WebDAV (para operaciones reales de archivos)
Instalación
Opción 1: Instalar desde el paquete npm
Instalación global
npm install -g webdav-mcp-server
O con npx
npx webdav-mcp-server
Opción 2: Clonar y compilar desde el código fuente
Clonar el repositorio
git clone https://github.com/yourusername/webdav-mcp-server.git cd webdav-mcp-server
Instalar dependencias
npm install
Compilar la aplicación
npm run build
Opción 3: Docker
Construir la imagen de Docker
docker build -t webdav-mcp-server .
Ejecutar el contenedor sin autenticación
docker run -p 3000:3000
-e WEBDAV_ROOT_URL=http://your-webdav-server
-e WEBDAV_ROOT_PATH=/webdav
webdav-mcp-server
Ejecutar el contenedor con autenticación tanto para WebDAV como para el servidor MCP
docker run -p 3000:3000
-e WEBDAV_ROOT_URL=http://your-webdav-server
-e WEBDAV_ROOT_PATH=/webdav
-e WEBDAV_AUTH_ENABLED=true
-e WEBDAV_USERNAME=admin
-e WEBDAV_PASSWORD=password
-e AUTH_ENABLED=true
-e AUTH_USERNAME=user
-e AUTH_PASSWORD=pass
webdav-mcp-server
Configuración
Cree un archivo .env en el directorio raíz con las siguientes variables:
Configuración de WebDAV
WEBDAV_ROOT_URL=http://localhost:4080 WEBDAV_ROOT_PATH=/webdav
Autenticación de WebDAV (opcional)
WEBDAV_AUTH_ENABLED=true WEBDAV_USERNAME=admin
La contraseña de WebDAV debe ser texto plano (requerida cuando la autenticación está habilitada)
El protocolo WebDAV requiere enviar la contraseña real al servidor
WEBDAV_PASSWORD=password
Configuración del servidor (para modo HTTP)
SERVER_PORT=3000
Configuración de autenticación para el servidor MCP (opcional)
AUTH_ENABLED=true AUTH_USERNAME=user AUTH_PASSWORD=pass AUTH_REALM=MCP WebDAV Server
La contraseña de autenticación del servidor MCP puede ser un hash bcrypt (a diferencia de las contraseñas de WebDAV)
AUTH_PASSWORD={bcrypt}$2y$10$CyLKnUwn9fqqKQFEbxpZFuE9mzWR/x8t6TE7.CgAN0oT8I/5jKJBy
Contraseñas cifradas para la autenticación del servidor MCP
Para mayor seguridad del servidor MCP (no de las conexiones WebDAV), puede usar contraseñas cifradas con bcrypt en lugar de almacenarlas en texto plano:
- Generar un hash bcrypt:
Usando la utilidad integrada
npm run generate-hash -- yourpassword
O con npx
npx webdav-mcp-generate-hash yourpassword 2. Agregar el hash a su archivo .env con el prefijo {bcrypt}:
AUTH_PASSWORD={bcrypt}$2y$10$CyLKnUwn9fqqKQFEbxpZFuE9mzWR/x8t6TE7.CgAN0oT8I/5jKJBy
De esta manera, la contraseña de su servidor MCP se almacena de forma segura. Tenga en cuenta que las contraseñas de WebDAV siempre deben estar en texto plano debido a los requisitos del protocolo.
Uso
Ejecución con transporte stdio
Este modo es ideal para la integración directa con Claude Desktop.
Si está instalado globalmente
webdav-mcp-server
Si usa npx
npx webdav-mcp-server
Si se compiló desde el código fuente
node dist/index.js
Ejecución con transporte HTTP/SSE
Este modo permite que el servidor sea accesible a través de HTTP con Eventos Enviados por el Servidor (SSE) para comunicación en tiempo real.
Si está instalado globalmente
webdav-mcp-server --http
Si usa npx
npx webdav-mcp-server --http
Si se compiló desde el código fuente
node dist/index.js --http
Inicio rápido con Docker Compose
La forma más fácil de comenzar con el servidor WebDAV y el servidor MCP es usar Docker Compose:
Iniciar ambos servidores WebDAV y MCP
cd docker docker-compose up -d
Esto iniciará:
- servidor hacdias/webdav en el puerto 4080 (usuario: admin, contraseña: admin)
- servidor MCP en el puerto 3000 (usuario: user, contraseña: pass)
Esta configuración utiliza hacdias/webdav, un servidor WebDAV simple e independiente escrito en Go. La configuración del servidor WebDAV se almacena en webdav_config.yml, que puede modificar para ajustar permisos, agregar usuarios o cambiar otras configuraciones.
El servidor WebDAV almacena todos los archivos en un volumen de Docker llamado webdav_data, que persiste entre reinicios del contenedor.
Configuración del servidor WebDAV
El archivo webdav_config.yml configura el servidor hacdias/webdav utilizado en la configuración de Docker Compose. Esto es lo que puede personalizar:
Dirección y puerto del servidor
address: 0.0.0.0 port: 6060
Directorio raíz de datos
directory: /data
Habilitar/deshabilitar CORS
cors: enabled: true
Configuración adicional de CORS...
Permisos predeterminados (C=Crear, R=Leer, U=Actualizar, D=Eliminar)
permissions: CRUD
Definiciones de usuarios
users:
-
username: admin password: admin # Contraseña en texto plano permissions: CRUD # Permisos completos
-
username: reader password: reader permissions: R # Solo lectura
También puede usar contraseñas cifradas con bcrypt
- username: secure password: "{bcrypt}$2y$10$zEP6oofmXFeHaeMfBNLnP.DO8m.H.Mwhd24/TOX2MWLxAExXi4qgi"
Para opciones de configuración más avanzadas, consulte la documentación de hacdias/webdav.
Pruebas
Para ejecutar las pruebas:
npm test
Integración con Claude Desktop
- Asegúrese de que la función MCP esté habilitada en Claude Desktop
Usando npx 2. Abra la configuración de Claude Desktop y haga clic en editar configuración (
claude\_desktop\_config.json\) 3. Agregue\``json { "mcpServers": { "webdav": { "command": "npx", "args": \[ "-y", "webdav-mcp-server" \], "env": { "WEBDAV\_ROOT\_URL": "", "WEBDAV\_ROOT\_PATH": "", "WEBDAV\_USERNAME": "", "WEBDAV\_PASSWORD": "", "WEBDAV\_AUTH\_ENABLED": "true|false" } } } } \``\Usando node y compilación local 2. Clone este repositorio y ejecutesetup.sh\en mac/linux osetup.bat\en windows 3. Abra la configuración de Claude Desktop y haga clic en editar configuración (claude\_desktop\_config.json\) 4. Agregue\``json { "mcpServers": { "webdav": { "command": "node", "args": \[ "/dist/index.js" \], "env": { "WEBDAV\_ROOT\_URL": "", "WEBDAV\_ROOT\_PATH": "", "WEBDAV\_USERNAME": "", "WEBDAV\_PASSWORD": "", "WEBDAV\_AUTH\_ENABLED": "true|false" } } } } \``\
Recursos MCP disponibles
webdav://{path}/list- Listar archivos en un directoriowebdav://{path}/content- Obtener contenido de un archivowebdav://{path}/info- Obtener información de un archivo o directorio
Herramientas MCP disponibles
webdav_create_remote_file- Crear un nuevo archivo en un servidor WebDAV remotowebdav_get_remote_file- Recuperar el contenido de un archivo almacenado en un servidor WebDAV remotowebdav_update_remote_file- Actualizar un archivo existente en un servidor WebDAV remotowebdav_delete_remote_item- Eliminar un archivo o directorio de un servidor WebDAV remotowebdav_create_remote_directory- Crear un nuevo directorio en un servidor WebDAV remotowebdav_move_remote_item- Mover o renombrar un archivo/directorio en un servidor WebDAV remotowebdav_copy_remote_item- Copiar un archivo/directorio a una nueva ubicación en un servidor WebDAV remotowebdav_list_remote_directory- Listar archivos y directorios en un servidor WebDAV remoto
Prompts MCP disponibles
webdav_create_remote_file- Prompt para crear un nuevo archivo en un servidor WebDAV remotowebdav_get_remote_file- Prompt para recuperar el contenido de un archivo WebDAV remotowebdav_update_remote_file- Prompt para actualizar un archivo en un servidor WebDAV remotowebdav_delete_remote_item- Prompt para eliminar un archivo/directorio de un servidor WebDAV remotowebdav_list_remote_directory- Prompt para listar el contenido de un directorio en un servidor WebDAV remotowebdav_create_remote_directory- Prompt para crear un directorio en un servidor WebDAV remotowebdav_move_remote_item- Prompt para mover/renombrar un archivo/directorio en un servidor WebDAV remotowebdav_copy_remote_item- Prompt para copiar un archivo/directorio en un servidor WebDAV remoto
Ejemplos de consultas en Claude
Aquí hay algunos ejemplos de consultas que puede usar en Claude Desktop una vez que el servidor WebDAV MCP esté conectado:
- "Listar archivos en mi servidor WebDAV remoto"
- "Crear un nuevo archivo de texto llamado notes.txt en mi servidor WebDAV remoto con el siguiente contenido: Hello World"
- "Obtener el contenido de document.txt de mi servidor WebDAV remoto"
- "Actualizar config.json en mi servidor WebDAV remoto con esta nueva configuración"
- "Crear un directorio llamado projects en mi servidor WebDAV remoto"
- "Copiar report.docx a una ubicación de respaldo en mi servidor WebDAV remoto"
- "Mover el archivo old_name.txt a new_name.txt en mi servidor WebDAV remoto"
- "Eliminar temp.txt de mi servidor WebDAV remoto"
Uso programático
También puede usar este paquete programáticamente en sus propios proyectos:
import { startWebDAVServer } from 'webdav-mcp-server';
// Para transporte stdio sin autenticación await startWebDAVServer({ webdavConfig: { rootUrl: 'http://your-webdav-server', rootPath: '/webdav', authEnabled: false }, useHttp: false });
// Para transporte stdio con autenticación WebDAV (la contraseña debe ser texto plano) await startWebDAVServer({ webdavConfig: { rootUrl: 'http://your-webdav-server', rootPath: '/webdav', authEnabled: true, username: 'admin', password: 'password' }, useHttp: false });
// Con hash bcrypt para la contraseña del servidor MCP (solo autenticación HTTP) await startWebDAVServer({ webdavConfig: { rootUrl: 'http://your-webdav-server', rootPath: '/webdav', authEnabled: true, username: 'admin', password: 'password' // La contraseña de WebDAV debe ser texto plano }, useHttp: true, httpConfig: { port: 3000, auth: { enabled: true, username: 'user', password: '{bcrypt}$2y$10$CyLKnUwn9fqqKQFEbxpZFuE9mzWR/x8t6TE7.CgAN0oT8I/5jKJBy' } } });
// Para transporte HTTP con autenticación MCP await startWebDAVServer({ webdavConfig: { rootUrl: 'http://your-webdav-server', rootPath: '/webdav', authEnabled: true, username: 'admin', password: 'password' }, useHttp: true, httpConfig: { port: 3000, auth: { enabled: true, username: 'user', password: 'pass', realm: 'MCP WebDAV Server' } } });
// Para transporte HTTP sin autenticación await startWebDAVServer({ webdavConfig: { rootUrl: 'http://your-webdav-server', rootPath: '/webdav', authEnabled: false }, useHttp: true, httpConfig: { port: 3000, auth: { enabled: false } } });
Licencia
MIT