WebDAV MCP Server
About
Enables interaction with WebDAV file systems through natural language commands, providing complete CRUD operations for files and directories with support for both local and remote access.
Details
- Author
- laubplusco
- Repository
- LaubPlusCo/mcp-webdav-server
- GitHub stars
- 1
- Downloads
- 517
- License
- MIT License
- Categories
- File Management, Web Scraping, Other, Developer Tools, Design, Workplace, AI, Security, Frontend
- Tags
- #integration
Jump to
- Connect to any WebDAV server with optional authentication
- Perform CRUD operations on files and directories
- Expose file operations as MCP resources and tools
- Run via stdio transport (for Claude Desktop integration) or HTTP/SSE transport
- Secure access with optional basic authentication
- Support for bcrypt-encrypted passwords for MCP server authentication (WebDAV passwords must be plain text due to protocol limitations)
- Connection pooling for better performance with WebDAV servers
- Configuration validation using Zod
- Structured logging for better troubleshooting
Setting up with Highlight
This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:
- Download and install Highlight from highlightai.com/download
- Navigate to the plugins tab and select "Add Custom Plugin"
-
Configure the plugin with the settings below
Plugin Name
WebDAV MCP ServerCommand (node, npx, python, etc.)npxArguments-
Argument 1
-y -
Argument 2
webdav-mcp-server
Environment-
WEBDAV_PASSWORD
<WEBDAV_PASSWORD> -
WEBDAV_ROOT_URL
<WEBDAV_ROOT_URL> -
WEBDAV_USERNAME
<WEBDAV_USERNAME> -
WEBDAV_ROOT_PATH
<WEBDAV_ROOT_PATH> -
WEBDAV_AUTH_ENABLED
true|false
Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.
-
Argument 1
- Enable "Start Automatically" if you want the plugin to start when Highlight launches
From the repository
Prerequisites
- Node.js 18 or later
- npm or yarn
- WebDAV server (for actual file operations)
Install Dependencies
npm install
Option 1 Install From Npm Package
Global Installation
npm install -g 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
Webdav Configuration
WEBDAV_ROOT_URL=http://localhost:4080
WEBDAV_ROOT_PATH=/webdav
Webdav Authentication Optional
WEBDAV_AUTH_ENABLED=true
WEBDAV_USERNAME=admin
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 Bcrypt 2y 10 Cylknuwn9fqqkqfebxpzfue9mzwr X8t6te7 Cgan0ot8i 5jkjby
Encrypted Passwords For Mcp Server Authentication
For enhanced security of the MCP server (not WebDAV connections), you can use bcrypt-encrypted passwords instead of storing them in plain text:
1. Generate a bcrypt hash:
bash
Running With Stdio Transport
This mode is ideal for direct integration with Claude Desktop.
If Installed Globally
webdav-mcp-server --http
Running With Http Sse Transport
This mode enables the server to be accessed over HTTP with Server-Sent Events for real-time communication.
bash
Quick Start With Docker Compose
The easiest way to get started with both the WebDAV server and the MCP server is to use Docker Compose:
Webdav Server Configuration
The webdav_config.yml file configures the hacdias/webdav server used in the Docker Compose setup. Here's what you can customize:
yamlwebdav_create_remote_file
Create a new file on a remote WebDAV server.
webdav_get_remote_file
Retrieve content from a file stored on a remote WebDAV server.
webdav_update_remote_file
Update an existing file on a remote WebDAV server.
webdav_delete_remote_item
Delete a file or directory from a remote WebDAV server.
webdav_create_remote_directory
Create a new directory on a remote WebDAV server.
webdav_move_remote_item
Move or rename a file/directory on a remote WebDAV server.
webdav_copy_remote_item
Copy a file/directory to a new location on a remote WebDAV server.
webdav_list_remote_directory
List files and directories on a remote WebDAV server.
Claude Desktop / Cursor
Paste into your MCP client config file to install this server.
{
"mcpServers": {
"webdav mcp server": {
"env": {
"WEBDAV_PASSWORD": "<WEBDAV_PASSWORD>",
"WEBDAV_ROOT_URL": "<WEBDAV_ROOT_URL>",
"WEBDAV_USERNAME": "<WEBDAV_USERNAME>",
"WEBDAV_ROOT_PATH": "<WEBDAV_ROOT_PATH>",
"WEBDAV_AUTH_ENABLED": "true|false"
},
"args": [
"-y",
"webdav-mcp-server"
],
"command": "npx"
}
}
}
Linux
{
"env": {
"WEBDAV_PASSWORD": "<WEBDAV_PASSWORD>",
"WEBDAV_ROOT_URL": "<WEBDAV_ROOT_URL>",
"WEBDAV_USERNAME": "<WEBDAV_USERNAME>",
"WEBDAV_ROOT_PATH": "<WEBDAV_ROOT_PATH>",
"WEBDAV_AUTH_ENABLED": "true|false"
},
"args": [
"-y",
"webdav-mcp-server"
],
"command": "npx"
}
Macos
{
"env": {
"WEBDAV_PASSWORD": "<WEBDAV_PASSWORD>",
"WEBDAV_ROOT_URL": "<WEBDAV_ROOT_URL>",
"WEBDAV_USERNAME": "<WEBDAV_USERNAME>",
"WEBDAV_ROOT_PATH": "<WEBDAV_ROOT_PATH>",
"WEBDAV_AUTH_ENABLED": "true|false"
},
"args": [
"-y",
"webdav-mcp-server"
],
"command": "npx"
}
Windows
{
"env": {
"WEBDAV_PASSWORD": "<WEBDAV_PASSWORD>",
"WEBDAV_ROOT_URL": "<WEBDAV_ROOT_URL>",
"WEBDAV_USERNAME": "<WEBDAV_USERNAME>",
"WEBDAV_ROOT_PATH": "<WEBDAV_ROOT_PATH>",
"WEBDAV_AUTH_ENABLED": "true|false"
},
"args": [
"/c",
"npx",
"-y",
"webdav-mcp-server"
],
"command": "cmd"
}
A Model Context Protocol (MCP) server that enables CRUD operations on a WebDAV endpoint with basic authentication. This server enables Claude Desktop and other MCP clients to interact with WebDAV file systems through natural language commands.
- Connect to any WebDAV server with optional authentication
- Perform CRUD operations on files and directories
- Expose file operations as MCP resources and tools
- Run via stdio transport (for Claude Desktop integration) or HTTP/SSE transport
- Secure access with optional basic authentication
- Support for bcrypt-encrypted passwords for MCP server authentication (WebDAV passwords must be plain text due to protocol limitations)
- Connection pooling for better performance with WebDAV servers
- Configuration validation using Zod
- Structured logging for better troubleshooting
- Node.js 18 or later
- npm or yarn
- WebDAV server (for actual file operations)
# Global installation npm install -g webdav-mcp-server # Or with npx npx webdav-mcp-server
# 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
# 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
Create a.envfile in the root directory with the following 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
Encrypted Passwords for MCP Server Authentication
For enhanced security of the MCP server (not WebDAV connections), you can use bcrypt-encrypted passwords instead of storing them in plain text:
- Generate a bcrypt hash:
# Using the built-in utility npm run generate-hash -- yourpassword # Or with npx npx webdav-mcp-generate-hash yourpassword
AUTH_PASSWORD={bcrypt}$2y$10$CyLKnUwn9fqqKQFEbxpZFuE9mzWR/x8t6TE7.CgAN0oT8I/5jKJBy
This way, your MCP server password is stored securely. Note that WebDAV passwords must always be in plain text due to protocol requirements.
This mode is ideal for direct integration with Claude Desktop.
# If installed globally webdav-mcp-server # If using npx npx webdav-mcp-server # If built from source node dist/index.js
This mode enables the server to be accessed over HTTP with Server-Sent Events for real-time communication.
# If installed globally webdav-mcp-server --http # If using npx npx webdav-mcp-server --http # If built from source node dist/index.js --http
The easiest way to get started with both the WebDAV server and the MCP server is to use 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)
The WebDAV server stores all files in a Docker volume calledwebdav_data, which persists across container restarts.
Thewebdav_config.ymlfile configures the hacdias/webdav server used in the Docker Compose setup. Here's what you can customize:
# 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"
For more advanced configuration options, refer to thehacdias/webdav documentation.
- Ensure the MCP feature is enabled in Claude Desktop Using npx 2. Open Claude Desktop settings and click edit config (claude_desktop_config.json) 3. Add ``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" } } } } ` Using node and local build 2. Clone this repository and run setup.sh on mac/linux or setup.bat on windows 3. Open Claude Desktop settings and click edit config (claude_desktop_config.json) 4. Add `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" } } } } webdav://{path}/list
- - List files in a directorywebdav://{path}/content
- - Get file contentwebdav://{path}/info
- - Get file or directory information
- webdav_create_remote_file- Create a new file on a remote WebDAV serverwebdav_get_remote_file
- - Retrieve content from a file stored on a remote WebDAV serverwebdav_update_remote_file
- - Update an existing file on a remote WebDAV serverwebdav_delete_remote_item
- - Delete a file or directory from a remote WebDAV serverwebdav_create_remote_directory
- - Create a new directory on a remote WebDAV serverwebdav_move_remote_item
- - Move or rename a file/directory on a remote WebDAV serverwebdav_copy_remote_item
- - Copy a file/directory to a new location on a remote WebDAV serverwebdav_list_remote_directory
- - List files and directories on a remote WebDAV server
- webdav_create_remote_file- Prompt to create a new file on a remote WebDAV serverwebdav_get_remote_file
- - Prompt to retrieve content from a remote WebDAV filewebdav_update_remote_file
- - Prompt to update a file on a remote WebDAV serverwebdav_delete_remote_item
- - Prompt to delete a file/directory from a remote WebDAV serverwebdav_list_remote_directory
- - Prompt to list directory contents on a remote WebDAV serverwebdav_create_remote_directory
- - Prompt to create a directory on a remote WebDAV serverwebdav_move_remote_item
- - Prompt to move/rename a file/directory on a remote WebDAV serverwebdav_copy_remote_item
- - Prompt to copy a file/directory on a remote WebDAV server
Here are some example queries you can use in Claude Desktop once the WebDAV MCP server is connected:
- "List files on my remote WebDAV server"
- "Create a new text file called notes.txt on my remote WebDAV server with the following content: Hello World"
- "Get the content of document.txt from my remote WebDAV server"
- "Update config.json on my remote WebDAV server with this new configuration"
- "Create a directory called projects on my remote WebDAV server"
- "Copy report.docx to a backup location on my remote WebDAV server"
- "Move the file old_name.txt to new_name.txt on my remote WebDAV server"
- "Delete temp.txt from my remote WebDAV server"
You can also use this package programmatically in your own projects:
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 } } });``
Publish HTML, Markdown, KV, JSON, files to brewpage.app from AI assistants.
Persistent memory for AI agents. Store and retrieve files via 14 MCP tools with OAuth 2.0 auth. Free 10GB tier.
Quickly integrate with Tencent Cloud Storage (COS) and Data Processing (CI) capabilities powered
An MCP server for managing files and buckets on AWS S3. Requires AWS credentials for authentication.
An MCP server for interacting with Dropbox files and services.
A read-only MCP server by CData that allows LLMs to query live Dropbox data. Requires the CData JDBC Driver for Dropbox.
An MCP server for integrating with Dropbox, allowing clients to interact with files and folders.
An MCP server for interacting with Dropbox, allowing clients to manage files and folders.
AI-first file sharing and collaboration. 251 MCP tools give agents a full workspace: file storage, branded shares, comments, workflows, and built-in RAG. 50GB free, no credit card.
Access and manage your Google Drive files and folders.
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.




