WebDAV MCP Server

WebDAV MCP Server

一个模型上下文协议(Model Context Protocol,MCP)服务器,它使 Claude Desktop 和其他 MCP 客户端能够通过自然语言命令与 WebDAV 文件系统进行交互,以进行 CRUD(创建、读取、更新、删除)操作。

Category
访问服务器

README

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 包安装

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

# 或者使用 npx
npx webdav-mcp-server

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

# 克隆仓库
git clone https://github.com/yourusername/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 webdav-mcp-server

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

使用 HTTP/SSE 传输运行

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

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

# 如果使用 npx
npx webdav-mcp-server --http

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

使用 Docker Compose 快速入门

使用 WebDAV 服务器和 MCP 服务器的最简单方法是使用 Docker Compose:

# 启动 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. 添加

{
    "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. 添加

{
    "mcpServers": {
        "webdav": {
            "command": "node",
            "args": [
                "<path to repository>/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 服务器上的文件和目录

可用的 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 移动到我的远程 WebDAV 服务器上的 new_name.txt"
  • "从我的远程 WebDAV 服务器删除 temp.txt"

编程方式使用

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

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

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选