WebDAV MCP Server
Realiza operaciones CRUD en un servidor WebDAV con autenticación básica.
Documentación
WebDAV MCP Server
Un servidor de Model Context Protocol (MCP) que permite operaciones CRUD en un endpoint WebDAV con autenticación básica. Este servidor permite que Claude Desktop y otros clientes MCP interactúen con sistemas de archivos WebDAV mediante comandos en lenguaje natural.
Características
- Conéctese a cualquier servidor WebDAV con autenticación opcional
- Realice operaciones CRUD en archivos y directorios
- Exponga operaciones de archivos como recursos y herramientas MCP
- Ejecútese 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 WebDAV deben estar en 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 un mejor diagnóstico 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
# Global installation
npm install -g webdav-mcp-server
# Or with npx
npx webdav-mcp-server
Opción 2: Clonar y compilar desde el código fuente
# Clone repository
git clone https://github.com/yourusername/webdav-mcp-server.git
cd webdav-mcp-server
# Install dependencies
npm install
# Build the application
npm run build
Opción 3: Docker
# Build the Docker image
docker build -t webdav-mcp-server .
# Run the container without authentication
docker run -p 3000:3000 \
-e WEBDAV_ROOT_URL=http://your-webdav-server \
-e WEBDAV_ROOT_PATH=/webdav \
webdav-mcp-server
# Run the container with authentication for both WebDAV and MCP server
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:
# WebDAV configuration
WEBDAV_ROOT_URL=http://localhost:4080
WEBDAV_ROOT_PATH=/webdav
# WebDAV authentication (optional)
WEBDAV_AUTH_ENABLED=true
WEBDAV_USERNAME=admin
# WebDAV password must be plain text (required when auth enabled)
# The WebDAV protocol requires sending the actual password to the server
WEBDAV_PASSWORD=password
# Server configuration (for HTTP mode)
SERVER_PORT=3000
# Authentication configuration for MCP server (optional)
AUTH_ENABLED=true
AUTH_USERNAME=user
AUTH_PASSWORD=pass
AUTH_REALM=MCP WebDAV Server
# Auth password for MCP server can be a bcrypt hash (unlike WebDAV passwords)
# AUTH_PASSWORD={bcrypt}$2y$10$CyLKnUwn9fqqKQFEbxpZFuE9mzWR/x8t6TE7.CgAN0oT8I/5jKJBy
Contraseñas cifradas para la autenticación del servidor MCP
Para una mayor seguridad del servidor MCP (no de las conexiones WebDAV), puede usar contraseñas cifradas con bcrypt en lugar de almacenarlas en texto plano:
- Genere un hash bcrypt:
# Using the built-in utility npm run generate-hash -- yourpassword # Or with npx npx webdav-mcp-generate-hash yourpassword - Agregue 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 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.
# If installed globally
webdav-mcp-server
# If using npx
npx webdav-mcp-server
# If built from source
node dist/index.js
Ejecución con transporte HTTP/SSE
Este modo permite que el servidor sea accesible a través de HTTP con Server-Sent Events para comunicación en tiempo real.
# If installed globally
webdav-mcp-server --http
# If using npx
npx webdav-mcp-server --http
# If built from source
node dist/index.js --http
Inicio rápido con Docker Compose
La forma más sencilla de comenzar con el servidor WebDAV y el servidor MCP es usar Docker Compose:
# Start both WebDAV and MCP servers
cd docker
docker-compose up -d
# This will start:
# - hacdias/webdav server on port 4080 (username: admin, password: admin)
# - MCP server on port 3000 (username: user, password: pass)
Esta configuración utiliza hacdias/webdav, un servidor WebDAV simple y autónomo 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 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:
# Server address and port
address: 0.0.0.0
port: 6060
# Root data directory
directory: /data
# Enable/disable CORS
cors:
enabled: true
# Additional CORS settings...
# Default permissions (C=Create, R=Read, U=Update, D=Delete)
permissions: CRUD
# User definitions
users:
- username: admin
password: admin # Plain text password
permissions: CRUD # Full permissions
- username: reader
password: reader
permissions: R # Read-only permissions
# You can also use bcrypt-encrypted passwords
- 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 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 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:
- "Lista los archivos en mi servidor WebDAV remoto"
- "Crea un nuevo archivo de texto llamado notes.txt en mi servidor WebDAV remoto con el siguiente contenido: Hello World"
- "Obtén el contenido de document.txt de mi servidor WebDAV remoto"
- "Actualiza config.json en mi servidor WebDAV remoto con esta nueva configuración"
- "Crea un directorio llamado projects en mi servidor WebDAV remoto"
- "Copia report.docx a una ubicación de respaldo en mi servidor WebDAV remoto"
- "Mueve el archivo old_name.txt a new_name.txt en mi servidor WebDAV remoto"
- "Elimina 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';
// For stdio transport without authentication
await startWebDAVServer({
webdavConfig: {
rootUrl: 'http://your-webdav-server',
rootPath: '/webdav',
authEnabled: false
},
useHttp: false
});
// For stdio transport with WebDAV authentication (password must be plain text)
await startWebDAVServer({
webdavConfig: {
rootUrl: 'http://your-webdav-server',
rootPath: '/webdav',
authEnabled: true,
username: 'admin',
password: 'password'
},
useHttp: false
});
// With bcrypt hash for MCP server password (HTTP auth only)
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'
}
}
});
// For HTTP transport with MCP authentication
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'
}
}
});
// For HTTP transport without authentication
await startWebDAVServer({
webdavConfig: {
rootUrl: 'http://your-webdav-server',
rootPath: '/webdav',
authEnabled: false
},
useHttp: true,
httpConfig: {
port: 3000,
auth: {
enabled: false
}
}
});