dav-mcp
Convierte cualquier calendario, libreta de direcciones o lista de tareas en un sistema orquestado por IA. Independiente de la plataforma mediante CalDAV/CardDAV: funciona con Nextcloud, Baikal, Radicale, Fastmail y cualquier servidor DAV que cumpla con los estándares. 26 herramientas con actualizaciones independientes del campo.
Documentación
dav-mcp
Dale a tus agentes de IA el poder de la organización — Conviértelos en asistentes orquestadores que gestionan calendarios, contactos y tareas.
Construido sobre 27 herramientas listas para producción que abarcan los protocolos CalDAV, CardDAV y VTODO.
Inicio Rápido
Instalación en un clic (Claude Desktop)
- Descarga
dav-mcp-<version>.mcpbdesde la última versión. Las versiones desde la 4.1.2 incluyen este archivo. - Ábrelo con Claude Desktop (macOS o Windows). Claude mostrará un diálogo de instalación.
- Introduce la URL de tu servidor, nombre de usuario y contraseña. La contraseña se almacena como secreto. Deja el método de autenticación en
Basica menos que tu servidor necesiteDigest.
El archivo .mcpb es un MCP Bundle: el servidor con sus dependencias, por lo que no es necesario instalar Node.js ni npx.
Claude Desktop / Cursor (Local)
Añade a tu archivo de configuración 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"
}
}
}
}
Ubicaciones del archivo de configuración:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
Reinicia Claude Desktop después de añadir la configuración.
n8n (HTTP Remoto)
Inicia el 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
Luego en n8n:
- Añade el nodo AI Agent
- Añade el nodo MCP Client Tool y conéctalo al AI Agent
- Configura:
- MCP Endpoint:
http://localhost:3000/mcp - Authentication: Bearer
- Token: tu-token-secreto
- MCP Endpoint:
Puerto personalizado:
npx dav-mcp --http --port=8080
Docker
Descarga la imagen publicada (distroless, se ejecuta como no-root, sin shell):
docker run -d --name dav-mcp -p 3000:3000 --env-file .env \
ghcr.io/philflowio/dav-mcp:latest
Etiquetas: latest, la versión exacta (5.0.0) y la línea menor (5.0).
Configura PORT para servir en un puerto diferente; el healthcheck lo sigue.
O compila desde el código fuente:
git clone https://github.com/PhilflowIO/dav-mcp.git
cd dav-mcp
cp .env.example .env
# Edit .env with your credentials
docker-compose up
La Orquestación
Cuando las herramientas parciales obligan a tu IA a improvisar, las herramientas completas le permiten ejecutar operaciones precisas en todos los componentes.
| Capacidad | dav-mcp | La mayoría de los MCP |
|---|---|---|
| Gestión de Calendarios | CRUD completo (12 herramientas) | Solo crear + listar (2-3 herramientas) |
| Gestión de Contactos | CardDAV completo (8 herramientas) | A menudo ausente por completo |
| Gestión de Tareas | Soporte VTODO completo (7 herramientas) | Raramente incluido |
| Actualizaciones por Campos | Todas las propiedades RFC + campos personalizados | Raramente disponible |
| Libre/Ocupado | Funciona en todos los servidores (del lado del cliente) | REPORT nativo, no soportado por la mayoría |
| Filtrado del Lado del Servidor | Consultas eficientes | Vuelca todos los datos |
| Multi-Proveedor | Cualquier servidor CalDAV/CardDAV | Soporte limitado de proveedores |
| Total de Herramientas | 27 herramientas | 2-6 herramientas |
Herramientas Disponibles (27 en Total)
Herramientas CalDAV (12 herramientas)
- list_calendars - Lista todos los calendarios disponibles
- list_events - Lista TODOS los eventos (usa calendar_query para búsquedas filtradas)
- create_event - Crea un nuevo evento de calendario
- update_event - PREFERIDA: Actualiza cualquier campo del evento (SUMMARY, LOCATION, STATUS, propiedades personalizadas X-*); mueve o convierte un evento con start_date/end_date/all_day
- update_event_raw - Actualiza un evento con datos iCal sin procesar (avanzado)
- delete_event - Elimina un evento permanentemente
- calendar_query - PREFERIDA: Busca y filtra eventos eficientemente por texto, rango de fechas o ubicación
- make_calendar - Crea una nueva colección de calendario, opcionalmente con una zona horaria (un nombre IANA como
Europe/Berlin, enviado como VTIMEZONE) - update_calendar - Actualiza propiedades del calendario (nombre mostrado, descripción, color, zona horaria)
- delete_calendar - Elimina un calendario y todos sus eventos
- calendar_multi_get - Obtiene en lote múltiples eventos específicos por URL
- freebusy_query - Encuentra tiempo libre y ocupado en un rango ("¿cuándo estoy libre?"), calculado del lado del cliente
Herramientas CardDAV (8 herramientas)
- list_addressbooks - Lista todas las libretas de direcciones disponibles
- list_contacts - Lista TODOS los contactos (usa addressbook_query para búsquedas filtradas)
- create_contact - Crea un nuevo contacto (vCard)
- update_contact - PREFERIDA: Actualiza cualquier campo del contacto (FN, EMAIL, TEL, ORG, ADR, propiedades personalizadas X-*)
- update_contact_raw - Actualiza un contacto con datos vCard sin procesar (avanzado)
- delete_contact - Elimina un contacto permanentemente
- addressbook_query - PREFERIDA: Busca y filtra contactos eficientemente por nombre, correo electrónico u organización
- addressbook_multi_get - Obtiene en lote múltiples contactos específicos por URL
Herramientas VTODO (7 herramientas)
- list_todos - Lista TODAS las tareas (usa todo_query para búsquedas filtradas)
- create_todo - Crea una nueva tarea con fecha de vencimiento, prioridad y estado opcionales
- update_todo - PREFERIDA: Actualiza cualquier campo de la tarea (SUMMARY, STATUS, PRIORITY, DUE, PERCENT-COMPLETE, propiedades personalizadas X-*)
- update_todo_raw - Actualiza una tarea con datos iCal VTODO sin procesar (avanzado)
- delete_todo - Elimina una tarea permanentemente
- todo_query - PREFERIDA: Busca y filtra tareas eficientemente por estado/fecha de vencimiento
- todo_multi_get - Obtiene en lote múltiples tareas específicas por URL
Zonas horarias
Un evento o tarea escrito sin zona horaria (un tiempo "flotante" como
DTSTART:20261010T090000, o una fecha de día completo) se lee en la zona horaria de su
calendario, como especifica CalDAV (RFC 4791 §9.9): la zona configurada con make_calendar /
update_calendar, que list_calendars muestra. Un calendario sin una se lee
en la zona en la que se ejecuta dav-mcp: la variable de entorno TZ (por ejemplo
TZ=Europe/Berlin en Docker o una implementación HTTP), o la del sistema. Un tiempo
sin zona dado a las herramientas de creación y actualización se lee de la misma manera, y
un evento almacenado sin zona permanece sin ella cuando se mueve.
freebusy_query imprime sus franjas horarias en la zona del calendario y la nombra.
Aplicaciones del Mundo Real
Flujos de Automatización n8n
- Gestión de Reuniones: "Muéstrame todas las reuniones del viernes" → calendar_query con filtro de fecha devuelve solo los eventos relevantes
- Búsqueda de Contactos: "Encuentra a todos los de Google" → addressbook_query con filtro de organización encuentra coincidencias eficientemente
- Informes de Tareas: "Muestra tareas vencidas de alta prioridad" → todo_query con filtros devuelve resultados específicos
- Limpieza Programada: Trabajo cron diario elimina tareas completadas usando consultas dirigidas
Integración con Claude Desktop
- Creación Rápida de Eventos: "Crea reunión de equipo mañana a las 2 PM" → create_event se ejecuta inmediatamente
- Consulta de Contactos: "¿Cuál es el correo de Sarah?" → addressbook_query con filtro de nombre encuentra el contacto
- Resumen del Calendario: "¿Qué tengo en mi calendario la próxima semana?" → calendar_query con rango de fechas muestra los eventos
- Gestión de Calendarios: "Crea un nuevo calendario llamado Proyecto Luna" → make_calendar crea la colección
Funciona con Todos los Principales Proveedores
Funciona con cualquier servidor CalDAV/CardDAV que siga RFC 4791 y RFC 6352:
- Nextcloud - Soporte completo
- Baikal - Soporte completo
- Radicale - Soporte completo
- iCloud - Funciona con contraseña específica de la aplicación
- Cualquier servidor compatible con RFC - Soporte de protocolo estándar
Autenticación
AUTH_METHOD selecciona cómo inicia sesión dav-mcp (sin distinción de mayúsculas):
AUTH_METHOD | Credenciales | Uso para |
|---|---|---|
Basic (predeterminado) | CALDAV_USERNAME, CALDAV_PASSWORD | Casi todos los servidores. Si el servidor solo ofrece Digest (por ejemplo, Baikal configurado en Digest), dav-mcp cambia a Digest automáticamente — no se necesita configuración. |
Digest | CALDAV_USERNAME, CALDAV_PASSWORD | Servidores que solo aceptan Digest (RFC 7616). A diferencia del cambio automático bajo Basic, que primero envía la contraseña una vez codificada en Basic y luego es rechazada, Digest nunca envía la contraseña — úsalo cuando la conexión no sea HTTPS. |
OAuth (o OAuth2) | GOOGLE_*, ver abajo | Google Calendar |
dav-mcp necesita Node.js 22 o más reciente. Una configuración incorrecta — un valor desconocido de
AUTH_METHOD, o credenciales faltantes para el método elegido — detiene el
servidor al inicio en lugar de recurrir a Basic.
Google Calendar (OAuth2)
Para Google Calendar, usa autenticación 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"
}
}
}
}
Seguridad
- Validación de Entrada: Todas las entradas se validan con esquemas Zod antes de la ejecución
- Limitación de Velocidad (modo HTTP): 100 solicitudes por 15 minutos por dirección de cliente, contadas antes de verificar el token Bearer. Los clientes en loopback o una red privada (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) — otro contenedor en la misma red Docker, por ejemplo — obtienen 10,000. Limitación: dav-mcp ve la dirección de lo que se conecta a él. Detrás de un mapeo de puertos Docker o un proxy inverso, esa es la puerta de enlace del puente o el proxy, por lo que todos los clientes externos comparten esa única dirección, su único contador y su límite elevado. Limita la velocidad por cliente en el proxy si expones el transporte HTTP.
- Autenticación Bearer: Autenticación por token para el transporte HTTP
- Sin Almacenamiento de Credenciales: Solo paso a través, nunca se registran ni se almacenan en caché
- Registro Estructurado: Rastro de auditoría con IDs de solicitud, sin exposición de PII
- Registro de Llamadas a Herramientas Desactivado por Defecto:
LOG_TOOL_CALLS=trueregistra cada llamada a herramienta con sus argumentos, para depuración — en~/.local/state/dav-mcp/tool-calls.jsonl(o$XDG_STATE_HOME,%LOCALAPPDATA%en Windows, oTOOL_CALL_LOG_FILE), legible solo por ti.TOOL_CALL_LOG_MODE=consolelo envía a stderr en su lugar. - Protección CORS: Lista blanca de orígenes, bloquea ataques entre sitios
Política de Privacidad
dav-mcp se ejecuta en tu máquina (o en tu propio servidor) y solo habla con el servidor DAV que configures. No tiene telemetría y no comparte nada con sus mantenedores o terceros. Los resultados de las herramientas van al asistente de IA que llamó a la herramienta. Las credenciales y los datos del calendario no son almacenados por dav-mcp; el registro opcional de llamadas a herramientas está desactivado por defecto. Política completa: PRIVACY.md. Contacto: hello@philflow.io.
Documentación
- Especificación MCP - Documentos del Protocolo de Contexto de Modelo
- Documentación de tsdav - Referencia de la biblioteca CalDAV/CardDAV
- CalDAV RFC 4791 - Especificación del protocolo CalDAV
- CardDAV RFC 6352 - Especificación del protocolo CardDAV
Contribuciones
¡Las solicitudes de extracción son bienvenidas! Por favor, lee CONTRIBUTING.md para las pautas.
Licencia
Licencia MIT - ver LICENSE para detalles
Agradecimientos
Construido con:
- tsdav - Excelente biblioteca TypeScript CalDAV/CardDAV
- tsdav-utils - Capa de utilidades independiente de campos para actualizaciones de campos compatibles con RFC
- MCP SDK - Protocolo de Contexto de Modelo de Anthropic
- ical.js - Analizador iCalendar compatible con RFC
¿Preguntas? ¿Problemas? Crea un issue de GitHub
Construido para agentes de IA que gestionan calendarios, contactos y tareas