返回市场
MCP-WebDAV服务器

MCP-WebDAV服务器

作者:masx2002 星标更新:2025-11-16

项目介绍

WebDAV MCP 服务器

这是一个模型上下文协议(MCP)服务器,它通过基本身份验证在WebDAV端点上启用CRUD操作。此服务器使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包安装

# 全局安装
npm install -g webdav-mcp-server

# 或使用npx
npx -y @masx200/webdav-mcp-server

方案2:克隆并从源码构建

# 克隆仓库
git clone https://github.com/masx200/webdav-mcp-server.git
cd webdav-mcp-server

# 安装依赖
npm install

# 构建应用程序
npm run build

方案3:Docker

# 构建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服务器身份验证的加密密码

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

  1. 生成bcrypt哈希:

    # 使用内置工具
    npm 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集成。

# 如果全局安装
webdav-mcp-server

# 如果使用npx
npx -y @masx200/webdav-mcp-server

# 如果从源码构建
node dist/index.js

使用HTTP/SSE传输运行

此模式允许服务器通过HTTP传输进行实时通信。

# 如果全局安装
webdav-mcp-server --http

# 如果使用npx
npx -y @masx200/webdav-mcp-server --http

# 如果从源码构建
node dist/index.js --http

使用Docker Compose快速开始

最简单的方式是使用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服务器配置

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

与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>", "WEBDA_ 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部分内容)

可用的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服务器上的备份位置"
  • "将文件old_name.txt重命名为new_name.txt在我的远程WebDAV服务器上"
  • "从我的远程WebDAV服务器上删除temp.txt"

增强功能操作

  • "读取日志文件app.log的前20行:/logs/app.log"
  • "搜索所有JavaScript文件:*/.js,排除node_modules目录"
  • "获取项目目录的树结构"
  • "按文件大小列出上传目录的内容"
  • "同时读取多个配置文件"
  • "带有更改预览的配置文件编辑"
  • "获取文件的详细元数据信息"
  • "读取文件的前500字节:bytes=0-499"
  • "读取文件的最后100字节:bytes=400-"

程序化使用

您还可以在自己的项目中程序化地使用此包:

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 服务器增强功能文档

概述

本文档记录了对WebDAV MCP服务器的全面增强功能,基于文件系统MCP服务器实现,大幅提升了文件操作能力和用户体验。

新增功能

1. 增强文件读取功能

webdav_read_remote_file

  • 功能: 读取文件内容,支持head/tail参数
  • 参数:
    • path (string): 文件路径
    • head (number, 可选): 返回文件的前N行
    • tail (number, 可选): 返回文件的后N行
  • 特性:
    • 内存高效:大文件读取时不加载全部内容
    • 参数验证:head和tail不能同时使用
    • 灵活读取:支持读取文件开头或结尾部分

2. 智能文件编辑功能

webdav_edit_remote_file

  • 功能: 智能文件编辑,支持部分替换和diff预览
  • 参数:
    • path (string): 文件路径
    • edits (array): 编辑操作数组,包含oldText和newText
    • dryRun (boolean, 可选): 预览模式,生成diff但不实际修改文件
  • 特性:
    • 精确匹配:查找并替换精确的文本序列
    • 多重编辑:支持单次操作中应用多个编辑
    • Diff预览:生成git风格的差异预览
    • 安全模式:干运行模式确保编辑安全

3. 高级文件搜索功能

webdav_search_files

  • 功能: 使用glob模式递归搜索文件和目录
  • 参数:
    • path (string, 可选): 搜索起始目录,默认为根目录
    • pattern (string): Glob模式匹配规则(如*.txt, **/*.js, config.*
    • excludePatterns (array, 可选): 排除模式数组
  • 特性:
    • Glob模式:支持标准的glob模式匹配
    • 排除模式:支持排除特定文件或目录
    • 递归搜索:深度搜索整个目录树
    • 路径验证:所有路径都经过安全验证

4. 目录树结构功能

webdav_get_directory_tree

  • 功能: 获取递归目录树结构的JSON