Servidor MCP WebDAV
Un servidor de Protocolo de Contexto de Modelo (MCP) que permite operaciones CRUD en un punto final WebDAV con autenticación básica. Este servidor permite a Claude Desktop y a otros clientes MCP interactuar con sistemas de archivos WebDAV mediante comandos de lenguaje natural.
Características
- Conexión a cualquier servidor WebDAV con autenticación opcional
- Realizar operaciones CRUD en archivos y directorios
- Exponer operaciones de archivos como recursos y herramientas MCP
- Ejecución mediante transporte stdio (para integración con Claude Desktop) o transporte HTTP/SSE
- Acceso seguro con autenticación básica opcional
- Compatibilidad con contraseñas cifradas con bcrypt para la autenticación del servidor MCP (las contraseñas WebDAV deben ser de texto sin formato debido a las limitaciones del protocolo)
- Agrupación de conexiones para mejorar el rendimiento con servidores WebDAV
- Validación de la configuración mediante Zod
- Registro estructurado para una mejor resolución de problemas
Requisitos previos
- Node.js 18 o posterior
- npm o yarn
- Servidor WebDAV (para operaciones con archivos reales)
Instalación
Opción 1: Instalación desde el paquete npm
Instalación global
npm install -g webdav-mcp-server
O con npx
npx servidor webdav-mcp
Opción 2: Clonar y compilar desde el código fuente
Clonar repositorio
git clone https://github.com/yourusername/webdav-mcp-server.git cdwebdav-mcp-server
Instalar dependencias
npm install
Construir la aplicación
npm run build
Opción 3: Docker
Construir la imagen 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
Ejecute 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=contraseña
-e AUTH_ENABLED=true
-e AUTH_USERNAME=usuario
-e AUTH_PASSWORD=contraseña
servidor webdav-mcp
Configuración
Cree un archivo .env
en el directorio raíz con las siguientes variables:
Configuración de WebDAV
WEBDAV_ROOT_URL=http://localhost:4080WEBDAV_ROOT_PATH=/webdav
Autenticación WebDAV (opcional)
WEBDAV_AUTH_ENABLED=true WEBDAV_USERNAME=admin
La contraseña de WebDAV debe ser de texto plano (obligatorio si está activada la autenticación)
El protocolo WebDAV requiere el envío de la contraseña real al servidor
WEBDAV_PASSWORD=contraseña
Configuración del servidor (para el modo HTTP)
SERVER_PORT=3000
Configuración de autenticación para el servidor MCP (opcional)
AUTH_ENABLED=true AUTH_USERNAME=usuario AUTH_PASSWORD=contraseña AUTH_REALM=Servidor MCP WebDAV
La contraseña Auth para el servidor MCP puede ser un hash bcrypt (a diferencia de las contraseñas WebDAV)
AUTH_PASSWORD={bcrypt}$2y$10$CyLKnUwn9fqqKQFEbxpZFuE9mzWR/x8t6TE7.CgAN0oT8I/5jKJBy
Contraseñas cifradas para la autenticación del servidor MCP
Para mejorar la seguridad del servidor MCP (no de las conexiones WebDAV), puedes utilizar contraseñas cifradas con bcrypt en lugar de almacenarlas en texto plano:
- Generar un hash bcrypt:
Usando la utilidad incorporada
npm run generate-hash -- tu-contraseña
O con npx
npx webdav-mcp-generate-hash tu-contraseña 2. Añade el hash a tu archivo .env Añada el hash a su archivo .env con el prefijo {bcrypt}:
AUTH_PASSWORD={bcrypt}$2y$10$CyLKnUwn9fqqKQFEbxpZFuE9mzWR/x8t6TE7.CgAN0oT8I/5jKJBy
De esta forma, la contraseña de tu servidor MCP se almacena de forma segura. Ten en cuenta que las contraseñas WebDAV deben estar siempre 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 se instala globalmente
webdav-mcp-server
Si se utiliza npx
npx webdav-mcp-server
Si se construye desde el código fuente
node dist/index.js
Ejecución con transporte HTTP/SSE
Este modo permite acceder al servidor a través de HTTP con Server-Sent Events para la comunicación en tiempo real.
Si se instala globalmente
webdav-mcp-server --http
Si se utiliza npx
npx webdav-mcp-server --http
Si se construye desde el código fuente
node dist/index.js --http
Inicio rápido con Docker Compose
La forma más fácil de empezar con el servidor WebDAV y el servidor MCP es utilizar Docker Compose:
Inicie los servidores WebDAV y MCP
cd docker docker-compose up -d
Esto iniciará:
- servidor hacdias/webdav en el puerto 4080 (nombre de usuario: admin, contraseña: admin)
- Servidor MCP en el puerto 3000 (nombre de 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 puedes modificar para ajustar los permisos, añadir usuarios o cambiar otros parámetros.
El servidor WebDAV almacena todos los archivos en un volumen Docker llamado webdav_data
, que persiste a través de los 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 puedes personalizar
Dirección y puerto del servidor
dirección: 0.0.0.0 puerto: 6060
Directorio raíz de datos
directorio: /datos
Activar/desactivar CORS
cors: activado: true
Ajustes CORS adicionales...
Permisos por defecto (C=Crear, R=Leer, U=Actualizar, D=Borrar)
permisos: CRUD
Definiciones de usuario
usuarios:
nombre de usuario: admin contraseña: admin # Contraseña en texto plano permisos: CRUD # Permisos completos
nombre de usuario: reader contraseña: reader permisos: R # Permisos de sólo lectura
También puede utilizar contraseñas cifradas con bcrypt
- nombre de usuario: secure contraseña: "{bcrypt}$2y$10$zEP6oofmXFeHaeMfBNLnP.DO8m.H.Mwhd24/TOX2MWLxAExXi4qgi"
Para opciones de configuración más avanzadas, consulte la documentación sobre hacdias/webdav.
Pruebas de
Para ejecutar las pruebas
npm test
Integración con Claude Desktop
- 1. Asegúrese de que la función MCP está habilitada en Claude Desktop usando npx Abre la configuración de Claude Desktop y haz clic en editar configuración (`claude_desktop_config.json`) 3. Añade ```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 local build 2. Clona este repositorio y ejecuta `setup.sh` en mac/linux o `setup.bat` en windows 3. Abre Claude Desktop settings y haz clic en edit config (`claude_desktop_config.json`) 4. Añade ``json { "mcpServers": } } Añade ``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://{ruta}/list
- Lista los archivos de un directoriowebdav://{ruta}/content
- Obtener el contenido de un archivowebdav://{ruta}/info
- Obtener información de archivos o directorios
Herramientas MCP disponibles
webdav_create_remote_file
- Crear un nuevo archivo en un servidor WebDAV remotowebdav_get_remote_file
- Recuperar 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
- Copia un archivo/directorio a una nueva ubicación en un servidor WebDAV remotowebdav_list_remote_directory
- Lista archivos y directorios en un servidor WebDAV remoto
Peticiones MCP disponibles
webdav_create_remote_file
- Pregunta para crear un nuevo archivo en un servidor WebDAV remotowebdav_get_remote_file
- Pregunta para recuperar contenido de un archivo WebDAV remotowebdav_update_remote_file
- Pregunta para actualizar un archivo en un servidor WebDAV remotowebdav_delete_remote_item
- Pregunta para eliminar un archivo/directorio de un servidor WebDAV remotowebdav_list_remote_directory
- Pregunta para listar el contenido de un directorio en un servidor WebDAV remotowebdav_create_remote_directory
- Pregunta para crear un directorio en un servidor WebDAV remotowebdav_move_remote_item
- Pregunta para mover/renombrar un archivo/directorio en un servidor WebDAV remotowebdav_copy_remote_item
- Pregunta para copiar un archivo/directorio en un servidor WebDAV remoto
Ejemplo de consultas en Claude
Aquí hay algunos ejemplos de consultas que puedes 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 notas.txt en mi servidor WebDAV remoto con el siguiente contenido: Hola Mundo"
- "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 proyectos en mi servidor WebDAV remoto"
- "Copiar informe.docx a una ubicación de copia de seguridad en mi servidor WebDAV remoto"
- "Mover el archivo nombre_antiguo.txt a nombre_nuevo.txt en mi servidor WebDAV remoto"
- "Eliminar temp.txt de mi servidor WebDAV remoto"
Uso programático
También puedes utilizar este paquete mediante programación en tus 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 (sólo autenticación HTTP) await startWebDAVServer({ webdavConfig: { rootUrl:'http://your-webdav-server', rootPath: '/webdav', authEnabled: true, username: 'admin', password: 'password' // WebDAV password must be plain text }, 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