dav-mcp
Transforme qualquer calendário, agenda de contatos ou lista de tarefas em um sistema orquestrado por IA. Independente de plataforma via CalDAV/CardDAV — funciona com Nextcloud, Baikal, Radicale, Fastmail e qualquer servidor DAV compatível com padrões. 26 ferramentas com atualizações independentes de campo.
Documentação
dav-mcp
Dê aos seus agentes de IA o poder da organização — Transforme-os em assistentes orquestradores que gerenciam calendários, contatos e tarefas.
Construído com 27 ferramentas prontas para produção que abrangem os protocolos CalDAV, CardDAV e VTODO.
Início Rápido
Instalação em um clique (Claude Desktop)
- Baixe o
dav-mcp-<version>.mcpbdo último lançamento. Lançamentos a partir da versão 4.1.2 incluem este arquivo. - Abra-o com o Claude Desktop (macOS ou Windows). O Claude exibirá uma caixa de diálogo de instalação.
- Insira a URL do servidor, nome de usuário e senha. A senha é armazenada como um segredo. Deixe o método de autenticação em
Basica menos que seu servidor exijaDigest.
O arquivo .mcpb é um MCP Bundle: o servidor com suas dependências, portanto não é necessário instalar Node.js nem npx.
Claude Desktop / Cursor (Local)
Adicione ao seu arquivo de configuração MCP:
{
"mcpServers": {
"dav-mcp": {
"command": "npx",
"args": ["-y", "dav-mcp"],
"env": {
"CALDAV_SERVER_URL": "https://dav.example.com",
"CALDAV_USERNAME": "your_username",
"CALDAV_PASSWORD": "your_password"
}
}
}
}
Locais do arquivo de configuração:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
Reinicie o Claude Desktop após adicionar a configuração.
n8n (HTTP Remoto)
Inicie o servidor HTTP:
CALDAV_SERVER_URL=https://dav.example.com \
CALDAV_USERNAME=your_username \
CALDAV_PASSWORD=your_password \
BEARER_TOKEN=your-secret-token \
npx dav-mcp --http
Depois, no n8n:
- Adicione o nó AI Agent
- Adicione o nó MCP Client Tool e conecte-o ao AI Agent
- Configure:
- MCP Endpoint:
http://localhost:3000/mcp - Autenticação: Bearer
- Token: seu-token-secreto
- MCP Endpoint:
Porta personalizada:
npx dav-mcp --http --port=8080
Docker
Baixe a imagem publicada (distroless, executa como não-root, sem shell):
docker run -d --name dav-mcp -p 3000:3000 --env-file .env \
ghcr.io/philflowio/dav-mcp:latest
Tags: latest, o lançamento exato (5.0.0) e a linha menor (5.0).
Defina PORT para servir em uma porta diferente; o healthcheck o acompanha.
Ou compile a partir do código-fonte:
git clone https://github.com/PhilflowIO/dav-mcp.git
cd dav-mcp
cp .env.example .env
# Edit .env with your credentials
docker-compose up
A Orquestração
Quando ferramentas parciais forçam sua IA a improvisar, ferramentas completas permitem que ela execute operações precisas em todos os componentes.
| Capacidade | dav-mcp | A maioria dos MCPs |
|---|---|---|
| Gerenciamento de Calendário | CRUD completo (12 ferramentas) | Apenas criar + listar (2-3 ferramentas) |
| Gerenciamento de Contatos | CardDAV completo (8 ferramentas) | Frequentemente ausente |
| Gerenciamento de Tarefas | Suporte completo a VTODO (7 ferramentas) | Raramente incluído |
| Atualizações Baseadas em Campos | Todas as propriedades RFC + campos personalizados | Raramente disponível |
| Livre/Ocupado | Funciona em todos os servidores (lado do cliente) | REPORT nativo, não suportado pela maioria |
| Filtragem no Servidor | Consultas eficientes | Despeja todos os dados |
| Multi-Provedor | Qualquer servidor CalDAV/CardDAV | Suporte limitado a provedores |
| Total de Ferramentas | 27 ferramentas | 2-6 ferramentas |
Ferramentas Disponíveis (27 no Total)
Ferramentas CalDAV (12 ferramentas)
- list_calendars - Lista todos os calendários disponíveis
- list_events - Lista TODOS os eventos (use calendar_query para buscas filtradas)
- create_event - Cria um novo evento de calendário
- update_event - PREFERIDA: Atualiza qualquer campo do evento (SUMMARY, LOCATION, STATUS, propriedades X-* personalizadas); move ou converte um evento com start_date/end_date/all_day
- update_event_raw - Atualiza evento com dados iCal brutos (avançado)
- delete_event - Exclui um evento permanentemente
- calendar_query - PREFERIDA: Busca e filtra eventos de forma eficiente por texto, intervalo de datas ou local
- make_calendar - Cria uma nova coleção de calendário, opcionalmente com um fuso horário (um nome IANA como
Europe/Berlin, enviado como VTIMEZONE) - update_calendar - Atualiza propriedades do calendário (nome de exibição, descrição, cor, fuso horário)
- delete_calendar - Exclui um calendário e todos os seus eventos
- calendar_multi_get - Busca em lote vários eventos específicos por URLs
- freebusy_query - Encontra horários livres e ocupados em um intervalo ("quando estou livre?"), calculado no lado do cliente
Ferramentas CardDAV (8 ferramentas)
- list_addressbooks - Lista todos os catálogos de endereços disponíveis
- list_contacts - Lista TODOS os contatos (use addressbook_query para buscas filtradas)
- create_contact - Cria um novo contato (vCard)
- update_contact - PREFERIDA: Atualiza qualquer campo do contato (FN, EMAIL, TEL, ORG, ADR, propriedades X-* personalizadas)
- update_contact_raw - Atualiza contato com dados vCard brutos (avançado)
- delete_contact - Exclui um contato permanentemente
- addressbook_query - PREFERIDA: Busca e filtra contatos de forma eficiente por nome, e-mail ou organização
- addressbook_multi_get - Busca em lote vários contatos específicos por URLs
Ferramentas VTODO (7 ferramentas)
- list_todos - Lista TODAS as tarefas (use todo_query para buscas filtradas)
- create_todo - Cria uma nova tarefa com data de vencimento, prioridade e status opcionais
- update_todo - PREFERIDA: Atualiza qualquer campo da tarefa (SUMMARY, STATUS, PRIORITY, DUE, PERCENT-COMPLETE, propriedades X-* personalizadas)
- update_todo_raw - Atualiza tarefa com dados iCal VTODO brutos (avançado)
- delete_todo - Exclui uma tarefa permanentemente
- todo_query - PREFERIDA: Busca e filtra tarefas de forma eficiente por status/data de vencimento
- todo_multi_get - Busca em lote várias tarefas específicas por URLs
Fusos horários
Um evento ou tarefa escrito sem fuso horário (um horário "flutuante" como
DTSTART:20261010T090000, ou uma data de dia inteiro) é lido no fuso horário do seu
calendário, conforme especifica o CalDAV (RFC 4791 §9.9): o fuso definido com make_calendar /
update_calendar, que list_calendars mostra. Um calendário sem fuso é lido
no fuso em que o dav-mcp é executado: a variável de ambiente TZ (por exemplo
TZ=Europe/Berlin em Docker ou uma implantação HTTP), caso contrário, o do sistema. Um horário
sem fuso fornecido às ferramentas de criação e atualização é lido da mesma forma, e
um evento armazenado sem fuso permanece sem ele quando é movido.
freebusy_query imprime seus slots no fuso do calendário e o nomeia.
Aplicações no Mundo Real
Fluxos de Automação n8n
- Gerenciamento de Reuniões: "Mostre-me todas as reuniões de sexta-feira" → calendar_query com filtro de data retorna apenas os eventos relevantes
- Busca de Contatos: "Encontre todos na Google" → addressbook_query com filtro de organização encontra correspondências com eficiência
- Relatórios de Tarefas: "Mostre tarefas atrasadas de alta prioridade" → todo_query com filtros retorna resultados específicos
- Limpeza Agendada: Trabalho cron diário exclui tarefas concluídas usando consultas direcionadas
Integração com Claude Desktop
- Criação Rápida de Eventos: "Crie reunião de equipe amanhã às 14h" → create_event executa imediatamente
- Consulta de Contatos: "Qual é o e-mail da Sarah?" → addressbook_query com filtro de nome encontra o contato
- Visão Geral do Calendário: "O que está na minha agenda na próxima semana?" → calendar_query com intervalo de datas mostra os eventos
- Gerenciamento de Calendário: "Crie um novo calendário chamado Projeto Luna" → make_calendar cria a coleção
Funciona em Todos os Principais Provedores
Funciona com qualquer servidor CalDAV/CardDAV que siga RFC 4791 e RFC 6352:
- Nextcloud - Suporte completo
- Baikal - Suporte completo
- Radicale - Suporte completo
- iCloud - Funciona com senha específica do aplicativo
- Qualquer servidor compatível com RFC - Suporte a protocolo padrão
Autenticação
AUTH_METHOD seleciona como o dav-mcp faz login (sem diferenciar maiúsculas de minúsculas):
AUTH_METHOD | Credenciais | Uso para |
|---|---|---|
Basic (padrão) | CALDAV_USERNAME, CALDAV_PASSWORD | Quase todos os servidores. Se o servidor oferecer apenas Digest (por exemplo, Baikal configurado para Digest), o dav-mcp alterna para Digest automaticamente — nenhuma configuração necessária. |
Digest | CALDAV_USERNAME, CALDAV_PASSWORD | Servidores que aceitam apenas Digest (RFC 7616). Diferente da alternância automática em Basic, que primeiro envia a senha uma vez codificada em Basic e depois é rejeitada, Digest nunca envia a senha — use-o quando a conexão não for HTTPS. |
OAuth (ou OAuth2) | GOOGLE_*, veja abaixo | Google Calendar |
O dav-mcp requer Node.js 22 ou mais recente. Uma configuração incorreta — um valor desconhecido de
AUTH_METHOD, ou credenciais ausentes para o método escolhido — interrompe o
servidor na inicialização em vez de recorrer ao Basic.
Google Calendar (OAuth2)
Para o Google Calendar, use autenticação OAuth2:
{
"mcpServers": {
"dav-mcp": {
"command": "npx",
"args": ["-y", "dav-mcp"],
"env": {
"AUTH_METHOD": "OAuth",
"GOOGLE_USER": "your@gmail.com",
"GOOGLE_CLIENT_ID": "your-client-id",
"GOOGLE_CLIENT_SECRET": "your-client-secret",
"GOOGLE_REFRESH_TOKEN": "your-refresh-token"
}
}
}
}
Segurança
- Validação de Entrada: Todas as entradas são validadas com esquemas Zod antes da execução
- Limitação de Taxa (modo HTTP): 100 solicitações por 15 minutos por endereço de cliente, contadas antes da verificação do token bearer. Clientes em loopback ou rede privada (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) — outro contêiner na mesma rede Docker, por exemplo — recebem 10.000. Limitação: o dav-mcp vê o endereço de quem se conecta a ele. Atrás de um mapeamento de porta Docker ou um proxy reverso, esse é o gateway da ponte ou o proxy, portanto todos os clientes externos compartilham esse único endereço, seu único contador e seu limite elevado. Limite a taxa por cliente no proxy se você expor o transporte HTTP.
- Autenticação Bearer: Autenticação por token para transporte HTTP
- Sem Armazenamento de Credenciais: Apenas passagem, nunca registrado ou armazenado em cache
- Registro Estruturado: Trilha de auditoria com IDs de solicitação, sem exposição de PII
- Registro de Chamadas de Ferramenta Desativado por Padrão:
LOG_TOOL_CALLS=trueregistra cada chamada de ferramenta com seus argumentos, para depuração — em~/.local/state/dav-mcp/tool-calls.jsonl(ou$XDG_STATE_HOME,%LOCALAPPDATA%no Windows, ouTOOL_CALL_LOG_FILE), legível apenas por você.TOOL_CALL_LOG_MODE=consoleo envia para stderr. - Proteção CORS: Lista de origens permitidas, bloqueia ataques entre sites
Política de Privacidade
O dav-mcp é executado na sua máquina (ou no seu próprio servidor) e fala apenas com o servidor DAV que você configura. Não possui telemetria e não compartilha nada com seus mantenedores ou terceiros. Os resultados das ferramentas vão para o assistente de IA que chamou a ferramenta. Credenciais e dados de calendário não são armazenados pelo dav-mcp; o registro opcional de chamadas de ferramenta está desativado por padrão. Política completa: PRIVACY.md. Contato: hello@philflow.io.
Documentação
- Especificação MCP - Documentação do Model Context Protocol
- Documentação tsdav - Referência da biblioteca CalDAV/CardDAV
- CalDAV RFC 4791 - Especificação do protocolo CalDAV
- CardDAV RFC 6352 - Especificação do protocolo CardDAV
Contribuindo
Pull requests são bem-vindos! Leia CONTRIBUTING.md para as diretrizes.
Licença
Licença MIT - veja LICENSE para detalhes
Agradecimentos
Construído com:
- tsdav - Excelente biblioteca TypeScript CalDAV/CardDAV
- tsdav-utils - Camada de utilitários agnóstica a campos para atualizações de campos compatíveis com RFC
- MCP SDK - Model Context Protocol da Anthropic
- ical.js - Analisador iCalendar compatível com RFC
Perguntas? Problemas? Crie uma issue no GitHub
Construído para agentes de IA que gerenciam calendários, contatos e tarefas