Labsco
LaubPlusCo logo

WebDAV MCP Server

β˜… 17

from LaubPlusCo

Perform CRUD operations on a WebDAV server with basic authentication.

πŸ”₯πŸ”₯πŸ”₯βœ“ VerifiedAccount requiredAdvanced setup

WebDAV MCP Server

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.

Features

  • 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

Or with npx

npx webdav-mcp-server

Option 2: Clone and build from source

Clone repository

git clone https://github.com/yourusername/webdav-mcp-server.git cd webdav-mcp-server

Build the application

npm run build

Option 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

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

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 2. Add the hash to your .env file with the {bcrypt} prefix:

Copy & paste β€” that's it
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.

If using npx

npx webdav-mcp-server

If built from source

node dist/index.js

Running with HTTP/SSE transport

This mode enables the server to be accessed over HTTP with Server-Sent Events for real-time communication.

If using npx

npx webdav-mcp-server --http

If built from source

node dist/index.js --http

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)

This setup uses hacdias/webdav, a simple and standalone WebDAV server written in Go. The configuration for the WebDAV server is stored in webdav_config.yml, which you can modify to adjust permissions, add users, or change other settings.

The WebDAV server stores all files in a Docker volume called webdav_data, which persists across container restarts.

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 the hacdias/webdav documentation.

Testing

To run the tests:

npm test

Integrating with Claude Desktop

  • 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" } } } }

Available MCP Resources

  • webdav://{path}/list - List files in a directory

  • webdav://{path}/content - Get file content

  • webdav://{path}/info - Get file or directory information

Available MCP Tools

  • webdav_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

Available MCP Prompts

  • webdav_create_remote_file - Prompt to create a new file on a remote WebDAV server

  • webdav_get_remote_file - Prompt to retrieve content from a remote WebDAV file

  • webdav_update_remote_file - Prompt to update a file on a remote WebDAV server

  • webdav_delete_remote_item - Prompt to delete a file/directory from a remote WebDAV server

  • webdav_list_remote_directory - Prompt to list directory contents on a remote WebDAV server

  • webdav_create_remote_directory - Prompt to create a directory on a remote WebDAV server

  • webdav_move_remote_item - Prompt to move/rename a file/directory on a remote WebDAV server

  • webdav_copy_remote_item - Prompt to copy a file/directory on a remote WebDAV server

Example Queries in Claude

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"

License

MIT