使用说明
WebDAV MCP服务器
一种模型上下文协议(MCP)服务器,它公开了一个工具,用于对配置的WebDAV端点发出经过身份验证的WebDAW请求。它通过stdio进行通信,因此可以嵌入兼容的AI/代理运行时。
特性
- 通过以下方式实现MCP服务器
@modelcontextprotocol/sdk. - 单一工具
dav_request支持常见的WebDAV方法:PROPFIND,PROPPATCH,MKCOL,COPY,MOVE,LOCK,UNLOCK,GET,PUT,DELETE. - 属性预设更简单
PROPFIND请求(内置:basic,detailed,minimal). - 枚举和检查预设的工具:
list_property_presets,get_property_preset. - 使用环境变量的自动基本身份验证。
- 深度收割台处理
PROPFIND. - 返回封装为MCP文本内容的结构化JSON(状态、标头、正文)。
- 优雅关闭
SIGINT.
为什么
此服务器允许AI助手(或任何MCP客户端)检查和操纵WebDAV服务器上的资源:列出目录(PROPFIND),创建收藏(MKCOL),上传/下载文件(PUT/GET)移动/复制资源以及管理锁。
先决条件
- Node.js 18+(用于本机
fetchES模块) - 可访问的WebDAV服务器URL。
- (可选)WebDAV凭据(用户名和密码)(如果服务器需要身份验证)。
安装
克隆存储库:
git clone <your-fork-url> webdav-mcp
cd webdav-mcp
安装依赖项:
npm install
(运行时不需要严格的构建步骤,因为TypeScript是在发布时编译的;如果你以后引入多个文件或希望分发编译后的JS,你可以添加一个构建步骤。)
配置
启动服务器之前,请设置以下环境变量:
| 变量 | 必填 | 描述 |
|---|---|---|
DAV_SERVER_URL |
是 | WebDAV服务器的基本URL,例如。 https://dav.example.com/remote.php/webdav/ |
DAV_USERNAME |
可选 | 基本身份验证的用户名 |
DAV_PASSWORD |
可选 | 基本身份验证密码 |
如果 DAV_USERNAME 和 DAV_PASSWORD 如果都已设置,则会自动添加基本身份验证。
属性预设配置
预设处理的可选环境变量:
| 变量 | 默认值 | 描述 |
|---|---|---|
DAV_PROPERTY_PRESETS_DIR |
./property-presets |
包含具有预设定义的JSON文件的目录。每个文件可以是单个预设对象或预设数组。 |
DAV_PROPERTY_PRESETS_TTL_MS |
5000 |
在检查文件更改之前,缓存的TTL为毫秒。 |
如果目录不存在,内置预设仍然可用。
用法
运行服务器(stdio模式):
node src/server.ts
或者直接使其可执行(shebang存在):
chmod +x src/server.ts
./src/server.ts
通过将其声明为stdio服务器命令,将其与MCP兼容的客户端集成。示例(伪客户端配置):
{
"servers": [
{
"name": "webdav",
"command": "node",
"args": ["/absolute/path/to/webdav-mcp/src/server.ts"],
"env": {
"DAV_SERVER_URL": "https://dav.example.com/remote.php/webdav/",
"DAV_USERNAME": "alice",
"DAV_PASSWORD": "s3cret"
}
}
]
}
工具: dav_request
输入JSON模式(简化):
{
"method": "PROPFIND|PROPPATCH|MKCOL|COPY|MOVE|LOCK|UNLOCK|GET|PUT|DELETE",
"path": "<relative path>",
"body": "<optional XML or other content>",
"headers": {"<name>": "<value>"},
"depth": "0|1|infinity"
"preset": "<optional preset name>",
"additionalProperties": [ {"namespace": "DAV:", "name": "quota-used-bytes"} ]
}
最少必填字段: method, path.
如果 preset 为a PROPFIND 请求 body 字段将被忽略,并由预设值加上任何值自动生成 additionalProperties 提供。
工具: list_property_presets, get_property_preset
列出预设值:
{
"name": "list_property_presets",
"arguments": {}
}
获取预设定义:
{
"name": "get_property_preset",
"arguments": {"name": "basic"}
}
示例 PROPFIND 使用预设:
{
"name": "dav_request",
"arguments": {
"method": "PROPFIND",
"path": "/photos",
"depth": "1",
"preset": "basic"
}
}
具有额外属性:
{
"name": "dav_request",
"arguments": {
"method": "PROPFIND",
"path": "/media",
"depth": "1",
"preset": "basic",
"additionalProperties": [
{"namespace": "DAV:", "name": "quota-used-bytes"}
]
}
}
例子
列出目录(深度1):
{
"name": "dav_request",
"arguments": {
"method": "PROPFIND",
"path": "/",
"depth": "1"
}
}
上传文件(PUT):
{
"name": "dav_request",
"arguments": {
"method": "PUT",
"path": "/notes/todo.txt",
"body": "Finish documentation"
}
}
删除资源:
{
"name": "dav_request",
"arguments": {
"method": "DELETE",
"path": "/notes/old.txt"
}
}
发展
TypeScript配置存在 tsconfig.json.有用的命令:
# Type checking only
npx tsc --noEmit
# Build to dist (if you add a build script later)
npx tsc
您可以将脚本块添加到 package.json:
{
"scripts": {
"typecheck": "tsc --noEmit",
"build": "tsc"
}
}
然后运行:
npm run typecheck
npm run build
运行测试(涵盖预设逻辑):
npm test
错误处理
错误将返回 isError: true JSON主体包含 error 现场。服务器还将MCP级别的错误记录到带有前缀的stderr中 [MCP Error].
安全说明
- 目前仅支持基本身份验证。
- 避免直接在客户端配置中嵌入凭据——首选环境变量或秘密管理器。
- 强烈建议使用HTTPS
DAV_SERVER_URL. - 该工具返回原始响应体;如果XML可能包含敏感数据,请相应地处理。
故障排除
| 症状 | 原因 | 修复 |
|---|---|---|
DAV_SERVER_URL environment variable is not set |
缺少配置 | 启动服务器前导出变量 |
| 身份验证失败(401) | 凭据错误 | 验证 DAV_USERNAME/DAV_PASSWORD |
| 空的PROPFIND结果 | 错误 Depth 或路径 |
调整 depth 或检查路径正确性 |
| 工具未列出 | MCP客户端未正确连接 | 确保命令和路径正确 |
| 未找到预设 | 预设名称错误 | 使用 list_property_presets 查看可用名称 |
贡献
- 分叉存储库。
- 创建要素分支。
- 在保持TypeScript严格性的情况下进行更改。
- 提交一个带有明确描述的拉取请求。
请在文档中使用英式英语拼写。
许可证
在此处指定您的许可证(例如MIT)。添加一个 LICENCE 文件正式化。
© 2025
