WebDAV MCP Server

by LaubPlusCo
Verified

remote-capable server

The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.

Integrations

  • Supports configuration through .env files to set WebDAV connection parameters, authentication credentials, and server options.

  • Provides containerized deployment of the MCP server with configurable environment variables for WebDAV connectivity and authentication.

  • Offers programmatic usage within Node.js applications through an importable API for custom MCP server implementations.

WebDAV MCP 服务器

一个模型上下文协议 (MCP) 服务器,支持在 WebDAV 端点上进行 CRUD 操作,并支持基本身份验证。该服务器允许 Claude Desktop 和其他 MCP 客户端通过自然语言命令与 WebDAV 文件系统进行交互。

特征

  • 使用可选身份验证连接到任何 WebDAV 服务器
  • 对文件和目录执行 CRUD 操作
  • 将文件操作公开为 MCP 资源和工具
  • 通过 stdio 传输(用于 Claude Desktop 集成)或 HTTP/SSE 传输运行
  • 通过可选的基本身份验证实现安全访问
  • 支持 MCP 服务器身份验证的 bcrypt 加密密码(由于协议限制,WebDAV 密码必须是纯文本)
  • 连接池可提高 WebDAV 服务器的性能
  • 使用 Zod 进行配置验证
  • 结构化日志,以便更好地排除故障

先决条件

  • Node.js 18 或更高版本
  • npm 或 yarn
  • WebDAV 服务器(用于实际文件操作)

安装

选项 1:从 npm 包安装

# Global installation npm install -g webdav-mcp-server # Or with npx npx webdav-mcp-server

选项 2:从源代码克隆并构建

# 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

选项 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

配置

在根目录中创建一个.env文件,其中包含以下变量:

# 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

MCP 服务器身份验证的加密密码

为了增强 MCP 服务器(而非 WebDAV 连接)的安全性,您可以使用 bcrypt 加密的密码,而不是以纯文本形式存储它们:

  1. 生成 bcrypt 哈希:
    # Using the built-in utility npm run generate-hash -- yourpassword # Or with npx npx webdav-mcp-generate-hash yourpassword
  2. 使用 {bcrypt} 前缀将哈希添加到您的 .env 文件中:
    AUTH_PASSWORD={bcrypt}$2y$10$CyLKnUwn9fqqKQFEbxpZFuE9mzWR/x8t6TE7.CgAN0oT8I/5jKJBy

这样,您的 MCP 服务器密码就能被安全存储。请注意,由于协议要求,WebDAV 密码必须始终以纯文本形式保存。

用法

使用 stdio 传输运行

此模式非常适合与 Claude Desktop 直接集成。

# If installed globally webdav-mcp-server # If using npx npx webdav-mcp-server # If built from source node dist/index.js

使用 HTTP/SSE 传输运行

此模式允许通过 HTTP 访问服务器,并使用服务器发送事件进行实时通信。

# If installed globally webdav-mcp-server --http # If using npx npx webdav-mcp-server --http # If built from source node dist/index.js --http

Docker Compose 快速入门

开始使用 WebDAV 服务器和 MCP 服务器的最简单方法是使用 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)

此设置使用hacdias/webdav ,这是一个用 Go 编写的简单独立的 WebDAV 服务器。WebDAV 服务器的配置存储在webdav_config.yml中,您可以修改该文件以调整权限、添加用户或更改其他设置。

WebDAV 服务器将所有文件存储在名为webdav_data的 Docker 卷中,该卷在容器重启后仍然存在。

WebDAV 服务器配置

webdav_config.yml文件用于配置 Docker Compose 设置中使用的 hacdias/webdav 服务器。您可以自定义以下内容:

# 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"

有关更多高级配置选项,请参阅hacdias/webdav 文档

测试

运行测试:

npm test

与 Claude Desktop 集成

  1. 确保 Claude Desktop 中启用了 MCP 功能

可用的 MCP 资源

  • webdav://{path}/list列出目录中的文件
  • webdav://{path}/content获取文件内容
  • webdav://{path}/info获取文件或目录信息

可用的 MCP 工具

  • webdav_create_remote_file - 在远程 WebDAV 服务器上创建新文件
  • webdav_get_remote_file - 从存储在远程 WebDAV 服务器上的文件中检索内容
  • webdav_update_remote_file - 更新远程 WebDAV 服务器上的现有文件
  • webdav_delete_remote_item - 从远程 WebDAV 服务器删除文件或目录
  • webdav_create_remote_directory - 在远程 WebDAV 服务器上创建新目录
  • webdav_move_remote_item - 移动或重命名远程 WebDAV 服务器上的文件/目录
  • webdav_copy_remote_item - 将文件/目录复制到远程 WebDAV 服务器上的新位置
  • webdav_list_remote_directory - 列出远程 WebDAV 服务器上的文件和目录

可用的 MCP 提示

  • webdav_create_remote_file - 提示在远程 WebDAV 服务器上创建新文件
  • webdav_get_remote_file - 提示从远程 WebDAV 文件检索内容
  • webdav_update_remote_file - 提示更新远程 WebDAV 服务器上的文件
  • webdav_delete_remote_item - 提示从远程 WebDAV 服务器删除文件/目录
  • webdav_list_remote_directory - 提示列出远程 WebDAV 服务器上的目录内容
  • webdav_create_remote_directory - 提示在远程 WebDAV 服务器上创建目录
  • webdav_move_remote_item - 提示移动/重命名远程 WebDAV 服务器上的文件/目录
  • webdav_copy_remote_item - 提示复制远程 WebDAV 服务器上的文件/目录

Claude 中的示例查询

以下是连接 WebDAV MCP 服务器后您可以在 Claude Desktop 中使用的一些示例查询:

  • “列出我的远程 WebDAV 服务器上的文件”
  • “在我的远程 WebDAV 服务器上创建一个名为 notes.txt 的新文本文件,内容如下:Hello World”
  • “从我的远程 WebDAV 服务器获取 document.txt 的内容”
  • “使用此新配置更新远程 WebDAV 服务器上的 config.json”
  • “在我的远程 WebDAV 服务器上创建一个名为 projects 的目录”
  • “将 report.docx 复制到我的远程 WebDAV 服务器上的备份位置”
  • “将远程 WebDAV 服务器上的文件 old_name.txt 移动到 new_name.txt”
  • “从我的远程 WebDAV 服务器中删除 temp.txt”

程序化使用

您还可以在自己的项目中以编程方式使用此包:

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 } } });

执照

麻省理工学院

ID: qoepn05pn9