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:

  1. Gere um hash bcrypt:
    # Using the built-in utility
    npm run generate-hash -- yourpassword
    # Or with npx
    npx webdav-mcp-generate-hash yourpassword
    
  2. 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

  1. 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 execute setup.sh\ no mac/linux ou setup.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ório
  • webdav://{path}/content - Obter conteúdo do arquivo
  • webdav://{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 remoto
  • webdav_get_remote_file - Recuperar conteúdo de um arquivo armazenado em um servidor WebDAV remoto
  • webdav_update_remote_file - Atualizar um arquivo existente em um servidor WebDAV remoto
  • webdav_delete_remote_item - Excluir um arquivo ou diretório de um servidor WebDAV remoto
  • webdav_create_remote_directory - Criar um novo diretório em um servidor WebDAV remoto
  • webdav_move_remote_item - Mover ou renomear um arquivo/diretório em um servidor WebDAV remoto
  • webdav_copy_remote_item - Copiar um arquivo/diretório para um novo local em um servidor WebDAV remoto
  • webdav_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 remoto
  • webdav_get_remote_file - Prompt para recuperar conteúdo de um arquivo WebDAV remoto
  • webdav_update_remote_file - Prompt para atualizar um arquivo em um servidor WebDAV remoto
  • webdav_delete_remote_item - Prompt para excluir um arquivo/diretório de um servidor WebDAV remoto
  • webdav_list_remote_directory - Prompt para listar o conteúdo de um diretório em um servidor WebDAV remoto
  • webdav_create_remote_directory - Prompt para criar um diretório em um servidor WebDAV remoto
  • webdav_move_remote_item - Prompt para mover/renomear um arquivo/diretório em um servidor WebDAV remoto
  • webdav_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
    }
  }
});