WebDAV MCP Server
Realizar operações CRUD em um servidor WebDAV com autenticação básica.
Documentação
WebDAV MCP Server
Um servidor Model Context Protocol (MCP) que permite operações CRUD em um endpoint WebDAV com autenticação básica. Este servidor permite que o Claude Desktop e outros clientes MCP interajam com sistemas de arquivos WebDAV por meio de comandos em linguagem natural.
Recursos
- Conecte-se a qualquer servidor WebDAV com autenticação opcional
- Execute operações CRUD em arquivos e diretórios
- Exponha operações de arquivo como recursos e ferramentas MCP
- Execute via transporte stdio (para integração com Claude Desktop) ou transporte HTTP/SSE
- Acesso seguro com autenticação básica opcional
- Suporte a senhas criptografadas com bcrypt para autenticação do servidor MCP (as senhas WebDAV devem ser em texto puro devido a limitações do protocolo)
- Pool de conexões para melhor desempenho com servidores WebDAV
- Validação de configuração usando Zod
- Registro estruturado para melhor solução de problemas
Pré-requisitos
- Node.js 18 ou superior
- npm ou yarn
- Servidor WebDAV (para operações reais de arquivo)
Instalação
Opção 1: Instalar a partir do pacote npm
# Global installation
npm install -g webdav-mcp-server
# Or with npx
npx webdav-mcp-server
Opção 2: Clonar e compilar a partir do código-fonte
# Clone repository
git clone https://github.com/yourusername/webdav-mcp-server.git
cd webdav-mcp-server
# Install dependencies
npm install
# Build the application
npm run build
Opção 3: Docker
# Build the Docker image
docker build -t webdav-mcp-server .
# Run the container without authentication
docker run -p 3000:3000 \
-e WEBDAV_ROOT_URL=http://your-webdav-server \
-e WEBDAV_ROOT_PATH=/webdav \
webdav-mcp-server
# Run the container with authentication for both WebDAV and MCP server
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
Configuração
Crie um arquivo .env no diretório raiz com as seguintes variáveis:
# WebDAV configuration
WEBDAV_ROOT_URL=http://localhost:4080
WEBDAV_ROOT_PATH=/webdav
# WebDAV authentication (optional)
WEBDAV_AUTH_ENABLED=true
WEBDAV_USERNAME=admin
# WebDAV password must be plain text (required when auth enabled)
# The WebDAV protocol requires sending the actual password to the server
WEBDAV_PASSWORD=password
# Server configuration (for HTTP mode)
SERVER_PORT=3000
# Authentication configuration for MCP server (optional)
AUTH_ENABLED=true
AUTH_USERNAME=user
AUTH_PASSWORD=pass
AUTH_REALM=MCP WebDAV Server
# Auth password for MCP server can be a bcrypt hash (unlike WebDAV passwords)
# AUTH_PASSWORD={bcrypt}$2y$10$CyLKnUwn9fqqKQFEbxpZFuE9mzWR/x8t6TE7.CgAN0oT8I/5jKJBy
Senhas Criptografadas para Autenticação do Servidor MCP
Para maior segurança do servidor MCP (não das conexões WebDAV), você pode usar senhas criptografadas com bcrypt em vez de armazená-las em texto puro:
- Gere um hash bcrypt:
# Using the built-in utility npm run generate-hash -- yourpassword # Or with npx npx webdav-mcp-generate-hash yourpassword - Adicione o hash ao seu arquivo .env com o prefixo {bcrypt}:
AUTH_PASSWORD={bcrypt}$2y$10$CyLKnUwn9fqqKQFEbxpZFuE9mzWR/x8t6TE7.CgAN0oT8I/5jKJBy
Dessa forma, a senha do seu servidor MCP é armazenada com segurança. Observe que as senhas WebDAV devem estar sempre em texto puro devido aos requisitos do protocolo.
Uso
Executando com transporte stdio
Este modo é ideal para integração direta com o Claude Desktop.
# If installed globally
webdav-mcp-server
# If using npx
npx webdav-mcp-server
# If built from source
node dist/index.js
Executando com transporte HTTP/SSE
Este modo permite que o servidor seja acessado via HTTP com Server-Sent Events para comunicação em tempo real.
# If installed globally
webdav-mcp-server --http
# If using npx
npx webdav-mcp-server --http
# If built from source
node dist/index.js --http
Início Rápido com Docker Compose
A maneira mais fácil de começar com o servidor WebDAV e o servidor MCP é usar o Docker Compose:
# Start both WebDAV and MCP servers
cd docker
docker-compose up -d
# This will start:
# - hacdias/webdav server on port 4080 (username: admin, password: admin)
# - MCP server on port 3000 (username: user, password: pass)
Esta configuração usa hacdias/webdav, um servidor WebDAV simples e autônomo escrito em Go. A configuração do servidor WebDAV é armazenada em webdav_config.yml, que você pode modificar para ajustar permissões, adicionar usuários ou alterar outras configurações.
O servidor WebDAV armazena todos os arquivos em um volume Docker chamado webdav_data, que persiste entre reinicializações do contêiner.
Configuração do Servidor WebDAV
O arquivo webdav_config.yml configura o servidor hacdias/webdav usado na configuração do Docker Compose. Aqui está o que você pode personalizar:
# Server address and port
address: 0.0.0.0
port: 6060
# Root data directory
directory: /data
# Enable/disable CORS
cors:
enabled: true
# Additional CORS settings...
# Default permissions (C=Create, R=Read, U=Update, D=Delete)
permissions: CRUD
# User definitions
users:
- username: admin
password: admin # Plain text password
permissions: CRUD # Full permissions
- username: reader
password: reader
permissions: R # Read-only permissions
# You can also use bcrypt-encrypted passwords
- username: secure
password: "{bcrypt}$2y$10$zEP6oofmXFeHaeMfBNLnP.DO8m.H.Mwhd24/TOX2MWLxAExXi4qgi"
Para opções de configuração mais avançadas, consulte a documentação do hacdias/webdav.
Testes
Para executar os testes:
npm test
Integração com o Claude Desktop
- Certifique-se de que o recurso MCP esteja habilitado no Claude Desktop
Usando npx 2. Abra as configurações do Claude Desktop e clique em editar configuração (
claude\_desktop\_config.json\) 3. Adicione\``json { "mcpServers": { "webdav": { "command": "npx", "args": \[ "-y", "webdav-mcp-server" \], "env": { "WEBDAV\_ROOT\_URL": "", "WEBDAV\_ROOT\_PATH": "", "WEBDAV\_USERNAME": "", "WEBDAV\_PASSWORD": "", "WEBDAV\_AUTH\_ENABLED": "true|false" } } } } \``\Usando node e compilação local 2. Clone este repositório e executesetup.sh\no mac/linux ousetup.bat\no windows 3. Abra as configurações do Claude Desktop e clique em editar configuração (claude\_desktop\_config.json\) 4. Adicione\``json { "mcpServers": { "webdav": { "command": "node", "args": \[ "/dist/index.js" \], "env": { "WEBDAV\_ROOT\_URL": "", "WEBDAV\_ROOT\_PATH": "", "WEBDAV\_USERNAME": "", "WEBDAV\_PASSWORD": "", "WEBDAV\_AUTH\_ENABLED": "true|false" } } } } \``\
Recursos MCP Disponíveis
webdav://{path}/list- Listar arquivos em um diretóriowebdav://{path}/content- Obter conteúdo do arquivowebdav://{path}/info- Obter informações de arquivo ou diretório
Ferramentas MCP Disponíveis
webdav_create_remote_file- Criar um novo arquivo em um servidor WebDAV remotowebdav_get_remote_file- Recuperar conteúdo de um arquivo armazenado em um servidor WebDAV remotowebdav_update_remote_file- Atualizar um arquivo existente em um servidor WebDAV remotowebdav_delete_remote_item- Excluir um arquivo ou diretório de um servidor WebDAV remotowebdav_create_remote_directory- Criar um novo diretório em um servidor WebDAV remotowebdav_move_remote_item- Mover ou renomear um arquivo/diretório em um servidor WebDAV remotowebdav_copy_remote_item- Copiar um arquivo/diretório para um novo local em um servidor WebDAV remotowebdav_list_remote_directory- Listar arquivos e diretórios em um servidor WebDAV remoto
Prompts MCP Disponíveis
webdav_create_remote_file- Prompt para criar um novo arquivo em um servidor WebDAV remotowebdav_get_remote_file- Prompt para recuperar conteúdo de um arquivo WebDAV remotowebdav_update_remote_file- Prompt para atualizar um arquivo em um servidor WebDAV remotowebdav_delete_remote_item- Prompt para excluir um arquivo/diretório de um servidor WebDAV remotowebdav_list_remote_directory- Prompt para listar o conteúdo de um diretório em um servidor WebDAV remotowebdav_create_remote_directory- Prompt para criar um diretório em um servidor WebDAV remotowebdav_move_remote_item- Prompt para mover/renomear um arquivo/diretório em um servidor WebDAV remotowebdav_copy_remote_item- Prompt para copiar um arquivo/diretório em um servidor WebDAV remoto
Exemplos de Consultas no Claude
Aqui estão alguns exemplos de consultas que você pode usar no Claude Desktop depois que o servidor WebDAV MCP estiver conectado:
- "Liste os arquivos no meu servidor WebDAV remoto"
- "Crie um novo arquivo de texto chamado notes.txt no meu servidor WebDAV remoto com o seguinte conteúdo: Hello World"
- "Obtenha o conteúdo de document.txt do meu servidor WebDAV remoto"
- "Atualize config.json no meu servidor WebDAV remoto com esta nova configuração"
- "Crie um diretório chamado projects no meu servidor WebDAV remoto"
- "Copie report.docx para um local de backup no meu servidor WebDAV remoto"
- "Mova o arquivo old_name.txt para new_name.txt no meu servidor WebDAV remoto"
- "Exclua temp.txt do meu servidor WebDAV remoto"
Uso Programático
Você também pode usar este pacote programaticamente em seus próprios projetos:
import { startWebDAVServer } from 'webdav-mcp-server';
// For stdio transport without authentication
await startWebDAVServer({
webdavConfig: {
rootUrl: 'http://your-webdav-server',
rootPath: '/webdav',
authEnabled: false
},
useHttp: false
});
// For stdio transport with WebDAV authentication (password must be plain text)
await startWebDAVServer({
webdavConfig: {
rootUrl: 'http://your-webdav-server',
rootPath: '/webdav',
authEnabled: true,
username: 'admin',
password: 'password'
},
useHttp: false
});
// With bcrypt hash for MCP server password (HTTP auth only)
await startWebDAVServer({
webdavConfig: {
rootUrl: 'http://your-webdav-server',
rootPath: '/webdav',
authEnabled: true,
username: 'admin',
password: 'password' // WebDAV password must be plain text
},
useHttp: true,
httpConfig: {
port: 3000,
auth: {
enabled: true,
username: 'user',
password: '{bcrypt}$2y$10$CyLKnUwn9fqqKQFEbxpZFuE9mzWR/x8t6TE7.CgAN0oT8I/5jKJBy'
}
}
});
// For HTTP transport with MCP authentication
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'
}
}
});
// For HTTP transport without authentication
await startWebDAVServer({
webdavConfig: {
rootUrl: 'http://your-webdav-server',
rootPath: '/webdav',
authEnabled: false
},
useHttp: true,
httpConfig: {
port: 3000,
auth: {
enabled: false
}
}
});