Proton Mail MCP

Um servidor local-only do Protocolo de Contexto de Modelo para macOS que expõe sua conta do Proton Mail ao Claude Desktop e ao Claude Code por meio de chamadas de ferramentas protegidas por Touch ID.

Documentação

proto-mcp

Dê sua caixa de entrada ao Claude — sem abrir mão do controle.

Uma ponte assinada, notarizada e protegida por Touch ID entre o Proton Mail e o Claude, rodando inteiramente no seu Mac. O Claude lê, pesquisa, organiza, redige e envia seus e-mails — e lê seu calendário — por meio de 34 ferramentas do https://modelcontextprotocol.io — e toda mensagem enviada exige sua impressão digital em um prompt que mostra o destinatário real.

Nada sai do seu laptop, exceto o próprio e-mail.

platform: macOS Go 1.26.5+ signed & notarized MCP license: GPLv3


Como é a experiência

Você conversa com o Claude. O Claude conversa com sua caixa de entrada. Você acompanha tudo o que importa.

"O que eu perdi do grupo de escalada esta semana?" → O Claude pesquisa o espelho local, lê a conversa e resume. Sem prompt — leitura é segura.

"Arquive todos os boletins em Leitura e marque como lidos." → O Claude move e marca. Organizar é controlado, mas silencioso.

"Responda à Alice que estou dentro para sábado e envie." → Um prompt de Touch ID aparece: Para: alice@example.com · Assunto: Re: lista de equipamentos. Você toca. Envia. Você não digitou.

Toda leitura é servida de um espelho SQLite local, então é rápida e funciona offline. Toda gravação é regida por uma política por ferramenta. Todo envio reexige confirmação, todas as vezes, mostrando os destinatários literais — esse toque de impressão digital é a linha entre "o Claude redigiu" e "o Claude enviou".

Início rápido

brew tap just-an-oldsalt/proto-mcp
brew install --cask proto-mcp

protonmcp setup

É isso. setup faz login, copia o índice da sua caixa de entrada para um banco de dados local, inicia o serviço em segundo plano e conecta ambos os clientes do Claude — explicando cada etapa no caminho. Reinicie o Claude depois e as ferramentas aparecerão em protonmcp no /mcp.

É seguro reexecutar: etapas concluídas são puladas, então também funciona como comando de reparo.

Prefere executar as quatro etapas você mesmo?
protonmcp login            # Proton SRP password + 2FA + key unlock
protonmcp backfill         # one-time: pull your message envelopes into the local mirror
protonmcp daemon install   # register + start the background daemon
protonmcp install          # connect it to Claude Desktop + Claude Code

Binários assinados e notarizados — sem aviso do Gatekeeper, sem listener de rede.

Algo não está funcionando? protonmcp doctor verifica cada parte da instalação e informa o único comando que corrige:

[  ok  ] protonmcpd             version 1.0.2
[  ok  ] login                  session present in keychain
[ FAIL ] local mirror           exists but holds no messages
[  ok  ] daemon                 running (pid 4875), socket healthy

To fix:
  local mirror
      protonmcp backfill

Após brew upgrade --cask proto-mcp, execute protonmcp daemon restart para que o daemon use a nova versão.

Prefere compilar você mesmo? Veja Compilar a partir do código-fonte.

O que o Claude pode fazer

34 ferramentas, agrupadas pelo que acessam. Leituras são livres; tudo o que altera estado é negado por padrão e protegido por Touch ID.

📖 Ler e pesquisarListar, pesquisa de texto completo, ler mensagens, reconstruir conversas, listar anexos, listar rótulos/pastas, sincronizar.
🗂️ OrganizarMarcar como lido/não lido, mover, rotular, mover para a lixeira.
🏷️ Rótulos e pastasCRUD completo com validação de paleta de cores.
✍️ RascunhosCriar, atualizar, excluir, listar.
📤 EnviarEnviar, responder, responder a todos, encaminhar, enviar rascunho — cada um reexige confirmação.
📎 AnexosDescriptografar e baixar, salvar em disco.
📅 CalendárioListar calendários, navegar/pesquisar eventos por intervalo de datas, ler detalhes completos do evento. Somente leitura.

Lista completa com descrições: docs/cli-reference.md.

Por que é seguro

O proto-mcp foi construído para que um LLM controlando sua caixa de entrada seja uma conveniência, nunca uma responsabilidade. As garantias que tornam isso verdade:

  • 🔐 Sua impressão digital em todo envio. Cada gravação dispara um prompt nativo mostrando os destinatários literais e o assunto. mail_send tem TTL zero, então reexige confirmação todas as vezes. Sem aprovações genéricas para envios.
  • 🛡️ Negado por padrão por construção. Ferramentas desconhecidas não executam, e o daemon se recusa a iniciar se qualquer ferramenta registrada não tiver uma política explícita — você não pode acidentalmente enviar uma gravação sem proteção.
  • 🍎 Assinado, notarizado e autoverificável. Binários com runtime endurecido, assinados com Developer ID e notarizados pela Apple, além de verificação de integridade SHA-256 na inicialização que se recusa a executar um daemon substituído.
  • 🔒 Bloqueia quando você se afasta. Bloqueio de tela, suspensão ou temporizador de inatividade zeram a sessão em memória; retomar exige Touch ID.
  • 🧾 Registro de auditoria honesto e editado. Toda chamada é registrada — segredos removidos, corpos reduzidos a {sha256, bytes}, destinatários mantidos literais para que a cadeia de verificação permaneça fiel.
  • 🏠 Somente local. O daemon escuta em um socket Unix 0600, nunca em uma porta de rede. O conteúdo do e-mail vai para o Proton via TLS; nada mais sai.

Como é um prompt na prática:

┌──────────────────────────────────────────────┐
│ Send mail_send?                              │
│                                              │
│ To: alice@example.com                        │
│ CC: charlie@example.com                      │
│ Subject: Re: gear list                       │
│                                              │
│ [ Cancel ]              [ Send & Touch ID ]  │
└──────────────────────────────────────────────┘

O modelo de ameaças completo — incluindo os riscos contra os quais o proto-mcp não defende — está em docs/security.md. Leia antes de apontar isso para uma caixa de entrada ativa.

Como funciona

Um daemon em segundo plano mantém sua sessão desbloqueada por Touch ID e atende a todas as ferramentas por um socket local. O Claude Desktop e o Claude Code se conectam por um pequeno encaminhador, então compartilham uma sessão: desbloqueie uma vez, use em todos; bloqueie uma vez, tudo bloqueia.

Claude Desktop ─┐                          ┌─ go-proton-api + GPG
Claude Code ────┼─ shim ─ socket ─ protonmcpd ┼─ SQLite mirror + FTS5
                ┘     (0600)               └─ Touch ID + policy + audit

O design completo — cada binário, pacote e o espelho local — está em docs/architecture.md.

Configuração

Ajuste a política por ferramenta, limites de taxa, destinatários permitidos, o temporizador de bloqueio por inatividade e o TTL do corpo em cache com um único arquivo YAML. Por exemplo, para limitar envios orientados por LLM e restringi-los a um domínio:

tools:
  mail_send:
    decision: prompt
    rate_limit: 5/hour
    allowed_recipients: ["@mydomain.com"]
idle_lock_minutes: 30

Referência completa, além de bloqueio e comandos de auditoria/observabilidade: docs/configuration.md.

Compilar a partir do código-fonte

Requer macOS 13+, Go 1.26.5+ e Xcode Command Line Tools (para swiftc).

git clone https://github.com/just-an-oldsalt/proto-mcp.git
cd proto-mcp
make all                          # builds bin/* + the Swift helpers
./bin/protonmcp setup

make all compila para sua própria arquitetura. make universal compila para arm64 + x86_64 e lipo em bin/universal/ — é isso que uma versão publica, então o cask funciona tanto em Apple silicon quanto em Intel.

Compilações do código-fonte são assinadas ad-hoc por padrão e funcionam completamente (o gate de Touch ID, política, auditoria e bloqueio/desbloqueio rodam igual). Para uma compilação assinada localmente, veja scripts/signing-setup.md.

Bom saber

  • Somente macOS. O keystore e os auxiliares biométricos usam Security.framework, LAContext e AppKit. Compilações Linux funcionam para testes, mas o fluxo de autenticação não funcionará.
  • Seja um bom cidadão Proton. O proto-mcp atualmente envia o cabeçalho AppVersion do Proton Bridge enquanto um identificador dedicado é solicitado ao Proton (veja docs/proton-appversion-request.md). Não abuse de taxas, não faça scraping nem automatize múltiplas contas — qualquer coisa que viole os Termos do Proton é igualmente uma violação por usar o cabeçalho do Bridge.
  • Corpos em cache são texto puro em SQLite. Corpos de mensagens descriptografados são armazenados em cache localmente (com TTL limitado, secure_delete ativado). Em um disco roubado ou copiado, isso é texto claro recuperável até ser purgado. Criptografia de envelope (SQLCipher) é um item pós-1.0. protonmcp purge --older-than 7d --vacuum reduz a janela agora.
  • Uso pessoal. Construído para uma pessoa e sua caixa de entrada no seu Mac.

Documentação

DocumentoConteúdo
docs/architecture.mdO modelo de daemon, binários, pacotes e espelho local.
docs/security.mdCamadas de segurança + o modelo de ameaças completo e honesto.
docs/configuration.mdYAML de política, bloqueio, observabilidade, purga.
docs/cli-reference.mdTodos os comandos CLI e todas as 34 ferramentas MCP.
SECURITY.mdPolítica de segurança + registro de correções por defeito / trilha de auditoria.
TESTING.mdManual de validação de ponta a ponta.

Problemas, defeitos e roadmap são rastreados no Jira (projeto PROTO), a fonte da verdade. TODO.html e DEFECTS.html são mantidos como registros históricos de design do desenvolvimento.

Contribuindo

PRs são bem-vindos, mas abra um issue primeiro — a maior parte da direção arquitetural está definida, e PRs grandes não solicitados provavelmente não serão aceitos. .github/CODEOWNERS define os revisores obrigatórios para os caminhos críticos de segurança (internal/redact/, internal/keystore/, internal/policy/, internal/approval/, helpers/touchid/, helpers/lockwatch/).

Licença e agradecimentos

GPLv3 — veja LICENSE. O proto-mcp depende transitivamente de proton-bridge (também GPLv3) via go-proton-api.

  • Proton AG por proton-bridge e go-proton-api, sobre os quais toda a camada de criptografia e transporte se apoia.
  • Anthropic pelo Model Context Protocol e pelos clientes Claude que este servidor tem como alvo.
  • Cada defeito que tomou a forma que tomou porque cmd-r, claude-review, claude-security-review ou uma sessão de testes ao vivo olharam o código com mais cuidado do que eu teria sozinho.