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:

  1. 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

  1. 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 ejecute setup.sh\ en mac/linux o setup.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 directorio
  • webdav://{path}/content - Obtener contenido de un archivo
  • webdav://{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 remoto
  • webdav_get_remote_file - Recuperar el contenido de un archivo almacenado en un servidor WebDAV remoto
  • webdav_update_remote_file - Actualizar un archivo existente en un servidor WebDAV remoto
  • webdav_delete_remote_item - Eliminar un archivo o directorio de un servidor WebDAV remoto
  • webdav_create_remote_directory - Crear un nuevo directorio en un servidor WebDAV remoto
  • webdav_move_remote_item - Mover o renombrar un archivo/directorio en un servidor WebDAV remoto
  • webdav_copy_remote_item - Copiar un archivo/directorio a una nueva ubicación en un servidor WebDAV remoto
  • webdav_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 remoto
  • webdav_get_remote_file - Prompt para recuperar el contenido de un archivo WebDAV remoto
  • webdav_update_remote_file - Prompt para actualizar un archivo en un servidor WebDAV remoto
  • webdav_delete_remote_item - Prompt para eliminar un archivo/directorio de un servidor WebDAV remoto
  • webdav_list_remote_directory - Prompt para listar el contenido de un directorio en un servidor WebDAV remoto
  • webdav_create_remote_directory - Prompt para crear un directorio en un servidor WebDAV remoto
  • webdav_move_remote_item - Prompt para mover/renombrar un archivo/directorio en un servidor WebDAV remoto
  • webdav_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