Zovo Calendar MCP Server
Gerencie eventos, lembretes e agendamentos a partir dos seus arquivos locais. Servidor MCP offline-first, plano gratuito, sem cadastro.
Documentação
mcp-calendar
Seu aplicativo de calendário pode mostrar a próxima terça-feira. Ele não pode dizer para onde sua semana realmente foi, quais duas coisas você
disse sim ao mesmo tempo, ou quantas horas faturáveis as reuniões do mês passado valeram. Este servidor lê o
arquivo .ics que seu calendário já exporta e responde a essas perguntas: eventos em qualquer janela com séries recorrentes
expandidas corretamente, blocos de ocupado mesclados e as lacunas livres reais dentro do seu horário de trabalho, todas as duplas reservas entre
calendários de trabalho e pessoais de uma só vez, uma .ics limpa de apenas os eventos que você escolheu, e o lançamento de tempo exato para uma
reunião que você deveria ter faturado. Nenhuma conta é conectada, nada é sincronizado, e o arquivo de calendário permanece na sua
máquina como texto simples.
Construído por theluckystrike.
No Registro Oficial MCP (io.github.theluckystrike/calendar-ics-reader-events-freebusy-conflicts).
Listado no Índice de Produtos de IA — endpoint remoto ao vivo em mcp.zovo.one/s/calendar, plano gratuito, sem cadastro.

Importe o .ics que seu calendário exporta, depois pergunte o que está acontecendo, quando você está livre e o que conflita, zero configuração, tudo local.
Instalação em 60 segundos
A publicação no npm para @theluckystrike/mcp-calendar está pendente. Até lá, o pacote de um clique .mcpb ou um clone + build
é o caminho funcional, ambos verificados abaixo.
Um clique (.mcpb): baixe calendar.mcpb do lançamento mais recente e clique duas vezes nele no Claude Desktop:
https://github.com/theluckystrike/mcp-servers/releases/latest
(claude_desktop_config.json):
{
"mcpServers": {
"calendar": {
"command": "npx",
"args": ["-y", "@theluckystrike/mcp-calendar"]
}
}
}
Claude Code:
claude mcp add calendar -- npx -y @theluckystrike/mcp-calendar
(.cursor/mcp.json):
{
"mcpServers": {
"calendar": {
"command": "npx",
"args": ["-y", "@theluckystrike/mcp-calendar"]
}
}
}
O formulário npx acima começa a funcionar no momento em que o pacote é publicado. Até lá, use o pacote .mcpb acima,
ou compile a partir do código-fonte com exatamente estes quatro comandos:
git clone https://github.com/theluckystrike/mcp-servers.git && cd mcp-servers
npm install
npm run build -w packages/mcp-license -w servers/timezone -w servers/calendar
Depois aponte o command do seu cliente para node com um argumento: o caminho absoluto para servers/calendar/dist/index.js.
Para rodar no modo Pro, defina MCP_LICENSE_KEY no mesmo bloco de configuração, ou chame license_activate uma vez com sua chave.
Obtendo o .ics do seu calendário
| Aplicativo | Onde |
|---|---|
| Google Agenda | Configurações -> Importar e exportar -> Exportar. Você recebe um zip; importe o .ics dentro dele. |
| Calendário Apple | Arquivo -> Exportar -> Exportar... |
| Outlook (desktop) | Arquivo -> Salvar calendário, formato iCalendar (.ics) |
| Outlook / Microsoft 365 (web) | Configurações -> Calendário -> Calendários compartilhados -> Publicar, depois use o link ICS (Pro) |
| Qualquer outro | Qualquer URL de feed publicado terminando em .ics, ou webcal:// (Pro) |
Depois: ics_import {path: "~/Downloads/mike@example.com.ics", name: "work"}
Ferramentas
| Ferramenta | O que faz |
|---|---|
ics_import | Lê um arquivo .ics (path), conteúdos colados (text) ou um feed público (url, Pro) e o mantém localmente sob um nome. Importar o mesmo nome novamente o substitui. |
calendars_list | Cada calendário importado: nome, fonte, contagem de eventos, tamanho, quando foi importado. |
events_list | Cada evento entre duas datas com séries recorrentes expandidas para ocorrências reais, ordenado, no seu próprio fuso horário. Cada linha carrega um id. |
events_search | Eventos cujo título, descrição, local, organizador ou participantes contêm uma frase. |
free_busy | Blocos de ocupado mesclados e as lacunas livres dentro do seu horário de trabalho, dia a dia. Eventos marcados como livres/transparentes não contam como ocupados. |
conflicts | Cada par de eventos que se sobrepõem, com a sobreposição em minutos — em todos os calendários, então uma chamada de cliente conflitando com uma corrida escolar é detectada. Uma janela mais longa é reduzida aos 31 dias livres e respondida, nunca recusada. |
next_event | A próxima coisa que ainda não começou e quanto tempo falta para ela. |
event_export | Escreve eventos escolhidos (por id, ou uma janela inteira) em um novo .ics que você pode enviar. Horários em UTC, então chega corretamente em qualquer cliente. |
event_to_time_entry | Transforma uma reunião nos argumentos exatos para o entry_add do rastreador de tempo, então uma chamada se torna tempo faturável sem redigitá-la. |
ics_forget | Remove um calendário e sua cópia local. |
license_status / license_activate | Mostra o nível; ativa uma chave Pro offline. |
O recurso calendar://today dá a agenda de hoje em uma única leitura. O prompt plan_my_day percorre todo o ciclo: o que está acontecendo,
o que conflita, onde estão os trechos livres e quais reuniões concluídas devem ser faturadas.
O que o analisador trata
Escrito contra exportações reais, não apenas a especificação: quebra de linha (CRLF, LF simples e CR simples, e quebras que o Exchange
coloca dentro de um caractere multibyte, que são reunidas nos bytes antes da decodificação), escape \n \, \; \\,
eventos de dia inteiro com um DTEND exclusivo, DURATION em vez de DTEND, horários TZID e UTC, horários flutuantes,
RRULE para HOURLY, DAILY, WEEKLY, MONTHLY e YEARLY com COUNT, UNTIL (inclusivo), INTERVAL,
BYDAY incluindo ordinais (2MO, -1FR), BYMONTHDAY, BYMONTH e BYSETPOS, EXDATE, RDATE,
substituições RECURRENCE-ID (a instância movida substitui a original em vez de aparecer duas vezes),
STATUS:CANCELLED, TRANSP:TRANSPARENT e blocos VALARM dentro de um evento. Um evento que não pode ser lido é ignorado
e contado em vez de custar o resto do arquivo.
FREQ=MINUTELY e FREQ=SECONDLY são deliberadamente não expandidos: uma dessas regras preenche qualquer janela com milhares de
ocorrências e enterra o resto da semana. Esses eventos são listados em sua primeira ocorrência e o motivo é
dito em voz alta. Uma regra sem COUNT e sem UNTIL é expandida apenas até a janela que você pediu.
Exportações escritas por este servidor mantêm eventos de dia inteiro como valores DATE, então um feriado sai no mesmo dia em que
chegou em vez de um bloco temporizado no dia anterior no fuso da sua máquina.
VTIMEZONE é deliberadamente ignorado. As regras de DST inline de um arquivo são tão atuais quanto o aplicativo que o escreveu; o TZID
é mantido e cada deslocamento é calculado a partir dos dados ICU dentro da sua compilação Node, que é o que mantém uma reunião
semanal de Varsóvia às 10:00 às 10:00 local através da mudança de relógio de março.
Gratuito vs Pro
| Gratuito | Pro ($19 pagamento único) | |
|---|---|---|
| Calendários mantidos | 2 | ilimitado |
| Janela por pergunta | até 31 dias | qualquer janela |
conflicts em uma janela mais longa | respondida para os primeiros 31 dias, limite nomeado | qualquer janela |
| Eventos por exportação | 50 | ilimitado |
| Importar de uma URL ou feed webcal | -- | sim |
| Todo o resto | completo | completo |
Obter Pro, ou $39 para todos os servidores do conjunto, vitalício.
Privacidade
Tudo é local. O arquivo de calendário que você importa é copiado para
${XDG_DATA_HOME:-~/.local/share}/mcp-servers/calendar/ e lido de lá; excluir esse diretório redefine o
servidor. Há exatamente uma chamada de rede em todo o servidor, e apenas quando você passa um url você mesmo: ela busca
esse endereço uma vez, com um tempo limite de 12 segundos, um limite de 5 MB e uma recusa em endereços de loopback, privados e de metadados de nuvem.
Nada é enviado, nenhuma conta é vinculada e chaves de licença verificam offline.
Combina com
- mcp-timezone, este servidor lê seu fuso horário e o mecanismo
.icsdele: converta um horário de reunião, encontre horários entre países, escreva um convite. - mcp-time-tracker,
event_to_time_entryentrega a ele uma reunião concluída; ele rastreia e relata as horas. - mcp-invoice, transforme essas horas rastreadas em uma fatura numerada.
- office-suite, vários servidores atrás de uma única instalação, uma entrada de configuração.
FAQ
Não. Não há OAuth, nenhum token e nenhuma sincronização. Você exporta um arquivo (ou cola uma URL de feed público no Pro) e ele é lido localmente. Isso também significa que uma importação é um instantâneo: reimporte quando o calendário tiver avançado.
Sim, e isso é a maior parte do código. Uma série semanal é expandida no relógio de parede, então uma reunião de Varsóvia às 10:00 permanece
às 10:00 através da mudança de DST em vez de derivar para 11:00. Mensal no dia 31 pula fevereiro em vez de rolar para
março, UNTIL inclui a ocorrência que cai exatamente nele, e uma única instância movida substitui a original.
Não é: RFC 5545 torna DTEND exclusivo para um evento de dia inteiro, então 1–3 de junho significa os dias 1 e 2. Este
servidor segue a especificação, que é o que seu aplicativo de calendário também faz.
Ele escreve arquivos .ics com event_export, que você pode importar em qualquer lugar. Ele nunca modifica o calendário que leu.
5 MB, que são alguns milhares de eventos. Exporte um intervalo de datas mais estreito se um histórico completo for maior que isso.