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.

License: MIT npm version


Inicio Rápido

Instalación en un clic (Claude Desktop)

  1. Descarga dav-mcp-<version>.mcpb desde la última versión. Las versiones desde la 4.1.2 incluyen este archivo.
  2. Ábrelo con Claude Desktop (macOS o Windows). Claude mostrará un diálogo de instalación.
  3. 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 Basic a menos que tu servidor necesite Digest.

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:

  1. Añade el nodo AI Agent
  2. Añade el nodo MCP Client Tool y conéctalo al AI Agent
  3. Configura:
    • MCP Endpoint: http://localhost:3000/mcp
    • Authentication: Bearer
    • Token: tu-token-secreto

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.

Capacidaddav-mcpLa mayoría de los MCP
Gestión de CalendariosCRUD completo (12 herramientas)Solo crear + listar (2-3 herramientas)
Gestión de ContactosCardDAV completo (8 herramientas)A menudo ausente por completo
Gestión de TareasSoporte VTODO completo (7 herramientas)Raramente incluido
Actualizaciones por CamposTodas las propiedades RFC + campos personalizadosRaramente disponible
Libre/OcupadoFunciona en todos los servidores (del lado del cliente)REPORT nativo, no soportado por la mayoría
Filtrado del Lado del ServidorConsultas eficientesVuelca todos los datos
Multi-ProveedorCualquier servidor CalDAV/CardDAVSoporte limitado de proveedores
Total de Herramientas27 herramientas2-6 herramientas

Herramientas Disponibles (27 en Total)

Herramientas CalDAV (12 herramientas)

  1. list_calendars - Lista todos los calendarios disponibles
  2. list_events - Lista TODOS los eventos (usa calendar_query para búsquedas filtradas)
  3. create_event - Crea un nuevo evento de calendario
  4. 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
  5. update_event_raw - Actualiza un evento con datos iCal sin procesar (avanzado)
  6. delete_event - Elimina un evento permanentemente
  7. calendar_query - PREFERIDA: Busca y filtra eventos eficientemente por texto, rango de fechas o ubicación
  8. make_calendar - Crea una nueva colección de calendario, opcionalmente con una zona horaria (un nombre IANA como Europe/Berlin, enviado como VTIMEZONE)
  9. update_calendar - Actualiza propiedades del calendario (nombre mostrado, descripción, color, zona horaria)
  10. delete_calendar - Elimina un calendario y todos sus eventos
  11. calendar_multi_get - Obtiene en lote múltiples eventos específicos por URL
  12. freebusy_query - Encuentra tiempo libre y ocupado en un rango ("¿cuándo estoy libre?"), calculado del lado del cliente

Herramientas CardDAV (8 herramientas)

  1. list_addressbooks - Lista todas las libretas de direcciones disponibles
  2. list_contacts - Lista TODOS los contactos (usa addressbook_query para búsquedas filtradas)
  3. create_contact - Crea un nuevo contacto (vCard)
  4. update_contact - PREFERIDA: Actualiza cualquier campo del contacto (FN, EMAIL, TEL, ORG, ADR, propiedades personalizadas X-*)
  5. update_contact_raw - Actualiza un contacto con datos vCard sin procesar (avanzado)
  6. delete_contact - Elimina un contacto permanentemente
  7. addressbook_query - PREFERIDA: Busca y filtra contactos eficientemente por nombre, correo electrónico u organización
  8. addressbook_multi_get - Obtiene en lote múltiples contactos específicos por URL

Herramientas VTODO (7 herramientas)

  1. list_todos - Lista TODAS las tareas (usa todo_query para búsquedas filtradas)
  2. create_todo - Crea una nueva tarea con fecha de vencimiento, prioridad y estado opcionales
  3. update_todo - PREFERIDA: Actualiza cualquier campo de la tarea (SUMMARY, STATUS, PRIORITY, DUE, PERCENT-COMPLETE, propiedades personalizadas X-*)
  4. update_todo_raw - Actualiza una tarea con datos iCal VTODO sin procesar (avanzado)
  5. delete_todo - Elimina una tarea permanentemente
  6. todo_query - PREFERIDA: Busca y filtra tareas eficientemente por estado/fecha de vencimiento
  7. 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_METHODCredencialesUso para
Basic (predeterminado)CALDAV_USERNAME, CALDAV_PASSWORDCasi 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.
DigestCALDAV_USERNAME, CALDAV_PASSWORDServidores 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 abajoGoogle 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=true registra 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, o TOOL_CALL_LOG_FILE), legible solo por ti. TOOL_CALL_LOG_MODE=console lo 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


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