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.
✨ 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:
- Compilar:
npx tsc
- 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 opcionalmentedescriptionylocation
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: stringstart: 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íacalendarUrl: stringdescription: 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: stringsummary: string (opcional)start: string (opcional)end: string (opcional)wholeDay: boolean (opcional) — Actualizar si esto es un evento de todo el díadescription: 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: stringstatus: 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 }dondetotales el recuento antes de la paginación. Cada tarea tieneuid,summary,status, y opcionalmentedue,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: stringcalendarUrl: stringdue: 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: stringsummary: 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