这是一个模型上下文协议(MCP)服务器,它通过基本身份验证在WebDAV端点上启用CRUD操作。此服务器使Claude Desktop和其他MCP客户端能够通过自然语言命令与WebDAV文件系统进行交互。
# 全局安装
npm install -g webdav-mcp-server
# 或使用npx
npx -y @masx200/webdav-mcp-server
# 克隆仓库
git clone https://github.com/masx200/webdav-mcp-server.git
cd webdav-mcp-server
# 安装依赖
npm install
# 构建应用程序
npm run build
# 构建Docker镜像
docker build -t webdav-mcp-server .
# 无身份验证运行容器
docker run -p 3000:3000 \
-e WEBDAV_ROOT_URL=http://your-webdav-server \
-e WEBDAV_ROOT_PATH=/webdav \
webdav-mcp-server
# 对于WebDAV和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 WEBDAV_PASSWORD=password \
-e AUTH_ENABLED=true \
-e AUTH_USERNAME=user \
-e AUTH_PASSWORD=pass \
webdav-mcp-server
在根目录创建一个.env文件,包含以下变量:
# WebDAV配置
WEBDAV_ROOT_URL=http://localhost:4080
WEBDAV_ROOT_PATH=/webdav
# WebDAV身份验证(可选)
WEBDAV_AUTH_ENABLED=true
WEBDAV_USERNAME=admin
# WebDAV密码必须是明文(启用身份验证时需要)
# WebDAV协议要求将实际密码发送到服务器
WEBDAV_PASSWORD=password
# 服务器配置(用于HTTP模式)
SERVER_PORT=3000
# MCP服务器的身份验证配置(可选)
AUTH_ENABLED=true
AUTH_USERNAME=user
AUTH_PASSWORD=pass
AUTH_REALM=MCP WebDAV Server
# MCP服务器的身份验证密码可以是bcrypt哈希(不同于WebDAV密码)
# AUTH_PASSWORD={bcrypt}$2y$10$CyLKnUwn9fqqKQFEbxpZFuE9mzWR/x8t6TE7.CgAN0oT8I/5jKJBy
为了增强MCP服务器的安全性(而非WebDAV连接),您可以使用bcrypt加密密码而不是存储明文密码:
生成bcrypt哈希:
# 使用内置工具
npm run generate-hash -- yourpassword
# 或使用npx
npx webdav-mcp-generate-hash yourpassword
在您的.env文件中添加哈希值,并加上{bcrypt}前缀:
AUTH_PASSWORD={bcrypt}$2y$10$CyLKnUwn9fqqKQFEbxpZFuE9mzWR/x8t6TE7.CgAN0oT8I/5jKJBy
这样,您的MCP服务器密码将被安全地存储。请注意,由于协议要求,WebDAV密码必须始终是明文。
此模式非常适合直接与Claude Desktop集成。
# 如果全局安装
webdav-mcp-server
# 如果使用npx
npx -y @masx200/webdav-mcp-server
# 如果从源码构建
node dist/index.js
此模式允许服务器通过HTTP传输进行实时通信。
# 如果全局安装
webdav-mcp-server --http
# 如果使用npx
npx -y @masx200/webdav-mcp-server --http
# 如果从源码构建
node dist/index.js --http
最简单的方式是使用Docker Compose来启动WebDAV服务器和MCP服务器:
# 启动WebDAV和MCP服务器
cd docker
docker-compose up -d
# 这将启动:
# - hacdias/webdav服务器在4080端口(用户名:admin,密码:admin)
# - MCP服务器在3000端口(用户名:user,密码:pass)
此设置使用hacdias/webdav,这是一个用Go编写的简单且独立的WebDAV服务器。WebDAV服务器的配置存储在webdav_config.yml文件中,您可以修改该文件以调整权限、添加用户或更改其他设置。
WebDAV服务器将所有文件存储在一个名为webdav_data的Docker卷中,该卷在容器重启之间持久存在。
webdav_config.yml文件配置了在Docker Compose设置中使用的hacdias/webdav服务器。以下是您可以自定义的内容:
# 服务器地址和端口
address: 0.0.0.0
port: 6060
# 根数据目录
directory: /data
# 启用/禁用CORS
cors:
enabled: true
# 更多CORS设置...
# 默认权限(C=创建,R=读取,U=更新,D=删除)
permissions: CRUD
# 用户定义
users:
- username: admin
password: admin # 明文密码
permissions: CRUD # 完全权限
- username: reader
password: reader
permissions: R # 只读权限
# 您也可以使用bcrypt加密密码
- username: secure
password: "{bcrypt}$2y$10$zEP6oofmXFeHaeMfBNLnP.DO8m.H.Mwhd24/TOX2MWLxAExXi4qgi"
有关更多高级配置选项,请参阅hacdias/webdav文档。
要运行测试:
npm test
webdav://{path}/list - 列出目录中的文件webdav://{path}/content - 获取文件内容webdav://{path}/info - 获取文件或目录的信息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服务器上的文件和目录webdav_read_remote_file - 带有head/tail选项的增强文件读取webdav_edit_remote_file - 带有diff预览的智能文件编辑webdav_list_directory_with_sizes - 带有大小和排序的增强目录列表webdav_search_files - 使用glob模式搜索文件,支持排除webdav_get_directory_tree - 以JSON形式获取递归目录树webdav_read_multiple_files - 同时读取多个文件webdav_get_file_info - 获取详细的文件/目录元数据webdav_range_request - 从文件中读取特定字节范围(HTTP 206部分内容)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服务器上复制文件/目录一旦WebDAV MCP服务器连接到Claude Desktop,您可以使用以下示例查询:
您还可以在自己的项目中程序化地使用此包:
import { startWebDAVServer } from "webdav-mcp-server";
// 对于无身份验证的stdio传输
await startWebDAVServer({
webdavConfig: {
rootUrl: "http://your-webdav-server",
rootPath: "/webdav",
authEnabled: false,
},
useHttp: false,
});
// 对于带WebDAV身份验证的stdio传输(密码必须是明文)
await startWebDAVServer({
webdavConfig: {
rootUrl: "http://your-webdav-server",
rootPath: "/webdav",
authEnabled: true,
username: "admin",
password: "password",
},
useHttp: false,
});
// 使用bcrypt哈希作为MCP服务器密码(仅限HTTP身份验证)
await startWebDAVServer({
webdavConfig: {
rootUrl: "http://your-webdav-server",
rootPath: "/webdav",
authEnabled: true,
username: "admin",
password: "password", // WebDAV密码必须是明文
},
useHttp: true,
httpConfig: {
port: 3000,
auth: {
enabled: true,
username: "user",
password:
"{bcrypt}$2y$10$CyLKnUwn9fqqKQFEbxpZFuE9mzWR/x8t6TE7.CgAN0oT8I/5jKJBy",
},
},
});
// 对于带MCP身份验证的HTTP传输
await startWebDAVServer({
webdavConfig: {
rootUrl: "http://your-webdav-server",
rootPath: "/webdav",
authEnabled: true,
username: "admin",
password: "password",
},
useHttp: true,
httpConfig: {
port: 10000,
auth: {
enabled: true,
username: "user",
password: "pass",
realm: "MCP WebDAV Server",
},
},
});
// 对于无身份验证的HTTP传输
await startWebDAVServer({
webdavConfig: {
rootUrl: "http://your-webdav-server",
rootPath: "/webdav",
authEnabled: false,
},
useHttp: true,
httpConfig: {
port: 3000,
auth: {
enabled: false,
},
},
});
MIT
本文档记录了对WebDAV MCP服务器的全面增强功能,基于文件系统MCP服务器实现,大幅提升了文件操作能力和用户体验。
webdav_read_remote_filepath (string): 文件路径head (number, 可选): 返回文件的前N行tail (number, 可选): 返回文件的后N行webdav_edit_remote_filepath (string): 文件路径edits (array): 编辑操作数组,包含oldText和newTextdryRun (boolean, 可选): 预览模式,生成diff但不实际修改文件webdav_search_filespath (string, 可选): 搜索起始目录,默认为根目录pattern (string): Glob模式匹配规则(如*.txt, **/*.js, config.*)excludePatterns (array, 可选): 排除模式数组webdav_get_directory_tree