Skip to main content
Glama
nweii
by nweii

Apple Calendar MCP

Apple Calendar MCP proporciona a un cliente de IA acceso remoto de lectura y escritura a una cuenta de iCloud Calendar. Se ejecuta como un Worker de TypeScript sin estado en Cloudflare y no requiere que un dispositivo Apple permanezca en línea.

Deploy to Cloudflare

Una implementación se conecta a una cuenta de Apple. Este no es un servicio de calendario multiusuario.

Antes de desplegar

Necesitas:

  • Una cuenta de Cloudflare.

  • Una cuenta de Apple con autenticación de dos factores.

  • Un cliente MCP que admita servidores HTTPS remotos y OAuth.

  • Tu nombre de zona horaria IANA, como America/New_York.

Abre tú mismo las páginas de configuración de Apple y Cloudflare. Un agente puede guiarte y verificar el resultado, pero no debe recibir ni introducir tus contraseñas.

[!WARNING] Nunca pegues tu contraseña de cuenta de Apple, tu contraseña específica de aplicación de Apple ni tu contraseña de aprobación en chats, control de versiones, registros o incidencias.

Related MCP server: calendar-app-mcp

Crear una contraseña específica de aplicación de Apple

  1. Abre account.apple.com e inicia sesión.

  2. Selecciona Inicio de sesión y seguridad > Contraseñas específicas para aplicaciones.

  3. Selecciona Generar una contraseña específica de aplicación.

  4. Ponle una etiqueta clara, como Apple Calendar MCP.

  5. Mantén el valor generado en la página de Apple hasta que Cloudflare lo solicite.

Apple exige autenticación de dos factores para las contraseñas específicas de aplicación. Puedes tener hasta 25 contraseñas activas. Puedes revocar una o todas ellas. Cambiar o restablecer la contraseña principal de tu cuenta de Apple revoca todas las contraseñas específicas de aplicación. Consulta las instrucciones de Apple sobre contraseñas específicas de aplicación.

[!WARNING] La contraseña específica de aplicación de Apple tiene un alcance mayor que los permisos de Calendar que este MCP muestra a los clientes. El Worker se limita a los hosts iCloud CalDAV de la lista de permitidos, pero Apple no emite una contraseña específica de aplicación solo para Calendar.

Desplegar en Cloudflare

  1. Selecciona Desplegar en Cloudflare en la parte superior de esta página.

  2. Inicia sesión en Cloudflare y sigue el formulario de despliegue.

  3. Introduce los tres valores secretos cuando Cloudflare los solicite:

    • ICLOUD_USERNAME: la dirección de correo electónico completa utiliada para tu cuenta de Apple e iCloud Calendar.

    • ICLOUD_APP_PASSWORD: la contaseña específica de aplicación que generó Apple. Consérvala exactamente.

    • APPROVAL_PASSWORD: una contaseña separada y única que protege las nuevas aprobaciones de clientes MCP. No reutlices ninguna de las contaseñas de Apple.

  4. Espera a que finalice el despliegue del Worker.

  5. Abre Workers & Pages, selcciona el Worker, luego selcciona Configuración y busca Variables y secretos.

  6. Cambia CALENDAR_TIME_ZONE de UTC a tu nombre de zona horaria IANA y, a continuación, desplega la configuración.

  7. Copia el endpo int con esta forma: https://<worker-name>.<account-subdomain>.workers.dev/mcp.

Cloudflare almacena los tres valores secretos como secretos de Worker cifrados. El formulario de despliegue no los escribe en el repositorio generado ni en un archivo .dev.vars local.

Si omitiste un secreto o necesitas reemplazarlo, abre Workers & Pages, selcciona el Worker, selcciona Configuración, busca Variables y secretos, añade o edita el valor como Secreto y selcciona Desplegar.

Cloudflare aprovisiona automáticamente el espacio de nombres OAUTH_KV. No añadas un ID de KV a wrangler.jsonc.

Conectar un cliente MCP

  1. Añade el endpoint /mcp implementado como servidor o aplicación MCP remota personalizada.

  2. Selecciona Conectar. Tu cliente debería detectar OAuth y abrir la página de aprobación de Apple Calendar MCP.

  3. Confirma el nombre del cliente y el permiso solicitado.

  4. Introduce APPROVAL_PASSWORD y selecciona Permitir y volver. Selecciona Cancelar si la página solicita más acceso del que deseas.

  5. Espera a que el cliente indique que la conexión se ha completado. Cierra la pestaña del navegador si permanece abierta tras la finalización.

  6. Actualiza o vuelve a escanear las herramientas del cliente. Los clientes pueden almacenar en caché los catálogos de herramientas después de una conexión o actualización del servidor.

Para Claude, consulta Usar conectores personalizados con MCP remoto. Para ChatGPT, consulta Modo desarrollador y conectores MCP completos.

La página de aprobación ofrece dos permisos:

  • Leer calendarios y eventos otorga calendar:read y expone siete herramientas de lectura.

  • Leer y editar calendarios y eventos otorga calendar:read calendar:write y añade cuatro herramientas de mutación.

Cambiar el permiso requiere autorización de nuevo y una actualización del catálogo de herramientas. Una actualización del servidor no añade herramientas de escritura a una concesión de solo lectura existente.

[!WARNING] Las acciones de escritura que implican asistentes o invitaciones pueden enviar correos electrónicos o notificaciones a otras personas.

Verificar la conexión

Verifica primero el acceso de lectura:

  1. Llama a calendar_get_profile. Confirma la identidad de la cuenta de Apple y la zona horaria.

  2. Llama a calendar_list_calendars. Confirma que aparecen los nombres de calendario esperados.

  3. Si aprobaste el acceso de solo lectura, confirma que el cliente no muestra herramientas de mutación.

La implementación, la introducción de secretos, la conexión OAuth y una lectura de calendario exitosa son estados separados. Una lectura de calendario exitosa demuestra que la credencial de Apple funciona.

Para verificar el acceso de escritura, primero crea un calendario temporal vacío en Apple Calendar. Pide al agente que ejecute esta prueba acotada solo después de que lo confirmes:

  1. Crea un evento futuro con un título único, sin asistentes, sin recurrencia y sin alertas.

  2. Lee el evento y conserva su ETag actual.

  3. Cambia solo su título usando ese ETag.

  4. Lee el evento de nuevo y usa el ETag devuelto para eliminarlo.

  5. Confirma que el evento ya no existe.

Si la limpieza falla, registra el calendario, el título y la hora exactos para que puedas eliminar el evento tú mismo. No pruebes escrituras en tu calendario predeterminado.

También puedes darle a un agente el procedimiento acotado en Configurar Apple Calendar MCP con un agente.

Herramientas

Herramienta

Alcance

Propósito

calendar_get_profile

calendar:read

Devuelve la identidad de la cuenta iCloud configurada y la zona horaria predeterminada.

calendar_list_calendars

calendar:read

Lista los calendarios visibles, las zonas horarias efectivas y los IDs opacos.

calendar_search_events

calendar:read

Busca en un rango de tiempo acotado en todos los calendarios.

calendar_list_events

calendar:read

Lista un rango de tiempo acotado de un calendario.

calendar_get_event

calendar:read

Lee los detalles completos del evento y el ETag actual.

calendar_batch_get_events

calendar:read

Lee hasta 20 eventos con errores por evento.

calendar_get_availability

calendar:read

Devuelve ventanas de ocupación combinadas sin revelar detalles de eventos.

calendar_create_event

calendar:write

Crea eventos programados, de día completo, recurrentes, con invitados, con ubicación o con alertas.

calendar_update_event

calendar:write

Cambia una ocurrencia, esta y las siguientes, o una serie completa.

calendar_delete_event

calendar:write

Elimina una ocurrencia, esta y las siguientes, o una serie completa.

calendar_respond_to_invitation

calendar:write

Acepta, declina o acepta provisionalmente una invitación.

Las herramientas de actualización, eliminación y respuesta a invitaciones requieren el ETag más reciente. Los cambios de ocurrencias recurrentes también requieren el recurrenceId original devuelto por una búsqueda.

Las entradas con hora usan marcas de tiempo RFC 3339 con Z o un desplazamiento explícito. Los clientes pueden omitir timeZone; la creación usa la zona horaria IANA publicada del calendario y luego CALENDAR_TIME_ZONE. Las salidas con hora incluyen valores UTC y locales.

location es el campo visible de Calendar. structuredLocation puede añadir un título, dirección, latitud, longitud y radio. Las coordenadas verificadas habilitan la vista previa del mapa en Apple Calendar. No adivines las coordenadas.

description se asigna a las notas de Calendar. url se asigna al campo de URL del evento. El MCP conserva los archivos adjuntos no admitidos y los tipos de alarma durante cambios no relacionados, pero no carga, descarga ni modifica archivos adjuntos. No importa ICS sin procesar.

Usar un dominio personalizado

El endpoint predeterminado workers.dev no necesita configuración de nombre de host. Un dominio personalizado requiere un ajuste explícito de lista de permitidos:

  1. Abre el Worker en Cloudflare.

  2. Selecciona Configuración > Dominios y rutas > Añadir > Dominio personalizado y añade el nombre de host.

  3. En Variables y secretos, añade MCP_HOSTNAME como variable de texto sin formato. Introduce solo el nombre de host, como calendar.example.com. No incluyas https://, una ruta, un puerto ni credenciales.

  4. Despliega la configuración.

  5. Conecta los clientes de nuevo en https://<custom-host>/mcp y completa la autorización de nuevo.

El nombre de host es parte de la identidad OAuth. Los tokens emitidos para workers.dev no se trasladan al origen personalizado.

Añadir Cloudflare Access

La contraseña de aprobación integrada es la protección de autorización predeterminada. Cloudflare Access es una defensa en profundidad opcional.

Si añades Access, protege solo <hostname>/authorize. Deja /mcp, /.well-known/*, /oauth/token y /oauth/register accesibles para los clientes MCP. Después de verificar que Access protege /authorize, añade EXTERNAL_AUTHORIZATION=true como variable de Worker de texto sin formato.

[!WARNING] Establece EXTERNAL_AUTHORIZATION=true solo después de que una protección externa proteja /authorize. La configuración declara que la protección externa está activa.

Seguridad

El Worker recibe tu nombre de usuario de Apple y tu contraseña específica de aplicación en tiempo de ejecución. Confías en tu cuenta de Cloudflare, el código desplegado, Apple y cada cliente MCP conectado. Restringe el acceso a tu cuenta de Cloudflare y conecta solo clientes en los que confíes.

APPROVAL_PASSWORD protege las nuevas aprobaciones. La ruta de aprobación falla en estado cerrado a menos que esta contraseña esté configurada o EXTERNAL_AUTHORIZATION declare una protección externa verificada. Cualquiera que supere la protección puede autorizar un cliente contra la cuenta de Apple configurada.

[!WARNING] Rotar APPROVAL_PASSWORD no revoca los tokens OAuth que ya se han emitido.

El proveedor OAuth de Cloudflare almacena tokens de acceso, tokens de actualización, códigos de autorización y secretos de clientes registrados mediante hash. Cifra las propiedades de autorización. Los nombres de los clientes y los metadatos de la concesión permanecen visibles en el almacenamiento, por lo que no deben contener secretos. Consula la documentación de almacenamiento y limpieza de KV del proveedor.

El Worker envía las credenciales de Apple solo mediante HTTPS a los hosts de iCloud CalDAV incluidos en la lista de permitidos. Los argumentos de las herramientas no pueden elegir un host de origen. Los errores redactan valores similares a credenciales. El Worker no registra argumentos de herramientas ni cargas útiles de eventos.

Los resultados de las herramientas pueden incluir títulos, notas, ubicaciones, asistentes y URLs. Los clientes MCP pueden conservar estos datos según sus propias políticas de producto y espacio de trabajo.

El acceso de escritura cubre la creación, modificación, eliminación y respuestas a invitaciones de eventos. Los ETags evitan sobrescribir un evento más reciente, pero no pueden hacer que una escritura no intencionada sea inofensiva. Las actualizaciones no relacionadas conservan las propiedades de Apple no admitidas cuando es posible.

Despliega desde este repositorio canónico o desde un fork cuyos cambios hayas revisado. Un servidor MCP remoto puede cambiar su catálogo de herramientas cuando su propietario despliega código nuevo.

Revocar o rotar el acceso

Objetivo

Acción

Resultado

Detener un cliente

Desconéctalo o elimínalo en la configuración de ese cliente. Usa su flujo de revocación cuando esté disponible.

El cliente deja de usar su conexión.

Detener nuevas aprobaciones

Rota APPROVAL_PASSWORD o deshabilita el Worker.

Los tokens OAuth existentes no se ven afectados.

Detener todo el acceso de Apple inmediatamente

Deshabilita el Worker y revoca su contraseña específica de la aplicación en account.apple.com.

Las llamadas al calendario fallan hasta que configures una nueva contraseña específica de la aplicación.

Rotar normalmente

Crea una nueva contraseña específica de la aplicación de Apple, reemplaza ICLOUD_APP_PASSWORD en Cloudflare, verifica una llamada de lectura y luego revoca la contraseña anterior.

Verificas el reemplazo antes de la revocación y evitas tiempo de inactividad.

Recuperar después de un restablecimiento de contraseña de Apple Account

Crea una nueva contraseña específica de la aplicación y reemplaza el secreto del Worker.

Apple ya revocó la contraseña específica de la aplicación anterior.

Si sospechas de un compromiso, revoca primero la contraseña específica de la aplicación anterior de Apple. Luego reemplázala y verifica el acceso. Esto provoca una interrupción breve.

Solución de problemas

  • Un 401 o un rechazo de la contraseña de iCloud normalmente significa que la contraseña específica de la aplicación falta o ha sido revocada. Créala o reemplázala en Apple y Cloudflare. No la pegues en el chat.

  • La falta de herramientas de escritura normalmente significa que el cliente tiene un permiso de solo lectura o un catálogo de herramientas en caché. Actualiza las herramientas, luego desconecta y autoriza de nuevo si es necesario.

  • Un dominio personalizado que rechaza /mcp normalmente tiene un MCP_HOSTNAME que falta o no es válido. Establece el hostname exacto y vuelve a desplegar.

  • Una página de aprobación que falla en modo cerrado no tiene ni APPROVAL_PASSWORD ni una protección externa declarada. Añade el secreto de aprobación a menos que ya hayas verificado Cloudflare Access en /authorize.

Desarrollar localmente

bun install
cp .dev.vars.example .dev.vars
bun run test
bun run typecheck
bun run cloudflare:check

Mantén .dev.vars local. Desplega con bun run deplay.

Licencia

MIT

A
license - permissive license
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • Calendar API for AI agents: events, availability, Google/Microsoft setup, scheduling, and iCal.

  • Hosted Google Calendar MCP server for AI agents. No self-hosting or Google Cloud setup.

  • Connects ChatGPT to your Apple Calendar via a local Mac agent + Vercel relay

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/nweii/apple-calendar-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server