Most file servers stop at reading; this one creates, updates, moves and copies, which is what makes it useful for anything beyond lookup. The two-layer auth is worth understanding before you deploy: WebDAV passwords must be stored in plain text because the protocol demands it, so the bcrypt option protects the MCP server's own door, not the storage credential.
An MCP server that performs full CRUD against a WebDAV endpoint. It runs over stdio for desktop clients or over HTTP with SSE when you want it reachable on the network, and it can require its own basic auth on top of the WebDAV credentials.
- Files — `webdav_create_remote_file`, `webdav_get_remote_file`, `webdav_update_remote_file`, `webdav_delete_remote_item`
- Directories and moves — `webdav_create_remote_directory`, `webdav_list_remote_directory`, `webdav_move_remote_item`, `webdav_copy_remote_item`
- The same operations are also exposed as MCP prompts, and directory listings, file content and file info are readable as resources at `webdav://{path}/list`, `webdav://{path}/content` and `webdav://{path}/info`
- Connection pooling, Zod-validated configuration and structured logging
- Importable from your own code as `startWebDAVServer`, so the same server can be embedded rather than launched
Node.js 18 or later and a WebDAV server. Install with `npm install -g webdav-mcp-server` or run it through `npx webdav-mcp-server`; add `--http` for the HTTP/SSE transport, which listens on `SERVER_PORT` (3000 by default). Point it at the endpoint with `WEBDAV_ROOT_URL` and `WEBDAV_ROOT_PATH`, and if the endpoint needs credentials set `WEBDAV_AUTH_ENABLED`, `WEBDAV_USERNAME` and `WEBDAV_PASSWORD` — the WebDAV password has to be plain text, because the protocol sends the real password. The MCP server's own auth (`AUTH_ENABLED`, `AUTH_USERNAME`, `AUTH_PASSWORD`) does accept a bcrypt hash. A Docker Compose setup brings up a WebDAV server and the MCP server together. Package version 1.0.4. MIT.
One command plus a key — npx webdav-mcp-server, then supply credentials
