CalDAV MCP

Un servidor CalDAV MCP para exponer operaciones de calendario como herramientas para asistentes de IA.

Documentación

caldav-mcp

🗓️ Un servidor de Protocolo de Contexto de Modelo (MCP) CalDAV para exponer operaciones de calendario como herramientas para asistentes de IA.

Release npm version MIT License code style: prettier MCP Compatible semantic-release: angular

✨ Características

  • Conectar a servidores CalDAV
  • Listar calendarios
  • Listar eventos de calendario dentro de un período específico
  • Crear eventos de calendario
  • Actualizar eventos de calendario
  • Eliminar eventos de calendario por UID

Configuración

{
  "mcpServers": {
    ...,
    "calendar": {
      "command": "npx",
      "args": [
        "caldav-mcp"
      ],
      "env": {
        "CALDAV_BASE_URL": "<CalDAV server URL>",
        "CALDAV_USERNAME": "<CalDAV username>",
        "CALDAV_PASSWORD": "<CalDAV password>"
      }
    }
  }
}

Desarrollo

Inicio rápido

Ejecuta el servidor MCP en modo desarrollo con recarga automática:

npm run dev

Esto ejecutará el código TypeScript directamente con modo de observación y cargará automáticamente las variables de entorno desde .env.

Compilación manual

Alternativamente, puedes compilar TypeScript a JavaScript y ejecutarlo:

  1. Compilar:
npx tsc
  1. Ejecutar:
node dist/index.js

Herramientas disponibles

list-calendars

Lista todos los calendarios devolviendo tanto el nombre como la URL

Parámetros: ninguno

Devuelve:

  • Lista de todos los calendarios disponibles

list-events

Lista todos los eventos entre la fecha de inicio y fin en el calendario especificado por su URL

Parámetros:

  • start: string — Fecha de inicio (ISO 8601)
  • end: string — Fecha de fin (ISO 8601)
  • calendarUrl: string

Devuelve:

  • Una lista de eventos que caen dentro del período dado, cada uno conteniendo uid, summary, start, end, y opcionalmente description y location

create-event

Crea un evento en el calendario especificado por su URL. Para eventos de todo el día, establece wholeDay a true. Para un evento de todo el día de un solo día, usa las fechas y horas start y end en la misma fecha del calendario; no necesitan ser marcas de tiempo idénticas.

Parámetros:

  • summary: string
  • start: string — Fecha y hora de inicio (ISO 8601)
  • end: string — Fecha y hora de fin (ISO 8601)
  • wholeDay: boolean (opcional) — Crear como evento de todo el día
  • calendarUrl: string
  • description: string (opcional)
  • location: string (opcional)
  • recurrenceRule: object (opcional)
    • freq: enum (DAILY | WEEKLY | MONTHLY | YEARLY) (opcional)
    • interval: number (opcional)
    • count: number (opcional)
    • until: string (opcional)
    • byday: array of string (opcional)
    • bymonthday: array of number (opcional)
    • bymonth: array of number (opcional)

Devuelve:

  • El ID único del evento creado

update-event

Actualiza un evento existente en el calendario especificado por su URL. Solo se cambian los campos proporcionados. Para un evento de un día completo, establece wholeDay a true y establece start y end al mismo día del calendario.

Parámetros:

  • uid: string — Identificador único del evento a actualizar (obtenido de list-events)
  • calendarUrl: string
  • summary: string (opcional)
  • start: string (opcional)
  • end: string (opcional)
  • wholeDay: boolean (opcional) — Actualizar si esto es un evento de todo el día
  • description: string (opcional)
  • location: string (opcional)
  • recurrenceRule: object (opcional)
    • freq: enum (DAILY | WEEKLY | MONTHLY | YEARLY) (opcional)
    • interval: number (opcional)
    • count: number (opcional)
    • until: string (opcional)
    • byday: array of string (opcional)
    • bymonthday: array of number (opcional)
    • bymonth: array of number (opcional)

Devuelve:

  • El ID único del evento actualizado

delete-event

Elimina un evento en el calendario especificado por su URL

Parámetros:

  • uid: string — Identificador único del evento a eliminar (obtenido de list-events)
  • calendarUrl: string

Devuelve:

  • Mensaje de confirmación cuando el evento se elimina correctamente

list-todos

Lista tareas (VTODOs) en el calendario especificado por su URL. Por defecto devuelve solo tareas abiertas (NEEDS-ACTION e IN-PROCESS), ordenadas por orden manual y luego por fecha de vencimiento. Usa status para incluir tareas completadas (COMPLETED) o todas (ALL), y limit/offset para paginar listas largas.

Parámetros:

  • calendarUrl: string
  • status: enum (OPEN | ALL | NEEDS-ACTION | COMPLETED | IN-PROCESS | CANCELLED) (opcional) — Filtrar por estado. OPEN (predeterminado) = NEEDS-ACTION + IN-PROCESS; ALL = todo; o un estado exacto (NEEDS-ACTION, COMPLETED, IN-PROCESS, CANCELLED).
  • due_before: string (opcional) — Solo tareas con fecha de vencimiento en o antes de esta (ISO 8601). Las tareas sin fecha se excluyen cuando se establece una ventana de vencimiento.
  • due_after: string (opcional) — Solo tareas con fecha de vencimiento en o después de esta (ISO 8601). Las tareas sin fecha se excluyen cuando se establece una ventana de vencimiento.
  • limit: number (opcional) — Máximo de tareas a devolver (predeterminado 50, máximo 500)
  • offset: number (opcional) — Tareas a omitir (predeterminado 0)

Devuelve:

  • Un objeto { todos, total, limit, offset } donde total es el recuento antes de la paginación. Cada tarea tiene uid, summary, status, y opcionalmente due, start, completed, description, location.

create-todo

Crea una tarea (VTODO) en el calendario especificado por su URL. Solo se requiere summary; una tarea puede no tener fechas. Usa due para una fecha límite y start para cuándo debe comenzar el trabajo.

Parámetros:

  • summary: string
  • calendarUrl: string
  • due: string (opcional) — Fecha y hora de vencimiento (ISO 8601)
  • start: string (opcional) — Fecha y hora de inicio (ISO 8601)
  • description: string (opcional)
  • location: string (opcional)
  • status: enum (NEEDS-ACTION | COMPLETED | IN-PROCESS | CANCELLED) (opcional) — Por defecto es NEEDS-ACTION cuando se omite

Devuelve:

  • El ID único de la tarea creada

update-todo

Actualiza una tarea existente (VTODO) en el calendario especificado por su URL. Solo se cambian los campos proporcionados. Para marcar una tarea como completada, prefiere la herramienta complete-todo.

Parámetros:

  • uid: string — Identificador único de la tarea a actualizar (de list-todos)
  • calendarUrl: string
  • summary: string (opcional)
  • due: string (opcional)
  • start: string (opcional)
  • description: string (opcional)
  • location: string (opcional)
  • status: enum (NEEDS-ACTION | COMPLETED | IN-PROCESS | CANCELLED) (opcional)

Devuelve:

  • El ID único de la tarea actualizada

complete-todo

Marca una tarea (VTODO) como completada. Establece su estado a COMPLETED y registra la hora de finalización.

Parámetros:

  • uid: string — Identificador único de la tarea a completar (de list-todos)
  • calendarUrl: string

Devuelve:

  • El ID único de la tarea completada

delete-todo

Elimina una tarea (VTODO) en el calendario especificado por su URL

Parámetros:

  • uid: string — Identificador único de la tarea a eliminar (de list-todos)
  • calendarUrl: string

Devuelve:

  • Mensaje de confirmación cuando la tarea se elimina correctamente

Licencia

MIT