Serveur WebDAV MCP
Un serveur MCP (Model Context Protocol) qui permet des opérations CRUD sur un point de terminaison WebDAV avec une authentification de base. Ce serveur permet à Claude Desktop et à d'autres clients MCP d'interagir avec les systèmes de fichiers WebDAV par le biais de commandes en langage naturel.
Caractéristiques
- Connexion à n'importe quel serveur WebDAV avec authentification optionnelle
- Effectuer des opérations CRUD sur les fichiers et les répertoires
- Expose les opérations sur les fichiers en tant que ressources et outils MCP
- Exécution via le transport stdio (pour l'intégration de Claude Desktop) ou le transport HTTP/SSE
- Accès sécurisé avec authentification de base optionnelle
- Prise en charge des mots de passe cryptés bcrypt pour l'authentification du serveur MCP (les mots de passe WebDAV doivent être en texte clair en raison des limitations du protocole)
- Mise en commun des connexions pour de meilleures performances avec les serveurs WebDAV
- Validation de la configuration à l'aide de Zod
- Journalisation structurée pour un meilleur dépannage
Conditions préalables
- Node.js 18 ou plus récent
- npm ou yarn
- Serveur WebDAV (pour les opérations de fichiers)
Installation de la solution
Option 1 : Installation à partir du paquet npm
Installation globale
npm install -g webdav-mcp-server
Ou avec npx
npx webdav-mcp-server
Option 2 : Cloner et construire à partir des sources
Cloner le dépôt
git clone https://github.com/yourusername/webdav-mcp-server.git cdwebdav-mcp-server
Installer les dépendances
npm install
Construire l'application
npm run build
Option 3 : Docker
Construire l'image Docker
docker build -t webdav-mcp-server .
Exécuter le conteneur sans authentification
docker run -p 3000:3000
-e WEBDAV_ROOT_URL=http://your-webdav-server
-e WEBDAV_ROOT_PATH=/webdav
webdav-mcp-server
Exécutez le conteneur avec authentification pour les serveurs WebDAV et 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 MOT DE PASSE WEBDAV=mot de passe
-e AUTH_ENABLED=true
-e AUTH_USERNAME=utilisateur
-e AUTH_PASSWORD=pass
webdav-mcp-server
Configuration
Créez un fichier .env
dans le répertoire racine avec les variables suivantes :
Configuration WebDAV
WEBDAV_ROOT_URL=http://localhost:4080WEBDAV_ROOT_PATH=/webdav
Authentification WebDAV (optionnelle)
WEBDAV_AUTH_ENABLED=true WEBDAV_USERNAME=admin
Le mot de passe WebDAV doit être en texte clair (obligatoire lorsque l'authentification est activée)
Le protocole WebDAV exige l'envoi du mot de passe au serveur
WEBDAV_PASSWORD=mot de passe
Configuration du serveur (pour le mode HTTP)
SERVER_PORT=3000
Configuration de l'authentification pour le serveur MCP (optionnel)
AUTH_ENABLED=true AUTH_USERNAME=user AUTH_PASSWORD=pass AUTH_REALM=MCP WebDAV Server
Le mot de passe d'authentification pour le serveur MCP peut être un hachage bcrypt (contrairement aux mots de passe WebDAV)
AUTH_PASSWORD={bcrypt}$2y$10$CyLKnUwn9fqqKQFEbxpZFuE9mzWR/x8t6TE7.CgAN0oT8I/5jKJBy
Mots de passe cryptés pour l'authentification du serveur MCP
Pour renforcer la sécurité du serveur MCP (pas des connexions WebDAV), vous pouvez utiliser des mots de passe cryptés par bcrypt au lieu de les stocker en texte clair :
- Générer un hachage bcrypt :
En utilisant l'utilitaire intégré
npm run generate-hash -- votre mot de passe
Ou avec npx
npx webdav-mcp-generate-hash yourpassword 2. Ajoutez le hash à votre fichier .env avec le préfixe {bcrypt} :
AUTH_PASSWORD={bcrypt}$2y$10$CyLKnUwn9fqqKQFEbxpZFuE9mzWR/x8t6TE7.CgAN0oT8I/5jKJBy
De cette manière, le mot de passe de votre serveur MCP est stocké en toute sécurité. Notez que les mots de passe WebDAV doivent toujours être en texte clair en raison des exigences du protocole.
Utilisation
Exécution avec le transport stdio
Ce mode est idéal pour une intégration directe avec Claude Desktop.
S'il est installé globalement
webdav-mcp-server
Si vous utilisez npx
npx webdav-mcp-server
Si construit à partir des sources
node dist/index.js
Exécution avec transport HTTP/SSE
Ce mode permet d'accéder au serveur via HTTP avec des événements envoyés par le serveur pour une communication en temps réel.
S'il est installé globalement
webdav-mcp-server --http
Si vous utilisez npx
npx webdav-mcp-server --http
Si construit à partir des sources
node dist/index.js --http
Démarrage rapide avec Docker Compose
La façon la plus simple de démarrer avec le serveur WebDAV et le serveur MCP est d'utiliser Docker Compose :
Démarrez les serveurs WebDAV et MCP
cd docker docker-compose up -d
Cela démarrera :
- le serveur hacdias/webdav sur le port 4080 (nom d'utilisateur : admin, mot de passe : admin)
- Serveur MCP sur le port 3000 (nom d'utilisateur : user, mot de passe : pass)
Cette configuration utilise hacdias/webdav, un serveur WebDAV simple et autonome écrit en Go. La configuration du serveur WebDAV est stockée dans le fichier webdav_config.yml
, que vous pouvez modifier pour ajuster les autorisations, ajouter des utilisateurs ou changer d'autres paramètres.
Le serveur WebDAV stocke tous les fichiers dans un volume Docker appelé webdav_data
, qui persiste à travers les redémarrages de conteneurs.
Configuration du serveur WebDAV
Le fichier webdav_config.yml
configure le serveur hacdias/webdav utilisé dans l'installation de Docker Compose. Voici ce que vous pouvez personnaliser :
Adresse et port du serveur
adresse : 0.0.0.0 port : 6060
Répertoire de données racine
répertoire : /data
Activer/désactiver CORS
cors : enabled : true
Paramètres CORS supplémentaires...
Permissions par défaut (C=Create, R=Read, U=Update, D=Delete)
permissions : CRUD
Définitions des utilisateurs
utilisateurs :
nom d'utilisateur : admin mot de passe : admin # mot de passe en texte clair permissions : CRUD # Permissions complètes
username : reader password : reader permissions : R # Permissions de lecture seule
Vous pouvez également utiliser des mots de passe cryptés par bcrypt
- nom d'utilisateur : mot de passe sécurisé : "{bcrypt}$2y$10$zEP6oofmXFeHaeMfBNLnP.DO8m.H.Mwhd24/TOX2MWLxAExXi4qgi"
Pour des options de configuration plus avancées, reportez-vous à la documentation hacdias/webdav.
Tests
Pour lancer les tests :
npm test
Intégration avec Claude Desktop
- Assurez-vous que la fonction MCP est activée dans Claude Desktop en utilisant npx 2. Ouvrir les paramètres de Claude Desktop et cliquer sur edit config (`claude_desktop_config.json`) 3. Ajouter ``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" } } } } ``` Utilisation de node et d'un build local 2. Clonez ce dépôt et lancez `setup.sh` sur mac/linux ou `setup.bat` sur windows 3. Ouvrez Claude Desktop settings et cliquez sur edit config (`claude_desktop_config.json`) 4. Ajoutez ``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" } } } } ```
Ressources MCP disponibles
webdav://{chemin}/list
- Liste les fichiers d'un répertoirewebdav://{chemin}/content
- Obtenir le contenu d'un fichierwebdav://{chemin}/info
- Obtenir des informations sur un fichier ou un répertoire
Outils MCP disponibles
webdav_create_remote_file
- Créer un nouveau fichier sur un serveur WebDAV distantwebdav_get_remote_file
- Récupérer le contenu d'un fichier stocké sur un serveur WebDAV distantwebdav_update_remote_file
- Mettre à jour un fichier existant sur un serveur WebDAV distantwebdav_delete_remote_item
- Supprime un fichier ou un répertoire d'un serveur WebDAV distantwebdav_create_remote_directory
- Créer un nouveau répertoire sur un serveur WebDAV distantwebdav_move_remote_item
- Déplacer ou renommer un fichier/répertoire sur un serveur WebDAV distantwebdav_copy_remote_item
- Copie un fichier/répertoire à un nouvel emplacement sur un serveur WebDAV distantwebdav_list_remote_directory
- Liste les fichiers et les répertoires sur un serveur WebDAV distant
Invites MCP disponibles
webdav_create_remote_file
- Invite à créer un nouveau fichier sur un serveur WebDAV distantwebdav_get_remote_file
- Invite à récupérer le contenu d'un fichier WebDAV distantwebdav_update_remote_file
- Invite à mettre à jour un fichier sur un serveur WebDAV distantwebdav_delete_remote_item
- Invite à supprimer un fichier/répertoire d'un serveur WebDAV distantwebdav_list_remote_directory
- Invite à lister le contenu d'un répertoire sur un serveur WebDAV distantwebdav_create_remote_directory
- Invite à créer un répertoire sur un serveur WebDAV distantwebdav_move_remote_item
- Invite à déplacer/renommer un fichier/répertoire sur un serveur WebDAV distantwebdav_copy_remote_item
- Invite à copier un fichier/répertoire sur un serveur WebDAV distant
Exemples de requêtes dans Claude
Voici quelques exemples de requêtes que vous pouvez utiliser dans Claude Desktop une fois que le serveur WebDAV MCP est connecté :
- "Liste des fichiers sur mon serveur WebDAV distant"
- "Créer un nouveau fichier texte appelé notes.txt sur mon serveur WebDAV distant avec le contenu suivant : Hello World"
- "Récupérer le contenu de document.txt sur mon serveur WebDAV distant"
- "Mettre à jour config.json sur mon serveur WebDAV distant avec cette nouvelle configuration"
- "Créer un répertoire appelé projects sur mon serveur WebDAV distant"
- "Copier le fichier report.docx dans un emplacement de sauvegarde sur mon serveur WebDAV distant
- "Déplacer le fichier old_name.txt vers new_name.txt sur mon serveur WebDAV distant"
- "Supprimer le fichier temp.txt de mon serveur WebDAV distant"
Utilisation programmatique
Vous pouvez également utiliser ce paquetage de manière programmatique dans vos propres projets :
import { startWebDAVServer } from 'webdav-mcp-server' ;
// Pour le transport stdio sans authentification await startWebDAVServer({ webdavConfig : { rootUrl :'http://your-webdav-server', rootPath : '/webdav', authEnabled : false }, useHttp : false }) ;
// Pour le transport stdio avec authentification WebDAV (le mot de passe doit être en texte clair) await startWebDAVServer({ webdavConfig : { rootUrl :'http://your-webdav-server', rootPath : '/webdav', authEnabled : true, username : 'admin', password : 'password' }, useHttp : false }) ;
// Avec un hachage bcrypt pour le mot de passe du serveur MCP (authentification HTTP uniquement) await startWebDAVServer({ webdavConfig : { rootUrl :'http://your-webdav-server', rootPath : '/webdav', authEnabled : true, username : 'admin', password : 'password' // Le mot de passe WebDAV doit être en texte clair }, useHttp : true, httpConfig : { port : 3000, auth : { enabled : true, username : 'user', password : '{bcrypt}$2y$10$CyLKnUwn9fqqKQFEbxpZFuE9mzWR/x8t6TE7.CgAN0oT8I/5jKJBy' } }) ;
// Pour le transport HTTP avec authentification 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' } }) ;
// Pour le transport HTTP sans authentification await startWebDAVServer({ webdavConfig : { rootUrl :'http://your-webdav-server', rootPath : '/webdav', authEnabled : false }, useHttp : true, httpConfig : { port : 3000, auth : { enabled : false } }) ;
Licence
MIT