EK Bridge
Aplicativo da barra de menus do macOS que dá a agentes de IA acesso limitado ao Apple Calendar e Reminders: concessões por cliente, prompts de aprovação para alterações e um registro de atividades.
Documentação
EK Bridge
Dê aos agentes de IA sua agenda. Não toda ela.
Um aplicativo gratuito e de código aberto para a barra de menus do Mac que permite que Claude, ChatGPT, Cursor e seus scripts usem apenas os calendários e listas de lembretes que você escolher, e pede sua permissão antes de alterar qualquer coisa.
Baixar para Mac · Começar · Configurações de agentes · Registro de alterações
- Escolha o que cada agente pode acessar. Selecione os calendários e listas de lembretes que cada agente pode usar, e se ele pode ler, criar, editar, excluir ou concluir. Um novo agente começa sem nada.
- Aprove cada alteração. Um painel mostra exatamente o que um agente quer escrever. Nada muda até você clicar em Permitir.
- Veja tudo, desligue com um clique. A atividade informa o que cada agente alterou e explica cada recusa. Pause ou remova um agente, ou pause todo o EK Bridge pela barra de menus.
Funciona com Claude Code, Claude Desktop, Codex e Cursor (testado ao vivo), e qualquer outro cliente MCP, com configurações prontas para VS Code (Copilot), Gemini CLI, Zed, Cline, JetBrains AI Assistant e Devin Desktop. claude.ai e ChatGPT podem se conectar por meio do Acesso Remoto, que é experimental.
O que você pode pedir
Depois que um agente estiver conectado, peça em palavras simples. Ele só pode agir dentro dos calendários e listas que você forneceu.
| Você pede | O agente usa |
|---|---|
| "O que tem na minha agenda do Trabalho esta semana e onde estão minhas horas livres?" | read_events |
| "Mova a revisão de design de quinta para sexta às 15h, com a mesma duração." | read_events, depois update_event (que pede sua permissão primeiro) |
| "Lembre-me de renovar meu passaporte na próxima segunda às 9h." | create_reminder na lista que você concedeu |
| "Bloqueie 9h30–10h30 em dias úteis para foco." | create_event com uma regra de repetição |
Doze ferramentas cobrem eventos e lembretes, com todos os campos que o Calendar suporta: fusos horários, repetições, alertas, locais, notas e links. Cada agente vê apenas as ferramentas que seu acesso permite. O guia MCP tem a referência completa.
Começar
-
Instale. Baixe
EKBridge.dmg, abra e arraste o EK Bridge para Applications. Se você abrir pela imagem de disco ou Downloads, ele se oferece para mover sozinho. Ou use Homebrew:brew install --cask bereciartua/tap/ek-bridge -
Abra o aplicativo. Ele abre com uma configuração de três etapas; depois, você o encontrará na barra de menus.
- Permita o acesso a Calendários e Lembretes. Você só precisa daquele que seu agente usa; pule o outro.
- Adicione seu agente. Escolha o bloco dele (agentes encontrados no seu Mac aparecem primeiro) e o que ele pode ler para começar, como Ler todos os calendários e listas. Conceda apenas Leitura onde o agente precisar: o que ele lê vai para o provedor de IA dele.
- Conecte-o. Adicionar ao Claude Desktop… (ou Cursor, ou Claude Code) mostra a alteração exata nas configurações do agente, mantém um backup e nunca grava o token; também ativa o EK Bridge. Para outros agentes, copie o comando ou a configuração da aba Conectar da conexão. A etapa termina quando a primeira solicitação do agente chega.
É isso: pergunte ao seu agente uma das perguntas acima. Configurações para cada agente e solução de problemas estão no guia MCP.
O EK Bridge precisa de macOS 14 ou posterior, em Apple silicon ou Intel. É notarizado pela Apple e se mantém atualizado (você clica para instalar cada atualização). Notas de versão e somas de verificação estão em Releases. Atualizando do EventKit Bridge, o nome anterior? Veja Configuração. O EK Bridge é um projeto pessoal em pré-visualização pública, com suporte de melhor esforço.
Como você mantém o controle
O EK Bridge é o único aplicativo que detém sua permissão de Calendários e Lembretes. Seus agentes falam com ele, nunca diretamente com seus calendários, e ele verifica cada solicitação contra o que você permitiu.
Cada agente recebe apenas o que você marca
Cada agente tem sua própria chave e seu próprio acesso: Leitura, Criação, Edição e Exclusão para cada calendário, além de Conclusão para cada lista de lembretes. Compartilhe Trabalho, mantenha Família só para você.
Você aprova cada alteração
Por padrão, antes de um agente escrever qualquer coisa, um pequeno painel mostra todos os campos que ele quer definir. Clique em Permitir ou Negar, ou deixe um agente trabalhar por 15 minutos. Uma solicitação que você não responde é recusada após 45 segundos. Para um script confiável, você pode desativar a pergunta.
Ele pergunta antes de recusar
Quando um agente tenta adicionar, alterar, concluir ou excluir em um calendário que pode ler, mas sem essa ação específica, o EK Bridge pergunta no mesmo painel: Claude Code não pode adicionar lembretes a Compras. Permitir uma vez, Sempre permitir (que salva apenas essa ação) ou Agora não. Ele nunca pergunta sobre calendários que o agente não pode ver e, no máximo, uma vez por hora para a mesma coisa.
Você pode ver tudo e parar qualquer coisa
Atividade informa o que cada agente alterou, pelo nome (Moveu “Revisão de design”), e explica cada recusa em palavras simples. O EK Bridge armazena apenas o ID do item e consulta o nome quando você abre a linha, com Mostrar no Calendário. Pause a conexão de um agente para recusar solicitações mantendo a configuração, Remova para cortar de vez, ou pause todo o EK Bridge pela barra de menus. Notificações opcionais informam quando uma alteração não foi feita porque ninguém respondeu.
Nos bastidores
- Local por padrão. Tudo está desligado até você ligar. O servidor MCP escuta apenas em
127.0.0.1. Sem conta, sem análise, sem servidor nosso. - Uma chave por agente. Cada agente tem seu próprio token de 256 bits, armazenado apenas como hash; scripts assinam suas solicitações com sua própria chave Ed25519.
- Gravações seguras. Edições e exclusões precisam da versão mais recente de um item. Cada campo escrito é relido e uma incompatibilidade é revertida.
- Nuvem apenas pelo seu túnel. Um agente na nuvem pode alcançar o EK Bridge apenas pelo Acesso Remoto e um túnel que você executa, para agentes que você permitiu, e nunca enquanto seu Mac estiver dormindo, offline ou desconectado.
- Atualizações assinadas. As atualizações vêm do GitHub, assinadas pelo desenvolvedor e verificadas antes da instalação.
- Código aberto. Leia o código, o modelo de ameaças e o registro de testes.
O que não protege: outro programa executado como seu usuário macOS pode ler os mesmos arquivos de chave. As configurações de acesso separam os agentes que você conecta; não são uma defesa contra malware já presente no seu Mac. Detalhes em Limite de segurança.
FAQ
É gratuito?
Sim. O EK Bridge é de código aberto sob a Licença Apache 2.0, sem conta ou teste.
Meus dados de calendário saem do meu Mac?
O EK Bridge em si não envia nada para lugar nenhum; Privacidade lista cada conexão que ele faz. O que um agente lê por meio dele vai para esse agente e seu provedor de IA, sob os termos deles, então conceda Leitura apenas onde o agente precisar.
Ele sempre pergunta antes de uma alteração?
Para agentes de IA, sim, por padrão. Você pode desativar a pergunta por conexão, por exemplo, para um script confiável, ou permitir alterações de um agente por 15 minutos por vez. Veja Perguntar antes de alterações.
Quais calendários funcionam?
As contas que aparecem nos aplicativos Calendários e Lembretes, como iCloud, Google, Exchange, CalDAV e No Meu Mac. Os testes ao vivo até agora rodaram no iCloud; veja Testes.
Posso usar com ChatGPT ou claude.ai?
Sim, pelo Acesso Remoto, que encaminha agentes na nuvem para seu Mac por um túnel que você executa, como Tailscale Funnel. Está desligado por padrão e é experimental, e seu Mac precisa estar ligado e online. Veja De agentes na nuvem.
Meus próprios scripts podem usar?
Sim, com a ferramenta de linha de comando bridge-client. Cada script recebe sua própria chave e seu próprio acesso, como um agente. Veja De scripts.
Como isso é diferente de outros servidores MCP para Mac?
A maioria dá aos agentes acesso amplo a muitos aplicativos, com um interruptor por aplicativo ou serviço. O EK Bridge faz apenas Calendários e Lembretes, mas por calendário, por agente, com aprovações, registro de atividade e revogação. Se você confia em um agente com tudo, talvez não precise dele.
É feito pela Apple?
Não. O EK Bridge é um projeto independente de código aberto construído sobre o framework público EventKit da Apple. Não é afiliado nem endossado pela Apple.
Outra coisa? Pergunte em Discussões.
Mais formas de conectar
De scripts
Scripts e ferramentas sem MCP usam bridge-client, que assina cada solicitação com a chave própria da conexão.
-
Adicione uma conexão com Conecta de ▸ Linha de comando, escolha o acesso e Salve.
-
Instale a ferramenta em Configurações ▸ Avançado ▸ Instalar Ferramenta de Linha de Comando. Ela vincula
bridge-clientem~/.local/bin; se seu shell não encontrar, adicione essa pasta ao seuPATH. (O Homebrew já a vinculou ao própriobin.) -
Envie uma solicitação de teste. A página da conexão tem pronta para copiar:
bridge-client scope_status --client "Morning briefing"
Até a ferramenta ser instalada, o comando copiado usa o caminho completo do aplicativo, /Applications/EKBridge.app/Contents/MacOS/bridge-client, então funciona como colado. bridge-client --help lista todos os comandos e o acesso que precisam. Erros dizem o que está errado e como corrigir, com um código de saída distinto para cada tipo de problema. Veja Uma primeira verificação CLI segura e a referência de API e CLI.
De agentes na nuvem (experimental)
Agentes na nuvem rodam nos servidores do fornecedor e não alcançam 127.0.0.1. Acesso Remoto (página própria na barra lateral, com configuração guiada; desligado por padrão) abre uma segunda porta de loopback, 47616, para um túnel que você executa, como Tailscale Funnel; o aplicativo mostra os comandos e testa o resultado. Cada conexão também precisa de Permitir acesso na nuvem.
- Agentes que enviam um cabeçalho (as APIs Anthropic e OpenAI, Claude Code na web, agentes na nuvem Cursor e Copilot, Devin) usam o token remoto separado da conexão.
- claude.ai, ChatGPT e Gemini Enterprise entram com OAuth, que você aprova no Mac combinando um código de seis dígitos. Remote Access tem testes offline, mas ainda não foi testado ao vivo com todos os agentes de nuvem e túneis. Ative-o apenas enquanto precisar e mantenha sua URL privada; seu caminho é o segredo. Veja Uso de agentes de nuvem.
Guias
| Objetivo | Guia |
|---|---|
| Instalar, compilar a partir do código-fonte, assinatura e acesso ao macOS | Configuração |
| Adicionar uma conexão e usar o aplicativo | Guia do usuário |
| Conectar um agente de IA via MCP, ou um agente de nuvem via Remote Access; referência de ferramentas | Guia MCP |
| Chamar a CLI e entender os parâmetros de comando | Referência de API e CLI |
| Entender processos, armazenamento de arquivos e limites de segurança | Arquitetura e modelo de ameaças |
| Ver o que foi testado e diagnosticar falhas | Testes e solução de problemas |
| Contribuir, ou manter e lançar | Contribuindo, Mantendo |
Privacidade
O aplicativo não tem analytics, telemetria ou relatórios de falhas, e não tem conta. Seus calendários, lembretes, conexões e Atividade permanecem no seu Mac. Estas são todas as conexões de rede que ele faz:
| Conexão | Quando |
|---|---|
Servidor MCP, escutando em 127.0.0.1:47615 | Somente enquanto o EK Bridge está ligado e uma conexão tem acesso MCP (Configurações ▸ Avançado ▸ Servidor MCP local o desativa). Somente loopback: outros computadores não podem se conectar. |
Remote Access, escutando em 127.0.0.1:47616 | Somente enquanto Remote Access está ligado (desligado por padrão). Somente loopback; um túnel que você executa encaminha agentes de nuvem para ele. |
| Uma solicitação HTTPS para seu endereço de Remote Access | Somente quando o guia de Remote Access testa o túnel, ou você clica em Testar na página de Remote Access. |
| Uma solicitação HTTPS para os metadados do cliente de um agente de nuvem | Somente enquanto você emparelha um agente de nuvem OAuth (claude.ai, ChatGPT), para o endereço que esse agente fornece. Endereços privados e locais são recusados. |
bridge-mcp conectando a 127.0.0.1 | Quando um agente no seu Mac o inicia, para alcançar o servidor MCP. |
Uma solicitação HTTPS para o GitHub para appcast.xml, a lista da versão mais recente | Uma vez por dia enquanto Configurações ▸ Geral ▸ Verificar atualizações automaticamente está ligado (ligado em cópias baixadas; uma cópia compilada a partir do código-fonte nunca verifica), e quando você escolhe Verificar atualizações…. O GitHub vê seu endereço IP e a versão do aplicativo; nada mais é enviado. |
| Baixar uma atualização do GitHub | Somente depois que você clicar em Instalar atualização na janela de atualização. O aplicativo verifica a assinatura EdDSA do download e se ele foi assinado pelo mesmo desenvolvedor antes de instalá-lo. |
No disco, além de conexões e Atividade, o EK Bridge mantém os nomes, contas e cores dos calendários e listas aos quais você concedeu acesso (collection-labels.json), para que possa nomear um que se torne indisponível. A Atividade mantém o ID EventKit de um item para cada alteração (não seu título) e o consulta quando você abre a linha; o EK Bridge nunca armazena títulos ou conteúdos de itens.
Notificações são exibidas pelo macOS. Uma sobre uma alteração que não foi feita pode incluir o título do item, que o macOS pode mostrar na tela de bloqueio dependendo das suas configurações; ative ou desative cada tipo em Configurações ▸ Geral ▸ Notificações.
O que um agente lê através do EK Bridge vai para esse agente e seu provedor de IA, sob seus termos de privacidade, então conceda apenas o que cada agente precisa. Túneis diferentes do Tailscale Funnel podem ler o tráfego de Remote Access em sua borda.
Limite de segurança
- Chaves de script. O EK Bridge armazena a credencial de assinatura Ed25519 de cada conexão de linha de comando em um arquivo modo-0600 sob seu diretório de Suporte de Aplicativos; o registro armazena apenas um verificador público e as concessões.
- Servidor MCP. Executa somente enquanto o EK Bridge está ligado e uma conexão tem acesso MCP. Ele escuta apenas em
127.0.0.1:47615, nunca em uma interface de rede. Cada solicitação precisa do token de 256 bits da própria conexão, mantido em um arquivo modo-0600; o registro armazena apenas seu hash SHA-256, e as configurações recomendadas de agente leem o arquivo em vez de colocar o token na configuração do agente. Solicitações com umHostestrangeiro, qualquerOrigin(páginas da web) ou cabeçalhos de encaminhamento de túnel são recusadas, e falhas repetidas de login são bloqueadas. Veja a revisão de ameaças. - Remote Access. Também desligado por padrão. Enquanto ligado, escuta em
127.0.0.1:47616para um túnel que você executa; todo caminho exceto um caminho secreto de 128 bits recebe 404, e apenas conexões com Permitir acesso à nuvem podem usá-lo, com um token remoto separado ou uma conexão OAuth que você aprovou no Mac. Tokens locais não funcionam através dele, e suas credenciais não funcionam na porta local. Veja a revisão de ameaças de Remote Access. - Arquivos de solicitação são de sua propriedade e têm permissões restritas.
Esses controles não isolam outro processo executando como o mesmo usuário do macOS. Tal processo pode acessar os arquivos de credenciais, tokens ou políticas. Uma concessão é, portanto, um limite entre as conexões no protocolo deste aplicativo, não uma defesa contra uma conta de usuário comprometida.
Relate vulnerabilidades em particular, conforme descrito em SECURITY.md.
O que funciona hoje
A versão curta está acima. A lista completa, com o que o EventKit não permite:
Mostrar a lista completa
- O usuário escolhe coleções e concessões de Leitura, Criar, Editar, Excluir ou Concluir lembrete por conexão. Novas conexões têm zero concessões. As concessões salvas persistem até serem editadas ou a conexão ser removida; o EK Bridge em si fica desligado até ser ligado localmente. Uma conexão pode ser pausada, o que recusa suas solicitações, mas mantém suas credenciais e acesso, e retomada depois.
- Agentes de IA no Mac usam doze ferramentas MCP (
list_collections,read_events,get_event,create_event,update_event,delete_event,read_reminders,get_reminder,create_reminder,update_reminder,complete_reminder,delete_reminder) com horários ISO 8601. Cada agente vê apenas as ferramentas que suas concessões permitem. Perguntar antes de alterar pode exigir sua aprovação para cada escrita, por conexão, e mostra todos os campos que seriam alterados. - Leituras retornam linhas limitadas de eventos ou lembretes, não acesso irrestrito ao armazenamento EventKit do usuário. Leituras de outras coleções são negadas. Escritas usam uma chave de idempotência; edições e exclusões exigem a versão mais recente do item.
- Eventos suportam todos os campos que o EventKit expõe: horários salvos no fuso horário que você escolher (ou o do Mac, nunca UTC por padrão), eventos de dia inteiro de até um ano, notas, local com um pino de mapa, URL, alarmes (incluindo chegar ou sair de um lugar), disponibilidade e regras de repetição. Eventos recorrentes podem ser alterados ou excluídos uma ocorrência por vez, de uma ocorrência em diante, ou como uma série inteira. Participantes, o organizador e sua resposta são legíveis; convites permanecem somente leitura, porque alterá-los pode notificar todos os participantes.
- Lembretes suportam título, datas de vencimento e início, notas, URL, prioridade, vários alarmes (incluindo alarmes de local), regras de repetição, concluir e reabrir, mover entre listas e excluir um lembrete repetido como uma série. Uma ocorrência de um lembrete repetido pode ser concluída para as formas e tipos de conta que uma sonda supervisionada verificou (hoje um lembrete diário do iCloud com horário de vencimento).
- Atualizações alteram apenas os campos que enviam, e cada campo escrito é lido de volta: uma incompatibilidade remove um novo item ou coloca um editado de volta. Convidar pessoas, responder a convites, anexos, tempo de viagem e tags e subtarefas do aplicativo Lembretes não são possíveis através do EventKit.
- Agentes de nuvem podem usar as mesmas ferramentas através do Remote Access, um túnel que você executa e um interruptor Permitir acesso à nuvem por conexão, com um token remoto separado por conexão ou conexões OAuth que você aprova no Mac. Remote Access está desligado por padrão, pode se desligar sozinho em um temporizador e está a um clique para desligar na barra de menus.
- Quando um agente não tem uma ação em um calendário ou lista que já pode ler, o EK Bridge pergunta a você (Permitir uma vez, Sempre permitir, Agora não) em vez de recusar imediatamente; somente escritas, limitadas e alternáveis por conexão.
- Uma janela com Visão geral, Atividade (o que mudou, por nome de item consultado ao vivo de seu ID EventKit armazenado; alterações e problemas mantidos por 90 dias; se cada solicitação veio via MCP, Remote Access ou linha de comando), cada conexão e Configurações; um ícone na barra de menus que mostra se o EK Bridge está ligado, pausado ou precisa de atenção, com um globo enquanto Remote Access está ligado; notificações opcionais; e uma lista de verificação de primeira execução.
- O aplicativo pode iniciar no login quando você ativa isso.
A matriz de suporte e o registro de testes distinguem comportamento implementado de observações específicas do provedor e casos não testados.
Compilar a partir do código-fonte
Você precisa de macOS 14 ou posterior, Xcode ou as Ferramentas de Linha de Comando do Xcode, e Python 3. Compilar e os testes offline não instalam o aplicativo nem pedem acesso:
sh test.sh
sh build.sh
A compilação cria build/EKBridge.app, com o lançador MCP bridge-mcp e o cliente de linha de comando bridge-client dentro dele (build/bridge-client linka para ele). Ele assina o aplicativo ad hoc por padrão, o que o macOS trata como um novo aplicativo a cada vez; para acesso duradouro a Calendários e Lembretes, assine com uma identidade estável conforme descrito em Configuração.
EVENTKIT_ARCHS="arm64 x86_64" sh build.shcompila um aplicativo universal.sh ui_test.shexecuta os testes de janela e comportamento, esh ui_snapshots.shescreve capturas de tela de cada tela; ambos usam dados falsos.- Lançamentos são compilados por
release.sh(assinatura Developer ID, notarização, um DMG e um zip), manualmente ou pelo fluxo de trabalho de lançamento; veja Mantendo.
Para contribuir, veja Contribuindo.
Desinstalar
-
Saia do aplicativo pelo menu da barra de menus.
-
Remova seu acesso a Calendários e Lembretes. O primeiro comando lê o ID do pacote do aplicativo, então execute estes antes de excluir o aplicativo:
bundle_id=$(defaults read /Applications/EKBridge.app/Contents/Info CFBundleIdentifier) tccutil reset Calendar "$bundle_id" tccutil reset Reminders "$bundle_id" -
Exclua o aplicativo de Aplicativos e seus dados:
~/Library/Application Support/EKBridge(conexões, chaves, tokens, Atividade e o diário de escrita). Se você atualizou do EventKit Bridge, também exclua o linkEventKitBridgeao lado dele. Configurações e downloads do atualizador estão em~/Library/Preferences/io.github.bereciartua.ekbridge.pliste~/Library/Caches/io.github.bereciartua.ekbridge. -
Se você instalou a ferramenta de linha de comando, exclua
~/.local/bin/bridge-client. -
Remova o servidor das configurações dos seus agentes (por exemplo,
claude mcp remove ek-bridge) e pare qualquer túnel que você executou para Remote Access.
Instalado com Homebrew? Faça os passos 1, 2 e 5, e brew uninstall --cask ek-bridge remove o aplicativo e seu link bridge-client; com --zap ele também move os dados e configurações do passo 3 para a Lixeira.
Status do projeto
EK Bridge está em pré-visualização pública, com suporte de melhor esforço.
- Testado offline: a ponte local e a interface; o servidor MCP, lançador, configurações de agente, Remote Access e seu servidor OAuth, sobre soquetes de loopback reais e um fixture HTTPS local.
- Testado ao vivo: testes limitados em itens EventKit sintéticos, um reinício completo do Mac e login com leituras limitadas ainda funcionando, e uma primeira verificação com Claude Code, Claude Desktop, Codex e Cursor (conectar, ler, uma escrita aprovada, uma solicitação recusada). Testado no macOS 27.0.1 em Apple silicon com iCloud.
- Ainda não executado: a matriz completa de agentes ao vivo e a matriz de nuvem ao vivo. O comportamento de notificação e sincronização do provedor não está estabelecido para cada forma de recorrência.
Veja testes e verificações abertas e o registro de alterações.
Licença
EK Bridge é licenciado sob a Apache License 2.0; veja NOTICE. A licença não concede direitos ao nome ou ícone do projeto. Apple, Mac e macOS são marcas registradas da Apple Inc. Este projeto não é afiliado ou endossado pela Apple.
EK Bridge é feito por Martin Bereciartua.