Skip to main content
Glama

WebDAV MCP Server

by masx200
README-CN.md14.6 kB
# WebDAV MCP 服务器 一个支持基本认证的 WebDAV 端点 CRUD 操作的模型上下文协议 (MCP) 服务器。该服务器使 Claude Desktop 和其他 MCP 客户端能够通过自然语言命令与 WebDAV 文件系统交互。 ## 功能特性 - 连接到任何支持可选认证的 WebDAV 服务器 - 执行文件和目录的 CRUD 操作 - 将文件操作暴露为 MCP 资源和工具 - 通过 stdio 传输(用于 Claude Desktop 集成)或 HTTP/SSE 传输运行 - 支持可选基本认证的安全访问 - 支持 bcrypt 加密密码用于 MCP 服务器认证(WebDAV 密码由于协议限制必须是明文) - 连接池以获得更好的 WebDAV 服务器性能 - 使用 Zod 进行配置验证 - 结构化日志以便更好的故障排除 ## 前置要求 - Node.js 18 或更高版本 - npm 或 yarn - WebDAV 服务器(用于实际文件操作) ## 安装 ### 选项 1:从 npm 包安装 ```bash # 全局安装 npm install -g @masx200/webdav-mcp-server # 或使用 npx npx @masx200/webdav-mcp-server ``` ### 选项 2:克隆并从源码构建 ```bash # 克隆仓库 git clone https://github.com/masx200/webdav-mcp-server.git cd webdav-mcp-server # 安装依赖 pnpm install # 构建应用 pnpm run build ``` ### 选项 3:Docker ```bash # 构建 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` 文件,包含以下变量: ```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 服务器认证的加密密码 为了增强 MCP 服务器(不是 WebDAV 连接)的安全性,您可以使用 bcrypt 加密密码而不是以明文存储它们: 1. 生成 bcrypt 哈希: ```bash # 使用内置工具 pnpm run generate-hash -- yourpassword # 或使用 npx npx webdav-mcp-generate-hash yourpassword ``` 2. 将哈希添加到您的 .env 文件中,带有 {bcrypt} 前缀: ``` AUTH_PASSWORD={bcrypt}$2y$10$CyLKnUwn9fqqKQFEbxpZFuE9mzWR/x8t6TE7.CgAN0oT8I/5jKJBy ``` 这样,您的 MCP 服务器密码被安全存储。请注意,由于协议要求,WebDAV 密码必须始终是明文。 ## 使用方法 ### 使用 stdio 传输运行 此模式非常适合与 Claude Desktop 直接集成。 ```bash # 如果全局安装 webdav-mcp-server # 如果使用 npx npx -y @masx200/webdav-mcp-server # 如果从源码构建 node dist/index.js ``` ### 使用 HTTP/SSE 传输运行 此模式使服务器能够通过 HTTP 访问,并使用服务器发送事件进行实时通信。 ```bash # 如果全局安装 webdav-mcp-server --http # 如果使用 npx npx -y @masx200/webdav-mcp-server --http # 如果从源码构建 node dist/index.js --http ``` ## 使用 Docker Compose 快速开始 同时启动 WebDAV 服务器和 MCP 服务器的最简单方法是使用 Docker Compose: ```bash # 启动 WebDAV 和 MCP 服务器 cd docker docker-compose up -d # 这将启动: # - 端口 4080 上的 hacdias/webdav 服务器(用户名:admin,密码:admin) # - 端口 3000 上的 MCP 服务器(用户名:user,密码:pass) ``` 此设置使用 [hacdias/webdav](https://github.com/hacdias/webdav),一个用 Go 编写的简单独立的 WebDAV 服务器。WebDAV 服务器的配置存储在 `webdav_config.yml` 中,您可以修改它来调整权限、添加用户或更改其他设置。 WebDAV 服务器将所有文件存储在名为 `webdav_data` 的 Docker 卷中,该卷在容器重启时保持持久化。 ## WebDAV 服务器配置 `webdav_config.yml` 文件配置了 Docker Compose 设置中使用的 hacdias/webdav 服务器。以下是您可以自定义的内容: ```yaml # 服务器地址和端口 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 文档](https://github.com/hacdias/webdav)。 ## 测试 运行测试: ```bash pnpm test ``` ## 与 Claude Desktop 集成 1. 确保在 Claude Desktop 中启用了 MCP 功能 <details> <summary>使用 npx</summary> 2. 打开 Claude Desktop 设置并点击编辑配置 (`claude_desktop_config.json`) 3. 添加 ```json { "mcpServers": { "webdav": { "command": "npx", "args": [ "-y", "webdav-mcp-server" ], "env": { "WEBDAV_ROOT_URL": "<WEBDAV_ROOT_URL>", "WEBDAV_ROOT_PATH": "<WEBDAV_ROOT_PATH>", "WEBDAV_USERNAME": "<WEBDAV_USERNAME>", "WEBDAV_PASSWORD": "<WEBDAV_PASSWORD>", "WEBDAV_AUTH_ENABLED": "true|false" } } } } ``` </details> <details> <summary>使用 node 和本地构建</summary> 2. 克隆此仓库并在 mac/linux 上运行 `setup.sh` 或在 windows 上运行 `setup.bat` 3. 打开 Claude Desktop 设置并点击编辑配置 (`claude_desktop_config.json`) 4. 添加 ```json { "mcpServers": { "webdav": { "command": "node", "args": [ "<仓库路径>/dist/index.js" ], "env": { "WEBDAV_ROOT_URL": "<WEBDAV_ROOT_URL>", "WEBDAV_ROOT_PATH": "<WEBDAV_ROOT_PATH>", "WEBDAV_USERNAME": "<WEBDAV_USERNAME>", "WEBDAV_PASSWORD": "<WEBDAV_PASSWORD>", "WEBDAV_AUTH_ENABLED": "true|false" } } } } ``` </details> ## 可用的 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 服务器上的文件和目录 ### 增强功能 - `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 Partial Content 响应 ## 可用的 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" ### 增强功能操作 - "读取日志文件的前 20 行:/logs/app.log" - "搜索所有 JavaScript 文件:\*_/_.js,排除 node_modules 目录" - "获取项目目录的树形结构" - "按文件大小列出上传目录的内容" - "同时读取多个配置文件" - "编辑配置文件,预览更改而不实际应用" - "获取文件的详细元数据信息" - "读取文件的前 500 字节:bytes=0-499" - "读取文件的最后 100 字节:bytes=400-" ## 程序化使用 您也可以在自己的项目中程序化使用此包: ```javascript 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: 3000, 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 --- ## 增强功能详情 ### 🚀 新增功能概述 本版本包含以下主要增强功能: 1. **增强文件读取** - 支持 head/tail 参数,可读取文件的开头或结尾部分 2. **智能文件编辑** - 支持精确文本替换和 git 风格 diff 预览 3. **高级文件搜索** - 支持 glob 模式匹配和排除模式 4. **目录树结构** - 提供递归目录树的 JSON 表示 5. **增强目录列表** - 包含文件大小、排序和统计信息 6. **详细文件信息** - 提供完整的文件元数据 7. **多文件读取** - 支持同时读取多个文件 8. **范围请求功能** - 支持 HTTP 206 Partial Content 响应,可按字节范围读取文件内容 ### 📋 技术特性 - **内存高效**: 大文件使用内存高效的流式处理 - **并发处理**: 多文件操作使用并发处理提高效率 - **安全验证**: 所有路径都经过安全验证 - **错误隔离**: 单个操作失败不影响其他操作 - **向后兼容**: 保持所有现有 API 不变 ### 🔧 依赖更新 - **minimatch**: 用于强大的 glob 模式匹配 - **TypeScript**: 增强类型安全 - **完整文档**: 详细的使用说明和示例 这些增强功能使 WebDAV MCP Server 成为一个功能完整、性能优异、安全可靠的文件管理解决方案,特别适合复杂的项目管理和开发工作流程。 ### 🎯 范围请求功能 新增的 `webdav_range_request` 工具支持 HTTP 206 Partial Content 响应,允许按字节范围读取文件内容: - **精确范围读取**:支持 `bytes=0-499` 格式,读取指定字节范围 - **开头读取**:支持 `bytes=0-99` 格式,读取文件开头部分 - **结尾读取**:支持 `bytes=400-` 格式,读取从指定位置到文件结尾 - **兼容 HTTP 标准**:完全兼容 HTTP 1.1 Range Requests 规范 - **大文件优化**:适用于大文件的部分内容读取,减少网络传输 #### 使用示例: ```bash # 读取文件前 500 字节 webdav_range_request --path /large-file.txt --range "bytes=0-499" # 读取文件最后 100 字节 webdav_range_request --path /large-file.txt --range "bytes=400-" # 读取文件中间部分 webdav_range_request --path /large-file.txt --range "bytes=100-199" ``` 此功能特别适合处理大文件、日志文件分析、音视频文件元数据提取等场景。

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/masx200/mcp-webdav-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server